Skip to content

Commit

Permalink
Blur shortcuts improvements (#461)
Browse files Browse the repository at this point in the history
* extension: unblur shortcut

* rename toggleBlur -> unblur

* Revert "rename toggleBlur -> unblur"

This reverts commit f232dc8.

* Re-implement using modifications to subtitle elements' class list

* rename toggleBlur -> unblur

---------

Co-authored-by: R-J Lim <[email protected]>
  • Loading branch information
artjomsR and killergerbah authored Aug 24, 2024
1 parent 7405b74 commit 5ddeac8
Show file tree
Hide file tree
Showing 22 changed files with 125 additions and 117 deletions.
2 changes: 1 addition & 1 deletion common/app/components/VideoPlayer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ export default function VideoPlayer({
}, [keyBinder, playerChannel]);

useEffect(() => {
return keyBinder.bindToggleBlurTrack(
return keyBinder.bindUnblurTrack(
(event, targetTrack) => {
event.preventDefault();
let newSubtitleSettings = { ...subtitleSettings };
Expand Down
6 changes: 3 additions & 3 deletions common/app/services/app-key-binder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,12 @@ export default class AppKeyBinder implements KeyBinder {
);
}

bindToggleBlurTrack(
onToggleBlurTrack: (event: KeyboardEvent, track: number) => void,
bindUnblurTrack(
onUnblurTrack: (event: KeyboardEvent, track: number) => void,
disabledGetter: () => boolean,
useCapture?: boolean | undefined
): () => void {
return this.defaultKeyBinder.bindToggleBlurTrack(onToggleBlurTrack, disabledGetter, useCapture);
return this.defaultKeyBinder.bindUnblurTrack(onUnblurTrack, disabledGetter, useCapture);
}

bindPlay(
Expand Down
12 changes: 6 additions & 6 deletions common/components/SettingsForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -732,16 +732,16 @@ export default function SettingsForm({
label: t('binds.toggleAsbplayerSubtitleTrack3')!,
boundViaChrome: false,
},
toggleAsbplayerBlurTrack1: {
label: t('binds.toggleAsbplayerBlurTrack', { trackNumber: 1 })!,
unblurAsbplayerTrack1: {
label: t('binds.unblurAsbplayerTrack', { trackNumber: 1 })!,
boundViaChrome: false,
},
toggleAsbplayerBlurTrack2: {
label: t('binds.toggleAsbplayerBlurTrack', { trackNumber: 2 })!,
unblurAsbplayerTrack2: {
label: t('binds.unblurAsbplayerTrack', { trackNumber: 2 })!,
boundViaChrome: false,
},
toggleAsbplayerBlurTrack3: {
label: t('binds.toggleAsbplayerBlurTrack', { trackNumber: 3 })!,
unblurAsbplayerTrack3: {
label: t('binds.unblurAsbplayerTrack', { trackNumber: 3 })!,
boundViaChrome: false,
},
seekBackward: { label: t('binds.seekBackward')!, boundViaChrome: false },
Expand Down
16 changes: 8 additions & 8 deletions common/key-binder/key-binder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ export interface KeyBinder {
disabledGetter: () => boolean,
capture?: boolean
): () => void;
bindToggleBlurTrack(
onToggleBlurTrack: (event: KeyboardEvent, track: number) => void,
bindUnblurTrack(
onUnblurTrack: (event: KeyboardEvent, track: number) => void,
disabledGetter: () => boolean,
capture?: boolean
): () => void;
Expand Down Expand Up @@ -654,15 +654,15 @@ export class DefaultKeyBinder implements KeyBinder {
};
}

bindToggleBlurTrack(
onToggleBlurTrack: (event: KeyboardEvent, track: number) => void,
bindUnblurTrack(
onUnblurTrack: (event: KeyboardEvent, track: number) => void,
disabledGetter: () => boolean,
capture = false
) {
const shortcuts = [
this.keyBindSet.toggleAsbplayerBlurTrack1.keys,
this.keyBindSet.toggleAsbplayerBlurTrack2.keys,
this.keyBindSet.toggleAsbplayerBlurTrack3.keys,
this.keyBindSet.unblurAsbplayerTrack1.keys,
this.keyBindSet.unblurAsbplayerTrack2.keys,
this.keyBindSet.unblurAsbplayerTrack3.keys,
].filter((s) => s);

if (shortcuts.length === 0) {
Expand All @@ -674,7 +674,7 @@ export class DefaultKeyBinder implements KeyBinder {
return false;
}

onToggleBlurTrack(event, track);
onUnblurTrack(event, track);
return true;
};
let unbindHandlers: (() => void)[] = [];
Expand Down
1 change: 1 addition & 0 deletions common/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "Untertitel 3 in asbplayer umschalten",
"toggleAsbplayerSubtitleTracks": "Untertitel in absplayer umschalten",
"toggleAsbplayerBlurTrack": "Toggle subtitle track {{trackNumber}} blur in asbplayer",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "Auto-Pause aktivieren / deaktivieren",
"toggleCondensedPlayback": "Komprimiertes Audio-Playback aktivieren / deaktivieren",
"toggleFastForwardPlayback": "Toggle fast forward playback",
Expand Down
1 change: 1 addition & 0 deletions common/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "Toggle subtitle track 3 in asbplayer",
"toggleAsbplayerSubtitleTracks": "Toggle subtitle track in asbplayer",
"toggleAsbplayerBlurTrack": "Toggle subtitle track {{trackNumber}} blur in asbplayer",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "Toggle auto-pause",
"toggleCondensedPlayback": "Toggle condensed playback",
"toggleFastForwardPlayback": "Toggle fast forward playback",
Expand Down
1 change: 1 addition & 0 deletions common/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "Activar/Desactivar pista de subtítulos 3 en asbplayer",
"toggleAsbplayerSubtitleTracks": "Activar/Desactivar pista de subtítulos en asbplayer",
"toggleAsbplayerBlurTrack": "Activar/Desactivar desenfoque de la pista de subtítulos {{trackNumber}} en asbplayer",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "Activar/Desactivar pausado automático",
"toggleCondensedPlayback": "Activar/Desactivar reproducción condensada",
"toggleFastForwardPlayback": "Activar/Desactivar reproducción acelerada",
Expand Down
1 change: 1 addition & 0 deletions common/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "asbplayer の字幕トラック 3 オン/オフ",
"toggleAsbplayerSubtitleTracks": "asbplayer の字幕トラック オン/オフ",
"toggleAsbplayerBlurTrack": "asbplayer の字幕トラック {{trackNumber}} のぼかし オン/オフ",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "自動一時停止オン/オフ",
"toggleCondensedPlayback": "短縮プレイバック",
"toggleFastForwardPlayback": "早送りプレイバックオン/オフ",
Expand Down
1 change: 1 addition & 0 deletions common/locales/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "Przełącz ścieżkę napisów 3 w asbplayer",
"toggleAsbplayerSubtitleTracks": "Przełącz ścieżki napisów w asbplayer",
"toggleAsbplayerBlurTrack": "Przełącz rozmycie ścieżki napisów {{trackNumber}}",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "Przełącz automatyczną pauzę",
"toggleCondensedPlayback": "Przełącz odtwarzanie skondensowane",
"toggleFastForwardPlayback": "Przełącz tryb przyspieszonego odtwarzania",
Expand Down
3 changes: 2 additions & 1 deletion common/locales/pt_BR.json
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@
"toggleAsbplayerSubtitleTrack2": "Alternar a faixa de legenda 2 no asbplayer",
"toggleAsbplayerSubtitleTrack3": "Alternar a faixa de legenda 3 no asbplayer",
"toggleAsbplayerSubtitleTracks": "Alterne a faixa de legenda no asbplayer",
"toggleAsbplayerBlurTrack": "Toggle subtitle track {{trackNumber}} blur in asbplayer",
"toggleAsbplayerBlurTrack": "Alternar o desfoque da faixa de legendas {{trackNumber}} no asbplayer",
"unblurAsbplayerTrack": "Desfocar a faixa de legenda {{trackNumber}} no asbplayer",
"toggleAutoPause": "Alternar pausa automática",
"toggleCondensedPlayback": "Alternar reprodução condensada",
"toggleFastForwardPlayback": "Alternar reprodução de avanço rápido",
Expand Down
3 changes: 2 additions & 1 deletion common/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@
"toggleAsbplayerSubtitleTrack2": "Включить/выключить дорожку субтитров 2 в asbplayer",
"toggleAsbplayerSubtitleTrack3": "Включить/выключить дорожку субтитров 3 в asbplayer",
"toggleAsbplayerSubtitleTracks": "Включить/выключить дорожку субтитров в asbplayer",
"toggleAsbplayerBlurTrack": "Toggle subtitle track {{trackNumber}} blur in asbplayer",
"toggleAsbplayerBlurTrack": "Включить/выключить размытие дорожки субтитров {{trackNumber}} в asbplayer",
"unblurAsbplayerTrack": "Выключить размытие дорожки субтитров {{trackNumber}} в asbplayer",
"toggleAutoPause": "Включить/выключить автоматическую паузу",
"toggleCondensedPlayback": "Включить/выключить конденсированное воспроизведение",
"toggleFastForwardPlayback": "Включить/выключить ускоренное воспроизведение",
Expand Down
1 change: 1 addition & 0 deletions common/locales/zh_CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
"toggleAsbplayerSubtitleTrack3": "切换asbplayer中的字幕音轨3",
"toggleAsbplayerSubtitleTracks": "在asbplayer中切换字幕音轨",
"toggleAsbplayerBlurTrack": "Toggle subtitle track {{trackNumber}} blur in asbplayer",
"unblurAsbplayerTrack": "Unblur subtitle track {{trackNumber}} in asbplayer",
"toggleAutoPause": "切换自动暂停",
"toggleCondensedPlayback": "切换压缩播放",
"toggleFastForwardPlayback": "Toggle fast forward playback",
Expand Down
4 changes: 2 additions & 2 deletions common/settings/settings-import-export.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ it('validates exported settings', () => {
takeScreenshot: { keys: '⇧+⌃+V' },
toggleAsbplayerSubtitleTrack1: { keys: 'W+1' },
toggleAsbplayerSubtitleTrack2: { keys: 'W+2' },
toggleAsbplayerBlurTrack1: { keys: 'B+1' },
toggleAsbplayerBlurTrack2: { keys: 'B+2' },
unblurAsbplayerTrack1: { keys: 'B+1' },
unblurAsbplayerTrack2: { keys: 'B+2' },
toggleAutoPause: { keys: '⇧+P' },
toggleCondensedPlayback: { keys: '⇧+O' },
toggleFastForwardPlayback: { keys: '⇧+F' },
Expand Down
6 changes: 3 additions & 3 deletions common/settings/settings-import-export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,9 @@ const settingsSchema = {
toggleAsbplayerSubtitleTrack1: { $ref: '/KeyBind' },
toggleAsbplayerSubtitleTrack2: { $ref: '/KeyBind' },
toggleAsbplayerSubtitleTrack3: { $ref: '/KeyBind' },
toggleAsbplayerBlurTrack1: { $ref: '/KeyBind' },
toggleAsbplayerBlurTrack2: { $ref: '/KeyBind' },
toggleAsbplayerBlurTrack3: { $ref: '/KeyBind' },
unblurAsbplayerTrack1: { $ref: '/KeyBind' },
unblurAsbplayerTrack2: { $ref: '/KeyBind' },
unblurAsbplayerTrack3: { $ref: '/KeyBind' },
seekBackward: { $ref: '/KeyBind' },
seekForward: { $ref: '/KeyBind' },
seekToPreviousSubtitle: { $ref: '/KeyBind' },
Expand Down
6 changes: 3 additions & 3 deletions common/settings/settings-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ export const defaultSettings: AsbplayerSettings = {
toggleAsbplayerSubtitleTrack1: { keys: 'W+1' },
toggleAsbplayerSubtitleTrack2: { keys: 'W+2' },
toggleAsbplayerSubtitleTrack3: { keys: 'W+3' },
toggleAsbplayerBlurTrack1: { keys: 'B+1' },
toggleAsbplayerBlurTrack2: { keys: 'B+2' },
toggleAsbplayerBlurTrack3: { keys: 'B+3' },
unblurAsbplayerTrack1: { keys: 'B+1' },
unblurAsbplayerTrack2: { keys: 'B+2' },
unblurAsbplayerTrack3: { keys: 'B+3' },
seekBackward: { keys: 'A' },
seekForward: { keys: 'D' },
seekToPreviousSubtitle: { keys: 'left' },
Expand Down
6 changes: 3 additions & 3 deletions common/settings/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,9 @@ export interface KeyBindSet {
readonly toggleAsbplayerSubtitleTrack1: KeyBind;
readonly toggleAsbplayerSubtitleTrack2: KeyBind;
readonly toggleAsbplayerSubtitleTrack3: KeyBind;
readonly toggleAsbplayerBlurTrack1: KeyBind;
readonly toggleAsbplayerBlurTrack2: KeyBind;
readonly toggleAsbplayerBlurTrack3: KeyBind;
readonly unblurAsbplayerTrack1: KeyBind;
readonly unblurAsbplayerTrack2: KeyBind;
readonly unblurAsbplayerTrack3: KeyBind;
readonly seekBackward: KeyBind;
readonly seekForward: KeyBind;
readonly seekToPreviousSubtitle: KeyBind;
Expand Down
6 changes: 0 additions & 6 deletions common/src/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -275,12 +275,6 @@ export interface ToggleSubtitlesMessage extends Message {
readonly command: 'toggle-subtitles';
}

export interface BlurSubtitlesMessage extends Message {
readonly command: 'blur-subtitles';
readonly track: number;
readonly trackCount: number;
}

export interface ToggleSubtitlesInListFromVideoMessage extends Message {
readonly command: 'toggleSubtitleTrackInList';
readonly track: number;
Expand Down
2 changes: 0 additions & 2 deletions extension/src/background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ import CurrentTabHandler from './handlers/mobile-overlay/current-tab-handler';
import UpdateMobileOverlayModelHandler from './handlers/video/update-mobile-overlay-model-handler';
import { isMobile } from './services/device-detection';
import { enqueueUpdateAlert } from './services/update-alert';
import BlurSubtitlesHandler from './handlers/video/blur-subtitles-handler';

if (!isFirefoxBuild) {
chrome.storage.session.setAccessLevel({ accessLevel: 'TRUSTED_AND_UNTRUSTED_CONTEXTS' });
Expand Down Expand Up @@ -120,7 +119,6 @@ const handlers: CommandHandler[] = [
new StopRecordingMediaHandler(audioRecorder, imageCapturer, cardPublisher, settings),
new TakeScreenshotHandler(imageCapturer, cardPublisher),
new ToggleSubtitlesHandler(settings, tabRegistry),
new BlurSubtitlesHandler(settings, tabRegistry),
new SyncHandler(tabRegistry),
new HttpPostHandler(),
new ToggleSidePanelHandler(tabRegistry),
Expand Down
39 changes: 37 additions & 2 deletions extension/src/controllers/subtitle-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export default class SubtitleController {
private subtitleCollection: SubtitleCollection<SubtitleModelWithIndex>;
private subtitlesElementOverlay: ElementOverlay;
private notificationElementOverlay: ElementOverlay;
private unblurredSubtitleTracks: { [key: number]: boolean | undefined };
disabledSubtitleTracks: { [key: number]: boolean | undefined };
subtitleFileNames?: string[];
_forceHideSubtitles: boolean;
Expand Down Expand Up @@ -77,6 +78,7 @@ export default class SubtitleController {
this._subtitles = [];
this.subtitleCollection = new SubtitleCollection<SubtitleModelWithIndex>([]);
this.showingSubtitles = [];
this.unblurredSubtitleTracks = {};
this.disabledSubtitleTracks = {};
this._forceHideSubtitles = false;
this._displaySubtitles = true;
Expand Down Expand Up @@ -139,6 +141,7 @@ export default class SubtitleController {
setSubtitleSettings(newSubtitleSettings: SubtitleSettings) {
const styles = this._computeStyles(newSubtitleSettings);
const classes = this._computeClasses(newSubtitleSettings);
this.unblurredSubtitleTracks = {};

if (
this.subtitleStyles === undefined ||
Expand Down Expand Up @@ -340,6 +343,7 @@ export default class SubtitleController {
if ((!showOffset && !this._displaySubtitles) || this._forceHideSubtitles) {
this.subtitlesElementOverlay.hide();
} else if (subtitlesAreNew || shouldRenderOffset) {
this._resetUnblurState();
this._renderSubtitles(showingSubtitles);

if (showOffset) {
Expand All @@ -356,6 +360,22 @@ export default class SubtitleController {
this._setSubtitlesHtml(this._buildSubtitlesHtml(subtitles));
}

private _resetUnblurState() {
if (Object.keys(this.unblurredSubtitleTracks).length === 0) {
return;
}

for (const element of this.subtitlesElementOverlay.displayingElements()) {
const track = Number(element.dataset.track);

if (this.unblurredSubtitleTracks[track] === true) {
element.classList.add('asbplayer-subtitles-blurred');
}
}

this.unblurredSubtitleTracks = {};
}

private _autoCopyToClipboard(subtitles: SubtitleModel[]) {
if (this.autoCopyCurrentSubtitle && subtitles.length > 0 && document.hasFocus()) {
const text = subtitles
Expand Down Expand Up @@ -395,7 +415,9 @@ export default class SubtitleController {
const width = imageScale * subtitle.textImage.image.width;

return `
<div style="max-width:${width}px;margin:auto;" class="${className}"}">
<div data-track="${
subtitle.track ?? 0
}" style="max-width:${width}px;margin:auto;" class="${className}"}">
<img
style="width:100%;"
alt="subtitle"
Expand All @@ -413,7 +435,9 @@ export default class SubtitleController {
}

private _buildTextHtml(text: string, track?: number) {
return `<span class="${this._subtitleClasses(track)}" style="${this._subtitleStyles(track)}">${text}</span>`;
return `<span data-track="${track ?? 0}" class="${this._subtitleClasses(track)}" style="${this._subtitleStyles(
track
)}">${text}</span>`;
}

unbind() {
Expand Down Expand Up @@ -474,6 +498,17 @@ export default class SubtitleController {
];
}

unblur(track: number) {
for (const element of this.subtitlesElementOverlay.displayingElements()) {
const elementTrack = Number(element.dataset.track);

if (track === elementTrack && element.classList.contains('asbplayer-subtitles-blurred')) {
this.unblurredSubtitleTracks[track] = true;
element.classList.remove('asbplayer-subtitles-blurred');
}
}
}

offset(offset: number, skipNotifyPlayer = false) {
if (!this.subtitles || this.subtitles.length === 0) {
return;
Expand Down
59 changes: 0 additions & 59 deletions extension/src/handlers/video/blur-subtitles-handler.ts

This file was deleted.

Loading

0 comments on commit 5ddeac8

Please sign in to comment.