From 4f01c1166fc6a4244fefd33d1fff63917990de4b Mon Sep 17 00:00:00 2001 From: glax Date: Sun, 25 Jun 2023 23:56:00 +0200 Subject: [PATCH] Fix taskIds being changed during requests, no workaround this time --- API/RequestHandler.cs | 18 +++++++++++------- Tranga/TaskManager.cs | 4 ++-- Tranga/TrangaSettings.cs | 1 - 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/API/RequestHandler.cs b/API/RequestHandler.cs index f23c8fa..0e54d31 100644 --- a/API/RequestHandler.cs +++ b/API/RequestHandler.cs @@ -80,12 +80,16 @@ public class RequestHandler private Dictionary GetRequestVariables(string query) { Dictionary ret = new(); - Regex queryRex = new (@"\?{1}&?([A-z]+=[A-z]+)+(&[A-z]+=[A-z]+)*"); + Regex queryRex = new (@"\?{1}&?([A-z0-9-=]+=[A-z0-9-=]+)+(&[A-z0-9-=]+=[A-z0-9-=]+)*"); if (!queryRex.IsMatch(query)) return ret; query = query.Substring(1); - foreach(string kvpair in query.Split('&').Where(str => str.Length>=3 )) - ret.Add(kvpair.Split('=')[0], kvpair.Split('=')[1]); + foreach (string kvpair in query.Split('&').Where(str => str.Length >= 3)) + { + string var = kvpair.Split('=')[0]; + string val = kvpair.Substring(var.Length + 1); + ret.Add(var, val); + } return ret; } @@ -152,7 +156,7 @@ public class RequestHandler _taskManager.GetAvailableConnectors().FirstOrDefault(con => con.Key == connectorName1).Value; if (connector1 is null) return; - Publication? publication1 = _taskManager.GetAllPublications().FirstOrDefault(pub => string.Concat(TrangaSettings.CleanIdRex.Matches(pub.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId1))); + Publication? publication1 = _taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId1); if (publication1 is null) return; _taskManager.AddTask(new MonitorPublicationTask(connectorName1, (Publication)publication1, TimeSpan.Parse(reoccurrenceTime1), language1 ?? "en")); @@ -174,7 +178,7 @@ public class RequestHandler _taskManager.GetAvailableConnectors().FirstOrDefault(con => con.Key == connectorName2).Value; if (connector2 is null) return; - Publication? publication2 = _taskManager.GetAllPublications().FirstOrDefault(pub => string.Concat(TrangaSettings.CleanIdRex.Matches(pub.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId2))); + Publication? publication2 = _taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId2); if (publication2 is null) return; @@ -261,7 +265,7 @@ public class RequestHandler variables.TryGetValue("internalId", out string? internalId1); if(internalId1 is null) return _taskManager.GetAllPublications(); - return new [] { _taskManager.GetAllPublications().FirstOrDefault(pub => string.Concat(TrangaSettings.CleanIdRex.Matches(pub.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId1))) }; + return new [] { _taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId1) }; case "/Publications/FromConnector": variables.TryGetValue("connectorName", out string? connectorName1); variables.TryGetValue("title", out string? title); @@ -288,7 +292,7 @@ public class RequestHandler Connector? connector2 = _taskManager.GetAvailableConnectors().FirstOrDefault(con => con.Key == connectorName2).Value; if (connector2 is null) return null; - Publication? publication = _taskManager.GetAllPublications().FirstOrDefault(pub => string.Concat(TrangaSettings.CleanIdRex.Matches(pub.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId2))); + Publication? publication = _taskManager.GetAllPublications().FirstOrDefault(pub => pub.internalId == internalId2); if (publication is null) return null; diff --git a/Tranga/TaskManager.cs b/Tranga/TaskManager.cs index ee3bd5d..3a3079a 100644 --- a/Tranga/TaskManager.cs +++ b/Tranga/TaskManager.cs @@ -180,7 +180,7 @@ public class TaskManager { return _allTasks.Where(mTask => mTask is MonitorPublicationTask mpt && mpt.connectorName == connectorName && - string.Concat(TrangaSettings.CleanIdRex.Matches(mpt.publication.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId))); + mpt.publication.internalId == internalId); } else return _allTasks.Where(tTask => @@ -200,7 +200,7 @@ public class TaskManager { return _allTasks.Where(mTask => mTask is DownloadChapterTask dct && dct.connectorName == connectorName && - string.Concat(TrangaSettings.CleanIdRex.Matches(dct.publication.internalId)) == string.Concat(TrangaSettings.CleanIdRex.Matches(internalId)) && + dct.publication.internalId == internalId && dct.chapter.sortNumber == chapterSortNumber); } else diff --git a/Tranga/TrangaSettings.cs b/Tranga/TrangaSettings.cs index a9eae51..0c817fc 100644 --- a/Tranga/TrangaSettings.cs +++ b/Tranga/TrangaSettings.cs @@ -16,7 +16,6 @@ public class TrangaSettings [JsonIgnore] public string coverImageCache => Path.Join(workingDirectory, "imageCache"); public HashSet libraryManagers { get; } public HashSet notificationManagers { get; } - [JsonIgnore] public static Regex CleanIdRex = new (@"([a-zA-Z0-9]*-*_*)*"); public TrangaSettings(string downloadLocation, string workingDirectory, HashSet? libraryManagers, HashSet? notificationManagers)