mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-25 23:29:55 -06:00
Refactor DSi_NAND (#1844)
* Refactor diskio's contents - Change ff_disk_read_cb/write_cb into a std::function instead of a raw pointer - Add const specifiers as needed * Refactor DSi_NAND to manage the file system's mounted lifetime with RAII * Split NANDMount into NANDMount and NANDImage - NANDImage is used for information about the NAND that doesn't require decryption or filesystem access - NANDMount is used to actually access the file system - Both classes manage their respective resources (the NAND file handle and the NAND's mount) with RAII - Also split the file loading into another function that I will remove in a later PR * Make NANDMount immovable * Remove NAND-loading code that I had sectioned off into a function - Incomplete copypasta - I must have gotten distracted * Tidy up NANDImage's initialization - Don't unmount the disk image if the constructor fails (that's NANDMount's job now) - Only assign CurFile if the constructor succeeds * Add some const-correctness * Move DSi NAND initialization to the frontend - The NANDImage is now installed via a unique_ptr in DSi * Remove Platform::DSi_NANDPath - Not Config::DSiNANDPath; that can still be configured as usual - The core no longer needs to care
This commit is contained in:

committed by
GitHub

parent
b2fcff97c1
commit
d4e51f8060
@ -19,6 +19,7 @@
|
||||
#ifndef TITLEMANAGERDIALOG_H
|
||||
#define TITLEMANAGERDIALOG_H
|
||||
|
||||
#include <memory>
|
||||
#include <QDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QListWidget>
|
||||
@ -30,6 +31,7 @@
|
||||
#include <QNetworkAccessManager>
|
||||
|
||||
#include "DSi_TMD.h"
|
||||
#include "DSi_NAND.h"
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
@ -44,10 +46,10 @@ class TitleManagerDialog : public QDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TitleManagerDialog(QWidget* parent);
|
||||
explicit TitleManagerDialog(QWidget* parent, DSi_NAND::NANDImage& image);
|
||||
~TitleManagerDialog();
|
||||
|
||||
static bool NANDInited;
|
||||
static std::unique_ptr<DSi_NAND::NANDImage> nand;
|
||||
static bool openNAND();
|
||||
static void closeNAND();
|
||||
|
||||
@ -68,7 +70,10 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
currentDlg = new TitleManagerDialog(parent);
|
||||
assert(nand != nullptr);
|
||||
assert(*nand);
|
||||
|
||||
currentDlg = new TitleManagerDialog(parent, *nand);
|
||||
currentDlg->open();
|
||||
return currentDlg;
|
||||
}
|
||||
@ -89,6 +94,7 @@ private slots:
|
||||
void onExportTitleData();
|
||||
|
||||
private:
|
||||
DSi_NAND::NANDMount nandmount;
|
||||
Ui::TitleManagerDialog* ui;
|
||||
|
||||
QString importAppPath;
|
||||
@ -106,7 +112,7 @@ class TitleImportDialog : public QDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TitleImportDialog(QWidget* parent, QString& apppath, const DSi_TMD::TitleMetadata* tmd, bool& readonly);
|
||||
explicit TitleImportDialog(QWidget* parent, QString& apppath, const DSi_TMD::TitleMetadata* tmd, bool& readonly, DSi_NAND::NANDMount& nand);
|
||||
~TitleImportDialog();
|
||||
|
||||
private slots:
|
||||
@ -119,6 +125,7 @@ private slots:
|
||||
|
||||
private:
|
||||
Ui::TitleImportDialog* ui;
|
||||
DSi_NAND::NANDMount& nandmount;
|
||||
|
||||
QButtonGroup* grpTmdSource;
|
||||
|
||||
|
Reference in New Issue
Block a user