From 419fc66af2301263a2bcf9fc8b14a5ac7b5f3b7f Mon Sep 17 00:00:00 2001 From: John Andrews Date: Fri, 22 Apr 2022 14:10:57 +1200 Subject: [PATCH] added mapping to emby and plex nodes added ability to override server/token/mapping for emby/plex nodes --- BasicNodes/BasicNodes.csproj | Bin 3778 -> 3778 bytes ChecksumNodes/ChecksumNodes.csproj | Bin 2872 -> 2872 bytes CollectionNodes/CollectionNodes.csproj | Bin 3256 -> 3256 bytes DiscordNodes/DiscordNodes.csproj | Bin 2870 -> 2870 bytes EmailNodes/EmailNodes.csproj | Bin 3386 -> 3386 bytes Emby/Emby.csproj | Bin 2844 -> 2844 bytes Emby/Emby.en.json | 19 ++++++++-- Emby/MediaManagement/EmbyUpdater.cs | 34 +++++++++++++++--- Emby/PluginSettings.cs | 3 ++ Emby/Tests/EmbyTests.cs | 13 +++++++ FileFlows.Plugin.dll | Bin 40448 -> 40448 bytes FileFlows.Plugin.pdb | Bin 21968 -> 21992 bytes Gotify/Gotify.csproj | Bin 2752 -> 2752 bytes MetaNodes/MetaNodes.csproj | Bin 4504 -> 4504 bytes MusicNodes/MusicNodes.csproj | Bin 4228 -> 4228 bytes Plex/MediaManagement/PlexUpdater.cs | 30 +++++++++++++--- Plex/Plex.csproj | Bin 2844 -> 2844 bytes Plex/Plex.en.json | 19 ++++++++-- Plex/PluginSettings.cs | 3 ++ Plex/Tests/PlexTests.cs | 18 ++++++++++ VideoNodes/VideoNodes.csproj | Bin 4098 -> 4098 bytes .../PluginInfoGenerator/FileFlows.Plugin.dll | Bin 40448 -> 40448 bytes .../PluginInfoGenerator/FileFlows.Plugin.pdb | Bin 21968 -> 21992 bytes .../FileFlows.ServerShared.dll | Bin 42496 -> 42496 bytes .../FileFlows.ServerShared.pdb | Bin 20800 -> 20800 bytes .../PluginInfoGenerator/FileFlows.Shared.dll | Bin 70656 -> 70656 bytes .../PluginInfoGenerator/FileFlows.Shared.pdb | Bin 33036 -> 33092 bytes .../PluginInfoGenerator.dll | Bin 15360 -> 15360 bytes .../PluginInfoGenerator.pdb | Bin 13448 -> 13452 bytes 29 files changed, 126 insertions(+), 13 deletions(-) diff --git a/BasicNodes/BasicNodes.csproj b/BasicNodes/BasicNodes.csproj index 6d02ec0f966257a92f266ad53f8bce12d94cebed..1a0ebfbdadc3a304ddb10d4d46c8e70ad0705e16 100644 GIT binary patch delta 20 ccmX>kdq{S}8%9Rc$!{4W8BI64Ggb2d09C68B>(^b delta 20 ccmX>kdq{S}8%9Rs$!{4W8I3o)Ggb2d09A(vApigX diff --git a/ChecksumNodes/ChecksumNodes.csproj b/ChecksumNodes/ChecksumNodes.csproj index 489466bf8608e30cfa4c1d7b4c1d48f6d495e35e..246539c9d4cde5b529b85ee9a8321c03bbbf5606 100644 GIT binary patch delta 35 rcmdlXwnJ>gDJE7^1{((b$qShzC*R}ZnykjcH;Gw+(R8ySvp5F;!C47D delta 35 rcmdlXwnJ>gDJE891{((b$qShzC*R}ZnykjcH;Gw+(Ri~Wvp5F;!50ZS diff --git a/CollectionNodes/CollectionNodes.csproj b/CollectionNodes/CollectionNodes.csproj index 1ed1e75962231a3c62c3bb8c368fef9e5916213a..f5b62424f543d938819efe5a8f0625720a6363cc 100644 GIT binary patch delta 36 scmdlXxkGZpEk;&T1{((b$r~9ZC&%${P2R)IH(7v5fzfocAyYdS0M0uK3IG5A delta 36 scmdlXxkGZpEk;&j1{((b$r~9ZC&%${P2R)IH(7v5fzf!gAyYdS0L}Lb1^@s6 diff --git a/DiscordNodes/DiscordNodes.csproj b/DiscordNodes/DiscordNodes.csproj index 078cb559fd777297af5f40bc2d0037d781fa259d..c62e740e15c7509e90e768482511dc3e57520d8c 100644 GIT binary patch delta 20 ccmdlcwoPoqBqm1F$&;Ca8BI4oXY%I&08A(bw*UYD delta 20 ccmdlcwoPoqBqm1V$&;Ca8I3nTXY%I&089i1vj6}9 diff --git a/EmailNodes/EmailNodes.csproj b/EmailNodes/EmailNodes.csproj index a29795367a1c2ade2e7ba4094dee7b2edc471b8c..01f6877c1f799343539a231b9eeb89fdc7c30f01 100644 GIT binary patch delta 32 ocmdlbwM%M)3k$0$gAIfJWN8-3$$MD1Cg-r|Fq&?j$+D0G0FxjH%m4rY delta 32 ocmdlbwM%M)3k$0;gAIfJWN8-3$$MD1Cg-r|FdA>3$+D0G0FvYg$N&HU diff --git a/Emby/Emby.csproj b/Emby/Emby.csproj index 759cd4420f23a7091f7388484ca4da0c81d038a4..60e9c3dfbc707e2af1ef40bca56477692e9c56bc 100644 GIT binary patch delta 20 ccmbOuHb-p3Bqm1F$&;Ca8BI4oXENmg07w`HX#fBK delta 20 ccmbOuHb-p3Bqm1V$&;Ca8I3nTXENmg07vu&WdHyG diff --git a/Emby/Emby.en.json b/Emby/Emby.en.json index 42bee5be..4e711e00 100644 --- a/Emby/Emby.en.json +++ b/Emby/Emby.en.json @@ -7,7 +7,11 @@ "ServerUrl-Placeholder": "http://localhost:8096/", "ServerUrl-Help": "The URL of the Emby server", "AccessToken": "Access Token", - "AccessToken-Help": "An Emby API access token" + "AccessToken-Help": "An Emby API access token", + "Mapping": "Mapping", + "Mapping-Help": "A list of mapping replacement used to paths in FileFlows with the paths that are used in Emby.", + "MappingKey": "FileFlows", + "MappingValue": "Emby" } } }, @@ -18,7 +22,18 @@ "1": "Emby update request sent", "2": "Emby update request failed to send" }, - "Description": "Sends a message to a Emby server to update the library." + "Description": "Sends a message to a Emby server to update the library.", + "Fields": { + "ServerUrl": "Server", + "ServerUrl-Placeholder": "http://localhost:8096/", + "ServerUrl-Help": "The URL of the Emby server.\nNote: Only set this if you want to override the plugin settings Server URL.", + "AccessToken": "Access Token", + "AccessToken-Help": "An Emby API access token.\nNote: Only set this if you want to override the plugin settings access token.", + "Mapping": "Mapping", + "Mapping-Help": "A list of mapping replacement used to paths in FileFlows with the paths that are used in Emby.\nNote: This will not be used unless the Server URL is also set here, otherwise the plugin settings mappings will be used.", + "MappingKey": "FileFlows", + "MappingValue": "Emby" + } } } } diff --git a/Emby/MediaManagement/EmbyUpdater.cs b/Emby/MediaManagement/EmbyUpdater.cs index 0d158f34..636074ac 100644 --- a/Emby/MediaManagement/EmbyUpdater.cs +++ b/Emby/MediaManagement/EmbyUpdater.cs @@ -1,4 +1,5 @@ -using System.Text.RegularExpressions; +using FileFlows.Plugin.Attributes; +using System.Text.RegularExpressions; namespace FileFlows.Emby.MediaManagement; @@ -9,16 +10,30 @@ public class EmbyUpdater: Node public override FlowElementType Type => FlowElementType.Process; public override string Icon => "fas fa-paper-plane"; + public override bool NoEditorOnAdd => true; + + [Text(1)] + public string ServerUrl { get; set; } + + [Text(2)] + public string AccessToken { get; set; } + + [KeyValue(3)] + public List> Mapping { get; set; } + public override int Execute(NodeParameters args) { var settings = args.GetPluginSettings(); + string serverUrl = ServerUrl?.EmptyAsNull() ?? settings.ServerUrl; + string accessToken = AccessToken?.EmptyAsNull() ?? settings.AccessToken; + var mapping = (string.IsNullOrWhiteSpace(ServerUrl) ? settings.Mapping : Mapping) ?? new List>(); - if (string.IsNullOrWhiteSpace(settings?.AccessToken)) + if (string.IsNullOrWhiteSpace(accessToken)) { args.Logger?.WLog("No access token set"); return 2; } - if (string.IsNullOrWhiteSpace(settings?.ServerUrl)) + if (string.IsNullOrWhiteSpace(serverUrl)) { args.Logger?.WLog("No server URL set"); return 2; @@ -27,6 +42,14 @@ public class EmbyUpdater: Node // get the path string path = args.WorkingFile; path = args.UnMapPath(path); + + foreach (var map in mapping) + { + if (string.IsNullOrEmpty(map.Key)) + continue; + path = path.Replace(map.Key, map.Value ?? string.Empty); + } + if (args.IsDirectory == false) { bool windows = path.StartsWith("\\") || Regex.IsMatch(path, @"^[a-zA-Z]:\\"); @@ -34,7 +57,8 @@ public class EmbyUpdater: Node path = path.Substring(0, path.LastIndexOf(pathSeparator)); } - string url = settings.ServerUrl; + + string url = serverUrl; if (url.EndsWith("/") == false) url += "/"; url += "Library/Media/Updated"; @@ -45,7 +69,7 @@ public class EmbyUpdater: Node using var httpClient = new HttpClient(); - var updateResponse = GetWebRequest(httpClient, url, settings.AccessToken, body); + var updateResponse = GetWebRequest(httpClient, url, accessToken, body); if (updateResponse.success == false) { if(string.IsNullOrWhiteSpace(updateResponse.body) == false) diff --git a/Emby/PluginSettings.cs b/Emby/PluginSettings.cs index 32fabc9f..d9771f84 100644 --- a/Emby/PluginSettings.cs +++ b/Emby/PluginSettings.cs @@ -13,5 +13,8 @@ [Text(2)] [Required] public string AccessToken { get; set; } + + [KeyValue(3)] + public List> Mapping { get; set; } } } diff --git a/Emby/Tests/EmbyTests.cs b/Emby/Tests/EmbyTests.cs index 74dda535..51d10bda 100644 --- a/Emby/Tests/EmbyTests.cs +++ b/Emby/Tests/EmbyTests.cs @@ -33,6 +33,19 @@ public class EmbyTests var node = new EmbyUpdater(); Assert.AreEqual(2, node.Execute(args)); } + + [TestMethod] + public void Emby_Mapped() + { + var args = new NodeParameters(@"/mnt/movies/Citizen Kane (1941)/Citizen Kane (1941).mp4", new TestLogger(), false, string.Empty); + args.GetPluginSettingsJson = (string input) => + { + return File.ReadAllText("../../../settings.json"); + }; + + var node = new EmbyUpdater(); + Assert.AreEqual(1, node.Execute(args)); + } } #endif \ No newline at end of file diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index 1189e579b86ebaba80cd16fa4ad45754e270226a..f9d8833ffdea8289b7f2f25ea82c81e8541a663e 100644 GIT binary patch delta 11988 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 delta 11827 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 Io?|rp4>f~r5&!@I delta 3924 zcmZ9Pd2Ccw6voe+=}Z^e(hdwT!<155HrZO}%9NI+6p%#(3Mgmgn7=pwEg9r#3z&}KdCL&9aVEn$B_u2z5`TFkfeCM8f-+TAnH@#kK zoT)X|=8n&5Dw6q6co1tCM8R%LMzubiGL5^I%#6u}ibEs7=ht@~HDIIgo1J0~CMguZE*SzBF%xit% z2*`=tfczQh9*~=8C*(09AjNqBnFOuQOOu_DH=l8@ROOq)WBhq{^1bpOw7$SAm4#mE zTI7`=G^U7YhRiN<$TDaZw7$qGyNY6@&fFT~3%TTWkxTAFF+E+<9U2Hd4b6pCLOY?O z&{^mY$Qg7=%b;6|q1#1n=@*QZQNcKQ2AT{_gXTh2!FbshOpwFDMmQ(R*TE#rAqjIx zlJA1aaxK_c{u&ib!DLe9-ykQ-!zb?IXe;{HCrJ_ZN%aG9J0~EwiUV>VO6bLyPkuDl zxUPnVM%uCBz~%Eug8b6JZg2py{aCcq6!S^7QcOQxG5ywx>1Q->NSM&3A%LN=q7~E6 zQcSp!#q6JB zGscfhpt~KwnF&12tv|pW{a+!2LlN;6k&R1-Phe zW&tiDo9UM*reCUD7Hpvf)z@3V&2b# zk3-}ba2I&{9Z`0HeQ2LRtUr7=m`8J{TyY9`fZ{1g8wiez=7(fB5(YH{gsbFH#qk(~ zoQMt^(77D`U~sZE;6cR59&kU)9|CS_`Kibss<>LQhmWSh3V6}MA8CsWLx*No0bapl ziaTKtatruN;Vp)SgMC&$@4(}Vxe7)o#)k;c!pi5;cnTVYKufCtU(5={d@)Buw$CR& zMlqlKSjF_8P)z?x#q`HnT)#BOOMLwRyy6KDb(pA_1)o*Sg3l?YKS?ott|j{d=ueJv zWc_`*X8QxvnnRK+Y%shIwYis?^NOn%kb=&RBQ zUz6yC{i-+{?N=;LgU{`%3R;HzR#yI0bR(yOH^Vz^`5EB5X!oC#yFxMjHx%>EtW->Ym16pu{Ek+^)7WpwUBL6;w}HrA!HdyuY;iVtBXW6H*TK(W|51Q( z2r|$Efi%P#LF8O;CffI`4*B2?Rsj=!0Sn;Z{;*!L-@KaKB(yNDbzu@SO+@E&ba z%+>Xl%I6mNwqo{wN9D6WAGTeO{kJHFACj#qz=UmzSzx{LGU-&M@~ zU21|H+~y3lCvcyB4+(|VJ<39Gx8e@q_Z9P}!v~7_<=>;Y09>n>AKtx+`+)Z;F30%t zp$ZHE?^iqm{E=dA4mNX1bGxjAimVIZ9pD$*X5N7?`rFJ$c0h3`0fB?60}Fhjm<2vn zO#hH#`iJq6v;fF%3&>^;@MS{>v_!s=CiOlG z9+wpJWNOFA#hk~yC>e^C5dP`mc_;p1VbN+iFQ?33n)XWF=6B1+l5PH2 zsVljHwkMq9of6wRf56Sri_JlYYX7NgJ0Yj!$il;!%g4tBVr%-YSa5Mz;6(UH;Cg$v z9~bH`F!z`FJ^hp7CEgL|z@LR&fu3REOJ$pk*!jl3k;eWv!;8whxr}eZwS%(_gdO&o83lpm;gAIfJWN9YJ$$OYMCTB6}F`90k$)wH!0FlrLNB{r; delta 32 ocmX>gdO&o83lpm`gAIfJWN9YJ$$OYMCTB6}F&b~4$)wH!0FjgkL;wH) diff --git a/MetaNodes/MetaNodes.csproj b/MetaNodes/MetaNodes.csproj index 1a7d2402317d21651bfed31120c8c50da89aa066..a2193392bb624dc15ad5414dcd47028c18c50949 100644 GIT binary patch delta 20 ccmbQCJVSZI9VSN8$#9m;e9( delta 20 ccmbQCJVSZI9VSNO$#6j3@?)k*M$^r<%6j7@?)k*M&r%4% FlowElementType.Process; public override string Icon => "fas fa-paper-plane"; + public override bool NoEditorOnAdd => true; + + [Text(1)] + public string ServerUrl { get; set; } + + [Text(2)] + public string AccessToken { get; set; } + + [KeyValue(3)] + public List> Mapping { get; set; } + public override int Execute(NodeParameters args) { var settings = args.GetPluginSettings(); + string serverUrl = ServerUrl?.EmptyAsNull() ?? settings.ServerUrl; + string accessToken = AccessToken?.EmptyAsNull() ?? settings.AccessToken; + var mapping = (string.IsNullOrWhiteSpace(ServerUrl) ? settings.Mapping : Mapping) ?? new List>(); - if (string.IsNullOrWhiteSpace(settings?.AccessToken)) + if (string.IsNullOrWhiteSpace(accessToken)) { args.Logger?.WLog("No access token set"); return 2; } - if (string.IsNullOrWhiteSpace(settings?.ServerUrl)) + if (string.IsNullOrWhiteSpace(serverUrl)) { args.Logger?.WLog("No server URL set"); return 2; @@ -35,14 +49,14 @@ public class PlexUpdater: Node path = path.Substring(0, path.LastIndexOf(pathSeparator)); } - string url = settings.ServerUrl; + string url = serverUrl; if (url.EndsWith("/") == false) url += "/"; url += "library/sections"; using var httpClient = new HttpClient(); - var sectionsResponse= GetWebRequest(httpClient, url + "?X-Plex-Token=" + settings.AccessToken); + var sectionsResponse= GetWebRequest(httpClient, url + "?X-Plex-Token=" + accessToken); if (sectionsResponse.success == false) { args.Logger?.WLog("Failed to retrieve sections" + (string.IsNullOrWhiteSpace(sectionsResponse.body) ? "" : ": " + sectionsResponse.body)); @@ -61,6 +75,14 @@ public class PlexUpdater: Node args.Logger?.ELog("Failed deserializing sections json: " + ex.Message); return 2; } + + foreach(var map in mapping) + { + if (string.IsNullOrEmpty(map.Key)) + continue; + path = path.Replace(map.Key, map.Value ?? string.Empty); + } + string pathLower = path.ToLower(); var section = sections?.MediaContainer?.Directory?.Where(x => { if (x.Location?.Any() != true) diff --git a/Plex/Plex.csproj b/Plex/Plex.csproj index ce19932aad4be8117ebbb76387975aa71e5d81d1..6a632ba45e4e067c35dcce9a9b384d2b4b38a3bc 100644 GIT binary patch delta 20 ccmbOuHb-p3Bqm1F$&;Ca8BI4oXENmg07w`HX#fBK delta 20 ccmbOuHb-p3Bqm1V$&;Ca8I3nTXENmg07vu&WdHyG diff --git a/Plex/Plex.en.json b/Plex/Plex.en.json index 76bd757a..6e1074b9 100644 --- a/Plex/Plex.en.json +++ b/Plex/Plex.en.json @@ -7,7 +7,11 @@ "ServerUrl-Placeholder": "http://localhost:32400/", "ServerUrl-Help": "The URL of the Plex server", "AccessToken": "Access Token", - "AccessToken-Help": "The access token used to communicate with the Plex server.\nhttps://github.com/revenz/Fenrus/wiki/Plex-Token" + "AccessToken-Help": "The access token used to communicate with the Plex server.\nhttps://github.com/revenz/Fenrus/wiki/Plex-Token", + "Mapping": "Mapping", + "Mapping-Help": "A list of mapping replacement used to paths in FileFlows with the paths that are used in Plex.", + "MappingKey": "FileFlows", + "MappingValue": "Plex" } } }, @@ -18,7 +22,18 @@ "1": "Plex update request sent", "2": "Plex update request failed to send" }, - "Description": "Sends a message to a Plex server to update the library." + "Description": "Sends a message to a Plex server to update the library.", + "Fields": { + "ServerUrl": "Server", + "ServerUrl-Placeholder": "http://localhost:32400/", + "ServerUrl-Help": "The URL of the Plex server. If blank will use the Server defined in the Plugin settings.\nNote: Only set this if you want to override the plugin settings server URL.", + "AccessToken": "Access Token", + "AccessToken-Help": "The access token used to communicate with the Plex server.\nhttps://github.com/revenz/Fenrus/wiki/Plex-Token\nNote: Only set this if you want to override the plugin settings access token.", + "Mapping": "Mapping", + "Mapping-Help": "A list of mapping replacement used to paths in FileFlows with the paths that are used in Plex.\nNote: This will not be used unless the Server URL is also set here, otherwise the plugin settings mappings will be used.", + "MappingKey": "FileFlows", + "MappingValue": "Plex" + } } } } diff --git a/Plex/PluginSettings.cs b/Plex/PluginSettings.cs index 656f7939..94d3f6ef 100644 --- a/Plex/PluginSettings.cs +++ b/Plex/PluginSettings.cs @@ -14,5 +14,8 @@ [Text(2)] [Required] public string AccessToken { get; set; } + + [KeyValue(3)] + public List> Mapping { get; set; } } } diff --git a/Plex/Tests/PlexTests.cs b/Plex/Tests/PlexTests.cs index a1db8f74..7ca55f4a 100644 --- a/Plex/Tests/PlexTests.cs +++ b/Plex/Tests/PlexTests.cs @@ -33,6 +33,24 @@ public class PlexTests var node = new PlexUpdater(); Assert.AreEqual(2, node.Execute(args)); } + + [TestMethod] + public void Plex_Mapping() + { + var args = new NodeParameters(@"/mnt/movies/Citizen Kane (1941)/Citizen Kane (1941).mp4", new TestLogger(), false, string.Empty); + var settings = new PluginSettings(); + settings.Mapping = new List>(); + settings.Mapping.Add(new KeyValuePair("/mnt/movies", "/media/movies")); + + args.GetPluginSettingsJson = (string input) => + { + return File.ReadAllText("../../../settings.json"); + }; + + var node = new PlexUpdater(); + Assert.AreEqual(1, node.Execute(args)); + } + } #endif \ No newline at end of file diff --git a/VideoNodes/VideoNodes.csproj b/VideoNodes/VideoNodes.csproj index 953ec111369970d6dc5c92805a0c34829ea03791..c4f285c0fb7446d981666dd928b5fdf7b856c530 100644 GIT binary patch delta 20 bcmZotXj0hlh>6j3@?)k*M$^r<%tv_uOd|%` delta 20 bcmZotXj0hlh>6j7@?)k*M&r%4%tv_uOaBJe diff --git a/build/utils/PluginInfoGenerator/FileFlows.Plugin.dll b/build/utils/PluginInfoGenerator/FileFlows.Plugin.dll index 37bba332ff9b95e3e756847b4dd2fb9ea49068bd..2115cd36eb151ed81f65b90bd5fa0957908b3240 100644 GIT binary patch delta 12014 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 JEmoA-{|g+Ncp?A* delta 11827 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 AKL7v# diff --git a/build/utils/PluginInfoGenerator/FileFlows.Plugin.pdb b/build/utils/PluginInfoGenerator/FileFlows.Plugin.pdb index 1396a077162e5d56c164d078705abf9ee1e96543..0e42da96b8f8297bc6d0146000e35846cb265d92 100644 GIT binary patch delta 4014 zcmZ9PS#T6p6oyYvX0j4Uh6FOhgaBa)OCXSqVIU!dMK+1Vun1U+B8zOYiV}uRK-n2k z77>(1g|H4Nh-iSa%0dd{1p-v5pjDCwAEfkwLMZ>gr+YZ0tA6Hw=Rfz{+kJ1}CO;oG z?jJTb6^!qhCX&5Gq##`+!$7-o-khm3C(jjJ!w_I)j&6)`h2fEf*b{2Nq|zI=1@zhT>*!VUNLBePQ|p1_sJ~N3H=t+rN2)u zJ)4FspIk2R$vywxg-hlLnEL`&|)YA9fB@G zx1k46V!$PB0{iqSOYG@Y_hP1d=g_WXvI1 z>H>|WeoUZ={2NG-8h@%7y*W`{9!ZY2Bb;WkN7g(OHtN zyFmxQBXPKS>^@w>AurfraWc4t;#hDdWczVww^SUDc9vrLtrXL5{gi_!Ez;&`K$wuN zn0{Nu^xG+>-(E5O4vOjLD5l>r%0V$F&?y=aa{`?evp^TcERd_1K3^jHiO}z+n0}sO z`rU2D_~rz9*a7@9Azv{IaIfnDxZiE2&wXw)`xh&w-%~MtZg}Q%d~*W5tN@t_JTvTq zEWk}=GktC%o9UM*reCUx{-L51SZ7=)Ywe>uEr=moIH%I6apshGQ>(q?XrH0VV;fc6Ba3f#gfz!!Ct zV!o)OA=~H5k5SB(AFG)DON!}_vpBjn$2UlrAPLa{c*hf!&w{ThX2I7L)1Rc6KKG8E z@Z<=a2FX>f1@;s*5|vm3Eb8k51T6qfz8o?$O+s5xg8QF z!*g5Q9?Tu&us8?22<<||wjjTwSrB)O(}$c3UI4!hMD7Z%M!Si{dEo8*?(?yRkkH*K zFb*+tJ~$J}Nf5aJoQ?J)E58VwWA)z(zu4-}!(y9ao=_h);O&xP=9@290upvWb^$)J zor<~hc3BEM zf{&4d)|w4N;J8W{2|l5iCyCA6;XGSULVl}1pFmhKpTH^fw|y?zX~l`)ub`lvzye=G zHnYGP#q`fArvDATpmsh_n{y2Y_*OCZ$a%$_z;}|;H(G#!?;*P&2dq`h0WYWmDd3CJ zG;}GoW01vvP#$ajh!b1ax{R33T&^q1KZRA-%w0ha;OQ`czaD;F_^$h` zQFydltaK@el|P`2B13*HY6LSGY7E86D!q?sv_7e|-dNdFQtOSA zGbPd@Ry^U%^r>;Jx|d$dowH-Lv%VzcExvqx(E4lZYT6Gu{N&<|X>}Xiw^xP_`tEnY zpHCvL9$me-e{b*9IO*iTTbU-K@Mo2yvrqCJSOk%jA;}4n;D~qNpGEBAt_;`q-(kcp zF^*Ik$99Kb8Q9HbTn}#=nr9dfLl=hKi8!YphW8CW?KF0T$BumHNV;(e_wWm}^hRhx I)hwg#e{6AYOaK4? delta 3924 zcmZ9Pd2Ccw6voe+=}Z^e(hdwT!<155HrZO}%9NIUk%9;mRL}^D6;dht5{pAo2_jp0 zL_lQ|5v3s30cBBCh#^Q!FoaD|0sjzVG!a<>i1GVo-fIuM6~lsb7sXc8jz}7^Rlxmul0c= zAjfh8@@J%bKyIL&kjI386z2tG3bZOOO}0bce8#;}oo|kc@#o#n_sW0Jx&p6M7J8+7 zkynDy_#&nmGP}qjOQDs}x+16SD2kDKb4!db!{eCm=VA19Bfq=);&#el%CR zu7pNJ+Ogum6a*`U#ggXUyNese+upwWo%(M#z6g5LWXI?r-!aOMFv_?Y>m7}gjNu98O;$72w3 zB08)`=fUuYgOjZR_ajF3fCpH98MwLSry_rZ;u^&sKALhX;6(?2q%ATM9a>lgcm7<#w+I>q_F4J71CJ}_Dj2O8A0j*pE1yf_X=p40t*rulG0PS6#T*COKA-$} z#eDKlD5n3UV){=hra!^rhNU@C;u{9w6;FDo!(_!Q_?%)Ed|omADT?WHE!h`9zaq+! z@gpzeiw`ACRm=j@6th63V)`#BraxUV{VK)uXGA!Jhlzs;Ga)_0S&HfNr-Jt9D5gJG zF$b8ZnErgl^s6O7T3fGyc+72y&H98GvQ`0K#>I;HUeqWq1us!N!~8ojJ=71;*QE)* zCeaJ~O>s8buUVW1pW9V6v=sSmto&){MotHBf_KvLGr)Jy9$;}haBJjdfR{m;(f%Rq z10ruU1|oNMxnlZnD(0P8p_u+k#q?K6Q+t5Op1K;G6&(;$6%i_mUraW;4Za(P$R!p~vl3>nE_2RzR1vtQ0kj)(6>&6afiF_l?8hjQ! zDk+UjNGxNzM(R@#& z!)a`urB(-zS>s6`REZ~b#)|TTy2%ygzR3C#%ufpae&7Ml=+Ym+@V=Zg{p~TsJS3 nU5q;WuZNF}*dJr84bK^U$I;}>G0gL4Xz>|yL3vfoIaK-|L8Wf% diff --git a/build/utils/PluginInfoGenerator/FileFlows.ServerShared.dll b/build/utils/PluginInfoGenerator/FileFlows.ServerShared.dll index ea75e37c8162e9b8568a3c9d582a1b84c625e8de..c6683349cb25954c2cd54aba4f78e13b88cb58fb 100644 GIT binary patch delta 107 zcmZoT!_;twX+j6f;kKC{Hufa63DgDnX|3D4+-seyEZf7L>X)1Uw55o%ELm@JYI4fF z0D*0ln%-+o#a&iOi?&|#z8f_8$h<@asNj(-s31_a*O6sU9zJnyJt8V4@^`cA{M~E- Dh~hFW delta 107 zcmZoT!_;twX+j5!&&J2!H})j730Rg?v&M)nb6DNS>AJE!X7c7gZ7Jd`ZNH2DO-`8? zAmI7fJm5m?e1}=HYprY(a=uPJGA~g9D!2e92vl8HdV1qOY5jc5vvT`%?1FL C05d)S diff --git a/build/utils/PluginInfoGenerator/FileFlows.ServerShared.pdb b/build/utils/PluginInfoGenerator/FileFlows.ServerShared.pdb index 2beb29d5f4adb71e04a8c5f0f3ceabc805977e2c..d7ffb30bbfe86fd95edbb1df4838267affb06e83 100644 GIT binary patch delta 110 zcmV-!0FnQ|q5;670g!wYws|Q_tu+@!sv8xB)=S+|q^~^6v5-q0N9S51iU7a>0Kkr} zXadP8Ougd~TdEtOUPftbWkzgocXKXNXkl_?WG-ZEYybcONU*fL03ZPXcNa@?ZC^q{ QnYp?qfw%cW0MswL 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 diff --git a/build/utils/PluginInfoGenerator/FileFlows.Shared.pdb b/build/utils/PluginInfoGenerator/FileFlows.Shared.pdb index e3e6f6a462ef04a537c328bd9ff5441d53993a72..e46e35aabec1cbfc2f20c9a232b974f3564b4ac0 100644 GIT binary patch delta 4568 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