Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a28f13d51 | ||
|
|
9f3a1da931 | ||
|
|
05874ad6be | ||
|
|
078e8046bd | ||
|
|
b07901485e | ||
|
|
a37cbef8a8 | ||
|
|
8debcc171c | ||
|
|
e230f0f474 |
@@ -1,3 +1,11 @@
|
|||||||
|
### 5.4
|
||||||
|
|
||||||
|
- added taskbar-progress implementation
|
||||||
|
- added new setting to start with maximized window
|
||||||
|
- long file paths work now even if not enabled by the OS
|
||||||
|
- fixed history being written even when history file wasn't created prior
|
||||||
|
- libmpv updated to shinchiro 2019-08-31
|
||||||
|
|
||||||
### 5.3
|
### 5.3
|
||||||
|
|
||||||
- added new feature: Open > Open DVD/Blu-ray Drive/Folder...
|
- added new feature: Open > Open DVD/Blu-ray Drive/Folder...
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ Table of contents
|
|||||||
- Screenshot feature with many options
|
- Screenshot feature with many options
|
||||||
- File history feature to log time and filename
|
- File history feature to log time and filename
|
||||||
- A-B loop feature
|
- A-B loop feature
|
||||||
- watch later feature to save the position
|
- Watch later feature to save the position
|
||||||
- [Manual](#manual)
|
- [Manual](#manual)
|
||||||
|
|
||||||
### Screenshots
|
### Screenshots
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 628 KiB |
@@ -8,7 +8,7 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
public class App
|
public class App
|
||||||
{
|
{
|
||||||
public static string[] VideoTypes { get; } = "264 265 asf avc avi avs flv h264 h265 hevc m2ts m2v m4v mkv mov mp4 mpeg mpg mpv mts ts vob vpy webm webm wmv y4m".Split(' ');
|
public static string[] VideoTypes { get; } = "264 265 asf avc avi avs flv h264 h265 hevc m2ts m2v m4v mkv mov mp4 mpeg mpg mpv mts ts vob vpy webm wmv y4m".Split(' ');
|
||||||
public static string[] AudioTypes { get; } = "mp3 mp2 ac3 ogg opus flac wav w64 m4a dts dtsma dtshr dtshd eac3 thd thd+ac3 mka aac mpa".Split(' ');
|
public static string[] AudioTypes { get; } = "mp3 mp2 ac3 ogg opus flac wav w64 m4a dts dtsma dtshr dtshd eac3 thd thd+ac3 mka aac mpa".Split(' ');
|
||||||
public static string[] ImageTypes { get; } = {"jpg", "bmp", "gif", "png"};
|
public static string[] ImageTypes { get; } = {"jpg", "bmp", "gif", "png"};
|
||||||
public static string[] SubtitleTypes { get; } = { "srt", "ass", "idx", "sup", "ttxt", "ssa", "smi" };
|
public static string[] SubtitleTypes { get; } = { "srt", "ass", "idx", "sup", "ttxt", "ssa", "smi" };
|
||||||
@@ -23,6 +23,7 @@ namespace mpvnet
|
|||||||
|
|
||||||
public static bool RememberHeight { get; set; } = true;
|
public static bool RememberHeight { get; set; } = true;
|
||||||
public static bool RememberPosition { get; set; }
|
public static bool RememberPosition { get; set; }
|
||||||
|
public static bool Maximized { 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; } = true;
|
public static bool RememberVolume { get; set; } = true;
|
||||||
@@ -106,6 +107,7 @@ namespace mpvnet
|
|||||||
switch (name)
|
switch (name)
|
||||||
{
|
{
|
||||||
case "remember-position": RememberPosition = value == "yes"; return true;
|
case "remember-position": RememberPosition = value == "yes"; return true;
|
||||||
|
case "maximized": Maximized = value == "yes"; return true;
|
||||||
case "start-size": RememberHeight = value == "previous"; return true;
|
case "start-size": RememberHeight = value == "previous"; return true;
|
||||||
case "process-instance": ProcessInstance = value; return true;
|
case "process-instance": ProcessInstance = value; return true;
|
||||||
case "dark-mode": DarkMode = value; return true;
|
case "dark-mode": DarkMode = value; return true;
|
||||||
|
|||||||
@@ -98,14 +98,15 @@ namespace mpvnet
|
|||||||
|
|
||||||
public static void ShowHistory()
|
public static void ShowHistory()
|
||||||
{
|
{
|
||||||
var fp = mp.ConfigFolder + "history.txt";
|
if (File.Exists(mp.ConfigFolder + "history.txt"))
|
||||||
|
Process.Start(mp.ConfigFolder + "history.txt");
|
||||||
if (File.Exists(fp))
|
|
||||||
Process.Start(fp);
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
if (Msg.ShowQuestion("Create history.txt file in config folder?",
|
if (Msg.ShowQuestion("Create history.txt file in config folder?",
|
||||||
"mpv.net will write the date, time and filename of opened files to it.") == MsgResult.OK)
|
"mpv.net will write the date, time and filename of opened files to it.") == MsgResult.OK)
|
||||||
File.WriteAllText(fp, "");
|
|
||||||
|
File.WriteAllText(mp.ConfigFolder + "history.txt", "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ShowInfo()
|
public static void ShowInfo()
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace mpvnet
|
|||||||
files.Add(App.ProcessInstance);
|
files.Add(App.ProcessInstance);
|
||||||
|
|
||||||
foreach (string arg in args)
|
foreach (string arg in args)
|
||||||
if (!arg.StartsWith("--") && (arg == "-" || arg.Contains("://") || File.Exists(arg)))
|
if (!arg.StartsWith("--") && (arg == "-" || arg.Contains("://") || arg.Contains(":\\") || arg.StartsWith("\\\\")))
|
||||||
files.Add(arg);
|
files.Add(arg);
|
||||||
|
|
||||||
Process[] procs = Process.GetProcessesByName("mpvnet");
|
Process[] procs = Process.GetProcessesByName("mpvnet");
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ namespace mpvnet
|
|||||||
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||||
public static extern IntPtr PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
|
public static extern IntPtr PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
|
||||||
|
public static extern int RegisterWindowMessage(string id);
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
public static extern bool AllowSetForegroundWindow(int dwProcessId);
|
public static extern bool AllowSetForegroundWindow(int dwProcessId);
|
||||||
|
|
||||||
|
|||||||
53
mpv.net/Native/Taskbar.cs
Normal file
53
mpv.net/Native/Taskbar.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
public class Taskbar
|
||||||
|
{
|
||||||
|
private ITaskbarList3 Instance = (ITaskbarList3)new TaskBarCommunication();
|
||||||
|
|
||||||
|
public IntPtr Handle { get; set; }
|
||||||
|
|
||||||
|
public Taskbar(IntPtr handle) => Handle = handle;
|
||||||
|
|
||||||
|
[ComImportAttribute]
|
||||||
|
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
[GuidAttribute("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
|
||||||
|
private interface ITaskbarList3
|
||||||
|
{
|
||||||
|
// ITaskbarList
|
||||||
|
[PreserveSig] void HrInit();
|
||||||
|
[PreserveSig] void AddTab(IntPtr hwnd);
|
||||||
|
[PreserveSig] void DeleteTab(IntPtr hwnd);
|
||||||
|
[PreserveSig] void ActivateTab(IntPtr hwnd);
|
||||||
|
[PreserveSig] void SetActiveAlt(IntPtr hwnd);
|
||||||
|
// ITaskbarList2
|
||||||
|
[PreserveSig] void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen);
|
||||||
|
// ITaskbarList3
|
||||||
|
[PreserveSig] void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
|
||||||
|
[PreserveSig] void SetProgressState(IntPtr hwnd, TaskbarStates state);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImportAttribute]
|
||||||
|
[ClassInterfaceAttribute(ClassInterfaceType.None)]
|
||||||
|
[GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")]
|
||||||
|
private class TaskBarCommunication { }
|
||||||
|
|
||||||
|
public void SetState(TaskbarStates taskbarState)
|
||||||
|
{
|
||||||
|
Instance.SetProgressState(Handle, taskbarState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetValue(double progressValue, double progressMax)
|
||||||
|
{
|
||||||
|
Instance.SetProgressValue(Handle, (UInt64)progressValue, (UInt64)progressMax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum TaskbarStates
|
||||||
|
{
|
||||||
|
NoProgress = 0,
|
||||||
|
Indeterminate = 0x1,
|
||||||
|
Normal = 0x2,
|
||||||
|
Error = 0x4,
|
||||||
|
Paused = 0x8
|
||||||
|
}
|
||||||
@@ -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.3.0.0")]
|
[assembly: AssemblyVersion("5.4.0.0")]
|
||||||
[assembly: AssemblyFileVersion("5.3.0.0")]
|
[assembly: AssemblyFileVersion("5.4.0.0")]
|
||||||
|
|||||||
@@ -197,4 +197,3 @@
|
|||||||
Ctrl+Wheel_Down no-osd seek -7
|
Ctrl+Wheel_Down no-osd seek -7
|
||||||
MBTN_Left_DBL cycle fullscreen
|
MBTN_Left_DBL cycle fullscreen
|
||||||
KP_Enter cycle fullscreen
|
KP_Enter cycle fullscreen
|
||||||
MBTN_Left ignore
|
|
||||||
@@ -325,6 +325,14 @@ name = "screenshot-png-filter"
|
|||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "<0-5> Set the filter applied prior to PNG compression. 0 is none, 1 is 'sub', 2 is 'up', 3 is 'average', 4 is 'Paeth', and 5 is 'mixed'. This affects the level of compression that can be achieved. For most images, 'mixed' achieves the best compression ratio, hence it is the default."
|
help = "<0-5> Set the filter applied prior to PNG compression. 0 is none, 1 is 'sub', 2 is 'up', 3 is 'average', 4 is 'Paeth', and 5 is 'mixed'. This affects the level of compression that can be achieved. For most images, 'mixed' achieves the best compression ratio, hence it is the default."
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "taskbar-progress"
|
||||||
|
default = "yes"
|
||||||
|
filter = "Playback"
|
||||||
|
help = "Show progress in taskbar."
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "keep-open-pause"
|
name = "keep-open-pause"
|
||||||
default = "yes"
|
default = "yes"
|
||||||
|
|||||||
@@ -45,6 +45,14 @@ help = "Save the window position on exit. (mpv.net specific setting)"
|
|||||||
options = [{ name = "yes" },
|
options = [{ name = "yes" },
|
||||||
{ name = "no" }]
|
{ name = "no" }]
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "maximized"
|
||||||
|
default = "no"
|
||||||
|
filter = "Screen"
|
||||||
|
help = "Start with a maximized window. (mpv.net specific setting)"
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "remember-volume"
|
name = "remember-volume"
|
||||||
default = "yes"
|
default = "yes"
|
||||||
|
|||||||
20
mpv.net/WinForms/MainForm.Designer.cs
generated
20
mpv.net/WinForms/MainForm.Designer.cs
generated
@@ -30,14 +30,19 @@
|
|||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||||
this.Timer = new System.Windows.Forms.Timer(this.components);
|
this.CursorTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
|
this.ProgressTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// Timer
|
// CursorTimer
|
||||||
//
|
//
|
||||||
this.Timer.Enabled = true;
|
this.CursorTimer.Enabled = true;
|
||||||
this.Timer.Interval = 1000;
|
this.CursorTimer.Interval = 1000;
|
||||||
this.Timer.Tick += new System.EventHandler(this.Timer_Tick);
|
this.CursorTimer.Tick += new System.EventHandler(this.CursorTimer_Tick);
|
||||||
|
//
|
||||||
|
// ProgressTimer
|
||||||
|
//
|
||||||
|
this.ProgressTimer.Tick += new System.EventHandler(this.ProgressTimer_Tick);
|
||||||
//
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
@@ -45,7 +50,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(668, 345);
|
this.ClientSize = new System.Drawing.Size(348, 0);
|
||||||
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);
|
||||||
@@ -57,6 +62,7 @@
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.Timer Timer;
|
private System.Windows.Forms.Timer CursorTimer;
|
||||||
|
private System.Windows.Forms.Timer ProgressTimer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,12 +16,12 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
public static MainForm Instance { get; set; }
|
public static MainForm Instance { get; set; }
|
||||||
public static IntPtr Hwnd { get; set; }
|
public static IntPtr Hwnd { get; set; }
|
||||||
|
|
||||||
public new ContextMenuStripEx ContextMenu { get; set; }
|
public new ContextMenuStripEx ContextMenu { get; set; }
|
||||||
|
|
||||||
Point LastCursorPosChanged;
|
Point LastCursorPosChanged;
|
||||||
int LastCursorChangedTickCount;
|
int LastCursorChangedTickCount;
|
||||||
|
int TaskbarButtonCreatedMessage;
|
||||||
bool WasShown;
|
bool WasShown;
|
||||||
|
Taskbar Taskbar;
|
||||||
List<string> RecentFiles;
|
List<string> RecentFiles;
|
||||||
|
|
||||||
public MainForm()
|
public MainForm()
|
||||||
@@ -38,7 +38,9 @@ namespace mpvnet
|
|||||||
mp.VideoSizeChanged += VideoSizeChanged;
|
mp.VideoSizeChanged += VideoSizeChanged;
|
||||||
mp.FileLoaded += FileLoaded;
|
mp.FileLoaded += FileLoaded;
|
||||||
mp.Idle += Idle;
|
mp.Idle += Idle;
|
||||||
|
mp.Seek += () => UpdateProgressBar();
|
||||||
|
|
||||||
|
mp.observe_property_bool("pause", PropChangePause);
|
||||||
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
|
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
|
||||||
mp.observe_property_bool("ontop", PropChangeOnTop);
|
mp.observe_property_bool("ontop", PropChangeOnTop);
|
||||||
mp.observe_property_bool("border", PropChangeBorder);
|
mp.observe_property_bool("border", PropChangeBorder);
|
||||||
@@ -53,6 +55,7 @@ namespace mpvnet
|
|||||||
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";
|
||||||
Text = "mpv.net " + Application.ProductVersion;
|
Text = "mpv.net " + Application.ProductVersion;
|
||||||
|
TaskbarButtonCreatedMessage = Native.RegisterWindowMessage("TaskbarButtonCreated");
|
||||||
|
|
||||||
object recent = RegHelp.GetObject(App.RegPath, "Recent");
|
object recent = RegHelp.GetObject(App.RegPath, "Recent");
|
||||||
|
|
||||||
@@ -83,6 +86,8 @@ namespace mpvnet
|
|||||||
Left = posX - Width / 2;
|
Left = posX - Width / 2;
|
||||||
Top = posY - Height / 2;
|
Top = posY - Height / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (App.Maximized) WindowState = FormWindowState.Maximized;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -92,19 +97,22 @@ namespace mpvnet
|
|||||||
|
|
||||||
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
||||||
|
|
||||||
void Idle() => BeginInvoke(new Action(() => Text = "mpv.net " + Application.ProductVersion));
|
void Shutdown() => BeginInvoke(new Action(() => Close()));
|
||||||
|
|
||||||
|
void Idle()
|
||||||
|
{
|
||||||
|
BeginInvoke(new Action(() => Text = "mpv.net " + Application.ProductVersion));
|
||||||
|
}
|
||||||
|
|
||||||
void CM_Popup(object sender, EventArgs e) => CursorHelp.Show();
|
void CM_Popup(object sender, EventArgs e) => CursorHelp.Show();
|
||||||
|
|
||||||
void VideoSizeChanged() => BeginInvoke(new Action(() => SetFormPosAndSize()));
|
void VideoSizeChanged() => BeginInvoke(new Action(() => SetFormPosAndSize()));
|
||||||
|
|
||||||
void Shutdown() => BeginInvoke(new Action(() => Close()));
|
|
||||||
|
|
||||||
void PropChangeFullscreen(bool value) => BeginInvoke(new Action(() => CycleFullscreen(value)));
|
void PropChangeFullscreen(bool value) => BeginInvoke(new Action(() => CycleFullscreen(value)));
|
||||||
|
|
||||||
void ContextMenu_Opened(object sender, EventArgs e) => CursorHelp.Show();
|
void ContextMenu_Opened(object sender, EventArgs e) => CursorHelp.Show();
|
||||||
|
|
||||||
bool IsFullscreen => WindowState == FormWindowState.Maximized;
|
bool IsFullscreen => WindowState == FormWindowState.Maximized && FormBorderStyle == FormBorderStyle.None;
|
||||||
|
|
||||||
bool IsMouseInOSC() => PointToClient(Control.MousePosition).Y > ClientSize.Height * 0.9;
|
bool IsMouseInOSC() => PointToClient(Control.MousePosition).Y > ClientSize.Height * 0.9;
|
||||||
|
|
||||||
@@ -228,6 +236,9 @@ namespace mpvnet
|
|||||||
|
|
||||||
void SetFormPosAndSize()
|
void SetFormPosAndSize()
|
||||||
{
|
{
|
||||||
|
if (WindowState == FormWindowState.Maximized)
|
||||||
|
return;
|
||||||
|
|
||||||
if (mp.Fullscreen)
|
if (mp.Fullscreen)
|
||||||
{
|
{
|
||||||
CycleFullscreen(true);
|
CycleFullscreen(true);
|
||||||
@@ -320,7 +331,7 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (WindowState == FormWindowState.Maximized)
|
if (WindowState == FormWindowState.Maximized && FormBorderStyle == FormBorderStyle.None)
|
||||||
{
|
{
|
||||||
WindowState = FormWindowState.Normal;
|
WindowState = FormWindowState.Normal;
|
||||||
|
|
||||||
@@ -367,14 +378,21 @@ namespace mpvnet
|
|||||||
private void FileLoaded()
|
private void FileLoaded()
|
||||||
{
|
{
|
||||||
string path = mp.get_property_string("path");
|
string path = mp.get_property_string("path");
|
||||||
|
|
||||||
BeginInvoke(new Action(() => {
|
BeginInvoke(new Action(() => {
|
||||||
if (path.Contains("://"))
|
if (path.Contains("://"))
|
||||||
Text = path + " - mpv.net " + Application.ProductVersion;
|
Text = path + " - mpv.net " + Application.ProductVersion;
|
||||||
else if (File.Exists(path))
|
else if (path.Contains(":\\") || path.StartsWith("\\\\"))
|
||||||
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;
|
||||||
|
|
||||||
|
ProgressTimer.Interval = (int)(mp.Duration.TotalMilliseconds / 99);
|
||||||
|
if (ProgressTimer.Interval < 100) ProgressTimer.Interval = 100;
|
||||||
|
if (ProgressTimer.Interval > 999) ProgressTimer.Interval = 999;
|
||||||
|
UpdateProgressBar();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (RecentFiles.Contains(path)) RecentFiles.Remove(path);
|
if (RecentFiles.Contains(path)) RecentFiles.Remove(path);
|
||||||
RecentFiles.Insert(0, path);
|
RecentFiles.Insert(0, path);
|
||||||
while (RecentFiles.Count > App.RecentCount) RecentFiles.RemoveAt(App.RecentCount);
|
while (RecentFiles.Count > App.RecentCount) RecentFiles.RemoveAt(App.RecentCount);
|
||||||
@@ -468,10 +486,16 @@ namespace mpvnet
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m.Msg == TaskbarButtonCreatedMessage)
|
||||||
|
{
|
||||||
|
Taskbar = new Taskbar(Handle);
|
||||||
|
ProgressTimer.Start();
|
||||||
|
}
|
||||||
|
|
||||||
base.WndProc(ref m);
|
base.WndProc(ref m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer_Tick(object sender, EventArgs e)
|
void CursorTimer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
|
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
|
||||||
{
|
{
|
||||||
@@ -485,6 +509,14 @@ namespace mpvnet
|
|||||||
CursorHelp.Hide();
|
CursorHelp.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ProgressTimer_Tick(object sender, EventArgs e) => UpdateProgressBar();
|
||||||
|
|
||||||
|
void UpdateProgressBar()
|
||||||
|
{
|
||||||
|
if (mp.TaskbarProgress && Taskbar != null)
|
||||||
|
Taskbar.SetValue(mp.get_property_number("time-pos"), mp.Duration.TotalSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
void PropChangeOnTop(bool value) => BeginInvoke(new Action(() => TopMost = value));
|
void PropChangeOnTop(bool value) => BeginInvoke(new Action(() => TopMost = value));
|
||||||
|
|
||||||
void PropChangeAid(string value) => mp.Aid = value;
|
void PropChangeAid(string value) => mp.Aid = value;
|
||||||
@@ -509,6 +541,17 @@ namespace mpvnet
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PropChangePause(bool enabled)
|
||||||
|
{
|
||||||
|
if (Taskbar != null)
|
||||||
|
{
|
||||||
|
if (enabled)
|
||||||
|
Taskbar.SetState(TaskbarStates.Paused);
|
||||||
|
else
|
||||||
|
Taskbar.SetState(TaskbarStates.Normal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnLoad(EventArgs e)
|
protected override void OnLoad(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
|
|||||||
@@ -117,9 +117,12 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<metadata name="Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="CursorTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>30, 12</value>
|
<value>30, 12</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="ProgressTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>321, 12</value>
|
||||||
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
|||||||
@@ -153,6 +153,7 @@
|
|||||||
<Compile Include="DynamicGUI\Tommy.cs" />
|
<Compile Include="DynamicGUI\Tommy.cs" />
|
||||||
<Compile Include="Misc\ExtensionMethods.cs" />
|
<Compile Include="Misc\ExtensionMethods.cs" />
|
||||||
<Compile Include="Native\MediaInfo.cs" />
|
<Compile Include="Native\MediaInfo.cs" />
|
||||||
|
<Compile Include="Native\Taskbar.cs" />
|
||||||
<Compile Include="WinForms\Menu.cs">
|
<Compile Include="WinForms\Menu.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ namespace mpvnet
|
|||||||
public static List<KeyValuePair<string, Action<string>>> StringPropChangeActions { get; set; } = new List<KeyValuePair<string, Action<string>>>();
|
public static List<KeyValuePair<string, Action<string>>> StringPropChangeActions { get; set; } = new List<KeyValuePair<string, Action<string>>>();
|
||||||
public static List<MediaTrack> MediaTracks { get; set; } = new List<MediaTrack>();
|
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 List<KeyValuePair<string, double>> Chapters { get; set; } = new List<KeyValuePair<string, double>>();
|
||||||
|
|
||||||
public static IntPtr Handle { get; set; }
|
public static IntPtr Handle { get; set; }
|
||||||
public static IntPtr WindowHandle { get; set; }
|
public static IntPtr WindowHandle { get; set; }
|
||||||
public static Extension Extension { get; set; }
|
public static Extension Extension { get; set; }
|
||||||
public static List<PythonScript> PythonScripts { get; set; } = new List<PythonScript>();
|
public static List<PythonScript> PythonScripts { get; set; } = new List<PythonScript>();
|
||||||
public static Size VideoSize { get; set; }
|
public static Size VideoSize { get; set; }
|
||||||
|
public static TimeSpan Duration;
|
||||||
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);
|
||||||
|
|
||||||
@@ -81,6 +81,7 @@ namespace mpvnet
|
|||||||
public static bool IsQuitNeeded { set; get; } = true;
|
public static bool IsQuitNeeded { set; get; } = true;
|
||||||
public static bool Fullscreen { get; set; }
|
public static bool Fullscreen { get; set; }
|
||||||
public static bool Border { get; set; } = true;
|
public static bool Border { get; set; } = true;
|
||||||
|
public static bool TaskbarProgress { get; set; } = true;
|
||||||
|
|
||||||
public static int Screen { get; set; } = -1;
|
public static int Screen { get; set; } = -1;
|
||||||
public static int Edition { get; set; }
|
public static int Edition { get; set; }
|
||||||
@@ -104,8 +105,8 @@ namespace mpvnet
|
|||||||
|
|
||||||
set_property_string("wid", MainForm.Hwnd.ToString());
|
set_property_string("wid", MainForm.Hwnd.ToString());
|
||||||
set_property_string("osc", "yes");
|
set_property_string("osc", "yes");
|
||||||
set_property_string("force-window", "yes");
|
|
||||||
set_property_string("input-media-keys", "yes");
|
set_property_string("input-media-keys", "yes");
|
||||||
|
set_property_string("force-window", "yes");
|
||||||
set_property_string("config-dir", ConfigFolder);
|
set_property_string("config-dir", ConfigFolder);
|
||||||
set_property_string("config", "yes");
|
set_property_string("config", "yes");
|
||||||
|
|
||||||
@@ -136,6 +137,7 @@ namespace mpvnet
|
|||||||
case "fs":
|
case "fs":
|
||||||
case "fullscreen": Fullscreen = value == "yes"; break;
|
case "fullscreen": Fullscreen = value == "yes"; break;
|
||||||
case "border": Border = value == "yes"; break;
|
case "border": Border = value == "yes"; break;
|
||||||
|
case "taskbar-progress": TaskbarProgress = value == "yes"; break;
|
||||||
case "screen": Screen = Convert.ToInt32(value); break;
|
case "screen": Screen = Convert.ToInt32(value); break;
|
||||||
case "gpu-api": GPUAPI = value; break;
|
case "gpu-api": GPUAPI = value; break;
|
||||||
}
|
}
|
||||||
@@ -317,7 +319,7 @@ namespace mpvnet
|
|||||||
break;
|
break;
|
||||||
case mpv_event_id.MPV_EVENT_FILE_LOADED:
|
case mpv_event_id.MPV_EVENT_FILE_LOADED:
|
||||||
HideLogo();
|
HideLogo();
|
||||||
FileLoaded?.Invoke();
|
Duration = TimeSpan.FromSeconds(get_property_number("duration"));
|
||||||
Size vidSize = new Size(get_property_int("width"), get_property_int("height"));
|
Size vidSize = new Size(get_property_int("width"), get_property_int("height"));
|
||||||
if (vidSize.Width == 0 || vidSize.Height == 0)
|
if (vidSize.Width == 0 || vidSize.Height == 0)
|
||||||
vidSize = new Size(1, 1);
|
vidSize = new Size(1, 1);
|
||||||
@@ -329,6 +331,7 @@ namespace mpvnet
|
|||||||
VideoSizeAutoResetEvent.Set();
|
VideoSizeAutoResetEvent.Set();
|
||||||
Task.Run(new Action(() => ReadMetaData()));
|
Task.Run(new Action(() => ReadMetaData()));
|
||||||
WriteHistory(get_property_string("path"));
|
WriteHistory(get_property_string("path"));
|
||||||
|
FileLoaded?.Invoke();
|
||||||
break;
|
break;
|
||||||
case mpv_event_id.MPV_EVENT_TRACKS_CHANGED:
|
case mpv_event_id.MPV_EVENT_TRACKS_CHANGED:
|
||||||
TracksChanged?.Invoke();
|
TracksChanged?.Invoke();
|
||||||
@@ -416,12 +419,9 @@ namespace mpvnet
|
|||||||
|
|
||||||
static void HideLogo()
|
static void HideLogo()
|
||||||
{
|
{
|
||||||
if (IsLogoVisible)
|
command("overlay-remove 0");
|
||||||
{
|
|
||||||
commandv("overlay-remove", "0");
|
|
||||||
IsLogoVisible = false;
|
IsLogoVisible = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static List<PythonEventObject> PythonEventObjects = new List<PythonEventObject>();
|
static List<PythonEventObject> PythonEventObjects = new List<PythonEventObject>();
|
||||||
|
|
||||||
@@ -625,7 +625,8 @@ namespace mpvnet
|
|||||||
|
|
||||||
foreach (string i in args)
|
foreach (string i in args)
|
||||||
{
|
{
|
||||||
if (!i.StartsWith("--") && (i == "-" || i.Contains("://") || File.Exists(i)))
|
if (!i.StartsWith("--") && (i == "-" || i.Contains("://") ||
|
||||||
|
i.Contains(":\\") || i.StartsWith("\\\\") || File.Exists(i)))
|
||||||
{
|
{
|
||||||
files.Add(i);
|
files.Add(i);
|
||||||
if (i.Contains("://")) RegHelp.SetObject(App.RegPath, "LastURL", i);
|
if (i.Contains("://")) RegHelp.SetObject(App.RegPath, "LastURL", i);
|
||||||
@@ -734,14 +735,12 @@ namespace mpvnet
|
|||||||
|
|
||||||
static void WriteHistory(string path)
|
static void WriteHistory(string path)
|
||||||
{
|
{
|
||||||
if (!File.Exists(path)) return;
|
if (!File.Exists(ConfigFolder + "history.txt") || !File.Exists(path)) return;
|
||||||
int totalMinutes = Convert.ToInt32((DateTime.Now - LastHistoryStartDateTime).TotalMinutes);
|
int totalMinutes = Convert.ToInt32((DateTime.Now - LastHistoryStartDateTime).TotalMinutes);
|
||||||
|
|
||||||
if (File.Exists(LastHistoryPath) && totalMinutes > 1)
|
if (File.Exists(LastHistoryPath) && totalMinutes > 1)
|
||||||
{
|
|
||||||
File.AppendAllText(ConfigFolder + "history.txt", DateTime.Now.ToString().Substring(0, 16) +
|
File.AppendAllText(ConfigFolder + "history.txt", DateTime.Now.ToString().Substring(0, 16) +
|
||||||
" " + totalMinutes.ToString().PadLeft(3) + " " + Path.GetFileNameWithoutExtension(LastHistoryPath) + "\r\n");
|
" " + totalMinutes.ToString().PadLeft(3) + " " + Path.GetFileNameWithoutExtension(LastHistoryPath) + "\r\n");
|
||||||
}
|
|
||||||
|
|
||||||
LastHistoryPath = path;
|
LastHistoryPath = path;
|
||||||
LastHistoryStartDateTime = DateTime.Now;
|
LastHistoryStartDateTime = DateTime.Now;
|
||||||
|
|||||||
Reference in New Issue
Block a user