crash fixed when PowerShell 5.1 is not available

This commit is contained in:
Frank Skare
2020-04-21 03:39:31 +02:00
parent 4743f365a1
commit 930ba2b0e7
6 changed files with 73 additions and 34 deletions

View File

@@ -2,6 +2,10 @@
5.4.4.4 Beta (not yet released) 5.4.4.4 Beta (not yet released)
============ ============
- with `border=no` the osc top bar window buttons min, max, close did not work.
- some anamorphic videos were shown with black bars
- crash fixed when PowerShell 5.1 is not available
5.4.4.3 Beta 5.4.4.3 Beta
============ ============

View File

@@ -21,7 +21,7 @@ Table of contents
* [Extensions](#extensions) * [Extensions](#extensions)
* [Color Theme](#color-theme) * [Color Theme](#color-theme)
* [Hidden and secret features](#hidden-and-secret-features) * [Hidden and secret features](#hidden-and-secret-features)
* [Limitations](#limitations) * [Differences](#differences)
* [Context Menu](#context-menu) * [Context Menu](#context-menu)
+ [Open > Open Files](#open--open-files) + [Open > Open Files](#open--open-files)
+ [Open > Open URL](#open--open-url) + [Open > Open URL](#open--open-url)
@@ -181,7 +181,7 @@ input.conf file, if it's missing mpv.net generates it with the following default
<https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt> <https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt>
mpv.net supports almost all mpv settings and features, mpv.net supports almost all mpv settings and features,
[limitations are described in the manual](manual.md#limitations). [limitations are described in the manual](manual.md#differences).
The config folder can be opened from the context menu. The config folder can be opened from the context menu.
@@ -349,7 +349,7 @@ Whenever the control key is pressed when files or URLs are opened, the playlist
Pressing the shift key while opening a single file will suppress loading all files in the folder. Pressing the shift key while opening a single file will suppress loading all files in the folder.
Limitations Differences
----------- -----------
mpv.net was designed to work exactly like mpv, there are few limitations: mpv.net was designed to work exactly like mpv, there are few limitations:
@@ -378,7 +378,9 @@ mpv.net has currently implemented the following window related features:
[autofit-larger](https://mpv.io/manual/master/#options-autofit-larger) (only partly implemented) [autofit-larger](https://mpv.io/manual/master/#options-autofit-larger) (only partly implemented)
[window-maximized](https://mpv.io/manual/master/#options-window-maximized) (don't use input.conf, use Win+Up, Win+Down instead) [window-maximized](https://mpv.io/manual/master/#options-window-maximized) (only partly implemented, use Win+Up and Win+Down)
[window-minimized](https://mpv.io/manual/master/#options-window-minimized) (only partly implemented, use Win+Up and Win+Down)
### Command Line Limitations ### Command Line Limitations

View File

@@ -79,7 +79,7 @@ namespace mpvnet
InvokeOnMainThread(new Action(() => { InvokeOnMainThread(new Action(() => {
using (var d = new OpenFileDialog() { Multiselect = true }) using (var d = new OpenFileDialog() { Multiselect = true })
if (d.ShowDialog() == DialogResult.OK) if (d.ShowDialog() == DialogResult.OK)
mp.Load(d.FileNames, loadFolder, append); mp.LoadFiles(d.FileNames, loadFolder, append);
})); }));
} }
@@ -96,12 +96,12 @@ namespace mpvnet
if (Directory.Exists(d.SelectedPath + "\\BDMV")) if (Directory.Exists(d.SelectedPath + "\\BDMV"))
{ {
mp.set_property_string("bluray-device", d.SelectedPath); mp.set_property_string("bluray-device", d.SelectedPath);
mp.Load(new[] { @"bd://" }, false, false); mp.LoadFiles(new[] { @"bd://" }, false, false);
} }
else else
{ {
mp.set_property_string("dvd-device", d.SelectedPath); mp.set_property_string("dvd-device", d.SelectedPath);
mp.Load(new[] { @"dvd://" }, false, false); mp.LoadFiles(new[] { @"dvd://" }, false, false);
} }
} }
} }
@@ -241,7 +241,7 @@ namespace mpvnet
Msg.ShowError("The clipboard does not contain a valid URL or file, URLs have to contain :// and are not allowed to contain a newline character."); Msg.ShowError("The clipboard does not contain a valid URL or file, URLs have to contain :// and are not allowed to contain a newline character.");
return; return;
} }
mp.Load(new [] { clipboard }, false, Control.ModifierKeys.HasFlag(Keys.Control)); mp.LoadFiles(new [] { clipboard }, false, Control.ModifierKeys.HasFlag(Keys.Control));
})); }));
} }

View File

@@ -103,7 +103,7 @@ namespace mpvnet
void Execute() void Execute()
{ {
if (ListView.SelectedItem != null) if (ListView.SelectedItem != null)
mp.Load(new[] { ListView.SelectedItem as string }, true, Keyboard.Modifiers == ModifierKeys.Control); mp.LoadFiles(new[] { ListView.SelectedItem as string }, true, Keyboard.Modifiers == ModifierKeys.Control);
Keyboard.Focus(FilterTextBox); Keyboard.Focus(FilterTextBox);
} }

