Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
558bd67591 | ||
|
|
a7e4892acf | ||
|
|
a0ba69c1aa | ||
|
|
1e7e80577d | ||
|
|
2177308b02 | ||
|
|
a8c2409ed1 | ||
|
|
1ef9e64a41 | ||
|
|
f0546485cf | ||
|
|
032e91e4b4 | ||
|
|
1447636eb7 |
20
Changelog.md
20
Changelog.md
@@ -1,3 +1,23 @@
|
|||||||
|
### 5.3
|
||||||
|
|
||||||
|
- added new feature: Open > Open DVD/Blu-ray Drive/Folder...
|
||||||
|
- the default of remember-volume has been set to yes
|
||||||
|
- scale, cscale, dscale defaults have been set to spline36,
|
||||||
|
profile=gpu-hq is not used in the defaults because it starts very slow
|
||||||
|
- new menu items have been added to navigate to the first and
|
||||||
|
last playlist position, key bindings: Home, End
|
||||||
|
- new config setting recent-count added, amount of menu items
|
||||||
|
shown under 'Open > Recent'
|
||||||
|
- in the config dialog the description for keep-open was corrected
|
||||||
|
because unlike mpv, mpv.net will never terminate automatically
|
||||||
|
- there was a rare occasion where the mpv.net logo wasn't shown
|
||||||
|
- fix excessive memory usage using `osd-scale-by-window = no`
|
||||||
|
- mpv setting osd-scale-by-window added to config dialog
|
||||||
|
|
||||||
|
### 5.2.1
|
||||||
|
|
||||||
|
- fixed race condition causing various features to fail
|
||||||
|
|
||||||
### 5.2
|
### 5.2
|
||||||
|
|
||||||
- bug fix for single-instance not working with unicode filenames
|
- bug fix for single-instance not working with unicode filenames
|
||||||
|
|||||||
@@ -149,9 +149,11 @@ The Open Files menu entry is one way to open files in mpv.net, it supports multi
|
|||||||
|
|
||||||
Another way to open files is the command line, it is used by the Windows File Explorer if file associations exist.
|
Another way to open files is the command line, it is used by the Windows File Explorer if file associations exist.
|
||||||
|
|
||||||
|
When mpv.net is started from a terminal such as PowerShell, mpv.net attaches to the terminal and outputs status and debug messages.
|
||||||
|
|
||||||
A third way is to drag and drop files on the main window.
|
A third way is to drag and drop files on the main window.
|
||||||
|
|
||||||
Whenever the control key is pressed when files are opened, the playlist is not cleared but the files are appended to the playlist.
|
Whenever the control key is pressed when files or URLs are opened, the playlist is not cleared but the files or URLs are appended to the playlist. This works in all mpv.net features that open files or URLs.
|
||||||
|
|
||||||
### Open > Open URL
|
### Open > Open URL
|
||||||
|
|
||||||
@@ -159,7 +161,9 @@ The Open URL menu entry can be used to open URLs for example from YouTube.
|
|||||||
|
|
||||||
mpv.net monitors the Windows clipboard and ask if URLs should be played in case it finds a URL in the clipboard. This feature uses a keyword whitelist that can be configured in the config editor.
|
mpv.net monitors the Windows clipboard and ask if URLs should be played in case it finds a URL in the clipboard. This feature uses a keyword whitelist that can be configured in the config editor.
|
||||||
|
|
||||||
Whenever the control key is pressed when URLs are opened, the playlist is not cleared but the URLs are appended to the playlist.
|
When mpv.net is started from a terminal such as PowerShell, mpv.net attaches to the terminal and outputs status and debug messages.
|
||||||
|
|
||||||
|
Whenever the control key is pressed when files or URLs are opened, the playlist is not cleared but the files or URLs are appended to the playlist. This works in all mpv.net features that open files or URLs.
|
||||||
|
|
||||||
### Open > Show media search
|
### Open > Show media search
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ Table of contents
|
|||||||
- Language agnostic JSON IPC to control the player with a external programs
|
- Language agnostic JSON IPC to control the player with a external programs
|
||||||
- On Screen Controler (OSC, play control buttons)
|
- On Screen Controler (OSC, play control buttons)
|
||||||
- [Command Line Interface](https://mpv.io/manual/master/#options)
|
- [Command Line Interface](https://mpv.io/manual/master/#options)
|
||||||
- If started from a PowerShell terminal mpv.net will attach to the terminal and print status and debug output
|
- If started from a PowerShell terminal mpv.net will attach to the terminal and print status and debug output ([Screenshot](#terminal-and-repl-screenshot))
|
||||||
- [OSD REPL](https://github.com/rossy/mpv-repl)
|
- [OSD REPL](https://github.com/rossy/mpv-repl)
|
||||||
- DXVA2 video decoding acceleration
|
- DXVA2 video decoding acceleration
|
||||||
- OpenGL based video output capable of features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more
|
- OpenGL based video output capable of features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace RatingExtension // the assembly name must end with 'Extension'
|
|||||||
{
|
{
|
||||||
string filepath = i.Key;
|
string filepath = i.Key;
|
||||||
int rating = i.Value;
|
int rating = i.Value;
|
||||||
if (String.IsNullOrEmpty(filepath) || ! File.Exists(filepath))
|
if (String.IsNullOrEmpty(filepath) || !File.Exists(filepath))
|
||||||
return;
|
return;
|
||||||
string basename = Path.GetFileNameWithoutExtension(filepath);
|
string basename = Path.GetFileNameWithoutExtension(filepath);
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace mpvnet
|
|||||||
public static string[] UrlWhitelist { get; set; } = { "tube", "vimeo", "ard", "zdf" };
|
public static string[] UrlWhitelist { get; set; } = { "tube", "vimeo", "ard", "zdf" };
|
||||||
|
|
||||||
public static string RegPath { get; } = @"HKCU\Software\" + Application.ProductName;
|
public static string RegPath { get; } = @"HKCU\Software\" + Application.ProductName;
|
||||||
public static string ConfPath { get; } = mp.ConfigFolder + "\\mpvnet.conf";
|
public static string ConfPath { get => mp.ConfigFolder + "mpvnet.conf"; }
|
||||||
public static string DarkMode { get; set; } = "always";
|
public static string DarkMode { get; set; } = "always";
|
||||||
public static string ProcessInstance { get; set; } = "single";
|
public static string ProcessInstance { get; set; } = "single";
|
||||||
public static string DarkColor { get; set; }
|
public static string DarkColor { get; set; }
|
||||||
@@ -25,11 +25,12 @@ namespace mpvnet
|
|||||||
public static bool RememberPosition { get; set; }
|
public static bool RememberPosition { get; set; }
|
||||||
public static bool DebugMode { get; set; }
|
public static bool DebugMode { get; set; }
|
||||||
public static bool IsStartedFromTerminal { get; } = Environment.GetEnvironmentVariable("_started_from_console") == "yes";
|
public static bool IsStartedFromTerminal { get; } = Environment.GetEnvironmentVariable("_started_from_console") == "yes";
|
||||||
public static bool RememberVolume { get; set; }
|
public static bool RememberVolume { get; set; } = true;
|
||||||
public static bool AutoLoadFolder { get; set; } = true;
|
public static bool AutoLoadFolder { get; set; } = true;
|
||||||
public static bool ThemedMenu { get; set; }
|
public static bool ThemedMenu { get; set; }
|
||||||
|
|
||||||
public static int StartThreshold { get; set; } = 1500;
|
public static int StartThreshold { get; set; } = 1500;
|
||||||
|
public static int RecentCount { get; set; } = 15;
|
||||||
|
|
||||||
public static float MinimumAspectRatio { get; set; } = 1.3f;
|
public static float MinimumAspectRatio { get; set; } = 1.3f;
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string filePath = mp.ConfigFolder + "\\mpvnet-debug.log";
|
string filePath = mp.ConfigFolder + "mpvnet-debug.log";
|
||||||
if (File.Exists(filePath)) File.Delete(filePath);
|
if (File.Exists(filePath)) File.Delete(filePath);
|
||||||
Trace.Listeners.Add(new TextWriterTraceListener(filePath));
|
Trace.Listeners.Add(new TextWriterTraceListener(filePath));
|
||||||
Trace.AutoFlush = true;
|
Trace.AutoFlush = true;
|
||||||
@@ -117,6 +118,7 @@ namespace mpvnet
|
|||||||
case "minimum-aspect-ratio": MinimumAspectRatio = value.Float(); return true;
|
case "minimum-aspect-ratio": MinimumAspectRatio = value.Float(); return true;
|
||||||
case "auto-load-folder": AutoLoadFolder = value == "yes"; return true;
|
case "auto-load-folder": AutoLoadFolder = value == "yes"; return true;
|
||||||
case "themed-menu": ThemedMenu = value == "yes"; return true;
|
case "themed-menu": ThemedMenu = value == "yes"; return true;
|
||||||
|
case "recent-count": RecentCount = value.Int(); return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,14 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case "manage-file-associations": ManageFileAssociations(); break; // deprecated 2019
|
case "open-files": OpenFiles(args); break;
|
||||||
|
case "open-url": OpenURL(); break;
|
||||||
|
case "open-optical-media": Open_DVD_Or_BD_Folder(); break;
|
||||||
|
case "manage-file-associations": // deprecated 2019
|
||||||
|
case "show-setup-dialog": ShowDialog(typeof(SetupWindow)); break;
|
||||||
case "cycle-audio": CycleAudio(); break;
|
case "cycle-audio": CycleAudio(); break;
|
||||||
case "load-audio": LoadAudio(); break;
|
case "load-audio": LoadAudio(); break;
|
||||||
case "load-sub": LoadSubtitle(); break;
|
case "load-sub": LoadSubtitle(); break;
|
||||||
case "open-url": OpenURL(); break;
|
|
||||||
case "execute-mpv-command": ExecuteMpvCommand(); break;
|
case "execute-mpv-command": ExecuteMpvCommand(); break;
|
||||||
case "show-history": ShowHistory(); break;
|
case "show-history": ShowHistory(); break;
|
||||||
case "show-media-search": ShowDialog(typeof(EverythingWindow)); break;
|
case "show-media-search": ShowDialog(typeof(EverythingWindow)); break;
|
||||||
@@ -28,11 +31,10 @@ namespace mpvnet
|
|||||||
case "show-about": ShowDialog(typeof(AboutWindow)); break;
|
case "show-about": ShowDialog(typeof(AboutWindow)); break;
|
||||||
case "show-conf-editor": ShowDialog(typeof(ConfWindow)); break;
|
case "show-conf-editor": ShowDialog(typeof(ConfWindow)); break;
|
||||||
case "show-input-editor": ShowDialog(typeof(InputWindow)); break;
|
case "show-input-editor": ShowDialog(typeof(InputWindow)); break;
|
||||||
case "show-setup-dialog": ShowDialog(typeof(SetupWindow)); break;
|
|
||||||
case "open-conf-folder": Process.Start(mp.ConfigFolder); break;
|
case "open-conf-folder": Process.Start(mp.ConfigFolder); break;
|
||||||
case "open-files": OpenFiles(args); break;
|
|
||||||
case "shell-execute": Process.Start(args[0]); break;
|
case "shell-execute": Process.Start(args[0]); break;
|
||||||
case "show-info": ShowInfo(); break;
|
case "show-info": ShowInfo(); break;
|
||||||
|
case "playlist-last": PlaylistLast(); break;
|
||||||
case "add-files-to-playlist": OpenFiles("append"); break; // deprecated 2019
|
case "add-files-to-playlist": OpenFiles("append"); break; // deprecated 2019
|
||||||
default: Msg.ShowError($"No command '{id}' found."); break;
|
default: Msg.ShowError($"No command '{id}' found."); break;
|
||||||
}
|
}
|
||||||
@@ -67,6 +69,33 @@ namespace mpvnet
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Open_DVD_Or_BD_Folder()
|
||||||
|
{
|
||||||
|
InvokeOnMainThread(new Action(() => {
|
||||||
|
using (var d = new FolderBrowserDialog())
|
||||||
|
{
|
||||||
|
d.Description = "Select a DVD or Blu-ray folder.";
|
||||||
|
d.ShowNewFolderButton = false;
|
||||||
|
|
||||||
|
if (d.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (Directory.Exists(d.SelectedPath + "\\BDMV"))
|
||||||
|
{
|
||||||
|
mp.set_property_string("bluray-device", d.SelectedPath);
|
||||||
|
mp.Load(new[] { @"bd://" }, false, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mp.set_property_string("dvd-device", d.SelectedPath);
|
||||||
|
mp.Load(new[] { @"dvd://" }, false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PlaylistLast() => mp.set_property_int("playlist-pos", mp.get_property_int("playlist-count") - 1);
|
||||||
|
|
||||||
public static void ShowHistory()
|
public static void ShowHistory()
|
||||||
{
|
{
|
||||||
var fp = mp.ConfigFolder + "history.txt";
|
var fp = mp.ConfigFolder + "history.txt";
|
||||||
@@ -230,7 +259,5 @@ namespace mpvnet
|
|||||||
mp.commandv("show-text", audTracks[aid - 1].Text.Substring(3), "5000");
|
mp.commandv("show-text", audTracks[aid - 1].Text.Substring(3), "5000");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ManageFileAssociations() => ShowDialog(typeof(SetupWindow)); // deprecated 2019
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dir = mp.ConfigFolder + "Extensions";
|
dir = mp.ConfigFolder + "extensions";
|
||||||
|
|
||||||
if (Directory.Exists(dir))
|
if (Directory.Exists(dir))
|
||||||
foreach (string i in Directory.GetDirectories(dir))
|
foreach (string i in Directory.GetDirectories(dir))
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("5.2.0.0")]
|
[assembly: AssemblyVersion("5.3.0.0")]
|
||||||
[assembly: AssemblyFileVersion("5.2.0.0")]
|
[assembly: AssemblyFileVersion("5.3.0.0")]
|
||||||
|
|||||||
@@ -1,17 +1,11 @@
|
|||||||
|
|
||||||
# This file defines the input (keys and mouse) bindings of mpv and mpv.net
|
# This file defines the key and mouse bindings and the context menu
|
||||||
# and it also defines the context menu of mpv.net. mpv.net has an input
|
# of mpv.net. A input and config editor can be found in mpv.net's
|
||||||
# editor and an config editor as alternative to editing conf text files.
|
# context menu under 'Settings'. The defaults of this file can be found at:
|
||||||
# The input and config editor can be found in mpv.net's context menu at:
|
|
||||||
|
|
||||||
# Settings > Show Config Editor
|
|
||||||
# Settings > Show Input Editor
|
|
||||||
|
|
||||||
# The defaults of this file can be found at:
|
|
||||||
|
|
||||||
# https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
|
# https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
|
||||||
|
|
||||||
# the defaults of mpv can be found at:
|
# The defaults of mpv can be found at:
|
||||||
|
|
||||||
# https://github.com/mpv-player/mpv/blob/master/etc/input.conf
|
# https://github.com/mpv-player/mpv/blob/master/etc/input.conf
|
||||||
|
|
||||||
@@ -26,16 +20,17 @@
|
|||||||
|
|
||||||
# run mpv.net in input test mode with: mpvnet --input-test
|
# run mpv.net in input test mode with: mpvnet --input-test
|
||||||
|
|
||||||
o script-message mpv.net open-files #menu: Open > Open Files...
|
o script-message mpv.net open-files #menu: Open > Open Files...
|
||||||
u script-message mpv.net open-url #menu: Open > Open URL or file path from clipboard
|
u script-message mpv.net open-url #menu: Open > Open URL or file path from clipboard
|
||||||
_ ignore #menu: Open > -
|
_ script-message mpv.net open-optical-media #menu: Open > Open DVD/Blu-ray Drive/Folder...
|
||||||
Alt+a script-message mpv.net load-audio #menu: Open > Load external audio files...
|
_ ignore #menu: Open > -
|
||||||
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
|
Alt+a script-message mpv.net load-audio #menu: Open > Load external audio files...
|
||||||
_ ignore #menu: Open > -
|
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
|
||||||
_ script-message mpv.net open-files append #menu: Open > Add files to playlist...
|
_ ignore #menu: Open > -
|
||||||
F3 script-message mpv.net show-media-search #menu: Open > Show media search...
|
_ script-message mpv.net open-files append #menu: Open > Add files to playlist...
|
||||||
_ ignore #menu: Open > -
|
F3 script-message mpv.net show-media-search #menu: Open > Show media search...
|
||||||
_ ignore #menu: Open > Recent
|
_ ignore #menu: Open > -
|
||||||
|
_ ignore #menu: Open > Recent
|
||||||
|
|
||||||
_ ignore #menu: -
|
_ ignore #menu: -
|
||||||
Space cycle pause #menu: Play/Pause
|
Space cycle pause #menu: Play/Pause
|
||||||
@@ -46,6 +41,9 @@
|
|||||||
F11 playlist-prev #menu: Navigate > Previous File
|
F11 playlist-prev #menu: Navigate > Previous File
|
||||||
F12 playlist-next #menu: Navigate > Next File
|
F12 playlist-next #menu: Navigate > Next File
|
||||||
_ ignore #menu: Navigate > -
|
_ ignore #menu: Navigate > -
|
||||||
|
Home set playlist-pos 0 #menu: Navigate > First File
|
||||||
|
End script-message mpv.net playlist-last #menu: Navigate > Last File
|
||||||
|
_ ignore #menu: Navigate > -
|
||||||
PGUP add chapter 1 #menu: Navigate > Next Chapter
|
PGUP add chapter 1 #menu: Navigate > Next Chapter
|
||||||
PGDWN add chapter -1 #menu: Navigate > Previous Chapter
|
PGDWN add chapter -1 #menu: Navigate > Previous Chapter
|
||||||
_ ignore #menu: Navigate > -
|
_ ignore #menu: Navigate > -
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
input-ar-delay = 500
|
input-default-bindings = no
|
||||||
|
input-ar-delay = 500
|
||||||
input-ar-rate = 20
|
input-ar-rate = 20
|
||||||
volume = 50
|
|
||||||
hwdec = yes
|
|
||||||
keep-open = yes
|
keep-open = yes
|
||||||
keep-open-pause = no
|
keep-open-pause = no
|
||||||
osd-playing-msg = '${filename}'
|
osd-playing-msg = '${filename}'
|
||||||
|
script-opts=osc-scalewindowed=1.5
|
||||||
screenshot-directory = '~~desktop/'
|
screenshot-directory = '~~desktop/'
|
||||||
input-default-bindings = no
|
cscale = spline36
|
||||||
script-opts=osc-scalewindowed=1.5
|
dscale = spline36
|
||||||
|
scale = spline36
|
||||||
|
hwdec = yes
|
||||||
@@ -23,10 +23,10 @@ options = [{ name = "no", help = "always use software decoding" },
|
|||||||
name = "gpu-api"
|
name = "gpu-api"
|
||||||
default = "auto"
|
default = "auto"
|
||||||
filter = "Video"
|
filter = "Video"
|
||||||
help = "Controls which type of graphics APIs will be accepted. Auto uses d3d11, it should only be changed in case of problems."
|
help = "Controls which type of graphics APIs will be accepted. Auto uses d3d11, it should only be changed in case of problems, Vulkan is not recommended."
|
||||||
options = [{ name = "auto", help = "Use any available API" },
|
options = [{ name = "auto", help = "Use any available API" },
|
||||||
{ name = "opengl", help = "Allow only OpenGL (requires OpenGL 2.1+ or GLES 2.0+)" },
|
{ name = "opengl", help = "Allow only OpenGL (requires OpenGL 2.1+ or GLES 2.0+)" },
|
||||||
{ name = "vulkan", help = "Allow only Vulkan (requires a valid/working spirv-compiler)" },
|
{ name = "vulkan", help = "Allow only Vulkan (not recommended). " },
|
||||||
{ name = "d3d11", help = "Allow only gpu-context=d3d11" }]
|
{ name = "d3d11", help = "Allow only gpu-context=d3d11" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
@@ -241,6 +241,14 @@ default = "55"
|
|||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "Specify the OSD font size. See sub-font-size for details. Default: 55"
|
help = "Specify the OSD font size. See sub-font-size for details. Default: 55"
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "osd-scale-by-window"
|
||||||
|
default = "yes"
|
||||||
|
filter = "Screen"
|
||||||
|
help = "Whether to scale the OSD with the window size. If this is disabled, osd-font-size and other OSD options that use scaled pixels are always in actual pixels. The effect is that changing the window size won't change the OSD font size."
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "autofit"
|
name = "autofit"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
@@ -283,7 +291,7 @@ options = [{ name = "yes" },
|
|||||||
name = "screenshot-high-bit-depth"
|
name = "screenshot-high-bit-depth"
|
||||||
default = "yes"
|
default = "yes"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "If possible, write screenshots with a bit depth similar to the source video (default: yes). This is interesting in particular for PNG, as this sometimes triggers writing 16 bit PNGs with huge file sizes. This will also include an unused alpha channel in the resulting files if 16 bit is used."
|
help = "If possible, write screenshots with a bit depth similar to the source video. This is interesting in particular for PNG, as this sometimes triggers writing 16 bit PNGs with huge file sizes. This will also include an unused alpha channel in the resulting files if 16 bit is used."
|
||||||
options = [{ name = "yes" },
|
options = [{ name = "yes" },
|
||||||
{ name = "no" }]
|
{ name = "no" }]
|
||||||
|
|
||||||
@@ -291,7 +299,7 @@ options = [{ name = "yes" },
|
|||||||
name = "screenshot-jpeg-source-chroma"
|
name = "screenshot-jpeg-source-chroma"
|
||||||
default = "yes"
|
default = "yes"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "Write JPEG files with the same chroma subsampling as the video (default: yes). If disabled, the libjpeg default is used."
|
help = "Write JPEG files with the same chroma subsampling as the video. If disabled, the libjpeg default is used."
|
||||||
options = [{ name = "yes" },
|
options = [{ name = "yes" },
|
||||||
{ name = "no" }]
|
{ name = "no" }]
|
||||||
|
|
||||||
@@ -329,10 +337,10 @@ options = [{ name = "yes" },
|
|||||||
name = "keep-open"
|
name = "keep-open"
|
||||||
default = "no"
|
default = "no"
|
||||||
filter = "Playback"
|
filter = "Playback"
|
||||||
help = "Do not terminate when playing or seeking beyond the end of the file, and there is not next file to be played (and loop is not used). Instead, pause the player. When trying to seek beyond end of the file, the player will attempt to seek to the last frame.\n\nNormally, this will act like set pause yes on EOF, unless the keep-open-pause=no option is set."
|
help = "Using no, mpv would terminate after the last file but mpv.net never terminates automatically."
|
||||||
options = [{ name = "yes", help = "Don't terminate if the current file is the last playlist entry. Equivalent to keep-open without arguments."},
|
options = [{ name = "yes", help = "If the current file ends, go to the next file, keep the last file open."},
|
||||||
{ name = "no", help = "If the current file ends, go to the next file or terminate." },
|
{ name = "no", help = "If the current file ends, go to the next file." },
|
||||||
{ name = "always", help = "Like yes, but also applies to files before the last playlist entry. This means playback will never automatically advance to the next file."}]
|
{ name = "always", help = "Playback will never automatically advance to the next file."}]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "loop-file"
|
name = "loop-file"
|
||||||
|
|||||||
@@ -15,12 +15,9 @@ options = [{ name = "multi", help = "Create a new process everytime the shell s
|
|||||||
{ name = "queue", help = "Force a single process and add files to playlist" }]
|
{ name = "queue", help = "Force a single process and add files to playlist" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "debug-mode"
|
name = "recent-count"
|
||||||
default = "no"
|
|
||||||
filter = "General"
|
filter = "General"
|
||||||
help = "Enable this only when a developer asks for it. (mpv.net specific setting)"
|
help = "<int> Amount of recent files to be remembered. Default: 15 (mpv.net specific setting)"
|
||||||
options = [{ name = "yes" },
|
|
||||||
{ name = "no" }]
|
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "start-size"
|
name = "start-size"
|
||||||
@@ -33,12 +30,12 @@ options = [{ name = "video", help = "Window size is set to native video resoluti
|
|||||||
[[settings]]
|
[[settings]]
|
||||||
name = "start-threshold"
|
name = "start-threshold"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "Threshold in milliseconds to wait for libmpv returning the video resolution before the window is shown, otherwise default dimensions are used as defined by autofit and start-size. (mpv.net specific setting) Default: 1500"
|
help = "Threshold in milliseconds to wait for libmpv returning the video resolution before the window is shown, otherwise default dimensions are used as defined by autofit and start-size. Default: 1500 (mpv.net specific setting)"
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "minimum-aspect-ratio"
|
name = "minimum-aspect-ratio"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "<float> Minimum aspect ratio for the window. Default: 1.3"
|
help = "<float> Minimum aspect ratio for the window. Default: 1.3 (mpv.net specific setting)"
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "remember-position"
|
name = "remember-position"
|
||||||
@@ -50,7 +47,7 @@ options = [{ name = "yes" },
|
|||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "remember-volume"
|
name = "remember-volume"
|
||||||
default = "no"
|
default = "yes"
|
||||||
filter = "Audio"
|
filter = "Audio"
|
||||||
help = "Save volume and mute on exit and restore it on start. (mpv.net specific setting)"
|
help = "Save volume and mute on exit and restore it on start. (mpv.net specific setting)"
|
||||||
options = [{ name = "yes" },
|
options = [{ name = "yes" },
|
||||||
@@ -90,5 +87,13 @@ name = "themed-menu"
|
|||||||
default = "no"
|
default = "no"
|
||||||
filter = "UI"
|
filter = "UI"
|
||||||
help = "Follow theme color in context menu. (mpv.net specific setting)"
|
help = "Follow theme color in context menu. (mpv.net specific setting)"
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "debug-mode"
|
||||||
|
default = "no"
|
||||||
|
filter = "General"
|
||||||
|
help = "Enable this only when a developer asks for it. (mpv.net specific setting)"
|
||||||
options = [{ name = "yes" },
|
options = [{ name = "yes" },
|
||||||
{ name = "no" }]
|
{ name = "no" }]
|
||||||
@@ -96,7 +96,7 @@ namespace mpvnet
|
|||||||
public Delegate Delegate { get; set; }
|
public Delegate Delegate { get; set; }
|
||||||
public string FilePath { get; set; }
|
public string FilePath { get; set; }
|
||||||
|
|
||||||
public void Invoke() => Task.Run(() => { PowerShellScript.Execute(File.ReadAllText(FilePath), null); });
|
public void Invoke() => Task.Run(() => PowerShellScript.Execute(File.ReadAllText(FilePath), null));
|
||||||
|
|
||||||
public void InvokeEndFileEventMode(EndFileEventMode arg)
|
public void InvokeEndFileEventMode(EndFileEventMode arg)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="About mpv.net" Height="230" Width="500" FontSize="16" ShowInTaskbar="False"
|
Title="About mpv.net" Height="230" Width="400" FontSize="16" ShowInTaskbar="False"
|
||||||
WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
|
WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
|
||||||
<Grid>
|
<Grid>
|
||||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
|
||||||
|
|
||||||
namespace mpvnet
|
namespace mpvnet
|
||||||
{
|
{
|
||||||
@@ -10,7 +9,7 @@ namespace mpvnet
|
|||||||
public AboutWindow()
|
public AboutWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Version.Text = $"mpv.net Version {System.Windows.Forms.Application.ProductVersion}";
|
Version.Text = $"mpv.net Version {System.Windows.Forms.Application.ProductVersion} ({File.GetLastWriteTime(System.Windows.Forms.Application.ExecutablePath).ToShortDateString()})";
|
||||||
mpvVersion.Text = $"{mp.get_property_string("mpv-version")} ({File.GetLastWriteTime(PathHelp.StartupPath + "mpv-1.dll").ToShortDateString()})";
|
mpvVersion.Text = $"{mp.get_property_string("mpv-version")} ({File.GetLastWriteTime(PathHelp.StartupPath + "mpv-1.dll").ToShortDateString()})";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,7 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
SearchControl.SearchTextBox.SelectAll();
|
SearchControl.SearchTextBox.SelectAll();
|
||||||
Keyboard.Focus(SearchControl.SearchTextBox);
|
Keyboard.Focus(SearchControl.SearchTextBox);
|
||||||
|
|
||||||
foreach (var i in MainStackPanel.Children.OfType<StringSettingControl>())
|
foreach (var i in MainStackPanel.Children.OfType<StringSettingControl>())
|
||||||
i.Update();
|
i.Update();
|
||||||
}
|
}
|
||||||
|
|||||||
2
mpv.net/WinForms/MainForm.Designer.cs
generated
2
mpv.net/WinForms/MainForm.Designer.cs
generated
@@ -45,7 +45,7 @@
|
|||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(288F, 288F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(288F, 288F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
this.BackColor = System.Drawing.Color.Black;
|
this.BackColor = System.Drawing.Color.Black;
|
||||||
this.ClientSize = new System.Drawing.Size(542, 0);
|
this.ClientSize = new System.Drawing.Size(668, 345);
|
||||||
this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
||||||
|
|||||||
@@ -33,6 +33,22 @@ namespace mpvnet
|
|||||||
Instance = this;
|
Instance = this;
|
||||||
Hwnd = Handle;
|
Hwnd = Handle;
|
||||||
mp.Init();
|
mp.Init();
|
||||||
|
|
||||||
|
mp.Shutdown += Shutdown;
|
||||||
|
mp.VideoSizeChanged += VideoSizeChanged;
|
||||||
|
mp.FileLoaded += FileLoaded;
|
||||||
|
mp.Idle += Idle;
|
||||||
|
|
||||||
|
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
|
||||||
|
mp.observe_property_bool("ontop", PropChangeOnTop);
|
||||||
|
mp.observe_property_bool("border", PropChangeBorder);
|
||||||
|
mp.observe_property_string("sid", PropChangeSid);
|
||||||
|
mp.observe_property_string("aid", PropChangeAid);
|
||||||
|
mp.observe_property_string("vid", PropChangeVid);
|
||||||
|
mp.observe_property_int("edition", PropChangeEdition);
|
||||||
|
|
||||||
|
if (mp.GPUAPI != "vulkan") mp.ProcessCommandLine(false);
|
||||||
|
|
||||||
AppDomain.CurrentDomain.UnhandledException += (sender, e) => Msg.ShowError(e.ExceptionObject.ToString());
|
AppDomain.CurrentDomain.UnhandledException += (sender, e) => Msg.ShowError(e.ExceptionObject.ToString());
|
||||||
Application.ThreadException += (sender, e) => Msg.ShowException(e.Exception);
|
Application.ThreadException += (sender, e) => Msg.ShowException(e.Exception);
|
||||||
Msg.SupportURL = "https://github.com/stax76/mpv.net#support";
|
Msg.SupportURL = "https://github.com/stax76/mpv.net#support";
|
||||||
@@ -67,22 +83,6 @@ namespace mpvnet
|
|||||||
Left = posX - Width / 2;
|
Left = posX - Width / 2;
|
||||||
Top = posY - Height / 2;
|
Top = posY - Height / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
mp.Shutdown += Shutdown;
|
|
||||||
mp.VideoSizeChanged += VideoSizeChanged;
|
|
||||||
mp.FileLoaded += FileLoaded;
|
|
||||||
mp.Idle += Idle;
|
|
||||||
|
|
||||||
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
|
|
||||||
mp.observe_property_bool("ontop", PropChangeOnTop);
|
|
||||||
mp.observe_property_bool("border", PropChangeBorder);
|
|
||||||
mp.observe_property_string("sid", PropChangeSid);
|
|
||||||
mp.observe_property_string("aid", PropChangeAid);
|
|
||||||
mp.observe_property_string("vid", PropChangeVid);
|
|
||||||
mp.observe_property_int("edition", PropChangeEdition);
|
|
||||||
|
|
||||||
if (mp.GPUAPI != "vulkan") mp.VideoSizeAutoResetEvent.WaitOne(App.StartThreshold);
|
|
||||||
if (Height < FontHeight * 4) SetFormPosAndSize();
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -126,7 +126,7 @@ namespace mpvnet
|
|||||||
foreach (MediaTrack track in vidTracks)
|
foreach (MediaTrack track in vidTracks)
|
||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem(track.Text);
|
MenuItem mi = new MenuItem(track.Text);
|
||||||
mi.Action = () => { mp.commandv("set", "vid", track.ID.ToString()); };
|
mi.Action = () => mp.commandv("set", "vid", track.ID.ToString());
|
||||||
mi.Checked = mp.Vid == track.ID.ToString();
|
mi.Checked = mp.Vid == track.ID.ToString();
|
||||||
trackMenuItem.DropDownItems.Add(mi);
|
trackMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ namespace mpvnet
|
|||||||
foreach (MediaTrack track in audTracks)
|
foreach (MediaTrack track in audTracks)
|
||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem(track.Text);
|
MenuItem mi = new MenuItem(track.Text);
|
||||||
mi.Action = () => { mp.commandv("set", "aid", track.ID.ToString()); };
|
mi.Action = () => mp.commandv("set", "aid", track.ID.ToString());
|
||||||
mi.Checked = mp.Aid == track.ID.ToString();
|
mi.Checked = mp.Aid == track.ID.ToString();
|
||||||
trackMenuItem.DropDownItems.Add(mi);
|
trackMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ namespace mpvnet
|
|||||||
foreach (MediaTrack track in subTracks)
|
foreach (MediaTrack track in subTracks)
|
||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem(track.Text);
|
MenuItem mi = new MenuItem(track.Text);
|
||||||
mi.Action = () => { mp.commandv("set", "sid", track.ID.ToString()); };
|
mi.Action = () => mp.commandv("set", "sid", track.ID.ToString());
|
||||||
mi.Checked = mp.Sid == track.ID.ToString();
|
mi.Checked = mp.Sid == track.ID.ToString();
|
||||||
trackMenuItem.DropDownItems.Add(mi);
|
trackMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ namespace mpvnet
|
|||||||
if (subTracks.Length > 0)
|
if (subTracks.Length > 0)
|
||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem("S: No subtitles");
|
MenuItem mi = new MenuItem("S: No subtitles");
|
||||||
mi.Action = () => { mp.commandv("set", "sid", "no"); };
|
mi.Action = () => mp.commandv("set", "sid", "no");
|
||||||
mi.Checked = mp.Sid == "no";
|
mi.Checked = mp.Sid == "no";
|
||||||
trackMenuItem.DropDownItems.Add(mi);
|
trackMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
@@ -167,7 +167,7 @@ namespace mpvnet
|
|||||||
foreach (MediaTrack track in ediTracks)
|
foreach (MediaTrack track in ediTracks)
|
||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem(track.Text);
|
MenuItem mi = new MenuItem(track.Text);
|
||||||
mi.Action = () => { mp.commandv("set", "edition", track.ID.ToString()); };
|
mi.Action = () => mp.commandv("set", "edition", track.ID.ToString());
|
||||||
mi.Checked = mp.Edition == track.ID;
|
mi.Checked = mp.Edition == track.ID;
|
||||||
trackMenuItem.DropDownItems.Add(mi);
|
trackMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
@@ -186,7 +186,7 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
MenuItem mi = new MenuItem(i.Key);
|
MenuItem mi = new MenuItem(i.Key);
|
||||||
mi.ShortcutKeyDisplayString = TimeSpan.FromSeconds(i.Value).ToString().Substring(0, 8) + " ";
|
mi.ShortcutKeyDisplayString = TimeSpan.FromSeconds(i.Value).ToString().Substring(0, 8) + " ";
|
||||||
mi.Action = () => { mp.commandv("seek", i.Value.ToString(CultureInfo.InvariantCulture), "absolute"); };
|
mi.Action = () => mp.commandv("seek", i.Value.ToString(CultureInfo.InvariantCulture), "absolute");
|
||||||
chaptersMenuItem.DropDownItems.Add(mi);
|
chaptersMenuItem.DropDownItems.Add(mi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,14 +368,16 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
string path = mp.get_property_string("path");
|
string path = mp.get_property_string("path");
|
||||||
BeginInvoke(new Action(() => {
|
BeginInvoke(new Action(() => {
|
||||||
if (File.Exists(path) || path.Contains("://"))
|
if (path.Contains("://"))
|
||||||
|
Text = path + " - mpv.net " + Application.ProductVersion;
|
||||||
|
else if (File.Exists(path))
|
||||||
Text = path.FileName() + " - mpv.net " + Application.ProductVersion;
|
Text = path.FileName() + " - mpv.net " + Application.ProductVersion;
|
||||||
else
|
else
|
||||||
Text = "mpv.net " + Application.ProductVersion;
|
Text = "mpv.net " + Application.ProductVersion;
|
||||||
}));
|
}));
|
||||||
if (RecentFiles.Contains(path)) RecentFiles.Remove(path);
|
if (RecentFiles.Contains(path)) RecentFiles.Remove(path);
|
||||||
RecentFiles.Insert(0, path);
|
RecentFiles.Insert(0, path);
|
||||||
if (RecentFiles.Count > 15) RecentFiles.RemoveAt(15);
|
while (RecentFiles.Count > App.RecentCount) RecentFiles.RemoveAt(App.RecentCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override CreateParams CreateParams {
|
protected override CreateParams CreateParams {
|
||||||
@@ -510,7 +512,8 @@ namespace mpvnet
|
|||||||
protected override void OnLoad(EventArgs e)
|
protected override void OnLoad(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
if (mp.get_property_int("playlist-count") == 0) mp.ShowLogo();
|
if (mp.GPUAPI != "vulkan") mp.VideoSizeAutoResetEvent.WaitOne(App.StartThreshold);
|
||||||
|
SetFormPosAndSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnShown(EventArgs e)
|
protected override void OnShown(EventArgs e)
|
||||||
@@ -527,8 +530,8 @@ namespace mpvnet
|
|||||||
CheckClipboardForURL();
|
CheckClipboardForURL();
|
||||||
Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);
|
Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);
|
||||||
WasShown = true;
|
WasShown = true;
|
||||||
Task.Run(() => { mp.LoadScripts(); });
|
Task.Run(() => mp.LoadScripts());
|
||||||
Task.Run(() => { mp.Extension = new Extension(); });
|
Task.Run(() => mp.Extension = new Extension());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnActivated(EventArgs e)
|
protected override void OnActivated(EventArgs e)
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ namespace mpvnet
|
|||||||
public static AutoResetEvent ShutdownAutoResetEvent { get; set; } = new AutoResetEvent(false);
|
public static AutoResetEvent ShutdownAutoResetEvent { get; set; } = new AutoResetEvent(false);
|
||||||
public static AutoResetEvent VideoSizeAutoResetEvent { get; set; } = new AutoResetEvent(false);
|
public static AutoResetEvent VideoSizeAutoResetEvent { get; set; } = new AutoResetEvent(false);
|
||||||
|
|
||||||
public static string InputConfPath { get; } = ConfigFolder + "\\input.conf";
|
public static string InputConfPath { get => ConfigFolder + "input.conf"; }
|
||||||
public static string ConfPath { get; } = ConfigFolder + "\\mpv.conf";
|
public static string ConfPath { get => ConfigFolder + "mpv.conf"; }
|
||||||
public static string Sid { get; set; } = "";
|
public static string Sid { get; set; } = "";
|
||||||
public static string Aid { get; set; } = "";
|
public static string Aid { get; set; } = "";
|
||||||
public static string Vid { get; set; } = "";
|
public static string Vid { get; set; } = "";
|
||||||
@@ -93,7 +93,7 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
LoadLibrary("mpv-1.dll");
|
LoadLibrary("mpv-1.dll");
|
||||||
Handle = mpv_create();
|
Handle = mpv_create();
|
||||||
Task.Run(() => { EventLoop(); });
|
Task.Run(() => EventLoop());
|
||||||
|
|
||||||
if (App.IsStartedFromTerminal)
|
if (App.IsStartedFromTerminal)
|
||||||
{
|
{
|
||||||
@@ -113,7 +113,6 @@ namespace mpvnet
|
|||||||
mpv_initialize(Handle);
|
mpv_initialize(Handle);
|
||||||
Initialized?.Invoke();
|
Initialized?.Invoke();
|
||||||
LoadMpvScripts();
|
LoadMpvScripts();
|
||||||
if (GPUAPI != "vulkan") ProcessCommandLine(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ProcessProperty(string name, string value)
|
public static void ProcessProperty(string name, string value)
|
||||||
@@ -201,14 +200,14 @@ namespace mpvnet
|
|||||||
if (!_ConfigFolder.Contains("portable_config"))
|
if (!_ConfigFolder.Contains("portable_config"))
|
||||||
RegHelp.SetObject(App.RegPath, "ConfigFolder", _ConfigFolder);
|
RegHelp.SetObject(App.RegPath, "ConfigFolder", _ConfigFolder);
|
||||||
|
|
||||||
if (!File.Exists(_ConfigFolder + "\\input.conf"))
|
if (!File.Exists(_ConfigFolder + "input.conf"))
|
||||||
File.WriteAllText(_ConfigFolder + "\\input.conf", Properties.Resources.inputConf);
|
File.WriteAllText(_ConfigFolder + "input.conf", Properties.Resources.inputConf);
|
||||||
|
|
||||||
if (!File.Exists(_ConfigFolder + "\\mpv.conf"))
|
if (!File.Exists(_ConfigFolder + "mpv.conf"))
|
||||||
File.WriteAllText(_ConfigFolder + "\\mpv.conf", Properties.Resources.mpvConf);
|
File.WriteAllText(_ConfigFolder + "mpv.conf", Properties.Resources.mpvConf);
|
||||||
|
|
||||||
if (!File.Exists(_ConfigFolder + "\\mpvnet.conf"))
|
if (!File.Exists(_ConfigFolder + "mpvnet.conf"))
|
||||||
File.WriteAllText(_ConfigFolder + "\\mpvnet.conf", Properties.Resources.mpvNetConf);
|
File.WriteAllText(_ConfigFolder + "mpvnet.conf", Properties.Resources.mpvNetConf);
|
||||||
}
|
}
|
||||||
return _ConfigFolder;
|
return _ConfigFolder;
|
||||||
}
|
}
|
||||||
@@ -266,8 +265,8 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Directory.Exists(ConfigFolder + "Scripts"))
|
if (Directory.Exists(ConfigFolder + "scripts"))
|
||||||
foreach (string scriptPath in Directory.GetFiles(ConfigFolder + "Scripts"))
|
foreach (string scriptPath in Directory.GetFiles(ConfigFolder + "scripts"))
|
||||||
if (scriptPath.EndsWith(".py"))
|
if (scriptPath.EndsWith(".py"))
|
||||||
PythonScripts.Add(new PythonScript(File.ReadAllText(scriptPath)));
|
PythonScripts.Add(new PythonScript(File.ReadAllText(scriptPath)));
|
||||||
else if (scriptPath.EndsWith(".ps1"))
|
else if (scriptPath.EndsWith(".ps1"))
|
||||||
@@ -339,7 +338,7 @@ namespace mpvnet
|
|||||||
break;
|
break;
|
||||||
case mpv_event_id.MPV_EVENT_IDLE:
|
case mpv_event_id.MPV_EVENT_IDLE:
|
||||||
Idle?.Invoke();
|
Idle?.Invoke();
|
||||||
if (get_property_int("playlist-count") == 0) ShowLogo();
|
ShowLogo();
|
||||||
break;
|
break;
|
||||||
case mpv_event_id.MPV_EVENT_PAUSE:
|
case mpv_event_id.MPV_EVENT_PAUSE:
|
||||||
Pause?.Invoke();
|
Pause?.Invoke();
|
||||||
@@ -377,19 +376,22 @@ namespace mpvnet
|
|||||||
var propData = (mpv_event_property)Marshal.PtrToStructure(evt.data, typeof(mpv_event_property));
|
var propData = (mpv_event_property)Marshal.PtrToStructure(evt.data, typeof(mpv_event_property));
|
||||||
|
|
||||||
if (propData.format == mpv_format.MPV_FORMAT_FLAG)
|
if (propData.format == mpv_format.MPV_FORMAT_FLAG)
|
||||||
foreach (var i in BoolPropChangeActions)
|
lock (BoolPropChangeActions)
|
||||||
if (i.Key== propData.name)
|
foreach (var i in BoolPropChangeActions)
|
||||||
i.Value.Invoke(Marshal.PtrToStructure<int>(propData.data) == 1);
|
if (i.Key== propData.name)
|
||||||
|
i.Value.Invoke(Marshal.PtrToStructure<int>(propData.data) == 1);
|
||||||
|
|
||||||
if (propData.format == mpv_format.MPV_FORMAT_STRING)
|
if (propData.format == mpv_format.MPV_FORMAT_STRING)
|
||||||
foreach (var i in StringPropChangeActions)
|
lock (StringPropChangeActions)
|
||||||
if (i.Key == propData.name)
|
foreach (var i in StringPropChangeActions)
|
||||||
i.Value.Invoke(StringFromNativeUtf8(Marshal.PtrToStructure<IntPtr>(propData.data)));
|
if (i.Key == propData.name)
|
||||||
|
i.Value.Invoke(StringFromNativeUtf8(Marshal.PtrToStructure<IntPtr>(propData.data)));
|
||||||
|
|
||||||
if (propData.format == mpv_format.MPV_FORMAT_INT64)
|
if (propData.format == mpv_format.MPV_FORMAT_INT64)
|
||||||
foreach (var i in IntPropChangeActions)
|
lock (IntPropChangeActions)
|
||||||
if (i.Key == propData.name)
|
foreach (var i in IntPropChangeActions)
|
||||||
i.Value.Invoke(Marshal.PtrToStructure<int>(propData.data));
|
if (i.Key == propData.name)
|
||||||
|
i.Value.Invoke(Marshal.PtrToStructure<int>(propData.data));
|
||||||
break;
|
break;
|
||||||
case mpv_event_id.MPV_EVENT_PLAYBACK_RESTART:
|
case mpv_event_id.MPV_EVENT_PLAYBACK_RESTART:
|
||||||
PlaybackRestart?.Invoke();
|
PlaybackRestart?.Invoke();
|
||||||
@@ -548,7 +550,8 @@ namespace mpvnet
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
throw new Exception($"{name}: {(mpv_error)err}");
|
throw new Exception($"{name}: {(mpv_error)err}");
|
||||||
else
|
else
|
||||||
IntPropChangeActions.Add(new KeyValuePair<string, Action<int>>(name, action));
|
lock (IntPropChangeActions)
|
||||||
|
IntPropChangeActions.Add(new KeyValuePair<string, Action<int>>(name, action));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void observe_property_bool(string name, Action<bool> action)
|
public static void observe_property_bool(string name, Action<bool> action)
|
||||||
@@ -558,7 +561,8 @@ namespace mpvnet
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
throw new Exception($"{name}: {(mpv_error)err}");
|
throw new Exception($"{name}: {(mpv_error)err}");
|
||||||
else
|
else
|
||||||
BoolPropChangeActions.Add(new KeyValuePair<string, Action<bool>>(name, action));
|
lock (BoolPropChangeActions)
|
||||||
|
BoolPropChangeActions.Add(new KeyValuePair<string, Action<bool>>(name, action));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void observe_property_string(string name, Action<string> action)
|
public static void observe_property_string(string name, Action<string> action)
|
||||||
@@ -568,7 +572,8 @@ namespace mpvnet
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
throw new Exception($"{name}: {(mpv_error)err}");
|
throw new Exception($"{name}: {(mpv_error)err}");
|
||||||
else
|
else
|
||||||
StringPropChangeActions.Add(new KeyValuePair<string, Action<string>>(name, action));
|
lock (StringPropChangeActions)
|
||||||
|
StringPropChangeActions.Add(new KeyValuePair<string, Action<string>>(name, action));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ProcessCommandLine(bool preInit)
|
public static void ProcessCommandLine(bool preInit)
|
||||||
@@ -631,8 +636,8 @@ namespace mpvnet
|
|||||||
|
|
||||||
if (files.Count == 0 || files[0].Contains("://"))
|
if (files.Count == 0 || files[0].Contains("://"))
|
||||||
{
|
{
|
||||||
VideoSizeAutoResetEvent.Set();
|
|
||||||
VideoSizeChanged?.Invoke();
|
VideoSizeChanged?.Invoke();
|
||||||
|
VideoSizeAutoResetEvent.Set();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -671,7 +676,7 @@ namespace mpvnet
|
|||||||
string path = get_property_string("path");
|
string path = get_property_string("path");
|
||||||
if (!File.Exists(path) || get_property_int("playlist-count") != 1) return;
|
if (!File.Exists(path) || get_property_int("playlist-count") != 1) return;
|
||||||
List<string> files = Directory.GetFiles(Path.GetDirectoryName(path)).ToList();
|
List<string> files = Directory.GetFiles(Path.GetDirectoryName(path)).ToList();
|
||||||
files = files.Where((file) =>
|
files = files.Where(file =>
|
||||||
App.VideoTypes.Contains(file.ShortExt()) ||
|
App.VideoTypes.Contains(file.ShortExt()) ||
|
||||||
App.AudioTypes.Contains(file.ShortExt()) ||
|
App.AudioTypes.Contains(file.ShortExt()) ||
|
||||||
App.ImageTypes.Contains(file.ShortExt())).ToList();
|
App.ImageTypes.Contains(file.ShortExt())).ToList();
|
||||||
@@ -734,11 +739,8 @@ namespace mpvnet
|
|||||||
|
|
||||||
if (File.Exists(LastHistoryPath) && totalMinutes > 1)
|
if (File.Exists(LastHistoryPath) && totalMinutes > 1)
|
||||||
{
|
{
|
||||||
string historyFilepath = ConfigFolder + "history.txt";
|
File.AppendAllText(ConfigFolder + "history.txt", DateTime.Now.ToString().Substring(0, 16) +
|
||||||
|
" " + totalMinutes.ToString().PadLeft(3) + " " + Path.GetFileNameWithoutExtension(LastHistoryPath) + "\r\n");
|
||||||
File.AppendAllText(historyFilepath, DateTime.Now.ToString().Substring(0, 16) +
|
|
||||||
" " + totalMinutes.ToString().PadLeft(3) + " " +
|
|
||||||
Path.GetFileNameWithoutExtension(LastHistoryPath) + "\r\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LastHistoryPath = path;
|
LastHistoryPath = path;
|
||||||
|
|||||||
Reference in New Issue
Block a user