fix(YouTube - SponsorBlock): Export local statistics with saved settings (#542)

This commit is contained in:
LisoUseInAIKyrios 2023-12-16 15:22:59 +04:00 committed by GitHub
parent aedb3eddd6
commit 0ed8e5a298
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 17 deletions

View File

@ -597,8 +597,6 @@ public enum SettingsEnum {
case SB_LAST_VIP_CHECK: case SB_LAST_VIP_CHECK:
case SB_HIDE_EXPORT_WARNING: case SB_HIDE_EXPORT_WARNING:
case SB_SEEN_GUIDELINES: case SB_SEEN_GUIDELINES:
case SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS:
case SB_LOCAL_TIME_SAVED_MILLISECONDS:
return false; return false;
} }
return true; return true;

View File

@ -26,8 +26,6 @@ import android.widget.EditText;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import java.text.DecimalFormat;
import app.revanced.integrations.settings.SettingsEnum; import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.settings.SharedPrefCategory; import app.revanced.integrations.settings.SharedPrefCategory;
import app.revanced.integrations.sponsorblock.SegmentPlaybackController; import app.revanced.integrations.sponsorblock.SegmentPlaybackController;
@ -471,8 +469,6 @@ public class SponsorBlockSettingsFragment extends PreferenceFragment {
} }
} }
private static final DecimalFormat statsNumberOfSegmentsSkippedFormatter = new DecimalFormat("#,###,###");
private void addUserStats(@NonNull Preference loadingPlaceholder, @Nullable UserStats stats) { private void addUserStats(@NonNull Preference loadingPlaceholder, @Nullable UserStats stats) {
ReVancedUtils.verifyOnMainThread(); ReVancedUtils.verifyOnMainThread();
try { try {
@ -514,7 +510,7 @@ public class SponsorBlockSettingsFragment extends PreferenceFragment {
// number of segment submissions (does not include ignored segments) // number of segment submissions (does not include ignored segments)
Preference preference = new Preference(context); Preference preference = new Preference(context);
statsCategory.addPreference(preference); statsCategory.addPreference(preference);
String formatted = statsNumberOfSegmentsSkippedFormatter.format(stats.segmentCount); String formatted = SponsorBlockUtils.getNumberOfSkipsString(stats.segmentCount);
preference.setTitle(fromHtml(str("sb_stats_submissions", formatted))); preference.setTitle(fromHtml(str("sb_stats_submissions", formatted)));
if (stats.totalSegmentCountIncludingIgnored == 0) { if (stats.totalSegmentCountIncludingIgnored == 0) {
preference.setSelectable(false); preference.setSelectable(false);
@ -550,7 +546,8 @@ public class SponsorBlockSettingsFragment extends PreferenceFragment {
stats_saved = str("sb_stats_saved_zero"); stats_saved = str("sb_stats_saved_zero");
stats_saved_sum = str("sb_stats_saved_sum_zero"); stats_saved_sum = str("sb_stats_saved_sum_zero");
} else { } else {
stats_saved = str("sb_stats_saved", statsNumberOfSegmentsSkippedFormatter.format(stats.viewCount)); stats_saved = str("sb_stats_saved",
SponsorBlockUtils.getNumberOfSkipsString(stats.viewCount));
stats_saved_sum = str("sb_stats_saved_sum", SponsorBlockUtils.getTimeSavedString((long) (60 * stats.minutesSaved))); stats_saved_sum = str("sb_stats_saved_sum", SponsorBlockUtils.getTimeSavedString((long) (60 * stats.minutesSaved)));
} }
preference.setTitle(fromHtml(stats_saved)); preference.setTitle(fromHtml(stats_saved));
@ -573,7 +570,7 @@ public class SponsorBlockSettingsFragment extends PreferenceFragment {
statsCategory.addPreference(preference); statsCategory.addPreference(preference);
Runnable updateStatsSelfSaved = () -> { Runnable updateStatsSelfSaved = () -> {
String formatted = statsNumberOfSegmentsSkippedFormatter.format(SettingsEnum.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.getInt()); String formatted = SponsorBlockUtils.getNumberOfSkipsString(SettingsEnum.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.getInt());
preference.setTitle(fromHtml(str("sb_stats_self_saved", formatted))); preference.setTitle(fromHtml(str("sb_stats_self_saved", formatted)));
String formattedSaved = SponsorBlockUtils.getTimeSavedString(SettingsEnum.SB_LOCAL_TIME_SAVED_MILLISECONDS.getLong() / 1000); String formattedSaved = SponsorBlockUtils.getTimeSavedString(SettingsEnum.SB_LOCAL_TIME_SAVED_MILLISECONDS.getLong() / 1000);
preference.setSummary(fromHtml(str("sb_stats_self_saved_sum", formattedSaved))); preference.setSummary(fromHtml(str("sb_stats_self_saved_sum", formattedSaved)));

View File

@ -12,6 +12,7 @@ import android.widget.EditText;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.text.NumberFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
@ -39,6 +40,7 @@ public class SponsorBlockUtils {
private static final SimpleDateFormat manualEditTimeFormatter = new SimpleDateFormat(MANUAL_EDIT_TIME_FORMAT); private static final SimpleDateFormat manualEditTimeFormatter = new SimpleDateFormat(MANUAL_EDIT_TIME_FORMAT);
@SuppressLint("SimpleDateFormat") @SuppressLint("SimpleDateFormat")
private static final SimpleDateFormat voteSegmentTimeFormatter = new SimpleDateFormat(); private static final SimpleDateFormat voteSegmentTimeFormatter = new SimpleDateFormat();
private static final NumberFormat statsNumberFormatter = NumberFormat.getNumberInstance();
static { static {
TimeZone utc = TimeZone.getTimeZone("UTC"); TimeZone utc = TimeZone.getTimeZone("UTC");
manualEditTimeFormatter.setTimeZone(utc); manualEditTimeFormatter.setTimeZone(utc);
@ -402,19 +404,27 @@ public class SponsorBlockUtils {
} }
} }
public static String getNumberOfSkipsString(int viewCount) {
return statsNumberFormatter.format(viewCount);
}
public static String getTimeSavedString(long totalSecondsSaved) { public static String getTimeSavedString(long totalSecondsSaved) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Duration duration = Duration.ofSeconds(totalSecondsSaved); Duration duration = Duration.ofSeconds(totalSecondsSaved);
final long hoursSaved = duration.toHours(); final long hours = duration.toHours();
final long minutesSaved = duration.toMinutes() % 60; final long minutes = duration.toMinutes() % 60;
if (hoursSaved > 0) { // Format all numbers so non-western numbers use a consistent appearance.
return str("sb_stats_saved_hour_format", hoursSaved, minutesSaved); String minutesFormatted = statsNumberFormatter.format(minutes);
if (hours > 0) {
String hoursFormatted = statsNumberFormatter.format(hours);
return str("sb_stats_saved_hour_format", hoursFormatted, minutesFormatted);
} }
final long secondsSaved = duration.getSeconds() % 60; final long seconds = duration.getSeconds() % 60;
if (minutesSaved > 0) { String secondsFormatted = statsNumberFormatter.format(seconds);
return str("sb_stats_saved_minute_format", minutesSaved, secondsSaved); if (minutes > 0) {
return str("sb_stats_saved_minute_format", minutesFormatted, secondsFormatted);
} }
return str("sb_stats_saved_second_format", secondsSaved); return str("sb_stats_saved_second_format", secondsFormatted);
} }
return "error"; // will never be reached. YouTube requires Android O or greater return "error"; // will never be reached. YouTube requires Android O or greater
} }