add custom configs for mpv, enabled by default, switchable in settings
This commit is contained in:
parent
c79146b2ee
commit
725ca569bc
15 changed files with 510 additions and 35 deletions
|
@ -18,6 +18,9 @@
|
||||||
<file>sounds/fanfare2.wav</file>
|
<file>sounds/fanfare2.wav</file>
|
||||||
<file>sounds/goodresult.wav</file>
|
<file>sounds/goodresult.wav</file>
|
||||||
|
|
||||||
|
<file>scripts/mpv/mpv.conf</file>
|
||||||
|
<file>scripts/mpv/input.conf</file>
|
||||||
|
|
||||||
<file>scripts/adblock/adblock-server.js</file>
|
<file>scripts/adblock/adblock-server.js</file>
|
||||||
<file>scripts/readability/readabilize-article.js</file>
|
<file>scripts/readability/readabilize-article.js</file>
|
||||||
|
|
||||||
|
|
431
resources/scripts/mpv/input.conf
Normal file
431
resources/scripts/mpv/input.conf
Normal file
|
@ -0,0 +1,431 @@
|
||||||
|
# Mouse
|
||||||
|
MOUSE_BTN0 ignore
|
||||||
|
MOUSE_BTN0_DBL cycle fullscreen
|
||||||
|
MOUSE_BTN2 cycle pause
|
||||||
|
#MOUSE_BTN3 ignore
|
||||||
|
#MOUSE_BTN4 ignore
|
||||||
|
#MOUSE_BTN5 ignore
|
||||||
|
#MOUSE_BTN6 ignore
|
||||||
|
|
||||||
|
# Trackpad
|
||||||
|
AXIS_UP ignore
|
||||||
|
AXIS_DOWN ignore
|
||||||
|
AXIS_LEFT ignore
|
||||||
|
AXIS_RIGHT ignore
|
||||||
|
|
||||||
|
# Arrow/navigation keys
|
||||||
|
RIGHT osd-msg-bar seek +5 relative+keyframes
|
||||||
|
LEFT osd-msg-bar seek -5 relative+keyframes
|
||||||
|
SHIFT+RIGHT osd-msg-bar seek +1 relative+exact
|
||||||
|
SHIFT+LEFT osd-msg-bar seek -1 relative+exact
|
||||||
|
CTRL+RIGHT frame-step ; show-text "Frame: ${estimated-frame-number} / ${estimated-frame-count}"
|
||||||
|
CTRL+LEFT frame-back-step ; show-text "Frame: ${estimated-frame-number} / ${estimated-frame-count}"
|
||||||
|
|
||||||
|
UP osd-msg-bar seek +30 relative+keyframes
|
||||||
|
DOWN osd-msg-bar seek -30 relative+keyframes
|
||||||
|
SHIFT+UP osd-msg-bar seek +120 relative+keyframes
|
||||||
|
SHIFT+DOWN osd-msg-bar seek -120 relative+keyframes
|
||||||
|
|
||||||
|
PGUP osd-msg-bar seek +600 relative+keyframes
|
||||||
|
PGDWN osd-msg-bar seek -600 relative+keyframes
|
||||||
|
|
||||||
|
SHIFT+PGUP osd-msg-bar seek +1200 relative+keyframes
|
||||||
|
SHIFT+PGDWN osd-msg-bar seek +1200 relative+keyframes
|
||||||
|
|
||||||
|
ALT+RIGHT sub-seek +1 ; show-text "Sub Seek +1"
|
||||||
|
ALT+LEFT sub-seek -1 ; show-text "Sub Seek -1"
|
||||||
|
|
||||||
|
#ALT+RIGHT add video-pan-x -0.01
|
||||||
|
#ALT+LEFT add video-pan-x +0.01
|
||||||
|
#ALT+UP add video-pan-y +0.01
|
||||||
|
#ALT+DOWN add video-pan-y -0.01
|
||||||
|
|
||||||
|
#META+RIGHT add video-zoom +0.05
|
||||||
|
#META+LEFT add video-zoom -0.05
|
||||||
|
#META+UP add video-zoom +0.05
|
||||||
|
#META+DOWN add video-zoom -0.05
|
||||||
|
|
||||||
|
# ` [1] [2] [3] [4] [5] [6] [7] [8] [9] [0] - =
|
||||||
|
# ~ [!] @ # $ % ^ & * ( ) _ +
|
||||||
|
|
||||||
|
1 add contrast -1 ; show-text "ContrastT: ${contrast}"
|
||||||
|
2 add contrast +1 ; show-text "ContrastT: ${contrast}"
|
||||||
|
3 add brightness -1 ; show-text "Brightness: ${brightness}"
|
||||||
|
4 add brightness +1 ; show-text "Brightness: ${brightness}"
|
||||||
|
5 add gamma -1 ; show-text "Gamma: ${gamma}"
|
||||||
|
6 add gamma +1 ; show-text "Gamma: ${gamma}"
|
||||||
|
7 add saturation -1 ; show-text "Saturation: ${saturation}"
|
||||||
|
8 add saturation +1 ; show-text "Saturation: ${saturation}"
|
||||||
|
|
||||||
|
9 add volume -2 ; show-text "Volume: ${volume}"
|
||||||
|
0 add volume +2 ; show-text "Volume: ${volume}"
|
||||||
|
|
||||||
|
! cycle ontop
|
||||||
|
|
||||||
|
` ignore
|
||||||
|
~ ignore
|
||||||
|
# ignore
|
||||||
|
$ ignore
|
||||||
|
% ignore
|
||||||
|
^ ignore
|
||||||
|
& ignore
|
||||||
|
* ignore
|
||||||
|
§ ignore
|
||||||
|
± ignore
|
||||||
|
|
||||||
|
# [q] [w] [e] [r] [t] [y] [u] [i] [o] [p] [ ]
|
||||||
|
# [Q] [W] E R [T] [Y] [U] [I] O [P] { }
|
||||||
|
|
||||||
|
Q quit
|
||||||
|
# q script-binding auto_save_state/quit-watch-later-conditional
|
||||||
|
|
||||||
|
w script-message osc-playlist
|
||||||
|
W playlist-shuffle
|
||||||
|
e playlist-prev ; show-text "${playlist-pos-1}/${playlist-count}"
|
||||||
|
E ignore
|
||||||
|
|
||||||
|
r playlist-next ; show-text "${playlist-pos-1}/${playlist-count}"
|
||||||
|
R ignore
|
||||||
|
|
||||||
|
t cycle-values sub-use-margins "yes" "no"
|
||||||
|
T cycle-values ass-force-margins "yes" "no" # does not work with :blend-subtitles
|
||||||
|
CTRL+t cycle-values blend-subtitles "yes" "video" "no"
|
||||||
|
|
||||||
|
y cycle-values stretch-image-subs-to-screen "yes" "no"
|
||||||
|
Y cycle-values stretch-dvd-subs "yes" "no"
|
||||||
|
|
||||||
|
u cycle-values hwdec "auto" "no"
|
||||||
|
U cycle-values vf "format=colorlevels=full" "format=colorlevels=auto" "format=colorlevels=limited"
|
||||||
|
|
||||||
|
i script-binding stats/display-stats
|
||||||
|
I script-binding stats/display-stats-toggle
|
||||||
|
o cycle-values osd-level 3 1
|
||||||
|
O ignore
|
||||||
|
p cycle-values video-rotate 90 180 270 0
|
||||||
|
P cycle-values video-aspect "16:9" "4:3" "2.35:1" "16:10"
|
||||||
|
|
||||||
|
[ ignore
|
||||||
|
] ignore
|
||||||
|
{ ignore
|
||||||
|
} ignore
|
||||||
|
|
||||||
|
# [a] [s] [d] [f] [g] [h] [j] [k] [l]
|
||||||
|
# [A] [S] [D] [F] [G] [H] [J] [K] [L]
|
||||||
|
|
||||||
|
a cycle audio # switch audio streams
|
||||||
|
A cycle-values af "lavfi=[dynaudnorm=f=200:g=5:r=0.1]" "" # dynamic range compression
|
||||||
|
CTRL+a script-binding auto_audio_device/toggle-switching # toggle automatic audio device switching
|
||||||
|
|
||||||
|
s cycle sub # cycle through subtitles
|
||||||
|
S cycle sub-visibility
|
||||||
|
CTRL+s cycle secondary-sid
|
||||||
|
|
||||||
|
d cycle-values window-scale "1.5" "2.0" "3.0" "0.5" "1.0" ; show-text "Scale: ${window-scale}"
|
||||||
|
D cycle edition
|
||||||
|
CTRL+d cycle video
|
||||||
|
|
||||||
|
f cycle fullscreen ; show-text "Scale: ${window-scale}"
|
||||||
|
F vf clr "" ; show-text "Filters cleared"
|
||||||
|
|
||||||
|
g cycle-values video-sync display-resample audio ; cycle-values interpolation yes no ; show-text "Interpolation: ${interpolation} (${tscale})"
|
||||||
|
G cycle-values tscale "linear" "catmull_rom" "mitchell" "bicubic" "oversample" ; show-text "Interpolation: ${interpolation} (${tscale})"
|
||||||
|
CTRL+g cycle-values interpolation no yes ; show-text "Interpolation: ${interpolation} (${tscale})"
|
||||||
|
|
||||||
|
h cycle deinterlace
|
||||||
|
H script-binding autodeint
|
||||||
|
|
||||||
|
j cycle deband
|
||||||
|
J vf toggle "lavfi=[hqdn3d=2.0]"
|
||||||
|
|
||||||
|
K ignore
|
||||||
|
|
||||||
|
l cycle-values loop-file yes no ; show-text "${?=loop-file==inf:Looping enabled (file)}${?=loop-file==no:Looping disabled (file)}"
|
||||||
|
L cycle-values loop-playlist yes no ; show-text "${?=loop-playlist==inf:Looping enabled}${?=loop-playlist==no:Looping disabled}"
|
||||||
|
CTRL+l ab-loop
|
||||||
|
|
||||||
|
# [z] [x] [c] [v] [b] [n] [m] [,] [.]
|
||||||
|
# [Z] X C V [B] [N] [M] [<] [>]
|
||||||
|
|
||||||
|
x script-message osc-chapterlist
|
||||||
|
X ignore
|
||||||
|
c script-message osc-playlist
|
||||||
|
C ignore
|
||||||
|
v script-message osc-tracklist
|
||||||
|
V ignore
|
||||||
|
|
||||||
|
b add speed +0.05
|
||||||
|
B add speed -0.05
|
||||||
|
CTRL+b set speed 1.0
|
||||||
|
|
||||||
|
n add audio-delay +0.10
|
||||||
|
N add audio-delay -0.10
|
||||||
|
CTRL+n set audio-delay 0
|
||||||
|
|
||||||
|
m add sub-delay +0.10
|
||||||
|
M add sub-delay -0.10
|
||||||
|
CTRL+m set sub-delay 0
|
||||||
|
|
||||||
|
, add sub-scale -0.05 # decrease subtitle font size
|
||||||
|
< add sub-scale +0.05 # increase subtitle font size
|
||||||
|
. add sub-pos -1 # move subtitles up
|
||||||
|
> add sub-pos +1 # move subtitles down
|
||||||
|
|
||||||
|
# Adjust timing so that next/prev subtitle is displayed now
|
||||||
|
/ sub-step +1 ; show-text "Sub Step +1 (timing adjustment)"
|
||||||
|
? sub-step -1 ; show-text "Sub Step -1 (timing adjustment)"
|
||||||
|
|
||||||
|
# [esc] [space] [backspace]
|
||||||
|
# [tab] [enter]
|
||||||
|
|
||||||
|
ESC cycle fullscreen
|
||||||
|
SPACE cycle pause
|
||||||
|
IDEOGRAPHIC_SPACE cycle pause
|
||||||
|
TAB cycle mute
|
||||||
|
ENTER show-progress
|
||||||
|
|
||||||
|
BS revert-seek
|
||||||
|
SHIFT+BS set speed 1.0 ; set gamma 0 ; set brightness 0 ; set contrast 0 ; set saturation 0 ; set hue 0 ; show-text "Speed/Gamma/Brightness/Contrast/Saturation/Hue resetted"
|
||||||
|
ALT+BS set video-pan-x 0 ; set video-pan-y 0 ; show-text "Pan resetted"
|
||||||
|
META+BS set video-zoom 0 ; show-text "Zoom resetted"
|
||||||
|
|
||||||
|
# [F1] F2 F3 F4 F5 F6 F7 [F8] [F9] [F10] [F11] [F12]
|
||||||
|
|
||||||
|
F1 script-binding console/enable
|
||||||
|
F8 vf toggle "interpolation=yes,tscale=oversample" ; show-text "Toggled Realtime Motion Interpolation (native) [interpolation=yes,tscale=oversample]" # Soap-opera effect for frame smoothing
|
||||||
|
F9 apply-profile "upscale-lowres-using-GPU-shaders" ; show-text "Applied GPU upscaler shaders"
|
||||||
|
F10 cycle-values speed 0.8 0.6 0.4 0.2 1 # Slow speed
|
||||||
|
F11 cycle-values speed 1.2 1.4 1.6 1.8 2 1 # Faster speed
|
||||||
|
F12 af toggle "lavfi=[loudnorm=I=-22:TP=-1.5:LRA=2]" # Useful audio normalization for low-audio or whispering scenes (can cause annoying background noise amplification)
|
||||||
|
|
||||||
|
# Numpad
|
||||||
|
|
||||||
|
KP0 ignore
|
||||||
|
KP1 ignore
|
||||||
|
KP2 ignore
|
||||||
|
KP3 ignore
|
||||||
|
KP4 ignore
|
||||||
|
KP5 ignore
|
||||||
|
KP6 ignore
|
||||||
|
KP7 ignore
|
||||||
|
KP8 ignore
|
||||||
|
KP9 ignore
|
||||||
|
KP_DEC ignore
|
||||||
|
KP_ENTER ignore
|
||||||
|
|
||||||
|
# Testing at 2023-11-21 09:19:09PM
|
||||||
|
|
||||||
|
# Show Loaded Shaders (for dev testing)
|
||||||
|
` script-binding sview/shader-view
|
||||||
|
|
||||||
|
# Show progress bar on MOUSE BUTTON 2 double-click
|
||||||
|
# MOUSE_BTN2_DBL show-progress
|
||||||
|
|
||||||
|
# Seek using mouse wheel
|
||||||
|
# Quieter alternative for video playback seeking
|
||||||
|
# (Mechanical keyboard are common these days so this can mindful of other people
|
||||||
|
# living in the same house)
|
||||||
|
SHIFT+WHEEL_UP osd-msg-bar seek +120 relative+keyframes
|
||||||
|
SHIFT+WHEEL_DOWN osd-msg-bar seek -120 relative+keyframes
|
||||||
|
ALT+WHEEL_UP osd-msg-bar seek +30 relative+keyframes
|
||||||
|
ALT+WHEEL_DOWN osd-msg-bar seek -30 relative+keyframes
|
||||||
|
WHEEL_UP osd-msg-bar seek +1 relative+keyframes
|
||||||
|
WHEEL_DOWN osd-msg-bar seek -1 relative+keyframes
|
||||||
|
CTRL+WHEEL_UP frame-step
|
||||||
|
CTRL+WHEEL_DOWN frame-back-step
|
||||||
|
|
||||||
|
# Seek using numbers
|
||||||
|
CTRL+1 osd-msg-bar seek -1 relative+exact
|
||||||
|
ALT+1 osd-msg-bar seek +1 relative+exact
|
||||||
|
CTRL+2 osd-msg-bar seek -2 relative+keyframes
|
||||||
|
ALT+2 osd-msg-bar seek +2 relative+keyframes
|
||||||
|
CTRL+3 osd-msg-bar seek -3 relative+keyframes
|
||||||
|
ALT+3 osd-msg-bar seek +3 relative+keyframes
|
||||||
|
CTRL+4 osd-msg-bar seek -4 relative+keyframes
|
||||||
|
ALT+4 osd-msg-bar seek +4 relative+keyframes
|
||||||
|
CTRL+5 osd-msg-bar seek -5 relative+keyframes
|
||||||
|
ALT+5 osd-msg-bar seek +5 relative+keyframes
|
||||||
|
CTRL+6 osd-msg-bar seek -6 relative+keyframes
|
||||||
|
ALT+6 osd-msg-bar seek +6 relative+keyframes
|
||||||
|
|
||||||
|
|
||||||
|
# mpv keybindings
|
||||||
|
#
|
||||||
|
# Location of user-defined bindings: ~/.config/mpv/input.conf
|
||||||
|
#
|
||||||
|
# Lines starting with # are comments. Use SHARP to assign the # key.
|
||||||
|
# Copy this file and uncomment and edit the bindings you want to change.
|
||||||
|
#
|
||||||
|
# List of commands and further details: DOCS/man/input.rst
|
||||||
|
# List of special keys: --input-keylist
|
||||||
|
# Keybindings testing mode: mpv --input-test --force-window --idle
|
||||||
|
#
|
||||||
|
# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore').
|
||||||
|
#
|
||||||
|
# Strings need to be quoted and escaped:
|
||||||
|
# KEY show-text "This is a single backslash: \\ and a quote: \" !"
|
||||||
|
#
|
||||||
|
# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with
|
||||||
|
# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal).
|
||||||
|
#
|
||||||
|
# The default keybindings are hardcoded into the mpv binary.
|
||||||
|
# You can disable them completely with: --no-input-default-bindings
|
||||||
|
|
||||||
|
# Developer note:
|
||||||
|
# On compilation, this file is baked into the mpv binary, and all lines are
|
||||||
|
# uncommented (unless '#' is followed by a space) - thus this file defines the
|
||||||
|
# default key bindings.
|
||||||
|
|
||||||
|
# If this is enabled, treat all the following bindings as default.
|
||||||
|
#default-bindings start
|
||||||
|
|
||||||
|
#MBTN_LEFT ignore # don't do anything
|
||||||
|
#MBTN_LEFT_DBL cycle fullscreen # toggle fullscreen
|
||||||
|
#MBTN_RIGHT cycle pause # toggle pause/playback mode
|
||||||
|
#MBTN_BACK playlist-prev # skip to the previous file
|
||||||
|
#MBTN_FORWARD playlist-next # skip to the next file
|
||||||
|
|
||||||
|
# Mouse wheels, touchpad or other input devices that have axes
|
||||||
|
# if the input devices supports precise scrolling it will also scale the
|
||||||
|
# numeric value accordingly
|
||||||
|
#WHEEL_UP add volume 2
|
||||||
|
#WHEEL_DOWN add volume -2
|
||||||
|
#WHEEL_LEFT seek -10 # seek 10 seconds backward
|
||||||
|
#WHEEL_RIGHT seek 10 # seek 10 seconds forward
|
||||||
|
|
||||||
|
## Seek units are in seconds, but note that these are limited by keyframes
|
||||||
|
#RIGHT seek 5 # seek 5 seconds forward
|
||||||
|
#LEFT seek -5 # seek 5 seconds backward
|
||||||
|
#UP seek 60 # seek 1 minute forward
|
||||||
|
#DOWN seek -60 # seek 1 minute backward
|
||||||
|
# Do smaller, always exact (non-keyframe-limited), seeks with shift.
|
||||||
|
# Don't show them on the OSD (no-osd).
|
||||||
|
#Shift+RIGHT no-osd seek 1 exact # seek exactly 1 second forward
|
||||||
|
#Shift+LEFT no-osd seek -1 exact # seek exactly 1 second backward
|
||||||
|
#Shift+UP no-osd seek 5 exact # seek exactly 5 seconds forward
|
||||||
|
#Shift+DOWN no-osd seek -5 exact # seek exactly 5 seconds backward
|
||||||
|
#Ctrl+LEFT no-osd sub-seek -1 # seek to the previous subtitle
|
||||||
|
#Ctrl+RIGHT no-osd sub-seek 1 # seek to the next subtitle
|
||||||
|
#Ctrl+Shift+LEFT sub-step -1 # change subtitle timing such that the previous subtitle is displayed
|
||||||
|
#Ctrl+Shift+RIGHT sub-step 1 # change subtitle timing such that the next subtitle is displayed
|
||||||
|
#Alt+left add video-pan-x 0.1 # move the video right
|
||||||
|
#Alt+right add video-pan-x -0.1 # move the video left
|
||||||
|
#Alt+up add video-pan-y 0.1 # move the video down
|
||||||
|
#Alt+down add video-pan-y -0.1 # move the video up
|
||||||
|
#Alt++ add video-zoom 0.1 # zoom in
|
||||||
|
#ZOOMIN add video-zoom 0.1 # zoom in
|
||||||
|
#Alt+- add video-zoom -0.1 # zoom out
|
||||||
|
#ZOOMOUT add video-zoom -0.1 # zoom out
|
||||||
|
#Alt+BS set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # reset zoom and pan settings
|
||||||
|
#PGUP add chapter 1 # seek to the next chapter
|
||||||
|
#PGDWN add chapter -1 # seek to the previous chapter
|
||||||
|
#Shift+PGUP seek 600 # seek 10 minutes forward
|
||||||
|
#Shift+PGDWN seek -600 # seek 10 minutes backward
|
||||||
|
#[ multiply speed 1/1.1 # decrease the playback speed
|
||||||
|
#] multiply speed 1.1 # increase the playback speed
|
||||||
|
#{ multiply speed 0.5 # halve the playback speed
|
||||||
|
#} multiply speed 2.0 # double the playback speed
|
||||||
|
#BS set speed 1.0 # reset the speed to normal
|
||||||
|
#Shift+BS revert-seek # undo the previous (or marked) seek
|
||||||
|
#Shift+Ctrl+BS revert-seek mark # mark the position for revert-seek
|
||||||
|
#q quit
|
||||||
|
#Q quit-watch-later # exit and remember the playback position
|
||||||
|
#q {encode} quit 4
|
||||||
|
#ESC set fullscreen no # leave fullscreen
|
||||||
|
#ESC {encode} quit 4
|
||||||
|
#p cycle pause # toggle pause/playback mode
|
||||||
|
#. frame-step # advance one frame and pause
|
||||||
|
#, frame-back-step # go back by one frame and pause
|
||||||
|
#SPACE cycle pause # toggle pause/playback mode
|
||||||
|
#> playlist-next # skip to the next file
|
||||||
|
#ENTER playlist-next # skip to the next file
|
||||||
|
#< playlist-prev # skip to the previous file
|
||||||
|
#O no-osd cycle-values osd-level 3 1 # toggle displaying the OSD on user interaction or always
|
||||||
|
#o show-progress # show playback progress
|
||||||
|
#P show-progress # show playback progress
|
||||||
|
#i script-binding stats/display-stats # display information and statistics
|
||||||
|
#I script-binding stats/display-stats-toggle # toggle displaying information and statistics
|
||||||
|
#` script-binding console/enable # open the console
|
||||||
|
#z add sub-delay -0.1 # shift subtitles 100 ms earlier
|
||||||
|
#Z add sub-delay +0.1 # delay subtitles by 100 ms
|
||||||
|
#x add sub-delay +0.1 # delay subtitles by 100 ms
|
||||||
|
#ctrl++ add audio-delay 0.100 # change audio/video sync by delaying the audio
|
||||||
|
#ctrl+- add audio-delay -0.100 # change audio/video sync by shifting the audio earlier
|
||||||
|
#Shift+g add sub-scale +0.1 # increase the subtitle font size
|
||||||
|
#Shift+f add sub-scale -0.1 # decrease the subtitle font size
|
||||||
|
#9 add volume -2
|
||||||
|
#/ add volume -2
|
||||||
|
#0 add volume 2
|
||||||
|
#* add volume 2
|
||||||
|
#m cycle mute # toggle mute
|
||||||
|
#1 add contrast -1
|
||||||
|
#2 add contrast 1
|
||||||
|
#3 add brightness -1
|
||||||
|
#4 add brightness 1
|
||||||
|
#5 add gamma -1
|
||||||
|
#6 add gamma 1
|
||||||
|
#7 add saturation -1
|
||||||
|
#8 add saturation 1
|
||||||
|
#Alt+0 set current-window-scale 0.5 # halve the window size
|
||||||
|
#Alt+1 set current-window-scale 1.0 # reset the window size
|
||||||
|
#Alt+2 set current-window-scale 2.0 # double the window size
|
||||||
|
#d cycle deinterlace # toggle the deinterlacing filter
|
||||||
|
#r add sub-pos -1 # move subtitles up
|
||||||
|
#R add sub-pos +1 # move subtitles down
|
||||||
|
#t add sub-pos +1 # move subtitles down
|
||||||
|
#v cycle sub-visibility # hide or show the subtitles
|
||||||
|
#Alt+v cycle secondary-sub-visibility # hide or show the secondary subtitles
|
||||||
|
#V cycle sub-ass-vsfilter-aspect-compat # toggle stretching SSA/ASS subtitles with anamorphic videos to match the historical renderer
|
||||||
|
#u cycle-values sub-ass-override "force" "yes" # toggle overriding SSA/ASS subtitle styles with the normal styles
|
||||||
|
#j cycle sub # switch subtitle track
|
||||||
|
#J cycle sub down # switch subtitle track backwards
|
||||||
|
#SHARP cycle audio # switch audio track
|
||||||
|
#_ cycle video # switch video track
|
||||||
|
#T cycle ontop # toggle placing the video on top of other windows
|
||||||
|
#f cycle fullscreen # toggle fullscreen
|
||||||
|
#s screenshot # take a screenshot of the video in its original resolution with subtitles
|
||||||
|
#S screenshot video # take a screenshot of the video in its original resolution without subtitles
|
||||||
|
#Ctrl+s screenshot window # take a screenshot of the window with OSD and subtitles
|
||||||
|
#Alt+s screenshot each-frame # automatically screenshot every frame; issue this command again to stop taking screenshots
|
||||||
|
#w add panscan -0.1 # decrease panscan
|
||||||
|
#W add panscan +0.1 # shrink black bars by cropping the video
|
||||||
|
#e add panscan +0.1 # shrink black bars by cropping the video
|
||||||
|
#A cycle-values video-aspect-override "16:9" "4:3" "2.35:1" "-1" # cycle the video aspect ratio ("-1" is the container aspect)
|
||||||
|
#POWER quit
|
||||||
|
#PLAY cycle pause # toggle pause/playback mode
|
||||||
|
#PAUSE cycle pause # toggle pause/playback mode
|
||||||
|
#PLAYPAUSE cycle pause # toggle pause/playback mode
|
||||||
|
#PLAYONLY set pause no # unpause
|
||||||
|
#PAUSEONLY set pause yes # pause
|
||||||
|
#STOP quit
|
||||||
|
#FORWARD seek 60 # seek 1 minute forward
|
||||||
|
#REWIND seek -60 # seek 1 minute backward
|
||||||
|
#NEXT playlist-next # skip to the next file
|
||||||
|
#PREV playlist-prev # skip to the previous file
|
||||||
|
#VOLUME_UP add volume 2
|
||||||
|
#VOLUME_DOWN add volume -2
|
||||||
|
#MUTE cycle mute # toggle mute
|
||||||
|
#CLOSE_WIN quit
|
||||||
|
#CLOSE_WIN {encode} quit 4
|
||||||
|
#ctrl+w quit
|
||||||
|
#E cycle edition # switch edition
|
||||||
|
#l ab-loop # set/clear A-B loop points
|
||||||
|
#L cycle-values loop-file "inf" "no" # toggle infinite looping
|
||||||
|
#ctrl+c quit 4
|
||||||
|
#DEL script-binding osc/visibility # cycle OSC visibility between never, auto (mouse-move) and always
|
||||||
|
#ctrl+h cycle-values hwdec "auto-safe" "no" # toggle hardware decoding
|
||||||
|
#F8 show-text ${playlist} # show the playlist
|
||||||
|
#F9 show-text ${track-list} # show the list of video, audio and sub tracks
|
||||||
|
|
||||||
|
#
|
||||||
|
# Legacy bindings (may or may not be removed in the future)
|
||||||
|
#
|
||||||
|
#! add chapter -1 # seek to the previous chapter
|
||||||
|
#@ add chapter 1 # seek to the next chapter
|
||||||
|
|
||||||
|
#
|
||||||
|
# Not assigned by default
|
||||||
|
# (not an exhaustive list of unbound commands)
|
||||||
|
#
|
||||||
|
|
||||||
|
# ? cycle sub-forced-events-only # display only DVD/PGS forced subtitle events
|
||||||
|
# ? stop # stop playback (quit or enter idle mode)
|
3
resources/scripts/mpv/mpv.conf
Normal file
3
resources/scripts/mpv/mpv.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
volume=50
|
||||||
|
osd-color=1.0/0.5/0.25
|
||||||
|
hwdec=auto-safe
|
|
@ -9,7 +9,7 @@
|
||||||
MessageFilter::MessageFilter(int id, QObject* parent) : QObject(parent), m_id(id) {}
|
MessageFilter::MessageFilter(int id, QObject* parent) : QObject(parent), m_id(id) {}
|
||||||
|
|
||||||
MessageObject::FilteringAction MessageFilter::filterMessage(QJSEngine* engine) {
|
MessageObject::FilteringAction MessageFilter::filterMessage(QJSEngine* engine) {
|
||||||
QJSValue filter_func = engine->evaluate(qApp->replaceDataUserDataFolderPlaceholder(m_script));
|
QJSValue filter_func = engine->evaluate(qApp->replaceUserDataFolderPlaceholder(m_script));
|
||||||
|
|
||||||
if (filter_func.isError()) {
|
if (filter_func.isError()) {
|
||||||
QJSValue::ErrorType error = filter_func.errorType();
|
QJSValue::ErrorType error = filter_func.errorType();
|
||||||
|
|
|
@ -155,7 +155,6 @@ void FormSettings::addSettingsPanel(SettingsPanel* panel) {
|
||||||
itm->setText(panel->title());
|
itm->setText(panel->title());
|
||||||
itm->setIcon(panel->icon());
|
itm->setIcon(panel->icon());
|
||||||
|
|
||||||
// m_ui.m_listSettings->addItem(itm);
|
|
||||||
m_panels.append(panel);
|
m_panels.append(panel);
|
||||||
|
|
||||||
QScrollArea* scr = new QScrollArea(m_ui.m_stackedSettings);
|
QScrollArea* scr = new QScrollArea(m_ui.m_stackedSettings);
|
||||||
|
|
|
@ -6,11 +6,13 @@
|
||||||
#include "definitions/definitions.h"
|
#include "definitions/definitions.h"
|
||||||
#include "gui/mediaplayer/libmpv/qthelper.h"
|
#include "gui/mediaplayer/libmpv/qthelper.h"
|
||||||
#include "miscellaneous/settings.h"
|
#include "miscellaneous/settings.h"
|
||||||
|
#include "miscellaneous/textfactory.h"
|
||||||
|
|
||||||
#include <clocale>
|
#include <clocale>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
|
@ -28,6 +30,9 @@
|
||||||
#define EVENT_CODE_IDLE 11
|
#define EVENT_CODE_IDLE 11
|
||||||
#define EVENT_CODE_STOP 12
|
#define EVENT_CODE_STOP 12
|
||||||
|
|
||||||
|
#define CONFIG_MAIN_NAME "mpv.conf"
|
||||||
|
#define CONFIG_INPUT_NAME "input.conf"
|
||||||
|
|
||||||
static void wakeup(void* ctx) {
|
static void wakeup(void* ctx) {
|
||||||
// This callback is invoked from any mpv thread (but possibly also
|
// This callback is invoked from any mpv thread (but possibly also
|
||||||
// recursively from a thread that is calling the mpv API). Just notify
|
// recursively from a thread that is calling the mpv API). Just notify
|
||||||
|
@ -70,34 +75,35 @@ LibMpvBackend::LibMpvBackend(Application* app, QWidget* parent)
|
||||||
|
|
||||||
mpv_set_option(m_mpvHandle, "wid", MPV_FORMAT_INT64, &wid);
|
mpv_set_option(m_mpvHandle, "wid", MPV_FORMAT_INT64, &wid);
|
||||||
|
|
||||||
mpv_set_option_string(m_mpvHandle, "input-default-bindings", "yes");
|
|
||||||
mpv_set_option_string(m_mpvHandle, "msg-level", "all=v");
|
mpv_set_option_string(m_mpvHandle, "msg-level", "all=v");
|
||||||
mpv_set_option_string(m_mpvHandle, "config", "yes");
|
mpv_set_option_string(m_mpvHandle, "config", "yes");
|
||||||
mpv_set_option_string(m_mpvHandle, "hwdec", "auto");
|
mpv_set_option_string(m_mpvHandle, "hwdec", "auto");
|
||||||
mpv_set_option_string(m_mpvHandle, "osd-playing-msg", "${media-title}");
|
mpv_set_option_string(m_mpvHandle, "osd-playing-msg", "${media-title}");
|
||||||
mpv_set_option_string(m_mpvHandle, "osc", "yes");
|
mpv_set_option_string(m_mpvHandle, "osc", "yes");
|
||||||
mpv_set_option_string(m_mpvHandle, "input-cursor", "yes");
|
mpv_set_option_string(m_mpvHandle, "input-cursor", "yes");
|
||||||
// mpv_set_option_string(m_mpvHandle, "keep-open", "no");
|
|
||||||
mpv_set_option_string(m_mpvHandle, "idle", "yes");
|
mpv_set_option_string(m_mpvHandle, "idle", "yes");
|
||||||
mpv_set_option_string(m_mpvHandle, "save-position-on-quit", "no");
|
mpv_set_option_string(m_mpvHandle, "save-position-on-quit", "no");
|
||||||
mpv_set_option_string(m_mpvHandle, "no-resume-playback", "yes");
|
mpv_set_option_string(m_mpvHandle, "no-resume-playback", "yes");
|
||||||
|
|
||||||
#if !defined(NDEBUG)
|
//
|
||||||
mpv_set_option_string(m_mpvHandle, "terminal", "yes");
|
// NOTE: Just random options for testing here.
|
||||||
#endif
|
//
|
||||||
|
// mpv_set_option_string(m_mpvHandle, "keep-open", "no");
|
||||||
|
// mpv_set_option_string(m_mpvHandle, "terminal", "yes");
|
||||||
// mpv_set_option_string(m_mpvHandle, "osd-italic", "yes");
|
// mpv_set_option_string(m_mpvHandle, "osd-italic", "yes");
|
||||||
// mpv_set_option_string(m_mpvHandle, "osd-color", "1.0/0.0/0.0");
|
// mpv_set_option_string(m_mpvHandle, "osd-color", "1.0/0.0/0.0");
|
||||||
|
|
||||||
//
|
|
||||||
// mpv_set_option_string(m_mpvHandle, "watch-later-dir", "mpv");
|
// mpv_set_option_string(m_mpvHandle, "watch-later-dir", "mpv");
|
||||||
mpv_set_option_string(m_mpvHandle, "config-dir", "mpv");
|
|
||||||
// mpv_set_option_string(m_mpvHandle, "input-builtin-bindings", "no");
|
// mpv_set_option_string(m_mpvHandle, "input-builtin-bindings", "no");
|
||||||
// mpv_set_option_string(m_mpvHandle, "input-test", "yes");
|
// mpv_set_option_string(m_mpvHandle, "input-test", "yes");
|
||||||
|
|
||||||
// Enable keyboard input on the X11 window. For the messy details, see
|
if (!m_customConfigFolder.isEmpty()) {
|
||||||
// --input-vo-keyboard on the manpage.
|
QByteArray cfg_folder = QDir::toNativeSeparators(m_customConfigFolder).toLocal8Bit();
|
||||||
// mpv_set_option_string(mpv, "input-vo-keyboard", "yes");
|
|
||||||
|
mpv_set_option_string(m_mpvHandle, "config-dir", cfg_folder.constData());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mpv_set_option_string(m_mpvHandle, "input-default-bindings", "yes");
|
||||||
|
}
|
||||||
|
|
||||||
// Observe some properties.
|
// Observe some properties.
|
||||||
mpv_observe_property(m_mpvHandle, EVENT_CODE_FS, "fullscreen", MPV_FORMAT_FLAG);
|
mpv_observe_property(m_mpvHandle, EVENT_CODE_FS, "fullscreen", MPV_FORMAT_FLAG);
|
||||||
|
@ -134,7 +140,16 @@ void LibMpvBackend::destroyHandle() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LibMpvBackend::loadSettings() {}
|
void LibMpvBackend::loadSettings() {
|
||||||
|
if (m_app->settings()->value(GROUP(VideoPlayer), SETTING(VideoPlayer::MpvUseCustomConfigFolder)).toBool()) {
|
||||||
|
m_customConfigFolder =
|
||||||
|
m_app->replaceUserDataFolderPlaceholder(m_app->settings()
|
||||||
|
->value(GROUP(VideoPlayer), SETTING(VideoPlayer::MpvCustomConfigFolder))
|
||||||
|
.toString());
|
||||||
|
|
||||||
|
installCustomConfig(m_customConfigFolder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LibMpvBackend::~LibMpvBackend() {
|
LibMpvBackend::~LibMpvBackend() {
|
||||||
destroyHandle();
|
destroyHandle();
|
||||||
|
@ -198,6 +213,10 @@ double LibMpvBackend::mpvDecodeDouble(void* data) const {
|
||||||
return *(double*)data;
|
return *(double*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString LibMpvBackend::mpvEncodeKeyboardButton(int btn) const {
|
||||||
|
return QString((QChar)btn);
|
||||||
|
}
|
||||||
|
|
||||||
QString LibMpvBackend::errorToString(mpv_error error) const {
|
QString LibMpvBackend::errorToString(mpv_error error) const {
|
||||||
switch (mpv_error(error)) {
|
switch (mpv_error(error)) {
|
||||||
case mpv_error::MPV_ERROR_EVENT_QUEUE_FULL:
|
case mpv_error::MPV_ERROR_EVENT_QUEUE_FULL:
|
||||||
|
@ -455,16 +474,14 @@ bool LibMpvBackend::eventFilter(QObject* watched, QEvent* event) {
|
||||||
mpv_command_async(m_mpvHandle, 0, args);
|
mpv_command_async(m_mpvHandle, 0, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->type() == QEvent::Type::KeyPress) {
|
if (event->type() == QEvent::Type::KeyRelease) {
|
||||||
// We catch all keypresses (even from surrounding widgets).
|
// We catch all keypresses (even from surrounding widgets).
|
||||||
QKeyEvent* key_event = dynamic_cast<QKeyEvent*>(event);
|
QKeyEvent* key_event = dynamic_cast<QKeyEvent*>(event);
|
||||||
char txt = (char)key_event->key();
|
QString keys =
|
||||||
char str[2];
|
QKeySequence(key_event->key() | key_event->modifiers()).toString(QKeySequence::SequenceFormat::PortableText);
|
||||||
|
QByteArray byte_named_key = keys.toLocal8Bit();
|
||||||
|
|
||||||
str[0] = txt;
|
const char* args[] = {"keypress", byte_named_key.constData(), nullptr};
|
||||||
str[1] = '\0';
|
|
||||||
|
|
||||||
const char* args[] = {"keypress", str, nullptr};
|
|
||||||
|
|
||||||
mpv_command_async(m_mpvHandle, 0, args);
|
mpv_command_async(m_mpvHandle, 0, args);
|
||||||
event->accept();
|
event->accept();
|
||||||
|
@ -563,6 +580,22 @@ int LibMpvBackend::duration() const {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LibMpvBackend::installCustomConfig(const QString& directory) {
|
||||||
|
QDir().mkpath(directory);
|
||||||
|
QDir config_dir(directory);
|
||||||
|
|
||||||
|
for (const QString& cfg_file : QStringList{QSL(CONFIG_MAIN_NAME), QSL(CONFIG_INPUT_NAME)}) {
|
||||||
|
if (!config_dir.exists(cfg_file)) {
|
||||||
|
qDebugNN << LOGSEC_MPV << "Copying sample" << QUOTE_W_SPACE(cfg_file) << "to"
|
||||||
|
<< QUOTE_W_SPACE_DOT(config_dir.absolutePath());
|
||||||
|
IOFactory::copyFile(QSL(":/scripts/mpv/%1").arg(cfg_file), config_dir.absoluteFilePath(cfg_file));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebugNN << LOGSEC_MPV << "Configuration file" << QUOTE_W_SPACE(cfg_file) << "already exists.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LibMpvBackend::setMuted(bool muted) {
|
void LibMpvBackend::setMuted(bool muted) {
|
||||||
if (m_mpvHandle != nullptr) {
|
if (m_mpvHandle != nullptr) {
|
||||||
const char* mtd = muted ? "yes" : "no";
|
const char* mtd = muted ? "yes" : "no";
|
||||||
|
|
|
@ -21,6 +21,8 @@ class LibMpvBackend : public PlayerBackend {
|
||||||
virtual int position() const;
|
virtual int position() const;
|
||||||
virtual int duration() const;
|
virtual int duration() const;
|
||||||
|
|
||||||
|
static void installCustomConfig(const QString& directory);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void setMuted(bool muted);
|
virtual void setMuted(bool muted);
|
||||||
virtual void playUrl(const QUrl& url);
|
virtual void playUrl(const QUrl& url);
|
||||||
|
@ -51,12 +53,14 @@ class LibMpvBackend : public PlayerBackend {
|
||||||
bool mpvDecodeBool(void* data) const;
|
bool mpvDecodeBool(void* data) const;
|
||||||
int mpvDecodeInt(void* data) const;
|
int mpvDecodeInt(void* data) const;
|
||||||
double mpvDecodeDouble(void* data) const;
|
double mpvDecodeDouble(void* data) const;
|
||||||
|
QString mpvEncodeKeyboardButton(int btn) const;
|
||||||
QString errorToString(mpv_error error) const;
|
QString errorToString(mpv_error error) const;
|
||||||
|
|
||||||
void destroyHandle();
|
void destroyHandle();
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QString m_customConfigFolder;
|
||||||
QWidget* m_mpvContainer;
|
QWidget* m_mpvContainer;
|
||||||
mpv_handle* m_mpvHandle;
|
mpv_handle* m_mpvHandle;
|
||||||
QUrl m_url;
|
QUrl m_url;
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
<number>9</number>
|
<number>9</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>9</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="rightMargin">
|
<property name="rightMargin">
|
||||||
<number>9</number>
|
<number>9</number>
|
||||||
|
|
|
@ -65,7 +65,9 @@ void SettingsMediaPlayer::saveSettings() {
|
||||||
m_ui.m_gbMpvCustomConfigFolder->isChecked());
|
m_ui.m_gbMpvCustomConfigFolder->isChecked());
|
||||||
settings()->setValue(GROUP(VideoPlayer), VideoPlayer::MpvCustomConfigFolder, m_ui.m_txtMpvConfigFolder->text());
|
settings()->setValue(GROUP(VideoPlayer), VideoPlayer::MpvCustomConfigFolder, m_ui.m_txtMpvConfigFolder->text());
|
||||||
|
|
||||||
// LibMpvBackend::installCustomConfig()
|
if (m_ui.m_gbMpvCustomConfigFolder->isChecked()) {
|
||||||
|
LibMpvBackend::installCustomConfig(m_ui.m_txtMpvConfigFolder->text());
|
||||||
|
}
|
||||||
#elif defined(ENABLE_MEDIAPLAYER_QTMULTIMEDIA)
|
#elif defined(ENABLE_MEDIAPLAYER_QTMULTIMEDIA)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -71,7 +71,7 @@ void SettingsNodejs::changeFileFolder(LineEditWithStatus* tb, bool directory_sel
|
||||||
d.setNameFilter(file_filter);
|
d.setNameFilter(file_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString current = qApp->replaceDataUserDataFolderPlaceholder(tb->lineEdit()->text());
|
QString current = qApp->replaceUserDataFolderPlaceholder(tb->lineEdit()->text());
|
||||||
|
|
||||||
d.selectFile(current);
|
d.selectFile(current);
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ void SettingsNodejs::testNpm() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsNodejs::testPackageFolder() {
|
void SettingsNodejs::testPackageFolder() {
|
||||||
QString folder = qApp->replaceDataUserDataFolderPlaceholder(m_ui.m_tbPackageFolder->lineEdit()->text());
|
QString folder = qApp->replaceUserDataFolderPlaceholder(m_ui.m_tbPackageFolder->lineEdit()->text());
|
||||||
|
|
||||||
const auto fi = QFileInfo(folder);
|
const auto fi = QFileInfo(folder);
|
||||||
const auto is_file = fi.isFile() && fi.exists();
|
const auto is_file = fi.isFile() && fi.exists();
|
||||||
|
|
|
@ -539,13 +539,13 @@ QString Application::cacheFolder() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Application::replaceDataUserDataFolderPlaceholder(QString text) const {
|
QString Application::replaceUserDataFolderPlaceholder(QString text) const {
|
||||||
auto user_data_folder = qApp->userDataFolder();
|
auto user_data_folder = qApp->userDataFolder();
|
||||||
|
|
||||||
return text.replace(QSL(USER_DATA_PLACEHOLDER), user_data_folder);
|
return text.replace(QSL(USER_DATA_PLACEHOLDER), user_data_folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList Application::replaceDataUserDataFolderPlaceholder(QStringList texts) const {
|
QStringList Application::replaceUserDataFolderPlaceholder(QStringList texts) const {
|
||||||
auto user_data_folder = qApp->userDataFolder();
|
auto user_data_folder = qApp->userDataFolder();
|
||||||
|
|
||||||
return texts.replaceInStrings(QSL(USER_DATA_PLACEHOLDER), user_data_folder);
|
return texts.replaceInStrings(QSL(USER_DATA_PLACEHOLDER), user_data_folder);
|
||||||
|
|
|
@ -155,8 +155,8 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication {
|
||||||
|
|
||||||
int customAdblockPort() const;
|
int customAdblockPort() const;
|
||||||
|
|
||||||
QString replaceDataUserDataFolderPlaceholder(QString text) const;
|
QString replaceUserDataFolderPlaceholder(QString text) const;
|
||||||
QStringList replaceDataUserDataFolderPlaceholder(QStringList texts) const;
|
QStringList replaceUserDataFolderPlaceholder(QStringList texts) const;
|
||||||
|
|
||||||
void setMainForm(FormMain* main_form);
|
void setMainForm(FormMain* main_form);
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ QString NodeJs::packageFolder() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString NodeJs::processedPackageFolder() const {
|
QString NodeJs::processedPackageFolder() const {
|
||||||
QString path = qApp->replaceDataUserDataFolderPlaceholder(packageFolder());
|
QString path = qApp->replaceUserDataFolderPlaceholder(packageFolder());
|
||||||
|
|
||||||
if (!QDir().mkpath(path)) {
|
if (!QDir().mkpath(path)) {
|
||||||
qCriticalNN << LOGSEC_NODEJS << "Failed to create package folder structure" << QUOTE_W_SPACE_DOT(path);
|
qCriticalNN << LOGSEC_NODEJS << "Failed to create package folder structure" << QUOTE_W_SPACE_DOT(path);
|
||||||
|
|
|
@ -55,7 +55,7 @@ void Notification::playSound(Application* app) const {
|
||||||
play
|
play
|
||||||
->setSource(QUrl::
|
->setSource(QUrl::
|
||||||
fromLocalFile(QDir::toNativeSeparators(app
|
fromLocalFile(QDir::toNativeSeparators(app
|
||||||
->replaceDataUserDataFolderPlaceholder(m_soundPath))));
|
->replaceUserDataFolderPlaceholder(m_soundPath))));
|
||||||
}
|
}
|
||||||
|
|
||||||
play->setVolume(fractionalVolume());
|
play->setVolume(fractionalVolume());
|
||||||
|
@ -85,7 +85,7 @@ void Notification::playSound(Application* app) const {
|
||||||
play
|
play
|
||||||
->setSource(QUrl::
|
->setSource(QUrl::
|
||||||
fromLocalFile(QDir::toNativeSeparators(app
|
fromLocalFile(QDir::toNativeSeparators(app
|
||||||
->replaceDataUserDataFolderPlaceholder(m_soundPath))));
|
->replaceUserDataFolderPlaceholder(m_soundPath))));
|
||||||
}
|
}
|
||||||
|
|
||||||
play->audioOutput()->setVolume(fractionalVolume());
|
play->audioOutput()->setVolume(fractionalVolume());
|
||||||
|
@ -102,7 +102,7 @@ void Notification::playSound(Application* app) const {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
play->setMedia(QMediaContent(
|
play->setMedia(QMediaContent(
|
||||||
QUrl::fromLocalFile(QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath)))));
|
QUrl::fromLocalFile(QDir::toNativeSeparators(app->replaceUserDataFolderPlaceholder(m_soundPath)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
play->setVolume(m_volume);
|
play->setVolume(m_volume);
|
||||||
|
|
|
@ -403,7 +403,7 @@ void StandardFeed::setEncoding(const QString& encoding) {
|
||||||
QStringList StandardFeed::prepareExecutionLine(const QString& execution_line) {
|
QStringList StandardFeed::prepareExecutionLine(const QString& execution_line) {
|
||||||
auto args = TextFactory::tokenizeProcessArguments(execution_line);
|
auto args = TextFactory::tokenizeProcessArguments(execution_line);
|
||||||
|
|
||||||
return qApp->replaceDataUserDataFolderPlaceholder(args);
|
return qApp->replaceUserDataFolderPlaceholder(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray StandardFeed::runScriptProcess(const QStringList& cmd_args,
|
QByteArray StandardFeed::runScriptProcess(const QStringList& cmd_args,
|
||||||
|
|
Loading…
Add table
Reference in a new issue