From dce63e76e2afb8d1e6b0ccabff0e01da93b5f98a Mon Sep 17 00:00:00 2001 From: caneleex Date: Fri, 18 Jun 2021 14:51:14 +0200 Subject: [PATCH 1/7] add length of the video without segments to the time bar --- .../java/pl/jakubweg/SponsorBlockUtils.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java index 299992f1..6ad0272c 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java @@ -9,10 +9,14 @@ import android.os.Looper; import android.text.Html; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; +import com.google.android.apps.youtube.app.YouTubeTikTokRoot_Application; + import org.json.JSONArray; import org.json.JSONObject; @@ -32,6 +36,8 @@ import java.util.Locale; import java.util.Objects; import java.util.TimeZone; +import fi.razerman.youtube.Helpers.XSwipeHelper; + import static android.view.View.GONE; import static android.view.View.VISIBLE; import static fi.razerman.youtube.XGlobals.debug; @@ -48,8 +54,12 @@ import static pl.jakubweg.StringRef.str; public abstract class SponsorBlockUtils { public static final String TAG = "jakubweg.SponsorBlockUtils"; public static final String DATE_FORMAT = "HH:mm:ss.SSS"; + public static final String WITHOUT_SEGMENTS_FORMAT = " (m:ss)"; + public static final String WITHOUT_SEGMENTS_FORMAT_H = " (H:m:ss)"; @SuppressLint("SimpleDateFormat") public static final SimpleDateFormat dateFormatter = new SimpleDateFormat(DATE_FORMAT); + public static final SimpleDateFormat withoutSegmentsFormatter = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT); + public static final SimpleDateFormat withoutSegmentsFormatterH = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT_H); private static final int sponsorBtnId = 1234; public static final View.OnClickListener sponsorBlockBtnListener = new View.OnClickListener() { @Override @@ -507,9 +517,19 @@ public abstract class SponsorBlockUtils { Log.e(TAG, "download segments failed", e); } + View layout = XSwipeHelper.nextGenWatchLayout.findViewById(getIdentifier("player_overlays", "id")); + View bar = layout.findViewById(getIdentifier("time_bar_total_time", "id")); + + ((TextView) bar).append(getTimeWithoutSegments()); + return sponsorSegments.toArray(new SponsorSegment[0]); } + private static int getIdentifier(String name, String defType) { + Context context = YouTubeTikTokRoot_Application.getAppContext(); + return context.getResources().getIdentifier(name, defType, context.getPackageName()); + } + public static void sendViewCountRequest(SponsorSegment segment) { try { URL url = new URL(SponsorBlockSettings.getSponsorBlockViewedUrl(segment.UUID)); @@ -562,6 +582,18 @@ public abstract class SponsorBlockUtils { } } + public static String getTimeWithoutSegments() { + if (!SponsorBlockSettings.isSponsorBlockEnabled || sponsorSegmentsOfCurrentVideo == null) { + return ""; + } + long timeWithoutSegments = PlayerController.getCurrentVideoLength(); + for (SponsorSegment segment : sponsorSegmentsOfCurrentVideo) { + timeWithoutSegments -= segment.end - segment.start; + } + Date date = new Date(timeWithoutSegments); + return timeWithoutSegments >= 3600000 ? withoutSegmentsFormatterH.format(date) : withoutSegmentsFormatter.format(date); + } + private enum VoteOption { UPVOTE(str("vote_upvote")), DOWNVOTE(str("vote_downvote")), From 7b6f1d6774d2ebb1c02655860711d92a55ec58cb Mon Sep 17 00:00:00 2001 From: caneleex Date: Fri, 18 Jun 2021 14:53:50 +0200 Subject: [PATCH 2/7] remove useless debug import --- app/src/main/java/pl/jakubweg/SponsorBlockUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java index 6ad0272c..a72427d6 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java @@ -9,7 +9,6 @@ import android.os.Looper; import android.text.Html; import android.util.Log; import android.view.View; -import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; From 8d189aba5799d4a27fcd128beccc3d0d1e9e370f Mon Sep 17 00:00:00 2001 From: caneleex Date: Fri, 23 Jul 2021 17:10:56 +0200 Subject: [PATCH 3/7] add setting --- .../pl/jakubweg/SponsorBlockPreferenceFragment.java | 12 ++++++++++++ .../main/java/pl/jakubweg/SponsorBlockSettings.java | 4 +++- app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java index fb3f667e..879800e8 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java @@ -24,6 +24,7 @@ import static pl.jakubweg.SponsorBlockSettings.DefaultBehaviour; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_ADJUST_NEW_SEGMENT_STEP; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_COUNT_SKIPS; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_NEW_SEGMENT_ENABLED; +import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_SHOW_TIME_WITHOUT_SEGMENTS; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_SHOW_TOAST_WHEN_SKIP; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_SPONSOR_BLOCK_ENABLED; import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_KEY_UUID; @@ -32,6 +33,7 @@ import static pl.jakubweg.SponsorBlockSettings.PREFERENCES_NAME; import static pl.jakubweg.SponsorBlockSettings.adjustNewSegmentMillis; import static pl.jakubweg.SponsorBlockSettings.countSkips; import static pl.jakubweg.SponsorBlockSettings.setSeenGuidelines; +import static pl.jakubweg.SponsorBlockSettings.showTimeWithoutSegments; import static pl.jakubweg.SponsorBlockSettings.showToastWhenSkippedAutomatically; import static pl.jakubweg.SponsorBlockSettings.uuid; import static pl.jakubweg.StringRef.str; @@ -247,6 +249,16 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment implement screen.addPreference(preference); } + { + Preference preference = new SwitchPreference(context); + preference.setTitle(str("general_ime_without_sb")); + preference.setSummary(str("general_time_without_sb_sum")); + preference.setKey(PREFERENCES_KEY_SHOW_TIME_WITHOUT_SEGMENTS); + preference.setDefaultValue(showTimeWithoutSegments); + preferencesToDisableWhenSBDisabled.add(preference); + screen.addPreference(preference); + } + { EditTextPreference preference = new EditTextPreference(context); preference.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockSettings.java b/app/src/main/java/pl/jakubweg/SponsorBlockSettings.java index 770b1797..f5e9a9de 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockSettings.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockSettings.java @@ -28,7 +28,7 @@ public class SponsorBlockSettings { public static final String sponsorBlockSkipSegmentsUrl = "https://sponsor.ajay.app/api/skipSegments"; public static final String sponsorBlockViewedUrl = "https://sponsor.ajay.app/api/viewedVideoSponsorTime"; public static final String sponsorBlockVoteUrl = "https://sponsor.ajay.app/api/voteOnSponsorTime"; - + public static final String PREFERENCES_KEY_SHOW_TIME_WITHOUT_SEGMENTS = "sb-length-without-segments"; public static final SegmentBehaviour DefaultBehaviour = SegmentBehaviour.SkipAutomatically; @@ -38,6 +38,7 @@ public class SponsorBlockSettings { public static boolean isVotingEnabled = true; public static boolean showToastWhenSkippedAutomatically = true; public static boolean countSkips = true; + public static boolean showTimeWithoutSegments = true; public static int adjustNewSegmentMillis = 150; public static String uuid = ""; private static String sponsorBlockUrlCategories = "[]"; @@ -140,6 +141,7 @@ public class SponsorBlockSettings { adjustNewSegmentMillis = Integer.parseInt(tmp1); countSkips = preferences.getBoolean(PREFERENCES_KEY_COUNT_SKIPS, countSkips); + showTimeWithoutSegments = preferences.getBoolean(PREFERENCES_KEY_SHOW_TIME_WITHOUT_SEGMENTS, showTimeWithoutSegments); uuid = preferences.getString(PREFERENCES_KEY_UUID, null); if (uuid == null) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b1d5fed..d9d3991b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -151,6 +151,8 @@ Click to see an example toast Skip count tracking This lets SponsorBlock leaderboard system know how much time people have saved. The extension sends a message to the server each time you skip a segment. + Show time without segments + This time appears in brackets next to the current time. This shows the total video duration minus any segments. Adjusting new segment step This is the number of milliseconds you can move when you use the time adjustment buttons while adding new segment Your unique user id From 5334bc4caee472f06d04aebf033005841ee641b4 Mon Sep 17 00:00:00 2001 From: caneleex Date: Fri, 23 Jul 2021 17:13:17 +0200 Subject: [PATCH 4/7] fix string key --- .../main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java index 879800e8..d4eabff8 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java @@ -251,7 +251,7 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment implement { Preference preference = new SwitchPreference(context); - preference.setTitle(str("general_ime_without_sb")); + preference.setTitle(str("general_time_without_sb")); preference.setSummary(str("general_time_without_sb_sum")); preference.setKey(PREFERENCES_KEY_SHOW_TIME_WITHOUT_SEGMENTS); preference.setDefaultValue(showTimeWithoutSegments); From e3725669985a8320c00726889a66a0d631d6ad11 Mon Sep 17 00:00:00 2001 From: xfileFIN Date: Fri, 23 Jul 2021 18:28:54 +0300 Subject: [PATCH 5/7] Experiments for fixing the appending --- .../libraries/youtube/player/PlayerType.java | 2 + .../java/pl/jakubweg/SponsorBlockUtils.java | 56 +++++++++++++++++-- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/fi/vanced/libraries/youtube/player/PlayerType.java b/app/src/main/java/fi/vanced/libraries/youtube/player/PlayerType.java index 448ebe0c..84eabe45 100644 --- a/app/src/main/java/fi/vanced/libraries/youtube/player/PlayerType.java +++ b/app/src/main/java/fi/vanced/libraries/youtube/player/PlayerType.java @@ -1,9 +1,11 @@ package fi.vanced.libraries.youtube.player; import fi.vanced.libraries.youtube.sponsors.player.ui.SponsorBlockView; +import pl.jakubweg.SponsorBlockUtils; public class PlayerType { public static void playerTypeChanged(String playerType) { SponsorBlockView.playerTypeChanged(playerType); + SponsorBlockUtils.playerTypeChanged(playerType); } } diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java index a72427d6..1e6f084e 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java @@ -36,6 +36,7 @@ import java.util.Objects; import java.util.TimeZone; import fi.razerman.youtube.Helpers.XSwipeHelper; +import fi.razerman.youtube.XGlobals; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -59,6 +60,8 @@ public abstract class SponsorBlockUtils { public static final SimpleDateFormat dateFormatter = new SimpleDateFormat(DATE_FORMAT); public static final SimpleDateFormat withoutSegmentsFormatter = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT); public static final SimpleDateFormat withoutSegmentsFormatterH = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT_H); + private static boolean videoHasSegments = false; + private static boolean needToAppendTime = false; private static final int sponsorBtnId = 1234; public static final View.OnClickListener sponsorBlockBtnListener = new View.OnClickListener() { @Override @@ -471,9 +474,13 @@ public abstract class SponsorBlockUtils { switch (connection.getResponseCode()) { default: Log.e(TAG, "Unable to download segments: Status: " + connection.getResponseCode() + " " + connection.getResponseMessage()); + videoHasSegments = false; + needToAppendTime = false; break; case 404: Log.w(TAG, "No segments for this video (ERR404)"); + videoHasSegments = false; + needToAppendTime = false; break; case 200: if (VERBOSE) @@ -507,6 +514,9 @@ public abstract class SponsorBlockUtils { if (VERBOSE) Log.v(TAG, "Parsing done"); + + videoHasSegments = true; + needToAppendTime = true; break; } @@ -516,11 +526,6 @@ public abstract class SponsorBlockUtils { Log.e(TAG, "download segments failed", e); } - View layout = XSwipeHelper.nextGenWatchLayout.findViewById(getIdentifier("player_overlays", "id")); - View bar = layout.findViewById(getIdentifier("time_bar_total_time", "id")); - - ((TextView) bar).append(getTimeWithoutSegments()); - return sponsorSegments.toArray(new SponsorSegment[0]); } @@ -581,6 +586,35 @@ public abstract class SponsorBlockUtils { } } + public static void forceAppendTimeWithoutSegments() { + appendTimeWithoutSegments(true); + } + + public static void appendTimeWithoutSegments() { + appendTimeWithoutSegments(false); + } + + public static void appendTimeWithoutSegments(boolean forceAppend) { + try { + if (!videoHasSegments || (!needToAppendTime && !forceAppend)) { + return; + } + + View layout = XSwipeHelper.nextGenWatchLayout.findViewById(getIdentifier("player_overlays", "id")); + if (layout != null) { + View bar = layout.findViewById(getIdentifier("time_bar_total_time", "id")); + ((TextView) bar).append(getTimeWithoutSegments()); + } + else if (XGlobals.debug){ + Log.d(TAG, "player_overlays was not found"); + } + + needToAppendTime = false; + } catch (Exception e) { + Log.e(TAG, "setting the time without segments failed", e); + } + } + public static String getTimeWithoutSegments() { if (!SponsorBlockSettings.isSponsorBlockEnabled || sponsorSegmentsOfCurrentVideo == null) { return ""; @@ -593,6 +627,18 @@ public abstract class SponsorBlockUtils { return timeWithoutSegments >= 3600000 ? withoutSegmentsFormatterH.format(date) : withoutSegmentsFormatter.format(date); } + public static void playerTypeChanged(String playerType) { + try { + if (videoHasSegments && (playerType.equalsIgnoreCase("NONE"))) { + needToAppendTime = true; + return; + } + } + catch (Exception ex) { + Log.e(TAG, "Player type changed caused a crash.", ex); + } + } + private enum VoteOption { UPVOTE(str("vote_upvote")), DOWNVOTE(str("vote_downvote")), From fc3fb979ba79cfc5b44607c4e7bee521aa5fdc24 Mon Sep 17 00:00:00 2001 From: caneleex Date: Fri, 23 Jul 2021 17:44:42 +0200 Subject: [PATCH 6/7] reset segments when closing videos --- app/src/main/java/pl/jakubweg/PlayerController.java | 3 ++- app/src/main/java/pl/jakubweg/SponsorBlockUtils.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/pl/jakubweg/PlayerController.java b/app/src/main/java/pl/jakubweg/PlayerController.java index 9dc1a2f3..b9964150 100644 --- a/app/src/main/java/pl/jakubweg/PlayerController.java +++ b/app/src/main/java/pl/jakubweg/PlayerController.java @@ -56,7 +56,8 @@ public class PlayerController { public static void setCurrentVideoId(final String videoId) { if (videoId == null) { - Log.d(TAG, "setCurrentVideoId: videoId is null"); + currentVideoId = null; + sponsorSegmentsOfCurrentVideo = null; return; } diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java index 1e6f084e..fceb5b76 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java @@ -616,7 +616,7 @@ public abstract class SponsorBlockUtils { } public static String getTimeWithoutSegments() { - if (!SponsorBlockSettings.isSponsorBlockEnabled || sponsorSegmentsOfCurrentVideo == null) { + if (!SponsorBlockSettings.isSponsorBlockEnabled || !SponsorBlockSettings.showTimeWithoutSegments || sponsorSegmentsOfCurrentVideo == null) { return ""; } long timeWithoutSegments = PlayerController.getCurrentVideoLength(); @@ -631,6 +631,7 @@ public abstract class SponsorBlockUtils { try { if (videoHasSegments && (playerType.equalsIgnoreCase("NONE"))) { needToAppendTime = true; + PlayerController.setCurrentVideoId(null); return; } } From 04efa79b531ab9efc3fbc3dd4de50e570dd6ede7 Mon Sep 17 00:00:00 2001 From: xfileFIN Date: Sat, 24 Jul 2021 00:24:51 +0300 Subject: [PATCH 7/7] Test ready I guess --- .../java/pl/jakubweg/SponsorBlockUtils.java | 46 +++++-------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java index fceb5b76..e5ef0d51 100644 --- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java +++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java @@ -7,6 +7,7 @@ import android.content.DialogInterface; import android.os.Handler; import android.os.Looper; import android.text.Html; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; @@ -61,7 +62,7 @@ public abstract class SponsorBlockUtils { public static final SimpleDateFormat withoutSegmentsFormatter = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT); public static final SimpleDateFormat withoutSegmentsFormatterH = new SimpleDateFormat(WITHOUT_SEGMENTS_FORMAT_H); private static boolean videoHasSegments = false; - private static boolean needToAppendTime = false; + private static String timeWithoutSegments = ""; private static final int sponsorBtnId = 1234; public static final View.OnClickListener sponsorBlockBtnListener = new View.OnClickListener() { @Override @@ -471,16 +472,14 @@ public abstract class SponsorBlockUtils { URL url = new URL(SponsorBlockSettings.getSponsorBlockUrlWithCategories(videoId)); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + videoHasSegments = false; + timeWithoutSegments = ""; switch (connection.getResponseCode()) { default: Log.e(TAG, "Unable to download segments: Status: " + connection.getResponseCode() + " " + connection.getResponseMessage()); - videoHasSegments = false; - needToAppendTime = false; break; case 404: Log.w(TAG, "No segments for this video (ERR404)"); - videoHasSegments = false; - needToAppendTime = false; break; case 200: if (VERBOSE) @@ -516,7 +515,6 @@ public abstract class SponsorBlockUtils { Log.v(TAG, "Parsing done"); videoHasSegments = true; - needToAppendTime = true; break; } @@ -526,6 +524,8 @@ public abstract class SponsorBlockUtils { Log.e(TAG, "download segments failed", e); } + timeWithoutSegments = getTimeWithoutSegments(sponsorSegments); + return sponsorSegments.toArray(new SponsorSegment[0]); } @@ -586,36 +586,15 @@ public abstract class SponsorBlockUtils { } } - public static void forceAppendTimeWithoutSegments() { - appendTimeWithoutSegments(true); - } - - public static void appendTimeWithoutSegments() { - appendTimeWithoutSegments(false); - } - - public static void appendTimeWithoutSegments(boolean forceAppend) { - try { - if (!videoHasSegments || (!needToAppendTime && !forceAppend)) { - return; - } - - View layout = XSwipeHelper.nextGenWatchLayout.findViewById(getIdentifier("player_overlays", "id")); - if (layout != null) { - View bar = layout.findViewById(getIdentifier("time_bar_total_time", "id")); - ((TextView) bar).append(getTimeWithoutSegments()); - } - else if (XGlobals.debug){ - Log.d(TAG, "player_overlays was not found"); - } - - needToAppendTime = false; - } catch (Exception e) { - Log.e(TAG, "setting the time without segments failed", e); + public static String appendTimeWithoutSegments(String totalTime) { + if (videoHasSegments && SponsorBlockSettings.showTimeWithoutSegments && !TextUtils.isEmpty(totalTime)) { + return totalTime + timeWithoutSegments; } + + return totalTime; } - public static String getTimeWithoutSegments() { + public static String getTimeWithoutSegments(ArrayList sponsorSegmentsOfCurrentVideo) { if (!SponsorBlockSettings.isSponsorBlockEnabled || !SponsorBlockSettings.showTimeWithoutSegments || sponsorSegmentsOfCurrentVideo == null) { return ""; } @@ -630,7 +609,6 @@ public abstract class SponsorBlockUtils { public static void playerTypeChanged(String playerType) { try { if (videoHasSegments && (playerType.equalsIgnoreCase("NONE"))) { - needToAppendTime = true; PlayerController.setCurrentVideoId(null); return; }