More human-readable error when feed is invalid (#7539)

This commit is contained in:
ByteHamster 2024-12-10 21:01:13 +01:00 committed by GitHub
parent 6c931b5780
commit 4693a39c9a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 9 deletions

View File

@ -4,6 +4,9 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
@ -39,15 +42,19 @@ public class DownloadLogDetailsDialog extends MaterialAlertDialogBuilder {
message = status.getReasonDetailed();
}
String messageFull = context.getString(R.string.download_log_details_message,
context.getString(DownloadErrorLabel.from(status.getReason())), message, url);
String humanReadableReason = context.getString(DownloadErrorLabel.from(status.getReason()));
SpannableString errorMessage = new SpannableString(context.getString(R.string.download_log_details_message,
humanReadableReason, message, url));
errorMessage.setSpan(new ForegroundColorSpan(0x88888888),
humanReadableReason.length(), errorMessage.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setTitle(R.string.download_error_details);
setMessage(messageFull);
setMessage(errorMessage);
setPositiveButton(android.R.string.ok, null);
setNeutralButton(R.string.copy_to_clipboard, (dialog, which) -> {
ClipboardManager clipboard = (ClipboardManager) getContext()
.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(context.getString(R.string.download_error_details), messageFull);
ClipData clip = ClipData.newPlainText(context.getString(R.string.download_error_details), errorMessage);
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT < 32) {
EventBus.getDefault().post(new MessageEvent(context.getString(R.string.copied_to_clipboard)));

View File

@ -12,6 +12,7 @@ import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -294,7 +295,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::showFeedFragment, error -> {
error.printStackTrace();
showErrorDialog(error.getMessage(), "");
showErrorDialog(getString(R.string.download_error_parser_exception), error.getMessage());
});
}
@ -363,10 +364,10 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this);
builder.setTitle(R.string.error_label);
if (errorMsg != null) {
String total = errorMsg + "\n\n" + details;
SpannableString errorMessage = new SpannableString(total);
SpannableString errorMessage = new SpannableString(getString(
R.string.download_log_details_message, errorMsg, details, selectedDownloadUrl));
errorMessage.setSpan(new ForegroundColorSpan(0x88888888),
errorMsg.length(), total.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
errorMsg.length(), errorMessage.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setMessage(errorMessage);
} else {
builder.setMessage(R.string.download_error_error_unknown);
@ -382,6 +383,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
dialog.dismiss();
}
dialog = builder.show();
((TextView) dialog.findViewById(android.R.id.message)).setTextIsSelectable(true);
}
}

View File

@ -286,7 +286,7 @@
<string name="download_error_insufficient_space">There is not enough space left on your device.</string>
<string name="download_error_http_data_error">HTTP data error</string>
<string name="download_error_error_unknown">Unknown error</string>
<string name="download_error_parser_exception">The podcast host\'s server sent a broken podcast feed.</string>
<string name="download_error_parser_exception">The podcast host\'s server sent a broken podcast feed. We recommend checking with a podcast validator such as castfeedvalidator.com and contacting the podcast creator to let them know.</string>
<string name="download_error_unsupported_type">Unsupported feed type</string>
<string name="download_error_unsupported_type_html">The podcast host\'s server sent a website, not a podcast.</string>
<string name="download_error_not_found">The podcast host\'s server does not know where to find the file. It may have been deleted.</string>