Compare commits

...

2 Commits

Author SHA1 Message Date
Matthew 6e3e2400fb Changes to work for windows + linux 2024-09-19 03:25:47 +02:00
Matthew 06513d81f8 Changes to work for windows + linux 2024-09-19 03:22:52 +02:00
2 changed files with 50 additions and 18 deletions

View File

@ -11,7 +11,13 @@
#include "common/Path.h" #include "common/Path.h"
#include "common/StringUtil.h" #include "common/StringUtil.h"
#include <unistd.h> // Platform-specific includes
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <sys/stat.h>
#endif
MemoryCardConvertDialog::MemoryCardConvertDialog(QWidget* parent, QString selectedCard) MemoryCardConvertDialog::MemoryCardConvertDialog(QWidget* parent, QString selectedCard)
: QDialog(parent) : QDialog(parent)
@ -260,13 +266,33 @@ void MemoryCardConvertDialog::ConvertCard()
QDir destinationDir(fullPath); QDir destinationDir(fullPath);
QString absolutePath = destinationDir.absolutePath(); // Get the absolute path QString absolutePath = destinationDir.absolutePath(); // Get the absolute path
if (access(absolutePath.toStdString().c_str(), R_OK | W_OK | X_OK) != 0) // Check for read/write/execute permissions on the directory
{ // We only need to check the parent directory where the file will be created
QMessageBox::critical(this, tr("Cannot Convert Memory Card"), QFileInfo dirInfo(destinationDir.absolutePath());
tr("You have insufficient permissions to convert this Memory Card. Please ensure that your user owns the directory of your Memory Cards. \n \"%1\".") QString dirPath = dirInfo.absolutePath();
.arg(absolutePath));
return; #ifdef _WIN32
} // Windows systems
DWORD fileAttributes = GetFileAttributes(dirPath.toStdString().c_str());
// Windows has no direct R/W/X permission model like Linux. We check for basic file existence.
bool canRead = !(fileAttributes & FILE_ATTRIBUTE_READONLY);
bool canWrite = true; // If not read-only, assume write is possible.
if !(canRead && canWrite)
{
PermissionError(absolutePath);
return;
}
#else
// Linux/Unix systems
if (access(dirPath.toStdString().c_str(), R_OK | W_OK | X_OK) != 0)
{
PermissionError(absolutePath);
return;
}
#endif
// If a match is found, revert back to the base name, add a number and the extension, and try again. // If a match is found, revert back to the base name, add a number and the extension, and try again.
// Keep incrementing the number until we get a unique result. // Keep incrementing the number until we get a unique result.
@ -317,3 +343,8 @@ void MemoryCardConvertDialog::SetType_Folder()
{ {
SetType(MemoryCardType::Folder, MemoryCardFileType::Unknown, tr("Uses a folder on your PC filesystem, instead of a file. Infinite capacity, while keeping the same compatibility as an 8 MB Memory Card.")); SetType(MemoryCardType::Folder, MemoryCardFileType::Unknown, tr("Uses a folder on your PC filesystem, instead of a file. Infinite capacity, while keeping the same compatibility as an 8 MB Memory Card."));
} }
void MemoryCardConvertDialog::PermissionError(QString absolutePath)
{
QMessageBox::critical(this, tr("Cannot Convert Memory Card"),tr("You have insufficient permissions to convert this Memory Card. Please ensure that your user owns the directory of your Memory Cards. \n \"%1\".").arg(absolutePath));
}

View File

@ -41,6 +41,7 @@ private:
void SetType_32(); void SetType_32();
void SetType_64(); void SetType_64();
void SetType_Folder(); void SetType_Folder();
void PermissionError(QString absolutePath);
Ui::MemoryCardConvertDialog m_ui; Ui::MemoryCardConvertDialog m_ui;