Command messages are dispatched with script-message-to mpvnet

This commit is contained in:
stax76
2022-05-27 12:20:37 +02:00
parent 6ddca6d608
commit 7e4ea640cf
8 changed files with 147 additions and 115 deletions

View File

@@ -1,4 +1,5 @@
- Command messages are dispatched with `script-message-to mpvnet`.
- New feature to change profile using the command palette.
- New show-santa-logo (green and grumpy) option.
- New quick bookmark feature, see manual.

View File

@@ -221,7 +221,7 @@ A common task for the terminal is debugging scripts.
mpv.net specific commands
-------------------------
`script-message mpv.net <command> <arguments>`
`script-message-to mpvnet <command> <arguments>`
mpv.net commands are used when mpv commands don't exist or lack a feature.

View File

@@ -67,8 +67,6 @@ namespace mpvnet
case "show-subtitle-tracks": ShowSubtitleTracks(); break;
case "show-text": ShowText(args[0], Convert.ToInt32(args[1]), Convert.ToInt32(args[2])); break;
case "window-scale": WindowScale(float.Parse(args[0], CultureInfo.InvariantCulture)); break;
default: Terminal.WriteError($"No command '{id}' found, reset input.conf by deleting it."); break;
}
}

View File

@@ -656,10 +656,9 @@ namespace mpvnet
public void BuildMenu()
{
string content = File.ReadAllText(Core.InputConfPath);
var items = CommandItem.GetItems(content);
var items = CommandItem.GetItems(Core.InputConfContent);
if (!content.Contains("#menu:"))
if (!Core.InputConfContent.Contains("#menu:"))
{
var defaultItems = CommandItem.GetItems(Properties.Resources.input_conf);

View File

@@ -227,7 +227,6 @@ namespace mpvnet
get {
if (_Items is null)
_Items = GetItems(File.ReadAllText(Core.InputConfPath));
return _Items;
}
}

View File

@@ -72,6 +72,7 @@ namespace mpvnet
public List<KeyValuePair<string, double>> Chapters { get; set; } = new List<KeyValuePair<string, double>>();
public List<TimeSpan> BluRayTitles { get; } = new List<TimeSpan>();
public IntPtr Handle { get; set; }
public IntPtr NamedHandle { get; set; }
public Size VideoSize { get; set; }
public TimeSpan Duration;
@@ -114,13 +115,13 @@ namespace mpvnet
Handle = mpv_create();
mpv_request_log_messages(Handle, "no");
App.RunTask(() => MainEventLoop());
if (Handle == IntPtr.Zero)
throw new Exception("error mpv_create");
mpv_request_log_messages(Handle, "terminal-default");
App.RunTask(() => EventLoop());
if (App.IsTerminalAttached)
{
SetPropertyString("terminal", "yes");
@@ -152,6 +153,15 @@ namespace mpvnet
string idle = GetPropertyString("idle");
App.Exit = idle == "no" || idle == "once";
NamedHandle = mpv_create_client(Handle, "mpvnet");
if (NamedHandle == IntPtr.Zero)
throw new Exception("mpv_create_client error");
mpv_request_log_messages(NamedHandle, "terminal-default");
App.RunTask(() => EventLoop());
// otherwise shutdown is raised before media files are loaded,
// this means Lua scripts that use idle might not work correctly
SetPropertyString("idle", "yes");
@@ -260,6 +270,26 @@ namespace mpvnet
AutofitLarger = 1;
}
bool? _UseNewMsgModel;
public bool UseNewMsgModel {
get {
if (!_UseNewMsgModel.HasValue)
_UseNewMsgModel = InputConfContent.Contains("script-message-to mpvnet");
return _UseNewMsgModel.Value;
}
}
string _InputConfContent;
public string InputConfContent {
get {
if (_InputConfContent == null)
_InputConfContent = File.ReadAllText(Core.InputConfPath);
return _InputConfContent;
}
}
string _ConfigFolder;
public string ConfigFolder {
@@ -417,11 +447,17 @@ namespace mpvnet
}
}
public void MainEventLoop()
{
while (true)
mpv_wait_event(Handle, -1);
}
public void EventLoop()
{
while (true)
{
IntPtr ptr = mpv_wait_event(Handle, -1);
IntPtr ptr = mpv_wait_event(NamedHandle, -1);
mpv_event evt = (mpv_event)Marshal.PtrToStructure(ptr, typeof(mpv_event));
try
@@ -459,14 +495,13 @@ namespace mpvnet
var data = (mpv_event_client_message)Marshal.PtrToStructure(evt.data, typeof(mpv_event_client_message));
string[] args = ConvertFromUtf8Strings(data.args, data.num_args);
if (args.Length > 1)
{
if (args[0] == "mpv.net")
if (UseNewMsgModel && args[0] != "mpv.net")
App.RunTask(() => Commands.Execute(args[0], args.Skip(1).ToArray()));
else if (args.Length > 1 && args[0] == "mpv.net")
App.RunTask(() => Commands.Execute(args[1], args.Skip(2).ToArray()));
if (args[0] == "osc-idlelogo" && args[1] == "no")
if (args.Length > 1 && args[0] == "osc-idlelogo" && args[1] == "no")
HideLogo();
}
InvokeAsync(ClientMessageAsync, args);
ClientMessage?.Invoke(args);
@@ -681,12 +716,6 @@ namespace mpvnet
}
}
void HideLogo()
{
Command("overlay-remove 0");
IsLogoVisible = false;
}
public void Command(string command)
{
mpv_error err = mpv_command_string(Handle, command);
@@ -903,7 +932,7 @@ namespace mpvnet
{
if (!IntPropChangeActions.ContainsKey(name))
{
mpv_error err = mpv_observe_property(Handle, 0, name, mpv_format.MPV_FORMAT_INT64);
mpv_error err = mpv_observe_property(NamedHandle, 0, name, mpv_format.MPV_FORMAT_INT64);
if (err < 0)
HandleError(err, $"error observing property: {name}");
@@ -922,7 +951,7 @@ namespace mpvnet
{
if (!DoublePropChangeActions.ContainsKey(name))
{
mpv_error err = mpv_observe_property(Handle, 0, name, mpv_format.MPV_FORMAT_DOUBLE);
mpv_error err = mpv_observe_property(NamedHandle, 0, name, mpv_format.MPV_FORMAT_DOUBLE);
if (err < 0)
HandleError(err, $"error observing property: {name}");
@@ -941,7 +970,7 @@ namespace mpvnet
{
if (!BoolPropChangeActions.ContainsKey(name))
{
mpv_error err = mpv_observe_property(Handle, 0, name, mpv_format.MPV_FORMAT_FLAG);
mpv_error err = mpv_observe_property(NamedHandle, 0, name, mpv_format.MPV_FORMAT_FLAG);
if (err < 0)
HandleError(err, $"error observing property: {name}");
@@ -960,7 +989,7 @@ namespace mpvnet
{
if (!StringPropChangeActions.ContainsKey(name))
{
mpv_error err = mpv_observe_property(Handle, 0, name, mpv_format.MPV_FORMAT_STRING);
mpv_error err = mpv_observe_property(NamedHandle, 0, name, mpv_format.MPV_FORMAT_STRING);
if (err < 0)
HandleError(err, $"error observing property: {name}");
@@ -979,7 +1008,7 @@ namespace mpvnet
{
if (!PropChangeActions.ContainsKey(name))
{
mpv_error err = mpv_observe_property(Handle, 0, name, mpv_format.MPV_FORMAT_NONE);
mpv_error err = mpv_observe_property(NamedHandle, 0, name, mpv_format.MPV_FORMAT_NONE);
if (err < 0)
HandleError(err, $"error observing property: {name}");
@@ -1337,6 +1366,12 @@ namespace mpvnet
}
}
void HideLogo()
{
Command("overlay-remove 0");
IsLogoVisible = false;
}
string GetLanguage(string id)
{
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures))

View File

@@ -8,6 +8,9 @@ public class libmpv
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr mpv_create();
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr mpv_create_client(IntPtr mpvHandle, [MarshalAs(UnmanagedType.LPUTF8Str)] string command);
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern mpv_error mpv_initialize(IntPtr mpvHandle);
@@ -26,9 +29,6 @@ public class libmpv
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr mpv_error_string(mpv_error error);
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_terminate_destroy(IntPtr mpvHandle);
[DllImport("mpv-2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern mpv_error mpv_request_log_messages(IntPtr mpvHandle, [MarshalAs(UnmanagedType.LPUTF8Str)] string min_level);

View File

@@ -1,28 +1,28 @@
# https://github.com/stax76/mpv.net/blob/master/docs/Manual.md#input-and-context-menu
o script-message mpv.net open-files #menu: Open > Open Files...
V script-message mpv.net open-clipboard #menu: Open > Open URL or file from clipboard
_ script-message mpv.net open-optical-media #menu: Open > Open DVD/Blu-ray Drive/Folder...
o script-message-to mpvnet open-files #menu: Open > Open Files...
V script-message-to mpvnet open-clipboard #menu: Open > Open URL or file from clipboard
_ script-message-to mpvnet open-optical-media #menu: Open > Open DVD/Blu-ray Drive/Folder...
_ ignore #menu: Open > -
Alt+a script-message mpv.net load-audio #menu: Open > Load external audio files...
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
Alt+a script-message-to mpvnet load-audio #menu: Open > Load external audio files...
Alt+s script-message-to mpvnet load-sub #menu: Open > Load external subtitle files...
_ ignore #menu: Open > -
_ script-message mpv.net open-files append #menu: Open > Add files to playlist...
_ script-message-to mpvnet open-files append #menu: Open > Add files to playlist...
_ ignore #menu: Open > -
_ ignore #menu: Open > Recent
_ ignore #menu: -
Space script-message mpv.net play-pause #menu: Play/Pause
Space script-message-to mpvnet play-pause #menu: Play/Pause
Ctrl+s stop #menu: Stop
_ ignore #menu: -
Enter cycle fullscreen #menu: Toggle Fullscreen
F11 script-message mpv.net playlist-add -1 #menu: Navigate > Previous File
F12 script-message mpv.net playlist-add 1 #menu: Navigate > Next File
F11 script-message-to mpvnet playlist-add -1 #menu: Navigate > Previous File
F12 script-message-to mpvnet playlist-add 1 #menu: Navigate > Next File
_ ignore #menu: Navigate > -
Home script-message mpv.net playlist-first #menu: Navigate > First File
End script-message mpv.net playlist-last #menu: Navigate > Last File
Home script-message-to mpvnet playlist-first #menu: Navigate > First File
End script-message-to mpvnet playlist-last #menu: Navigate > Last File
_ ignore #menu: Navigate > -
PGUP add chapter 1 #menu: Navigate > Next Chapter
PGDWN add chapter -1 #menu: Navigate > Previous Chapter
@@ -73,7 +73,7 @@ d cycle deinterlace #menu: Video > Toggle Deinterlace
a cycle-values video-aspect 16:9 4:3 2.35:1 -1 #menu: Video > Cycle Aspect Ratio
Ctrl+r cycle-values video-rotate 90 180 270 0 #menu: Video > Rotate Video
KP7 script-message mpv.net cycle-audio #menu: Audio > Cycle/Next
KP7 script-message-to mpvnet cycle-audio #menu: Audio > Cycle/Next
_ ignore #menu: Audio > -
Ctrl+d add audio-delay 0.1 #menu: Audio > Delay +0.1
Ctrl+D add audio-delay -0.1 #menu: Audio > Delay -0.1
@@ -105,78 +105,78 @@ _ ignore #menu: Speed > -
_ ignore #menu: Speed > -
BS set speed 1 #menu: Speed > Reset
Alt++ script-message mpv.net scale-window 1.2 #menu: View > Zoom > Enlarge
Alt+- script-message mpv.net scale-window 0.8 #menu: View > Zoom > Shrink
Alt++ script-message-to mpvnet scale-window 1.2 #menu: View > Zoom > Enlarge
Alt+- script-message-to mpvnet scale-window 0.8 #menu: View > Zoom > Shrink
_ ignore #menu: View > Zoom > -
Alt+0 script-message mpv.net window-scale 0.5 #menu: View > Zoom > 50 %
Alt+1 script-message mpv.net window-scale 1.0 #menu: View > Zoom > 100 %
Alt+2 script-message mpv.net window-scale 2.0 #menu: View > Zoom > 200 %
Alt+3 script-message mpv.net window-scale 3.0 #menu: View > Zoom > 300 %
Alt+0 script-message-to mpvnet window-scale 0.5 #menu: View > Zoom > 50 %
Alt+1 script-message-to mpvnet window-scale 1.0 #menu: View > Zoom > 100 %
Alt+2 script-message-to mpvnet window-scale 2.0 #menu: View > Zoom > 200 %
Alt+3 script-message-to mpvnet window-scale 3.0 #menu: View > Zoom > 300 %
F8 script-message mpv.net show-playlist #menu: View > Show Playlist
Ctrl+p script-message mpv.net select-profile #menu: View > Show Profile Selection
Ctrl+P script-message mpv.net show-profiles #menu: View > Show Profiles
Ctrl+7 script-message mpv.net show-audio-tracks #menu: View > Show Audio Tracks
Ctrl+8 script-message mpv.net show-subtitle-tracks #menu: View > Show Subtitle Tracks
F8 script-message-to mpvnet show-playlist #menu: View > Show Playlist
Ctrl+p script-message-to mpvnet select-profile #menu: View > Show Profile Selection
Ctrl+P script-message-to mpvnet show-profiles #menu: View > Show Profiles
Ctrl+7 script-message-to mpvnet show-audio-tracks #menu: View > Show Audio Tracks
Ctrl+8 script-message-to mpvnet show-subtitle-tracks #menu: View > Show Subtitle Tracks
b cycle border #menu: View > Toggle Border
Ctrl+t cycle ontop #menu: View > Toggle On Top
t script-binding stats/display-stats-toggle #menu: View > Toggle Statistics
Del script-binding osc/visibility #menu: View > Toggle OSC Visibility
i script-message mpv.net show-info #menu: View > Show File/Stream Info
i script-message-to mpvnet show-info #menu: View > Show File/Stream Info
p show-progress #menu: View > Show Progress
F9 show-text ${track-list} 5000 #menu: View > Show Tracks
Ctrl+m script-message mpv.net show-media-info #menu: View > Show Media Info
Alt+r script-message mpv.net show-recent #menu: View > Show Recent
Ctrl+m script-message-to mpvnet show-media-info #menu: View > Show Media Info
Alt+r script-message-to mpvnet show-recent #menu: View > Show Recent
` script-binding console/enable #menu: View > Advanced > Show Console
_ script-message mpv.net show-audio-devices #menu: View > Advanced > Show Audio Devices
P script-message mpv.net show-properties #menu: View > Advanced > Show Properties
C script-message mpv.net show-commands #menu: View > Advanced > Show Commands
_ script-message mpv.net show-demuxers #menu: View > Advanced > Show Demuxers
_ script-message mpv.net show-decoders #menu: View > Advanced > Show Decoders
_ script-message mpv.net show-protocols #menu: View > Advanced > Show Protocols
_ script-message mpv.net show-keys #menu: View > Advanced > Show Keys
_ script-message-to mpvnet show-audio-devices #menu: View > Advanced > Show Audio Devices
P script-message-to mpvnet show-properties #menu: View > Advanced > Show Properties
C script-message-to mpvnet show-commands #menu: View > Advanced > Show Commands
_ script-message-to mpvnet show-demuxers #menu: View > Advanced > Show Demuxers
_ script-message-to mpvnet show-decoders #menu: View > Advanced > Show Decoders
_ script-message-to mpvnet show-protocols #menu: View > Advanced > Show Protocols
_ script-message-to mpvnet show-keys #menu: View > Advanced > Show Keys
_ ignore #menu: Profile
c script-message mpv.net show-conf-editor #menu: Settings > Show Config Editor
Ctrl+i script-message mpv.net show-input-editor #menu: Settings > Show Input Editor
Ctrl+f script-message mpv.net open-conf-folder #menu: Settings > Open Config Folder
c script-message-to mpvnet show-conf-editor #menu: Settings > Show Config Editor
Ctrl+i script-message-to mpvnet show-input-editor #menu: Settings > Show Input Editor
Ctrl+f script-message-to mpvnet open-conf-folder #menu: Settings > Open Config Folder
_ script-message mpv.net reg-file-assoc video #menu: Settings > Setup > Register video file associations
_ script-message mpv.net reg-file-assoc audio #menu: Settings > Setup > Register audio file associations
_ script-message mpv.net reg-file-assoc image #menu: Settings > Setup > Register image file associations
_ script-message mpv.net reg-file-assoc unreg #menu: Settings > Setup > Unregister file associations
_ script-message-to mpvnet reg-file-assoc video #menu: Settings > Setup > Register video file associations
_ script-message-to mpvnet reg-file-assoc audio #menu: Settings > Setup > Register audio file associations
_ script-message-to mpvnet reg-file-assoc image #menu: Settings > Setup > Register image file associations
_ script-message-to mpvnet reg-file-assoc unreg #menu: Settings > Setup > Unregister file associations
h script-message mpv.net show-history #menu: Tools > Show History
h script-message-to mpvnet show-history #menu: Tools > Show History
l ab-loop #menu: Tools > Set/clear A-B loop points
L cycle-values loop-file inf no #menu: Tools > Toggle infinite file looping
_ playlist-shuffle #menu: Tools > Shuffle Playlist
Ctrl+h cycle-values hwdec auto no #menu: Tools > Toggle Hardware Decoding
Q quit-watch-later #menu: Tools > Exit Watch Later
_ script-message mpv.net shell-execute https://mpv.io #menu: Help > Website mpv
_ script-message mpv.net shell-execute https://github.com/stax76/mpv.net #menu: Help > Website mpv.net
_ script-message-to mpvnet shell-execute https://mpv.io #menu: Help > Website mpv
_ script-message-to mpvnet shell-execute https://github.com/stax76/mpv.net #menu: Help > Website mpv.net
_ ignore #menu: Help > -
_ script-message mpv.net shell-execute https://mpv.io/manual/stable/ #menu: Help > Manual mpv
_ script-message mpv.net shell-execute https://github.com/stax76/mpv.net/blob/master/docs/Manual.md #menu: Help > Manual mpv.net
_ script-message-to mpvnet shell-execute https://mpv.io/manual/stable/ #menu: Help > Manual mpv
_ script-message-to mpvnet shell-execute https://github.com/stax76/mpv.net/blob/master/docs/Manual.md #menu: Help > Manual mpv.net
_ ignore #menu: Help > -
_ script-message mpv.net show-about #menu: Help > About mpv.net
_ script-message-to mpvnet show-about #menu: Help > About mpv.net
F1 script-message mpv.net show-command-palette #menu: Command Palette
F1 script-message-to mpvnet show-command-palette #menu: Command Palette
_ ignore #menu: -
Esc quit #menu: Exit
MBTN_Right script-message mpv.net show-menu
6 script-message mpv.net show-progress
KP6 script-message mpv.net show-progress
MBTN_Right script-message-to mpvnet show-menu
6 script-message-to mpvnet show-progress
KP6 script-message-to mpvnet show-progress
9 ab-loop
KP9 ab-loop
7 script-message mpv.net cycle-audio
Sharp script-message mpv.net cycle-audio
Ctrl+F11 script-message mpv.net playlist-add -10
Ctrl+F12 script-message mpv.net playlist-add 10
Alt+q script-message mpv.net quick-bookmark
7 script-message-to mpvnet cycle-audio
Sharp script-message-to mpvnet cycle-audio
Ctrl+F11 script-message-to mpvnet playlist-add -10
Ctrl+F12 script-message-to mpvnet playlist-add 10
Alt+q script-message-to mpvnet quick-bookmark
8 cycle sub
j cycle sub
q quit