From 0cba2b32ae0a4c4594a332ca4a88e798338f839b 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/integrations/java/pl/jakubweg/SponsorBlockUtils.java b/integrations/java/pl/jakubweg/SponsorBlockUtils.java index 299992f10..6ad0272c8 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockUtils.java +++ b/integrations/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 acefa2577039b5c2a73bb0acc99b1f48f60c40d0 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 --- integrations/java/pl/jakubweg/SponsorBlockUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/integrations/java/pl/jakubweg/SponsorBlockUtils.java b/integrations/java/pl/jakubweg/SponsorBlockUtils.java index 6ad0272c8..a72427d66 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockUtils.java +++ b/integrations/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 dd1ed65cb3f03038bd03e753aef1871867a14cb2 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 ++++++++++++ .../java/pl/jakubweg/SponsorBlockSettings.java | 4 +++- integrations/res/values/strings.xml | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java b/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java index fb3f667ed..879800e85 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java +++ b/integrations/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/integrations/java/pl/jakubweg/SponsorBlockSettings.java b/integrations/java/pl/jakubweg/SponsorBlockSettings.java index 770b17972..f5e9a9de7 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockSettings.java +++ b/integrations/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/integrations/res/values/strings.xml b/integrations/res/values/strings.xml index 7b1d5fed1..d9d3991b4 100644 --- a/integrations/res/values/strings.xml +++ b/integrations/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 a6919957404b0fee0e1ce0e4f6e26d47dc9b8ffd 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 --- .../java/pl/jakubweg/SponsorBlockPreferenceFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java b/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java index 879800e85..d4eabff8a 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockPreferenceFragment.java +++ b/integrations/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 2c059dc202eb7f9b2fa48f5ab21e71756a1c22eb 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/integrations/java/fi/vanced/libraries/youtube/player/PlayerType.java b/integrations/java/fi/vanced/libraries/youtube/player/PlayerType.java index 448ebe0c6..84eabe454 100644 --- a/integrations/java/fi/vanced/libraries/youtube/player/PlayerType.java +++ b/integrations/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/integrations/java/pl/jakubweg/SponsorBlockUtils.java b/integrations/java/pl/jakubweg/SponsorBlockUtils.java index a72427d66..1e6f084ed 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockUtils.java +++ b/integrations/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 ce42c7f7783c95cf50288f7932606b3d5a33226c 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 --- integrations/java/pl/jakubweg/PlayerController.java | 3 ++- integrations/java/pl/jakubweg/SponsorBlockUtils.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/integrations/java/pl/jakubweg/PlayerController.java b/integrations/java/pl/jakubweg/PlayerController.java index 9dc1a2f3f..b9964150e 100644 --- a/integrations/java/pl/jakubweg/PlayerController.java +++ b/integrations/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/integrations/java/pl/jakubweg/SponsorBlockUtils.java b/integrations/java/pl/jakubweg/SponsorBlockUtils.java index 1e6f084ed..fceb5b769 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockUtils.java +++ b/integrations/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 1448a884524e352714c7eda93ee8c3bd9fe2fff0 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/integrations/java/pl/jakubweg/SponsorBlockUtils.java b/integrations/java/pl/jakubweg/SponsorBlockUtils.java index fceb5b769..e5ef0d515 100644 --- a/integrations/java/pl/jakubweg/SponsorBlockUtils.java +++ b/integrations/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; }