Merge pull request #10146 from JosJuice/nkit-convert-warning

DolphinQt/Android: Add warning when converting NKit files
This commit is contained in:
Léo Lam 2021-10-03 21:47:04 +02:00 committed by GitHub
commit 33ffc7aa66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 55 additions and 19 deletions

View File

@ -27,6 +27,7 @@ import java.io.File;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@ -331,32 +332,42 @@ public class ConvertFragment extends Fragment implements View.OnClickListener
@Override
public void onClick(View view)
{
Context context = requireContext();
boolean scrub = getRemoveJunkData();
int format = mFormat.getValue(context);
int format = mFormat.getValue(requireContext());
boolean iso_warning = scrub && format == BLOB_TYPE_PLAIN;
boolean gcz_warning = !scrub && format == BLOB_TYPE_GCZ && !gameFile.isDatelDisc() &&
gameFile.getPlatform() == Platform.WII.toInt();
Runnable action = this::showSavePrompt;
if (iso_warning || gcz_warning)
if (gameFile.isNKit())
{
action = addAreYouSureDialog(action, R.string.convert_warning_nkit);
}
if (!scrub && format == BLOB_TYPE_GCZ && !gameFile.isDatelDisc() &&
gameFile.getPlatform() == Platform.WII.toInt())
{
action = addAreYouSureDialog(action, R.string.convert_warning_gcz);
}
if (scrub && format == BLOB_TYPE_PLAIN)
{
action = addAreYouSureDialog(action, R.string.convert_warning_iso);
}
action.run();
}
private Runnable addAreYouSureDialog(Runnable action, @StringRes int warning_text)
{
return () ->
{
Context context = requireContext();
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.DolphinDialogBase);
builder.setMessage(iso_warning ? R.string.convert_warning_iso : R.string.convert_warning_gcz)
.setPositiveButton(R.string.yes, (dialog, i) ->
{
dialog.dismiss();
showSavePrompt();
})
.setNegativeButton(R.string.no, (dialog, i) -> dialog.dismiss());
builder.setMessage(warning_text)
.setPositiveButton(R.string.yes, (dialog, i) -> action.run())
.setNegativeButton(R.string.no, null);
AlertDialog alert = builder.create();
alert.show();
}
else
{
showSavePrompt();
}
};
}
private void showSavePrompt()

View File

@ -60,6 +60,8 @@ public class GameFile
public native boolean isDatelDisc();
public native boolean isNKit();
public native int[] getBanner();
public native int getBannerWidth();

View File

@ -425,6 +425,7 @@
<string name="convert_converting">Converting</string>
<string name="convert_warning_iso">Removing junk data does not save any space when converting to ISO (unless you package the ISO file in a compressed file format such as ZIP afterwards). Do you want to continue anyway?</string>
<string name="convert_warning_gcz">Converting Wii disc images to GCZ without removing junk data does not save any noticeable amount of space compared to converting to ISO. Do you want to continue anyway?</string>
<string name="convert_warning_nkit">Dolphin can\'t convert NKit files to non-NKit files. Converting an NKit file in Dolphin will result in another NKit file.\n\nIf you want to convert an NKit file to a non-NKit file, you can use the same program as you originally used when converting the file to the NKit format.\n\nDo you want to continue anyway?</string>
<string name="convert_success_message">The disc image was successfully converted.</string>
<string name="convert_failure_message">Dolphin failed to complete the requested action.</string>
<string name="convert_format_info">

View File

@ -162,6 +162,12 @@ JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_model_GameFile_isDatel
return static_cast<jboolean>(GetRef(env, obj)->IsDatelDisc());
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_model_GameFile_isNKit(JNIEnv* env,
jobject obj)
{
return static_cast<jboolean>(GetRef(env, obj)->IsNKit());
}
JNIEXPORT jintArray JNICALL Java_org_dolphinemu_dolphinemu_model_GameFile_getBanner(JNIEnv* env,
jobject obj)
{

View File

@ -329,6 +329,21 @@ void ConvertDialog::Convert()
}
}
if (std::any_of(m_files.begin(), m_files.end(), std::mem_fn(&UICommon::GameFile::IsNKit)))
{
if (!ShowAreYouSureDialog(
tr("Dolphin can't convert NKit files to non-NKit files. Converting an NKit file in "
"Dolphin will result in another NKit file.\n"
"\n"
"If you want to convert an NKit file to a non-NKit file, you can use the same "
"program as you originally used when converting the file to the NKit format.\n"
"\n"
"Do you want to continue anyway?")))
{
return;
}
}
QString extension;
QString filter;
switch (format)

View File

@ -106,6 +106,7 @@ public:
u64 GetVolumeSize() const { return m_volume_size; }
bool IsVolumeSizeAccurate() const { return m_volume_size_is_accurate; }
bool IsDatelDisc() const { return m_is_datel_disc; }
bool IsNKit() const { return m_is_nkit; }
const GameBanner& GetBannerImage() const;
const GameCover& GetCoverImage() const;
void DoState(PointerWrap& p);