View File

@@ -24,10 +24,11 @@ namespace mpvnet
Point LastCursorPosChanged; Point LastCursorPosChanged;
int LastCursorChangedTickCount; int LastCursorChangedTickCount;
int TaskbarButtonCreatedMessage; int TaskbarButtonCreatedMessage;
int ShownTickCount;
DateTime LastCycleFullscreen; DateTime LastCycleFullscreen;
Taskbar Taskbar; Taskbar Taskbar;
List<string> RecentFiles; List<string> RecentFiles;
int ShownTickCount; bool WasMaximized;
public MainForm() public MainForm()
{ {
@@ -54,6 +55,7 @@ namespace mpvnet
mp.Seek += () => UpdateProgressBar(); mp.Seek += () => UpdateProgressBar();
mp.observe_property_bool("window-maximized", PropChangeWindowMaximized); mp.observe_property_bool("window-maximized", PropChangeWindowMaximized);
mp.observe_property_bool("window-minimized", PropChangeWindowMinimized);
mp.observe_property_bool("pause", PropChangePause); 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);
@@ -141,7 +143,12 @@ namespace mpvnet
bool IsMouseInOSC() bool IsMouseInOSC()
{ {
Point pos = PointToClient(Control.MousePosition); Point pos = PointToClient(Control.MousePosition);
return pos.Y > ClientSize.Height * 0.9 || pos.Y < ClientSize.Height * 0.05; float top = 0;
if (FormBorderStyle == FormBorderStyle.None)
top = ClientSize.Height * 0.1f;
return pos.Y > ClientSize.Height * 0.85 || pos.Y < top;
} }
void ContextMenu_Opening(object sender, CancelEventArgs e) void ContextMenu_Opening(object sender, CancelEventArgs e)
@@ -235,7 +242,7 @@ namespace mpvnet
recent.DropDownItems.Clear(); recent.DropDownItems.Clear();
foreach (string path in RecentFiles) foreach (string path in RecentFiles)
MenuItem.Add(recent.DropDownItems, path, () => mp.Load(new[] { path }, true, Control.ModifierKeys.HasFlag(Keys.Control))); MenuItem.Add(recent.DropDownItems, path, () => mp.LoadFiles(new[] { path }, true, Control.ModifierKeys.HasFlag(Keys.Control)));
recent.DropDownItems.Add(new ToolStripSeparator()); recent.DropDownItems.Add(new ToolStripSeparator());
MenuItem mi = new MenuItem("Clear List"); MenuItem mi = new MenuItem("Clear List");
@@ -554,7 +561,7 @@ namespace mpvnet
switch (mode) switch (mode)
{ {
case "single": case "single":
mp.Load(files, true, Control.ModifierKeys.HasFlag(Keys.Control)); mp.LoadFiles(files, true, Control.ModifierKeys.HasFlag(Keys.Control));
break; break;
case "queue": case "queue":
foreach (string file in files) foreach (string file in files)
@@ -633,6 +640,20 @@ namespace mpvnet
})); }));
} }
void PropChangeWindowMinimized(bool enabled)
{
if (!WasShown())
return;
BeginInvoke(new Action(() =>
{
if (enabled && WindowState != FormWindowState.Minimized)
WindowState = FormWindowState.Minimized;
else if (!enabled && WindowState == FormWindowState.Minimized)
WindowState = FormWindowState.Normal;
}));
}
void PropChangeBorder(bool enabled) { void PropChangeBorder(bool enabled) {
mp.Border = enabled; mp.Border = enabled;
@@ -707,8 +728,6 @@ namespace mpvnet
WasMaximized = false; WasMaximized = false;
} }
bool WasMaximized;
protected override void OnFormClosing(FormClosingEventArgs e) protected override void OnFormClosing(FormClosingEventArgs e)
{ {
base.OnFormClosing(e); base.OnFormClosing(e);
@@ -724,8 +743,10 @@ namespace mpvnet
if (!mp.ShutdownAutoResetEvent.WaitOne(10000)) if (!mp.ShutdownAutoResetEvent.WaitOne(10000))
Msg.ShowError("Shutdown thread failed to complete within 10 seconds."); Msg.ShowError("Shutdown thread failed to complete within 10 seconds.");
foreach (PowerShell ps in PowerShell.Instances) try { // PowerShell 5.1 might not be available
ps.Runspace.Dispose(); foreach (PowerShell ps in PowerShell.Instances)
ps.Runspace.Dispose();
} catch {}
} }
void SaveWindowProperties() void SaveWindowProperties()
@@ -743,8 +764,7 @@ namespace mpvnet
base.OnMouseDown(e); base.OnMouseDown(e);
if (WindowState == FormWindowState.Normal && if (WindowState == FormWindowState.Normal &&
e.Button == MouseButtons.Left && e.Button == MouseButtons.Left && !IsMouseInOSC())
e.Y < ClientSize.Height * 0.9)
{ {
var HTCAPTION = new IntPtr(2); var HTCAPTION = new IntPtr(2);
WinAPI.ReleaseCapture(); WinAPI.ReleaseCapture();
@@ -768,10 +788,10 @@ namespace mpvnet
base.OnDragDrop(e); base.OnDragDrop(e);
if (e.Data.GetDataPresent(DataFormats.FileDrop)) if (e.Data.GetDataPresent(DataFormats.FileDrop))
mp.Load(e.Data.GetData(DataFormats.FileDrop) as String[], true, Control.ModifierKeys.HasFlag(Keys.Control)); mp.LoadFiles(e.Data.GetData(DataFormats.FileDrop) as String[], true, Control.ModifierKeys.HasFlag(Keys.Control));
if (e.Data.GetDataPresent(DataFormats.Text)) if (e.Data.GetDataPresent(DataFormats.Text))
mp.Load(new[] { e.Data.GetData(DataFormats.Text).ToString() }, true, Control.ModifierKeys.HasFlag(Keys.Control)); mp.LoadFiles(new[] { e.Data.GetData(DataFormats.Text).ToString() }, true, Control.ModifierKeys.HasFlag(Keys.Control));
} }
protected override void OnLostFocus(EventArgs e) protected override void OnLostFocus(EventArgs e)

