Qt: add rap files to pkg install file dialog

This commit is contained in:
Megamouse 2020-08-04 13:55:31 +02:00
parent 815d6f4223
commit fab1f7d939
3 changed files with 52 additions and 14 deletions

View File

@ -482,12 +482,22 @@ void main_window::BootRsxCapture(std::string path)
} }
} }
bool main_window::InstallRapFile(const QString& path, const std::string& filename)
{
if (path.isEmpty() || filename.empty())
{
return false;
}
return fs::copy_file(sstr(path), Emulator::GetHddDir() + "/home/" + Emu.GetUsr() + "/exdata/" + filename, true);
}
void main_window::InstallPackages(QStringList file_paths, bool show_confirm) void main_window::InstallPackages(QStringList file_paths, bool show_confirm)
{ {
if (file_paths.isEmpty()) if (file_paths.isEmpty())
{ {
const QString path_last_pkg = m_gui_settings->GetValue(gui::fd_install_pkg).toString(); const QString path_last_pkg = m_gui_settings->GetValue(gui::fd_install_pkg).toString();
const QString file_path = QFileDialog::getOpenFileName(this, tr("Select PKG To Install"), path_last_pkg, tr("PKG files (*.pkg);;All files (*.*)")); const QStringList file_path = QFileDialog::getOpenFileNames(this, tr("Select packages and/or rap files to install"),
path_last_pkg, tr("All relevant (*.pkg *.rap);;Package files (*.pkg);;Rap files (*.rap);;All files (*.*)"));
if (!file_path.isEmpty()) if (!file_path.isEmpty())
{ {
@ -506,11 +516,33 @@ void main_window::InstallPackages(QStringList file_paths, bool show_confirm)
if (!file_paths.isEmpty()) if (!file_paths.isEmpty())
{ {
// Handle the actual installations with a timeout. Otherwise the source explorer instance is not usable during the following file processing. for (const auto& rap : file_paths.filter(QRegExp(".*\\.rap")))
QTimer::singleShot(0, [this, file_paths]()
{ {
HandlePackageInstallation(file_paths); const QFileInfo file_info(rap);
}); const std::string rapname = sstr(file_info.fileName());
if (InstallRapFile(rap, rapname))
{
gui_log.success("Successfully copied rap file: %s", rapname);
}
else
{
gui_log.warning("Could not copy rap file: %s", rapname);
}
m_gui_settings->SetValue(gui::fd_install_pkg, file_info.path());
}
file_paths = file_paths.filter(QRegExp(".*\\.pkg"));
if (!file_paths.isEmpty())
{
// Handle the actual installations with a timeout. Otherwise the source explorer instance is not usable during the following file processing.
QTimer::singleShot(0, [this, file_paths]()
{
HandlePackageInstallation(file_paths);
});
}
} }
} }
@ -552,8 +584,6 @@ void main_window::HandlePackageInstallation(QStringList file_paths)
const std::string path = sstr(file_path); const std::string path = sstr(file_path);
const std::string file_name = sstr(file_info.fileName()); const std::string file_name = sstr(file_info.fileName());
m_gui_settings->SetValue(gui::fd_install_pkg, file_info.path());
// Run PKG unpacking asynchronously // Run PKG unpacking asynchronously
named_thread worker("PKG Installer", [path, &progress, &error] named_thread worker("PKG Installer", [path, &progress, &error]
{ {
@ -2317,22 +2347,28 @@ void main_window::dropEvent(QDropEvent* event)
} }
case drop_type::drop_rap: // import rap files to exdata dir case drop_type::drop_rap: // import rap files to exdata dir
{ {
int installed_rap_count = 0;
for (const auto& rap : drop_paths) for (const auto& rap : drop_paths)
{ {
const std::string rapname = sstr(QFileInfo(rap).fileName()); const std::string rapname = sstr(QFileInfo(rap).fileName());
if (!fs::copy_file(sstr(rap), Emulator::GetHddDir() + "/home/" + Emu.GetUsr() + "/exdata/" + rapname, false)) if (InstallRapFile(rap, rapname))
{ {
gui_log.warning("Could not copy rap file by drop: %s", rapname); gui_log.success("Successfully copied rap file by drop: %s", rapname);
installed_rap_count++;
} }
else else
{ {
gui_log.success("Successfully copied rap file by drop: %s", rapname); gui_log.error("Could not copy rap file by drop: %s", rapname);
} }
} }
// Refresh game list since we probably unlocked some games now. if (installed_rap_count > 0)
m_game_list_frame->Refresh(true); {
// Refresh game list since we probably unlocked some games now.
m_game_list_frame->Refresh(true);
}
break; break;
} }
case drop_type::drop_dir: // import valid games to gamelist (games.yaml) case drop_type::drop_dir: // import valid games to gamelist (games.yaml)

View File

@ -131,6 +131,8 @@ private:
void EnableMenus(bool enabled); void EnableMenus(bool enabled);
void ShowTitleBars(bool show); void ShowTitleBars(bool show);
static bool InstallRapFile(const QString& path, const std::string& filename);
void InstallPackages(QStringList file_paths = QStringList(), bool show_confirm = true); void InstallPackages(QStringList file_paths = QStringList(), bool show_confirm = true);
void HandlePackageInstallation(QStringList file_paths = QStringList()); void HandlePackageInstallation(QStringList file_paths = QStringList());

View File

@ -141,7 +141,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1058</width> <width>1058</width>
<height>22</height> <height>26</height>
</rect> </rect>
</property> </property>
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
@ -392,7 +392,7 @@
</action> </action>
<action name="bootInstallPkgAct"> <action name="bootInstallPkgAct">
<property name="text"> <property name="text">
<string>Install .pkg</string> <string>Install Packages/Raps</string>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>Install application from a .pkg file</string> <string>Install application from a .pkg file</string>