This commit is contained in:
Frank Skare
2019-04-23 16:23:06 +02:00
parent 2415e2ed43
commit efd2ddf367
14 changed files with 218 additions and 114 deletions

View File

@@ -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))

View File

@@ -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);

View File

@@ -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 + " ";
}
}

View File

@@ -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;

View File

@@ -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")]

View File

@@ -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

View File

@@ -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) + " " +