View File

@@ -364,13 +364,14 @@ namespace mpvnet
{ {
HideLogo(); HideLogo();
Duration = TimeSpan.FromSeconds(get_property_number("duration")); Duration = TimeSpan.FromSeconds(get_property_number("duration"));
Size vidSize = new Size(get_property_int("dwidth"), get_property_int("dheight")); Size size = new Size(get_property_int("width"), get_property_int("height"));
if (vidSize.Width == 0 || vidSize.Height == 0) if (size.Width == 0 || size.Height == 0)
vidSize = new Size(1, 1); size = new Size(1, 1);
if (VideoSize != vidSize)
if (VideoSize != size)
{ {
VideoSize = vidSize; VideoSize = size;
VideoSizeChanged?.Invoke(); VideoSizeChanged?.Invoke();
} }
@@ -384,7 +385,6 @@ namespace mpvnet
WriteHistory(path); WriteHistory(path);
FileLoaded?.Invoke(); FileLoaded?.Invoke();
} }
break; break;
case mpv_event_id.MPV_EVENT_TRACKS_CHANGED: case mpv_event_id.MPV_EVENT_TRACKS_CHANGED:
TracksChanged?.Invoke(); TracksChanged?.Invoke();
@@ -420,7 +420,16 @@ namespace mpvnet
} }
break; break;
case mpv_event_id.MPV_EVENT_VIDEO_RECONFIG: case mpv_event_id.MPV_EVENT_VIDEO_RECONFIG:
VideoReconfig?.Invoke(); {
VideoReconfig?.Invoke();
Size size = new Size(get_property_int("dwidth"), get_property_int("dheight"));
if (size.Width != 0 && size.Height != 0 && VideoSize != size)
{
VideoSize = size;
VideoSizeChanged?.Invoke();
}
}
break; break;
case mpv_event_id.MPV_EVENT_AUDIO_RECONFIG: case mpv_event_id.MPV_EVENT_AUDIO_RECONFIG:
AudioReconfig?.Invoke(); AudioReconfig?.Invoke();
@@ -740,7 +749,7 @@ namespace mpvnet
} }
} }
Load(files.ToArray(), !App.Queue, Control.ModifierKeys.HasFlag(Keys.Control) || App.Queue); LoadFiles(files.ToArray(), !App.Queue, Control.ModifierKeys.HasFlag(Keys.Control) || App.Queue);
if (files.Count == 0 || files[0].Contains("://")) if (files.Count == 0 || files[0].Contains("://"))
{ {
@@ -752,7 +761,7 @@ namespace mpvnet
public static DateTime LastLoad; public static DateTime LastLoad;
public static void Load(string[] files, bool loadFolder, bool append) public static void LoadFiles(string[] files, bool loadFolder, bool append)
{ {
if (files is null || files.Length == 0) if (files is null || files.Length == 0)
return; return;
@@ -765,13 +774,17 @@ namespace mpvnet
LastLoad = DateTime.Now; LastLoad = DateTime.Now;
for (int i = 0; i < files.Length; i++) for (int i = 0; i < files.Length; i++)
if (App.SubtitleTypes.Contains(files[i].ShortExt())) {
commandv("sub-add", files[i]); string file = files[i];
if (App.SubtitleTypes.Contains(file.ShortExt()))
commandv("sub-add", file);
else else
if (i == 0 && !append) if (i == 0 && !append)
commandv("loadfile", files[i]); commandv("loadfile", file);
else else
commandv("loadfile", files[i], "append"); commandv("loadfile", file, "append");
}
if (string.IsNullOrEmpty(get_property_string("path"))) if (string.IsNullOrEmpty(get_property_string("path")))
set_property_int("playlist-pos", 0); set_property_int("playlist-pos", 0);