Show warning that 3ds files are no longer supported

This commit is contained in:
PabloMK7 2025-03-21 17:42:37 +01:00 committed by OpenSauce04
parent 67890f59fd
commit 1a73739fd8
6 changed files with 83 additions and 3 deletions

View File

@ -1,4 +1,4 @@
// Copyright Citra Emulator Project / Lime3DS Emulator Project // Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
@ -6,10 +6,12 @@ package org.citra.citra_emu.fragments
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams import android.view.ViewGroup.MarginLayoutParams
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
@ -22,6 +24,7 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.color.MaterialColors import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.transition.MaterialFadeThrough import com.google.android.material.transition.MaterialFadeThrough
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -33,6 +36,8 @@ import org.citra.citra_emu.features.settings.model.Settings
import org.citra.citra_emu.model.Game import org.citra.citra_emu.model.Game
import org.citra.citra_emu.viewmodel.GamesViewModel import org.citra.citra_emu.viewmodel.GamesViewModel
import org.citra.citra_emu.viewmodel.HomeViewModel import org.citra.citra_emu.viewmodel.HomeViewModel
import androidx.core.content.edit
import androidx.core.text.HtmlCompat
class GamesFragment : Fragment() { class GamesFragment : Fragment() {
private var _binding: FragmentGamesBinding? = null private var _binding: FragmentGamesBinding? = null
@ -40,6 +45,7 @@ class GamesFragment : Fragment() {
private val gamesViewModel: GamesViewModel by activityViewModels() private val gamesViewModel: GamesViewModel by activityViewModels()
private val homeViewModel: HomeViewModel by activityViewModels() private val homeViewModel: HomeViewModel by activityViewModels()
private var show3DSFileWarning: Boolean = true
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -143,6 +149,34 @@ class GamesFragment : Fragment() {
setInsets() 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<View>(android.R.id.message) as TextView
alertMessage.movementMethod = LinkMovementMethod.getInstance()
}
}
show3DSFileWarning = false
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null

View File

@ -11,6 +11,8 @@
<string name="app_game_install_description">Next, you will need to select an Applications Folder. Azahar will display all of the 3DS ROMs inside of the selected folder in the app.\n\nCIA ROMs, updates and DLC will need to be installed separately by clicking on the folder icon and selecting Install CIA.</string> <string name="app_game_install_description">Next, you will need to select an Applications Folder. Azahar will display all of the 3DS ROMs inside of the selected folder in the app.\n\nCIA ROMs, updates and DLC will need to be installed separately by clicking on the folder icon and selecting Install CIA.</string>
<string name="start">Start</string> <string name="start">Start</string>
<string name="cancelling">Cancelling…</string> <string name="cancelling">Cancelling…</string>
<string name="important">Important</string>
<string name="dont_show_again">Don\'t show again</string>
<!-- Home Strings --> <!-- Home Strings -->
<string name="grid_menu_core_settings">Settings</string> <string name="grid_menu_core_settings">Settings</string>
@ -38,6 +40,7 @@
<string name="select_citra_user_folder_home_description">Changes the files that Azahar uses to load applications</string> <string name="select_citra_user_folder_home_description">Changes the files that Azahar uses to load applications</string>
<string name="theme_and_color_description">Modify the look of the app</string> <string name="theme_and_color_description">Modify the look of the app</string>
<string name="install_cia_title">Install CIA</string> <string name="install_cia_title">Install CIA</string>
<string name="warning_3ds_files">Encrypted files and .3ds files are no longer supported. Decrypting and/or renaming to .cci may be necessary. &lt;a href=\"https://azahar-emu.org/blog/game-loading-changes/\">Learn more.&lt;/a></string>
<!-- GPU driver installation --> <!-- GPU driver installation -->
<string name="select_gpu_driver">Select GPU driver</string> <string name="select_gpu_driver">Select GPU driver</string>

View File

@ -828,6 +828,7 @@ void QtConfig::ReadUIGameListValues() {
ReadBasicSetting(UISettings::values.game_list_row_2); ReadBasicSetting(UISettings::values.game_list_row_2);
ReadBasicSetting(UISettings::values.game_list_hide_no_icon); ReadBasicSetting(UISettings::values.game_list_hide_no_icon);
ReadBasicSetting(UISettings::values.game_list_single_line_mode); 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_compat_column);
ReadBasicSetting(UISettings::values.show_region_column); ReadBasicSetting(UISettings::values.show_region_column);
@ -1335,6 +1336,7 @@ void QtConfig::SaveUIGameListValues() {
WriteBasicSetting(UISettings::values.game_list_row_2); WriteBasicSetting(UISettings::values.game_list_row_2);
WriteBasicSetting(UISettings::values.game_list_hide_no_icon); WriteBasicSetting(UISettings::values.game_list_hide_no_icon);
WriteBasicSetting(UISettings::values.game_list_single_line_mode); 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_compat_column);
WriteBasicSetting(UISettings::values.show_region_column); WriteBasicSetting(UISettings::values.show_region_column);

View File

@ -1,4 +1,4 @@
// Copyright 2015 Citra Emulator Project // Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
@ -350,6 +350,41 @@ GameList::GameList(PlayTime::PlayTimeManager& play_time_manager_, GMainWindow* p
layout->setContentsMargins(0, 0, 0, 0); layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(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. <a "
"href=\"https://azahar-emu.org/blog/game-loading-changes/\">Learn more.</a>"));
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(tree_view);
layout->addWidget(search_field); layout->addWidget(search_field);
setLayout(layout); setLayout(layout);

View File

@ -1,10 +1,11 @@
// Copyright 2015 Citra Emulator Project // Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#pragma once #pragma once
#include <QMenu> #include <QMenu>
#include <QPushButton>
#include <QString> #include <QString>
#include <QVector> #include <QVector>
#include <QWidget> #include <QWidget>
@ -133,6 +134,10 @@ private:
void changeEvent(QEvent*) override; void changeEvent(QEvent*) override;
void RetranslateUI(); void RetranslateUI();
QHBoxLayout* warning_layout = nullptr;
QWidget* warning_widget = nullptr;
QLabel* deprecated_3ds_warning = nullptr;
QPushButton* warning_hide = nullptr;
GameListSearchField* search_field; GameListSearchField* search_field;
GMainWindow* main_window = nullptr; GMainWindow* main_window = nullptr;
QVBoxLayout* layout = nullptr; QVBoxLayout* layout = nullptr;

View File

@ -94,6 +94,7 @@ struct Values {
Settings::Setting<GameListText> game_list_row_2{GameListText::FileName, "row2"}; Settings::Setting<GameListText> game_list_row_2{GameListText::FileName, "row2"};
Settings::Setting<bool> game_list_hide_no_icon{false, "hideNoIcon"}; Settings::Setting<bool> game_list_hide_no_icon{false, "hideNoIcon"};
Settings::Setting<bool> game_list_single_line_mode{false, "singleLineMode"}; Settings::Setting<bool> game_list_single_line_mode{false, "singleLineMode"};
Settings::Setting<bool> show_3ds_files_warning{true, "show_3ds_files_warning"};
// Compatibility List // Compatibility List
Settings::Setting<bool> show_compat_column{true, "show_compat_column"}; Settings::Setting<bool> show_compat_column{true, "show_compat_column"};