From aafd263e4abac28d212d228733a145703842bcf0 Mon Sep 17 00:00:00 2001 From: PabloMK7 Date: Thu, 29 Jan 2026 13:10:02 +0100 Subject: [PATCH] frontend: Revert removal of .3ds support (#1701) * frontend: Revert removal of .3ds support * Added 3ds extension to Info.plist * Added .3ds extension to org.azahar_emu.Azahar.xml * game_list.h: Removed leftover definitions --------- Co-authored-by: OpenSauce04 --- dist/apple/Info.plist.in | 1 + dist/org.azahar_emu.Azahar.xml | 1 + .../citra_emu/fragments/GamesFragment.kt | 33 --------------- .../java/org/citra/citra_emu/model/Game.kt | 2 +- .../app/src/main/res/values/strings.xml | 3 -- src/citra_qt/citra_qt.cpp | 6 +-- src/citra_qt/configuration/config.cpp | 2 - src/citra_qt/game_list.cpp | 40 ++----------------- src/citra_qt/game_list.h | 4 -- src/citra_qt/uisettings.h | 1 - src/core/loader/loader.cpp | 2 +- 11 files changed, 10 insertions(+), 85 deletions(-) diff --git a/dist/apple/Info.plist.in b/dist/apple/Info.plist.in index 2feacd1b6..6330613d3 100644 --- a/dist/apple/Info.plist.in +++ b/dist/apple/Info.plist.in @@ -35,6 +35,7 @@ cci cxi cia + 3ds CFBundleTypeName Nintendo 3DS File diff --git a/dist/org.azahar_emu.Azahar.xml b/dist/org.azahar_emu.Azahar.xml index 6f884c9ea..0fa7afbae 100644 --- a/dist/org.azahar_emu.Azahar.xml +++ b/dist/org.azahar_emu.Azahar.xml @@ -16,6 +16,7 @@ CTR Cart Image + diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/GamesFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/GamesFragment.kt index 9ade73c83..cdcee4a19 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/GamesFragment.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/GamesFragment.kt @@ -7,16 +7,12 @@ package org.citra.citra_emu.fragments import android.annotation.SuppressLint import android.net.Uri import android.os.Bundle -import android.text.method.LinkMovementMethod import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewGroup.MarginLayoutParams -import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.edit -import androidx.core.text.HtmlCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updatePadding @@ -50,7 +46,6 @@ class GamesFragment : Fragment() { private val gamesViewModel: GamesViewModel by activityViewModels() private val homeViewModel: HomeViewModel by activityViewModels() - private var show3DSFileWarning: Boolean = true private lateinit var gameAdapter: GameAdapter private val openImageLauncher = registerForActivityResult( @@ -224,34 +219,6 @@ class GamesFragment : Fragment() { setInsets() } - override fun onResume() { - super.onResume() - - if (show3DSFileWarning && - !PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext) - .getBoolean("show_3ds_files_warning", false)) { - val message = HtmlCompat.fromHtml(getString(R.string.warning_3ds_files), - HtmlCompat.FROM_HTML_MODE_LEGACY) - - context?.let { - val alert = MaterialAlertDialogBuilder(it) - .setTitle(getString(R.string.important)) - .setMessage(message) - .setPositiveButton(R.string.dont_show_again) { _, _ -> - PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext) - .edit() { - putBoolean("show_3ds_files_warning", true) - } - } - .show() - - val alertMessage = alert.findViewById(android.R.id.message) as TextView - alertMessage.movementMethod = LinkMovementMethod.getInstance() - } - } - show3DSFileWarning = false - } - override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/src/android/app/src/main/java/org/citra/citra_emu/model/Game.kt b/src/android/app/src/main/java/org/citra/citra_emu/model/Game.kt index 797b7a262..7a204e3fd 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/model/Game.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/model/Game.kt @@ -66,7 +66,7 @@ class Game( val allExtensions: Set get() = extensions + badExtensions val extensions: Set = HashSet( - listOf("3dsx", "app", "axf", "cci", "cxi", "elf", "z3dsx", "zcci", "zcxi") + listOf("3dsx", "app", "axf", "cci", "cxi", "elf", "z3dsx", "zcci", "zcxi", "3ds") ) val badExtensions: Set = HashSet( diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index bcd4445af..c2c71a447 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -36,7 +36,6 @@ Changes the files that Azahar uses to load applications Modify the look of the app Install CIA - Learn more.]]> Select GPU driver @@ -398,8 +397,6 @@ Auto-Select Start Cancelling… - Important - Don\'t show again Visibility Information diff --git a/src/citra_qt/citra_qt.cpp b/src/citra_qt/citra_qt.cpp index 6bd859ba8..57e8abc03 100644 --- a/src/citra_qt/citra_qt.cpp +++ b/src/citra_qt/citra_qt.cpp @@ -3168,7 +3168,7 @@ void GMainWindow::OnCompressFile() { QStringList filepaths = QFileDialog::getOpenFileNames(this, tr("Load 3DS ROM Files"), UISettings::values.roms_path, - tr("3DS ROM Files (*.cia *.cci *.3dsx *.cxi)") + + tr("3DS ROM Files (*.cia *.cci *.3dsx *.cxi *.3ds)") + QStringLiteral(";;") + tr("All Files (*.*)")); QString out_path; @@ -3848,8 +3848,8 @@ static bool IsSingleFileDropEvent(const QMimeData* mime) { return mime->hasUrls() && mime->urls().length() == 1; } -static const std::array AcceptedExtensions = { - "cci", "cxi", "bin", "3dsx", "app", "elf", "axf", "zcci", "zcxi", "z3dsx"}; +static const std::array AcceptedExtensions = { + "cci", "cxi", "bin", "3dsx", "app", "elf", "axf", "zcci", "zcxi", "z3dsx", "3ds"}; static bool IsCorrectFileExtension(const QMimeData* mime) { const QString& filename = mime->urls().at(0).toLocalFile(); diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index b429cdae0..f443129c7 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -846,7 +846,6 @@ void QtConfig::ReadUIGameListValues() { ReadBasicSetting(UISettings::values.game_list_row_2); ReadBasicSetting(UISettings::values.game_list_hide_no_icon); ReadBasicSetting(UISettings::values.game_list_single_line_mode); - ReadBasicSetting(UISettings::values.show_3ds_files_warning); ReadBasicSetting(UISettings::values.show_compat_column); ReadBasicSetting(UISettings::values.show_region_column); @@ -1364,7 +1363,6 @@ void QtConfig::SaveUIGameListValues() { WriteBasicSetting(UISettings::values.game_list_row_2); WriteBasicSetting(UISettings::values.game_list_hide_no_icon); WriteBasicSetting(UISettings::values.game_list_single_line_mode); - WriteBasicSetting(UISettings::values.show_3ds_files_warning); WriteBasicSetting(UISettings::values.show_compat_column); WriteBasicSetting(UISettings::values.show_region_column); diff --git a/src/citra_qt/game_list.cpp b/src/citra_qt/game_list.cpp index cf73dab2e..3ab174440 100644 --- a/src/citra_qt/game_list.cpp +++ b/src/citra_qt/game_list.cpp @@ -391,40 +391,6 @@ GameList::GameList(PlayTime::PlayTimeManager& play_time_manager_, GMainWindow* p layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); - if (UISettings::values.show_3ds_files_warning.GetValue()) { - - warning_layout = new QHBoxLayout; - deprecated_3ds_warning = new QLabel; - deprecated_3ds_warning->setText( - tr("IMPORTANT: Encrypted files and .3ds files are no longer supported. Decrypting " - "and/or renaming to .cci may be necessary. Learn more.")); - deprecated_3ds_warning->setOpenExternalLinks(true); - deprecated_3ds_warning->setStyleSheet( - QString::fromStdString("color: black; font-weight: bold;")); - - warning_hide = new QPushButton(tr("Don't show again")); - warning_hide->setStyleSheet( - QString::fromStdString("color: blue; text-decoration: underline;")); - warning_hide->setFlat(true); - warning_hide->setCursor(Qt::PointingHandCursor); - - connect(warning_hide, &QPushButton::clicked, [this]() { - warning_widget->setVisible(false); - UISettings::values.show_3ds_files_warning.SetValue(false); - }); - - warning_layout->addWidget(deprecated_3ds_warning); - warning_layout->addStretch(); - warning_layout->addWidget(warning_hide); - warning_layout->setContentsMargins(3, 3, 3, 3); - warning_widget = new QWidget; - warning_widget->setStyleSheet(QString::fromStdString("background-color: khaki;")); - warning_widget->setLayout(warning_layout); - - layout->addWidget(warning_widget); - } - layout->addWidget(tree_view); layout->addWidget(search_field); setLayout(layout); @@ -1107,9 +1073,9 @@ void GameList::LoadInterfaceLayout() { } const QStringList GameList::supported_file_extensions = { - QStringLiteral("3dsx"), QStringLiteral("elf"), QStringLiteral("axf"), - QStringLiteral("cci"), QStringLiteral("cxi"), QStringLiteral("app"), - QStringLiteral("z3dsx"), QStringLiteral("zcci"), QStringLiteral("zcxi"), + QStringLiteral("3dsx"), QStringLiteral("elf"), QStringLiteral("axf"), QStringLiteral("cci"), + QStringLiteral("cxi"), QStringLiteral("app"), QStringLiteral("z3dsx"), QStringLiteral("zcci"), + QStringLiteral("zcxi"), QStringLiteral("3ds"), }; void GameList::RefreshGameDirectory() { diff --git a/src/citra_qt/game_list.h b/src/citra_qt/game_list.h index 3d3cf92b5..85eec52dd 100644 --- a/src/citra_qt/game_list.h +++ b/src/citra_qt/game_list.h @@ -135,10 +135,6 @@ private: void changeEvent(QEvent*) override; void RetranslateUI(); - QHBoxLayout* warning_layout = nullptr; - QWidget* warning_widget = nullptr; - QLabel* deprecated_3ds_warning = nullptr; - QPushButton* warning_hide = nullptr; GameListSearchField* search_field; GMainWindow* main_window = nullptr; QVBoxLayout* layout = nullptr; diff --git a/src/citra_qt/uisettings.h b/src/citra_qt/uisettings.h index 1138d6b40..2c2d07fd6 100644 --- a/src/citra_qt/uisettings.h +++ b/src/citra_qt/uisettings.h @@ -105,7 +105,6 @@ struct Values { Settings::Setting game_list_row_2{GameListText::FileName, "row2"}; Settings::Setting game_list_hide_no_icon{false, "hideNoIcon"}; Settings::Setting game_list_single_line_mode{false, "singleLineMode"}; - Settings::Setting show_3ds_files_warning{true, "show_3ds_files_warning"}; // Compatibility List Settings::Setting show_compat_column{true, "show_compat_column"}; diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 5e5cdf2e2..f1d610d9e 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp @@ -48,7 +48,7 @@ FileType GuessFromExtension(const std::string& extension_) { if (extension == ".elf" || extension == ".axf") return FileType::ELF; - if (extension == ".cci" || extension == ".zcci") + if (extension == ".cci" || extension == ".zcci" || extension == ".3ds") return FileType::CCI; if (extension == ".cxi" || extension == ".app" || extension == ".zcxi")