Browse Source

Fixes #10 Open file using default app

isundil 9 months ago
parent
commit
c33b7b26a3
4 changed files with 21 additions and 14 deletions
  1. 4 1
      Engine/Engine.cpp
  2. 5 5
      fakeRaid/conflictItemWidget.cpp
  3. 6 7
      fakeRaid/conflictModal.cpp
  4. 6 1
      fakeRaid/mainWindow.cpp

+ 4 - 1
Engine/Engine.cpp

@@ -48,7 +48,10 @@ std::vector<std::string> Engine::GetPaths() const
 {
 	std::vector<std::string> paths;
 	const std::string workingDir = BuildCurrentDirPath();
-	std::transform(rootPaths.begin(), rootPaths.end(), std::back_inserter(paths), [&workingDir](const std::string& val) { return val + "/" + workingDir; });
+	std::transform(rootPaths.begin(), rootPaths.end(), std::back_inserter(paths), [&workingDir](const std::string& val)
+	{
+		return (std::filesystem::path(val) / std::filesystem::path(workingDir)).string();
+	});
 	return paths;
 }
 

+ 5 - 5
fakeRaid/conflictItemWidget.cpp

@@ -118,16 +118,16 @@ void ConflictItemWidget::populateListStream(const std::map<int, std::vector<int>
 	}
 }
 
-std::string mergePath(const std::string& a, const QChar& separator, const std::string& b)
+std::string mergePath(const std::string& a, const std::string& b)
 {
 	std::stringstream ss;
-	ss << a << QString(separator).toStdString() << b;
+	ss << a << QString(QDir::separator()).toStdString() << b;
 	return ss.str();
 }
 
 ConflictItemWidget* ConflictItemWidget::FromMissingFile(QListWidget* parent, const std::vector<std::string>& rootPaths, const std::string& filename, const std::vector<bool>& version)
 {
-	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find(version.begin(), version.end(), true))], QDir::separator(), filename);
+	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find(version.begin(), version.end(), true))], filename);
 	ConflictItemWidget* result = new ConflictItemWidget(parent, QFile(fullPathFirstFound.c_str()), filename);
 	result->ui->ddUseVersion->setVisible(false);
 	std::stringstream ss;
@@ -140,7 +140,7 @@ ConflictItemWidget* ConflictItemWidget::FromMissingFile(QListWidget* parent, con
 
 ConflictItemWidget* ConflictItemWidget::FromMissingDir(QListWidget* parent, const std::vector<std::string>& rootPaths, const std::string& filename, const std::vector<bool>& version)
 {
-	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find(version.begin(), version.end(), true))], QDir::separator(), filename);
+	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find(version.begin(), version.end(), true))], filename);
 	ConflictItemWidget* result = new ConflictItemWidget(parent, QFile(fullPathFirstFound.c_str()), filename);
 	result->ui->ddUseVersion->setVisible(false);
 	std::stringstream ss;
@@ -153,7 +153,7 @@ ConflictItemWidget* ConflictItemWidget::FromMissingDir(QListWidget* parent, cons
 
 ConflictItemWidget* ConflictItemWidget::FromConflict(QListWidget* parent, const std::vector<std::string>& rootPaths, const std::string& filename, const std::vector<int>& version)
 {
-	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find_if(version.begin(), version.end(), [](const int& val) { return val != 0; }))], QDir::separator(), filename);
+	const std::string fullPathFirstFound = mergePath(rootPaths[std::distance(version.begin(), std::find_if(version.begin(), version.end(), [](const int& val) { return val != 0; }))], filename);
 	ConflictItemWidget* result = new ConflictItemWidget(parent, QFile(fullPathFirstFound.c_str()), filename);
 	const auto fileByVersion = groupFileByVersion(version);
 	for (const auto& i : fileByVersion)

+ 6 - 7
fakeRaid/conflictModal.cpp

@@ -1,6 +1,5 @@
 #include <QListWidgetItem>
 #include <QMessageBox>
-#include <QDir>
 #include "ui_ConflictModal.h"
 #include "conflictModal.h"
 #include "ConflictItemWidget.h"
@@ -8,7 +7,7 @@
 
 using namespace craftlab::fakeraid;
 
-std::string mergePath(const std::string& a, const QChar& separator, const std::string& b);
+std::string mergePath(const std::string& a, const std::string& b);
 
 ConflictModal::ConflictModal(const std::vector<std::string>& _rootPaths, const DiffResult& _diffResult): rootPaths(_rootPaths), diffResult(std::make_unique<DiffResult>(_diffResult)), ui(std::make_unique<Ui_ConflictModal>())
 {
@@ -72,19 +71,19 @@ void ConflictModal::ComputeRemovalProcess(const std::string& filename)
 	{
 		for (int i = 0; i < differentFilesIter->second.size(); ++i)
 			if (differentFilesIter->second[i] > 0)
-				processItems.filesToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), filename));
+				processItems.filesToRemove.push_back(mergePath(rootPaths[i], filename));
 	}
 	else if (missingFilesIter != diffResult->missingFiles.end())
 	{
 		for (int i = 0; i < missingFilesIter->second.size(); ++i)
 			if (!missingFilesIter->second[i])
-				processItems.filesToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), filename));
+				processItems.filesToRemove.push_back(mergePath(rootPaths[i], filename));
 	}
 	else if (missingDirsIter != diffResult->missingDirs.end())
 	{
 		for (int i = 0; i < missingDirsIter->second.size(); ++i)
 			if (!missingDirsIter->second[i])
-				processItems.dirsToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), filename));
+				processItems.dirsToRemove.push_back(mergePath(rootPaths[i], filename));
 	}
 }
 
@@ -93,10 +92,10 @@ void ConflictModal::ComputeCopyProcess(const std::string& filename, const std::v
 	assert(versionToUse >= 0);
 	assert(std::find(foundVersions.begin(), foundVersions.end(), versionToUse) != foundVersions.end());
 
-	const std::string sourcePath = mergePath(rootPaths[std::distance(foundVersions.begin(), std::find(foundVersions.begin(), foundVersions.end(), versionToUse))], QDir::separator(), filename);
+	const std::string sourcePath = mergePath(rootPaths[std::distance(foundVersions.begin(), std::find(foundVersions.begin(), foundVersions.end(), versionToUse))], filename);
 	for (int i = 0; i < foundVersions.size(); ++i)
 		if (foundVersions[i] != versionToUse)
-			processItems.itemsToCopy.push_back(IEngine::CopyInstruction(sourcePath, mergePath(rootPaths[i], QDir::separator(), filename)));
+			processItems.itemsToCopy.push_back(IEngine::CopyInstruction(sourcePath, mergePath(rootPaths[i], filename)));
 }
 
 DiffResult ConflictModal::ComputeOutcome(const std::vector<std::string>& rootPaths)

+ 6 - 1
fakeRaid/mainWindow.cpp

@@ -1,4 +1,5 @@
 #include <QMessageBox>
+#include <QDesktopServices>
 #include "ui_MainWindow.h"
 #include "mainWindow.h"
 #include "conflictModal.h"
@@ -102,9 +103,13 @@ void MainWindow::ListFiles()
 	UpdateFileList();
 }
 
+std::string mergePath(const std::string& a, const std::string& b);
+
 void MainWindow::FileEdit(const File& file)
 {
-	// FIXME
+	assert(nullptr != engine);
+	const QString path = mergePath(engine->GetPaths().front(), file.fileName).c_str();
+	QDesktopServices::openUrl(QUrl::fromLocalFile(path));
 }
 
 bool MainWindow::IsFileCorrect(const File& file) const