-
This commit is contained in:
@@ -28,7 +28,7 @@ namespace mpvnet
|
||||
foreach (string i in Directory.GetDirectories(dir))
|
||||
catalog.Catalogs.Add(new DirectoryCatalog(i, "*Addon.dll"));
|
||||
|
||||
dir = mp.MpvConfFolderPath + "\\Addons";
|
||||
dir = mp.MpvConfFolder + "\\Addons";
|
||||
|
||||
if (Directory.Exists(dir))
|
||||
foreach (string i in Directory.GetDirectories(dir))
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace mpvnet
|
||||
|
||||
public static void open_conf_folder(string[] args)
|
||||
{
|
||||
Process.Start(mp.MpvConfFolderPath);
|
||||
Process.Start(mp.MpvConfFolder);
|
||||
}
|
||||
|
||||
public static void show_input_editor(string[] args)
|
||||
@@ -73,7 +73,7 @@ namespace mpvnet
|
||||
|
||||
public static void show_history(string[] args)
|
||||
{
|
||||
var fp = mp.MpvConfFolderPath + "history.txt";
|
||||
var fp = mp.MpvConfFolder + "history.txt";
|
||||
|
||||
if (File.Exists(fp))
|
||||
Process.Start(fp);
|
||||
|
||||
@@ -18,23 +18,20 @@ namespace mpvnet
|
||||
public static MainForm Instance { get; set; }
|
||||
public static IntPtr Hwnd { get; set; }
|
||||
|
||||
public new ContextMenuStripEx ContextMenu;
|
||||
|
||||
MenuItemEx TracksMenu;
|
||||
MenuItemEx ChaptersMenu;
|
||||
public new ContextMenuStripEx ContextMenu { get; set; }
|
||||
|
||||
Point LastCursorPosChanged;
|
||||
int LastCursorChangedTickCount;
|
||||
bool IgnoreDpiChanged = true;
|
||||
|
||||
float MpvAutofit = 0.50f;
|
||||
bool MpvFullscreen;
|
||||
int MpvScreen = -1;
|
||||
string MpvNetDarkMode = "system";
|
||||
string MpvSid = "";
|
||||
string MpvAid = "";
|
||||
string MpvVid = "";
|
||||
int MpvEdition;
|
||||
public string MpvNetDarkMode { get; set; } = "system";
|
||||
public bool MpvFullscreen { get; set; }
|
||||
public float MpvAutofit { get; set; } = 0.50f;
|
||||
public int MpvScreen { get; set; } = -1;
|
||||
public string MpvSid { get; set; } = "";
|
||||
public string MpvAid { get; set; } = "";
|
||||
public string MpvVid { get; set; } = "";
|
||||
public int MpvEdition { get; set; }
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
@@ -74,73 +71,107 @@ namespace mpvnet
|
||||
{
|
||||
lock (mp.MediaTracks)
|
||||
{
|
||||
if (TracksMenu != null)
|
||||
TracksMenu.DropDownItems.Clear();
|
||||
MenuItem trackMenuItem = FindMenuItem("Track");
|
||||
|
||||
MediaTrack[] audTracks = mp.MediaTracks.Where(track => track.Type == "a").ToArray();
|
||||
MediaTrack[] subTracks = mp.MediaTracks.Where(track => track.Type == "s").ToArray();
|
||||
MediaTrack[] vidTracks = mp.MediaTracks.Where(track => track.Type == "v").ToArray();
|
||||
MediaTrack[] ediTracks = mp.MediaTracks.Where(track => track.Type == "e").ToArray();
|
||||
|
||||
foreach (MediaTrack track in vidTracks)
|
||||
if (trackMenuItem != null)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Track > " + track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "vid", track.ID.ToString()); };
|
||||
mi.Checked = MpvVid == track.ID.ToString();
|
||||
}
|
||||
trackMenuItem.DropDownItems.Clear();
|
||||
|
||||
if (vidTracks.Length > 0)
|
||||
ContextMenu.Add("Track > -");
|
||||
MediaTrack[] audTracks = mp.MediaTracks.Where(track => track.Type == "a").ToArray();
|
||||
MediaTrack[] subTracks = mp.MediaTracks.Where(track => track.Type == "s").ToArray();
|
||||
MediaTrack[] vidTracks = mp.MediaTracks.Where(track => track.Type == "v").ToArray();
|
||||
MediaTrack[] ediTracks = mp.MediaTracks.Where(track => track.Type == "e").ToArray();
|
||||
|
||||
foreach (MediaTrack track in audTracks)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Track > " + track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "aid", track.ID.ToString()); };
|
||||
mi.Checked = MpvAid == track.ID.ToString();
|
||||
}
|
||||
foreach (MediaTrack track in vidTracks)
|
||||
{
|
||||
MenuItem mi = new MenuItem(track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "vid", track.ID.ToString()); };
|
||||
mi.Checked = MpvVid == track.ID.ToString();
|
||||
trackMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
|
||||
if (subTracks.Length > 0)
|
||||
ContextMenu.Add("Track > -");
|
||||
if (vidTracks.Length > 0)
|
||||
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
|
||||
|
||||
foreach (MediaTrack track in subTracks)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Track > " + track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "sid", track.ID.ToString()); };
|
||||
mi.Checked = MpvSid == track.ID.ToString();
|
||||
}
|
||||
foreach (MediaTrack track in audTracks)
|
||||
{
|
||||
MenuItem mi = new MenuItem(track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "aid", track.ID.ToString()); };
|
||||
mi.Checked = MpvAid == track.ID.ToString();
|
||||
trackMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
|
||||
if (subTracks.Length > 0)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Track > S: No subtitles");
|
||||
mi.Action = () => { mp.commandv("set", "sid", "no"); };
|
||||
mi.Checked = MpvSid == "no";
|
||||
}
|
||||
if (subTracks.Length > 0)
|
||||
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
|
||||
|
||||
if (ediTracks.Length > 0)
|
||||
ContextMenu.Add("Track > -");
|
||||
foreach (MediaTrack track in subTracks)
|
||||
{
|
||||
MenuItem mi = new MenuItem(track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "sid", track.ID.ToString()); };
|
||||
mi.Checked = MpvSid == track.ID.ToString();
|
||||
trackMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
|
||||
foreach (MediaTrack track in ediTracks)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Track > " + track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "edition", track.ID.ToString()); };
|
||||
mi.Checked = MpvEdition == track.ID;
|
||||
if (subTracks.Length > 0)
|
||||
{
|
||||
MenuItem mi = new MenuItem("S: No subtitles");
|
||||
mi.Action = () => { mp.commandv("set", "sid", "no"); };
|
||||
mi.Checked = MpvSid == "no";
|
||||
trackMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
|
||||
if (ediTracks.Length > 0)
|
||||
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
|
||||
|
||||
foreach (MediaTrack track in ediTracks)
|
||||
{
|
||||
MenuItem mi = new MenuItem(track.Text);
|
||||
mi.Action = () => { mp.commandv("set", "edition", track.ID.ToString()); };
|
||||
mi.Checked = MpvEdition == track.ID;
|
||||
trackMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lock (mp.Chapters)
|
||||
{
|
||||
if (ChaptersMenu != null)
|
||||
ChaptersMenu.DropDownItems.Clear();
|
||||
MenuItem chaptersMenuItem = FindMenuItem("Chapters");
|
||||
|
||||
foreach (var i in mp.Chapters)
|
||||
if (chaptersMenuItem != null)
|
||||
{
|
||||
MenuItemEx mi = ContextMenu.Add("Navigate > Chapters > " + i.Key);
|
||||
mi.ShortcutKeyDisplayString = TimeSpan.FromSeconds(i.Value).ToString().Substring(0, 8) + " ";
|
||||
mi.Action = () => { mp.commandv("seek", i.Value.ToString(CultureInfo.InvariantCulture), "absolute"); };
|
||||
chaptersMenuItem.DropDownItems.Clear();
|
||||
|
||||
foreach (var i in mp.Chapters)
|
||||
{
|
||||
MenuItem mi = new MenuItem(i.Key);
|
||||
mi.ShortcutKeyDisplayString = TimeSpan.FromSeconds(i.Value).ToString().Substring(0, 8) + " ";
|
||||
mi.Action = () => { mp.commandv("seek", i.Value.ToString(CultureInfo.InvariantCulture), "absolute"); };
|
||||
chaptersMenuItem.DropDownItems.Add(mi);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
||||
|
||||
MenuItem FindMenuItem(string text, ToolStripItemCollection items)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
if (item is MenuItem mi)
|
||||
{
|
||||
if (mi.Text.StartsWith(text) && mi.Text.Trim() == text)
|
||||
return mi;
|
||||
if (mi.DropDownItems.Count > 0)
|
||||
{
|
||||
MenuItem val = FindMenuItem(text, mi.DropDownItems);
|
||||
if (val != null) return val;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void SetScreen(int targetIndex)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
@@ -291,7 +322,7 @@ namespace mpvnet
|
||||
else
|
||||
input = "";
|
||||
|
||||
MenuItemEx menuItem = ContextMenu.Add(path, () => {
|
||||
MenuItem menuItem = ContextMenu.Add(path, () => {
|
||||
try {
|
||||
mp.command_string(command);
|
||||
}
|
||||
@@ -301,19 +332,7 @@ namespace mpvnet
|
||||
});
|
||||
|
||||
if (menuItem != null)
|
||||
{
|
||||
menuItem.ShortcutKeyDisplayString = input.Replace("_", "") + " ";
|
||||
|
||||
if (TracksMenu == null && menuItem.Text.StartsWith("Track ") &&
|
||||
menuItem.Text.Trim() == "Track")
|
||||
|
||||
TracksMenu = menuItem;
|
||||
|
||||
if (ChaptersMenu == null && menuItem.Text.StartsWith("Chapters ") &&
|
||||
menuItem.Text.Trim() == "Chapters")
|
||||
|
||||
ChaptersMenu = menuItem;
|
||||
}
|
||||
menuItem.ShortcutKeyDisplayString = input + " ";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,33 +23,33 @@ public class ContextMenuStripEx : ContextMenuStrip
|
||||
Renderer = new ToolStripRendererEx();
|
||||
}
|
||||
|
||||
public MenuItemEx Add(string path)
|
||||
public MenuItem Add(string path)
|
||||
{
|
||||
return Add(path, null);
|
||||
}
|
||||
|
||||
public MenuItemEx Add(string path, Action action, bool enabled = true)
|
||||
public MenuItem Add(string path, Action action, bool enabled = true)
|
||||
{
|
||||
MenuItemEx ret = MenuItemEx.Add(Items, path, action);
|
||||
MenuItem ret = MenuItem.Add(Items, path, action);
|
||||
if (ret == null) return null;
|
||||
ret.Enabled = enabled;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
public class MenuItemEx : ToolStripMenuItem
|
||||
public class MenuItem : ToolStripMenuItem
|
||||
{
|
||||
public Action Action { get; set; }
|
||||
|
||||
public MenuItemEx()
|
||||
public MenuItem()
|
||||
{
|
||||
}
|
||||
|
||||
public MenuItemEx(string text) : base(text)
|
||||
public MenuItem(string text) : base(text)
|
||||
{
|
||||
}
|
||||
|
||||
public MenuItemEx(string text, Action action) : base(text)
|
||||
public MenuItem(string text, Action action) : base(text)
|
||||
{
|
||||
Action = action;
|
||||
}
|
||||
@@ -61,12 +61,12 @@ public class MenuItemEx : ToolStripMenuItem
|
||||
base.OnClick(e);
|
||||
}
|
||||
|
||||
public static MenuItemEx Add<T>(ToolStripItemCollection items, string path, Action<T> action, T value)
|
||||
public static MenuItem Add<T>(ToolStripItemCollection items, string path, Action<T> action, T value)
|
||||
{
|
||||
return Add(items, path, () => action(value));
|
||||
}
|
||||
|
||||
public static MenuItemEx Add(ToolStripItemCollection items, string path, Action action)
|
||||
public static MenuItem Add(ToolStripItemCollection items, string path, Action action)
|
||||
{
|
||||
string[] a = path.Split(new[] { " > ", " | " }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var itemsCollection = items;
|
||||
@@ -95,7 +95,7 @@ public class MenuItemEx : ToolStripMenuItem
|
||||
itemsCollection.Add(new ToolStripSeparator());
|
||||
else
|
||||
{
|
||||
MenuItemEx item = new MenuItemEx(a[x] + " ", action);
|
||||
MenuItem item = new MenuItem(a[x] + " ", action);
|
||||
itemsCollection.Add(item);
|
||||
itemsCollection = item.DropDownItems;
|
||||
return item;
|
||||
@@ -103,7 +103,7 @@ public class MenuItemEx : ToolStripMenuItem
|
||||
}
|
||||
else
|
||||
{
|
||||
MenuItemEx item = new MenuItemEx();
|
||||
MenuItem item = new MenuItem();
|
||||
item.Text = a[x] + " ";
|
||||
itemsCollection.Add(item);
|
||||
itemsCollection = item.DropDownItems;
|
||||
@@ -266,10 +266,10 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
|
||||
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
|
||||
{
|
||||
if (e.Item.GetType() != typeof(MenuItemEx))
|
||||
if (e.Item.GetType() != typeof(MenuItem))
|
||||
return;
|
||||
|
||||
MenuItemEx item = e.Item as MenuItemEx;
|
||||
MenuItem item = e.Item as MenuItem;
|
||||
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("3.0.0.0")]
|
||||
[assembly: AssemblyVersion("3.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.0.0")]
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
_ ignore #menu: -
|
||||
Enter cycle fullscreen #menu: Toggle Fullscreen
|
||||
|
||||
F11 playlist-prev #menu: Navigate > Previous
|
||||
F12 playlist-next #menu: Navigate > Next
|
||||
F11 playlist-prev #menu: Navigate > Previous File
|
||||
F12 playlist-next #menu: Navigate > Next File
|
||||
_ ignore #menu: Navigate > -
|
||||
PGUP add chapter 1 #menu: Navigate > Next Chapter
|
||||
PGDWN add chapter -1 #menu: Navigate > Previous Chapter
|
||||
@@ -147,7 +147,7 @@
|
||||
_ script-message mpv.net shell-execute https://mpv.io/manual/stable/ #menu: Help > Show mpv manual
|
||||
_ script-message mpv.net shell-execute https://github.com/mpv-player/mpv/blob/master/etc/input.conf #menu: Help > Show mpv default keys
|
||||
_ script-message mpv.net shell-execute https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt #menu: Help > Show mpv.net default keys
|
||||
_ script-message mpv.net shell-execute https://github.com/stax76/mpvnet #menu: Help > Show mpv.net web site
|
||||
_ script-message mpv.net shell-execute https://mpv-net.github.io/mpv.net-web-site/ #menu: Help > Show mpv.net web site
|
||||
|
||||
_ ignore #menu: -
|
||||
Esc quit #menu: Exit
|
||||
|
||||
@@ -60,15 +60,31 @@ namespace mpvnet
|
||||
public static List<KeyValuePair<string, Action<int>>> IntPropChangeActions { get; set; } = new List<KeyValuePair<string, Action<int>>>();
|
||||
public static List<KeyValuePair<string, Action<string>>> StringPropChangeActions { get; set; } = new List<KeyValuePair<string, Action<string>>>();
|
||||
public static Size VideoSize { get; set; } = new Size(1920, 1080);
|
||||
public static string MpvConfFolderPath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\";
|
||||
public static string InputConfPath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\input.conf";
|
||||
public static string MpvConfPath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\mpv.conf";
|
||||
public static string MpvNetConfPath { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\mpvnet.conf";
|
||||
public static List<PythonScript> PythonScripts { get; set; } = new List<PythonScript>();
|
||||
public static AutoResetEvent AutoResetEvent { get; set; } = new AutoResetEvent(false);
|
||||
public static List<MediaTrack> MediaTracks { get; set; } = new List<MediaTrack>();
|
||||
public static List<KeyValuePair<string, double>> Chapters { get; set; } = new List<KeyValuePair<string, double>>();
|
||||
|
||||
public static string InputConfPath { get; } = MpvConfFolder + "\\input.conf";
|
||||
public static string MpvConfPath { get; } = MpvConfFolder + "\\mpv.conf";
|
||||
public static string MpvNetConfPath { get; } = MpvConfFolder + "\\mpvnet.conf";
|
||||
|
||||
static string _MpvConfFolder;
|
||||
|
||||
public static string MpvConfFolder {
|
||||
get {
|
||||
if (_MpvConfFolder == null)
|
||||
{
|
||||
if (Directory.Exists(Application.StartupPath + "\\portable_config"))
|
||||
_MpvConfFolder = Application.StartupPath + "\\portable_config\\";
|
||||
else
|
||||
_MpvConfFolder = Environment.GetFolderPath(
|
||||
Environment.SpecialFolder.ApplicationData) + "\\mpv\\";
|
||||
}
|
||||
return _MpvConfFolder;
|
||||
}
|
||||
}
|
||||
|
||||
static Dictionary<string, string> _mpvConf;
|
||||
|
||||
public static Dictionary<string, string> mpvConf {
|
||||
@@ -105,8 +121,8 @@ namespace mpvnet
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (!Directory.Exists(mp.MpvConfFolderPath))
|
||||
Directory.CreateDirectory(mp.MpvConfFolderPath);
|
||||
if (!Directory.Exists(mp.MpvConfFolder))
|
||||
Directory.CreateDirectory(mp.MpvConfFolder);
|
||||
|
||||
if (!File.Exists(mp.MpvConfPath))
|
||||
File.WriteAllText(mp.MpvConfPath, Properties.Resources.mpv_conf);
|
||||
@@ -146,7 +162,7 @@ namespace mpvnet
|
||||
if (Path.GetExtension(scriptPath) == ".ps1")
|
||||
PowerShellScript.Init(scriptPath);
|
||||
|
||||
foreach (var scriptPath in Directory.GetFiles(mp.MpvConfFolderPath + "Scripts"))
|
||||
foreach (var scriptPath in Directory.GetFiles(mp.MpvConfFolder + "Scripts"))
|
||||
if (Path.GetExtension(scriptPath) == ".py")
|
||||
PythonScripts.Add(new PythonScript(File.ReadAllText(scriptPath)));
|
||||
else if (Path.GetExtension(scriptPath) == ".ps1")
|
||||
@@ -611,7 +627,7 @@ namespace mpvnet
|
||||
|
||||
if (File.Exists(LastHistoryPath) && totalMinutes > 1)
|
||||
{
|
||||
string historyFilepath = mp.MpvConfFolderPath + "history.txt";
|
||||
string historyFilepath = mp.MpvConfFolder + "history.txt";
|
||||
|
||||
File.AppendAllText(historyFilepath, DateTime.Now.ToString().Substring(0, 16) +
|
||||
" " + totalMinutes.ToString().PadLeft(3) + " " +
|
||||
|
||||
Reference in New Issue
Block a user