From 32a46e47e2329c95f8ffc9c7e0814404e3ca620c Mon Sep 17 00:00:00 2001 From: Frank Skare Date: Wed, 25 Nov 2020 16:21:53 +0100 Subject: [PATCH] New feature for rating extension --- extensions/RatingExtension/RatingExtension.cs | 52 +++++++++++++++++-- .../RatingExtension/RatingExtension.csproj | 1 + 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/extensions/RatingExtension/RatingExtension.cs b/extensions/RatingExtension/RatingExtension.cs index b675219..2af2c41 100644 --- a/extensions/RatingExtension/RatingExtension.cs +++ b/extensions/RatingExtension/RatingExtension.cs @@ -1,3 +1,4 @@ + // This extension writes a rating to the filename of rated videos when mpv.net shuts down. // The input.conf defaults contain key bindings for this extension to set ratings. @@ -6,9 +7,11 @@ using System; using System.ComponentModel.Composition; using System.Collections.Generic; using System.IO; +using Microsoft.VisualBasic.FileIO; using mpvnet; using static mpvnet.Core; +using System.Threading; namespace RatingExtension // the assembly name must end with 'Extension' { @@ -18,6 +21,9 @@ namespace RatingExtension // the assembly name must end with 'Extension' // dictionory to store the filename and the rating Dictionary Dic = new Dictionary(); + string FileToDelete; + DateTime DeleteTime; + public RatingExtension() // plugin initialization { core.ClientMessage += ClientMessage; //handles keys defined in input.conf @@ -31,8 +37,10 @@ namespace RatingExtension // the assembly name must end with 'Extension' { string filepath = i.Key; int rating = i.Value; + if (String.IsNullOrEmpty(filepath) || !File.Exists(filepath)) return; + string basename = Path.GetFileNameWithoutExtension(filepath); for (int x = 0; x < 6; x++) @@ -40,9 +48,13 @@ namespace RatingExtension // the assembly name must end with 'Extension' basename = basename.Replace(" (" + x + "stars)", ""); basename += $" ({rating}stars)"; - string newPath = Path.Combine(Path.GetDirectoryName(filepath), basename + Path.GetExtension(filepath)); + + string newPath = Path.Combine(Path.GetDirectoryName(filepath), + basename + Path.GetExtension(filepath)); + if (filepath.ToLower() != newPath.ToLower()) File.Move(filepath, newPath); + File.SetLastWriteTime(newPath, DateTime.Now); } } @@ -50,17 +62,47 @@ namespace RatingExtension // the assembly name must end with 'Extension' //handles keys defined in input.conf void ClientMessage(string[] args) { - if (args[0] != "rate-file") return; + if (args[0] != "rate-file") + return; if (int.TryParse(args[1], out int rating)) { string path = core.get_property_string("path"); - if (!File.Exists(path)) return; - Dic[path] = rating; - core.commandv("show-text", $"Rating: {rating}"); + + if (!File.Exists(path)) + return; + + if (rating == 0 || rating == 1) + Delete(rating); + else + { + Dic[path] = rating; + core.commandv("show-text", $"Rating: {rating}"); + } } else if (args[1] == "about") Msg.Show("Rating Extension", "This extension writes a rating to the filename of rated videos when mpv.net shuts down.\n\nThe input.conf defaults contain key bindings for this extension to set ratings."); } + + void Delete(int rating) + { + if (rating == 0) + { + FileToDelete = core.get_property_string("path"); + DeleteTime = DateTime.Now; + core.commandv("show-text", "Press 1 to delete file", "5000"); + } + else + { + TimeSpan ts = DateTime.Now - DeleteTime; + + if (FileToDelete == core.get_property_string("path") && ts.TotalSeconds < 5) + { + core.command("playlist-remove current"); + Thread.Sleep(2000); + FileSystem.DeleteFile(FileToDelete, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); + } + } + } } } diff --git a/extensions/RatingExtension/RatingExtension.csproj b/extensions/RatingExtension/RatingExtension.csproj index ff0cec7..8f4e02a 100644 --- a/extensions/RatingExtension/RatingExtension.csproj +++ b/extensions/RatingExtension/RatingExtension.csproj @@ -50,6 +50,7 @@ MinimumRecommendedRules.ruleset +