From 043b14e9a9eb76770722420dde2d735ef418c124 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Sat, 7 Sep 2024 09:45:38 +0200 Subject: [PATCH] some work --- .../Api/Model/WorkspaceConfig.cs | 7 +- .../Api/Plugins/Features/WorkspaceFeature.cs | 4 +- .../GitLabRepo/GitLabRepoWorkspace.cs | 12 +- .../GitLabRepo/GitLabRepoWorkspaceConfig.cs | 4 +- .../GitLabRepoWorkspaceConfigEditor.cs | 2 +- ModpackUpdater.Apps.Manager/Form1.Designer.cs | 56 +++++++- ModpackUpdater.Apps.Manager/Form1.cs | 56 ++++++-- .../LangRes/GeneralLangRes.Designer.cs | 81 +++++++++++ .../LangRes/GeneralLangRes.resx | 126 ++++++++++++++++++ .../ModpackUpdater.Apps.Manager.csproj | 11 ++ ModpackUpdater.Apps.Manager/Program.cs | 3 + .../icons8_Windows_Update.ico | Bin 0 -> 99678 bytes ModpackUpdater.Apps/Symbols/cancel.svg | 7 +- ModpackUpdater.Apps/Symbols/checkmark.svg | 6 +- ModpackUpdater.Apps/Symbols/close.svg | 6 +- ModpackUpdater.Apps/Symbols/delete.svg | 7 +- ModpackUpdater.Apps/Symbols/done.svg | 5 +- .../Symbols/download_from_ftp.svg | 12 +- .../Symbols/general_warning_sign.svg | 8 +- ModpackUpdater.Apps/Symbols/github.svg | 9 +- ModpackUpdater.Apps/Symbols/new_window.svg | 8 +- ModpackUpdater.Apps/Symbols/opened_folder.svg | 6 +- ModpackUpdater.Apps/Symbols/refresh.svg | 8 +- ModpackUpdater.Apps/Symbols/replay.svg | 6 +- ModpackUpdater.Apps/Symbols/save.svg | 10 +- ModpackUpdater.Apps/Symbols/settings.svg | 6 +- .../Symbols/software_installer.svg | 9 +- ModpackUpdater.Apps/Symbols/time_machine.svg | 12 +- ModpackUpdater.Apps/Symbols/tools.svg | 8 +- ModpackUpdater.Apps/Symbols/update_done.svg | 8 +- ModpackUpdater.Apps/Symbols/workspace.svg | 11 +- ModpackUpdater.Apps/Symbols/wrench.svg | 5 +- 32 files changed, 356 insertions(+), 163 deletions(-) create mode 100644 ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.Designer.cs create mode 100644 ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.resx create mode 100644 ModpackUpdater.Apps.Manager/icons8_Windows_Update.ico diff --git a/ModpackUpdater.Apps.Manager/Api/Model/WorkspaceConfig.cs b/ModpackUpdater.Apps.Manager/Api/Model/WorkspaceConfig.cs index f40d468..3846aa2 100644 --- a/ModpackUpdater.Apps.Manager/Api/Model/WorkspaceConfig.cs +++ b/ModpackUpdater.Apps.Manager/Api/Model/WorkspaceConfig.cs @@ -1,7 +1,12 @@ -namespace ModpackUpdater.Apps.Manager.Api.Model; +using Newtonsoft.Json; + +namespace ModpackUpdater.Apps.Manager.Api.Model; public abstract class WorkspaceConfig { + [JsonProperty] public string ProviderId { get; internal set; } = "origin.unknown"; + + [JsonIgnore] public abstract string DisplayText { get; } } diff --git a/ModpackUpdater.Apps.Manager/Api/Plugins/Features/WorkspaceFeature.cs b/ModpackUpdater.Apps.Manager/Api/Plugins/Features/WorkspaceFeature.cs index cb9d33f..7ed5c0d 100644 --- a/ModpackUpdater.Apps.Manager/Api/Plugins/Features/WorkspaceFeature.cs +++ b/ModpackUpdater.Apps.Manager/Api/Plugins/Features/WorkspaceFeature.cs @@ -14,7 +14,7 @@ public abstract class WorkspaceFeature(string identifier, string name) : PluginF { OnConfigure(ref workspace); - if (workspace?.Config == null) + if (workspace?.Config is null) return false; workspace.Config.ProviderId = Identifier; @@ -22,7 +22,7 @@ public abstract class WorkspaceFeature(string identifier, string name) : PluginF return true; } - public virtual IWorkspace CreateFromSettings(WorkspaceConfig config) + public virtual IWorkspace CreateFromConfig(WorkspaceConfig config) { OnCreate(out var workspace, config); return workspace; diff --git a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspace.cs b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspace.cs index 4d8578d..b76f3ec 100644 --- a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspace.cs +++ b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspace.cs @@ -21,7 +21,7 @@ internal class GitLabRepoWorkspace(GitLabRepoWorkspaceConfig config) : IWorkspac { InstallInfos = InstallInfos.Parse(await GetContent(ConfigX.FileLocationInstallJson)); UpdateInfos = UpdateInfos.Parse(await GetContent(ConfigX.FileLocationUpdateJson)); - ConfigX.InstanceUrl = (await Gitlab.Projects.GetByIdAsync((int)ConfigX.RepoId, new())).NameWithNamespace; + ConfigX.RepoName = (await Gitlab.Projects.GetByIdAsync((int)ConfigX.RepoId, new())).Name; return InstallInfos != null && UpdateInfos != null; } @@ -38,27 +38,25 @@ internal class GitLabRepoWorkspace(GitLabRepoWorkspaceConfig config) : IWorkspac private async Task GetContent(string path) { - var pathUrl = UrlEncoder.Default.Encode(path); var repoId = new ProjectId(ConfigX.RepoId); var repo = Gitlab.GetRepository(repoId); - var data = await repo.Files.GetAsync(pathUrl, ConfigX.RepoBranche); + var data = await repo.Files.GetAsync(path, ConfigX.RepoBranche); return data.DecodedContent; } private Task SaveContent(string path, string content) { - var pathUrl = UrlEncoder.Default.Encode(path); var repoId = new ProjectId(ConfigX.RepoId); var repo = Gitlab.GetRepository(repoId); var update = new FileUpsert { Branch = ConfigX.RepoBranche, - CommitMessage = "update " + Path.GetFileName(pathUrl), + CommitMessage = "update " + Path.GetFileName(path), RawContent = content, - Path = pathUrl, + Path = path, }; - if (repo.Files.FileExists(pathUrl, ConfigX.RepoBranche)) + if (repo.Files.FileExists(path, ConfigX.RepoBranche)) repo.Files.Update(update); else repo.Files.Create(update); diff --git a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfig.cs b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfig.cs index f6c227f..25e3eb5 100644 --- a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfig.cs +++ b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfig.cs @@ -4,7 +4,7 @@ namespace ModpackUpdater.Apps.Manager.Features.Workspaces.GitLabRepo; internal class GitLabRepoWorkspaceConfig : WorkspaceConfig { - public override string DisplayText => $"{RepoName ?? "?"} at {RepoBranche} on {InstanceUrl}"; + public override string DisplayText => $"{RepoName ?? "?"} | {RepoBranche} | {InstanceUrl}"; public string? RepoName { get; set; } @@ -18,5 +18,5 @@ internal class GitLabRepoWorkspaceConfig : WorkspaceConfig public string FileLocationInstallJson { get; set; } = "install.json"; - public string FileLocationUpdateJson { get; set; } = "update.json"; + public string FileLocationUpdateJson { get; set; } = "updates.json"; } diff --git a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfigEditor.cs b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfigEditor.cs index ea7cf6d..749b1c6 100644 --- a/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfigEditor.cs +++ b/ModpackUpdater.Apps.Manager/Features/Workspaces/GitLabRepo/GitLabRepoWorkspaceConfigEditor.cs @@ -36,7 +36,7 @@ internal partial class GitLabRepoWorkspaceConfigEditor : RadFlyoutBase, ILoadCon settings.ApiToken = radTextBox_ApiToken.Text.Trim(); settings.RepoId = (long)radSpinEditor_RepoId.Value; settings.RepoBranche = radTextBox_RepoBranche.Text.Trim(); - settings.InstanceUrl = radTextBox_FileLocInstallJson.Text.Trim(); + settings.FileLocationInstallJson = radTextBox_FileLocInstallJson.Text.Trim(); settings.FileLocationUpdateJson = radTextBox_FileLocUpdateJson.Text.Trim(); return base.ValidateOK(); } diff --git a/ModpackUpdater.Apps.Manager/Form1.Designer.cs b/ModpackUpdater.Apps.Manager/Form1.Designer.cs index b843f56..7dd756b 100644 --- a/ModpackUpdater.Apps.Manager/Form1.Designer.cs +++ b/ModpackUpdater.Apps.Manager/Form1.Designer.cs @@ -38,12 +38,16 @@ partial class Form1 radGridView_Actions = new Telerik.WinControls.UI.RadGridView(); radMenuItem_Workspace = new Telerik.WinControls.UI.RadMenuItem(); radMenuItem_WorkspacePreferences = new Telerik.WinControls.UI.RadMenuItem(); + radMenuItem_SaveWorkspace = new Telerik.WinControls.UI.RadMenuItem(); radMenuSeparatorItem1 = new Telerik.WinControls.UI.RadMenuSeparatorItem(); radMenuItem_OpenNewWorkspace = new Telerik.WinControls.UI.RadMenuItem(); radMenuItem_RecentWorkspaces = new Telerik.WinControls.UI.RadMenuItem(); radMenuItem_Tools = new Telerik.WinControls.UI.RadMenuItem(); radMenu1 = new Telerik.WinControls.UI.RadMenu(); - radMenuItem_SaveWorkspace = new Telerik.WinControls.UI.RadMenuItem(); + radWaitingBar_Updates = new Telerik.WinControls.UI.RadWaitingBar(); + dotsRingWaitingBarIndicatorElement1 = new Telerik.WinControls.UI.DotsRingWaitingBarIndicatorElement(); + radWaitingBar_Actions = new Telerik.WinControls.UI.RadWaitingBar(); + dotsRingWaitingBarIndicatorElement2 = new Telerik.WinControls.UI.DotsRingWaitingBarIndicatorElement(); ((System.ComponentModel.ISupportInitialize)radSplitContainer1).BeginInit(); radSplitContainer1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)splitPanel1).BeginInit(); @@ -56,6 +60,8 @@ partial class Form1 ((System.ComponentModel.ISupportInitialize)radGridView_Actions).BeginInit(); ((System.ComponentModel.ISupportInitialize)radGridView_Actions.MasterTemplate).BeginInit(); ((System.ComponentModel.ISupportInitialize)radMenu1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)radWaitingBar_Updates).BeginInit(); + ((System.ComponentModel.ISupportInitialize)radWaitingBar_Actions).BeginInit(); ((System.ComponentModel.ISupportInitialize)this).BeginInit(); SuspendLayout(); // @@ -164,6 +170,11 @@ partial class Form1 radMenuItem_WorkspacePreferences.Name = "radMenuItem_WorkspacePreferences"; radMenuItem_WorkspacePreferences.Text = "Preferences"; // + // radMenuItem_SaveWorkspace + // + radMenuItem_SaveWorkspace.Name = "radMenuItem_SaveWorkspace"; + radMenuItem_SaveWorkspace.Text = "Save"; + // // radMenuSeparatorItem1 // radMenuSeparatorItem1.Name = "radMenuSeparatorItem1"; @@ -193,10 +204,39 @@ partial class Form1 radMenu1.Size = new Size(800, 28); radMenu1.TabIndex = 1; // - // radMenuItem_SaveWorkspace + // radWaitingBar_Updates // - radMenuItem_SaveWorkspace.Name = "radMenuItem_SaveWorkspace"; - radMenuItem_SaveWorkspace.Text = "Save"; + radWaitingBar_Updates.AssociatedControl = radTreeView_Updates; + radWaitingBar_Updates.Location = new Point(0, 78); + radWaitingBar_Updates.Name = "radWaitingBar_Updates"; + radWaitingBar_Updates.Size = new Size(70, 70); + radWaitingBar_Updates.TabIndex = 2; + radWaitingBar_Updates.Text = "radWaitingBar1"; + radWaitingBar_Updates.WaitingIndicators.Add(dotsRingWaitingBarIndicatorElement1); + radWaitingBar_Updates.WaitingIndicatorSize = new Size(100, 14); + radWaitingBar_Updates.WaitingSpeed = 50; + radWaitingBar_Updates.WaitingStyle = Telerik.WinControls.Enumerations.WaitingBarStyles.DotsRing; + // + // dotsRingWaitingBarIndicatorElement1 + // + dotsRingWaitingBarIndicatorElement1.Name = "dotsRingWaitingBarIndicatorElement1"; + // + // radWaitingBar_Actions + // + radWaitingBar_Actions.AssociatedControl = radGridView_Actions; + radWaitingBar_Actions.Location = new Point(0, 145); + radWaitingBar_Actions.Name = "radWaitingBar_Actions"; + radWaitingBar_Actions.Size = new Size(70, 70); + radWaitingBar_Actions.TabIndex = 3; + radWaitingBar_Actions.Text = "radWaitingBar2"; + radWaitingBar_Actions.WaitingIndicators.Add(dotsRingWaitingBarIndicatorElement2); + radWaitingBar_Actions.WaitingIndicatorSize = new Size(100, 14); + radWaitingBar_Actions.WaitingSpeed = 50; + radWaitingBar_Actions.WaitingStyle = Telerik.WinControls.Enumerations.WaitingBarStyles.DotsRing; + // + // dotsRingWaitingBarIndicatorElement2 + // + dotsRingWaitingBarIndicatorElement2.Name = "dotsRingWaitingBarIndicatorElement2"; // // Form1 // @@ -204,6 +244,8 @@ partial class Form1 AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); + Controls.Add(radWaitingBar_Actions); + Controls.Add(radWaitingBar_Updates); Controls.Add(radSplitContainer1); Controls.Add(radMenu1); Name = "Form1"; @@ -222,6 +264,8 @@ partial class Form1 ((System.ComponentModel.ISupportInitialize)radGridView_Actions.MasterTemplate).EndInit(); ((System.ComponentModel.ISupportInitialize)radGridView_Actions).EndInit(); ((System.ComponentModel.ISupportInitialize)radMenu1).EndInit(); + ((System.ComponentModel.ISupportInitialize)radWaitingBar_Updates).EndInit(); + ((System.ComponentModel.ISupportInitialize)radWaitingBar_Actions).EndInit(); ((System.ComponentModel.ISupportInitialize)this).EndInit(); ResumeLayout(false); PerformLayout(); @@ -244,4 +288,8 @@ partial class Form1 private Telerik.WinControls.UI.RadMenuItem radMenuItem_OpenNewWorkspace; private Telerik.WinControls.UI.RadMenuItem radMenuItem_RecentWorkspaces; private Telerik.WinControls.UI.RadMenuItem radMenuItem_SaveWorkspace; + private Telerik.WinControls.UI.RadWaitingBar radWaitingBar_Updates; + private Telerik.WinControls.UI.DotsRingWaitingBarIndicatorElement dotsRingWaitingBarIndicatorElement1; + private Telerik.WinControls.UI.RadWaitingBar radWaitingBar_Actions; + private Telerik.WinControls.UI.DotsRingWaitingBarIndicatorElement dotsRingWaitingBarIndicatorElement2; } diff --git a/ModpackUpdater.Apps.Manager/Form1.cs b/ModpackUpdater.Apps.Manager/Form1.cs index 601e21f..79fca83 100644 --- a/ModpackUpdater.Apps.Manager/Form1.cs +++ b/ModpackUpdater.Apps.Manager/Form1.cs @@ -1,10 +1,12 @@ using ModpackUpdater.Apps.Manager.Api.Model; using ModpackUpdater.Apps.Manager.Api.Plugins.Features; using ModpackUpdater.Apps.Manager.Api.Plugins.Params; +using ModpackUpdater.Apps.Manager.LangRes; using ModpackUpdater.Apps.Manager.Settings; using Pilz.Plugins.Advanced; using Pilz.Plugins.Advanced.UI.Telerik; using Pilz.UI.Symbols; +using Telerik.WinControls; using Telerik.WinControls.UI; namespace ModpackUpdater.Apps.Manager; @@ -12,9 +14,11 @@ namespace ModpackUpdater.Apps.Manager; public partial class Form1 : RadForm, IMainApi { private IWorkspace? workspace; - + public IWorkspace? Workspace => workspace; + private record RecentFileItemTag(WorkspaceConfig Config, WorkspaceFeature Feature); + public Form1() { InitializeComponent(); @@ -38,12 +42,19 @@ public partial class Form1 : RadForm, IMainApi radMenuItem_RecentWorkspaces.Items.Clear(); - foreach (var config in settings.Workspaces) + foreach (var config in settings.Workspaces.ToArray()) { + if (PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).OfType().FirstOrDefault(n => n.Identifier == config.ProviderId) is not WorkspaceFeature feature) + { + settings.Workspaces.Remove(config); + continue; + } + var item = new RadMenuItem { Text = config.DisplayText, - Tag = config, + Tag = new RecentFileItemTag(config, feature), + SvgImage = feature.Icon as RadSvgImage, }; item.Click += RadMenuItem_OpenRecentWorkspace_Click; @@ -52,9 +63,9 @@ public partial class Form1 : RadForm, IMainApi } if (radMenuItem_RecentWorkspaces.Items.Any()) - radMenuItem_RecentWorkspaces.Visibility = Telerik.WinControls.ElementVisibility.Visible; + radMenuItem_RecentWorkspaces.Visibility = ElementVisibility.Visible; else - radMenuItem_RecentWorkspaces.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; + radMenuItem_RecentWorkspaces.Visibility = ElementVisibility.Collapsed; } private void AddToRecentFiles(IWorkspace workspace) @@ -79,15 +90,44 @@ public partial class Form1 : RadForm, IMainApi AddToRecentFiles(workspace); Invoke(LoadRecentWorkspaces); + radWaitingBar_Updates.StartWaiting(); + if (!await workspace.Load()) + { + radWaitingBar_Updates.StopWaiting(); return; + } Invoke(LoadWorkspace); } private void LoadWorkspace() { - // ... + if (workspace?.Config is null || workspace.InstallInfos is null || workspace.UpdateInfos is null) + return; + + radWaitingBar_Updates.StartWaiting(); + Text = workspace.Config.DisplayText; + radTreeView_Updates.BeginUpdate(); + radTreeView_Updates.Nodes.Clear(); + + radTreeView_Updates.Nodes.Add(new RadTreeNode + { + Text = string.Format(GeneralLangRes.Node_Install, workspace.InstallInfos.Version.ToString()), + Tag = workspace.InstallInfos, + }); + + foreach (var update in workspace.UpdateInfos.Updates) + { + radTreeView_Updates.Nodes.Add(new RadTreeNode + { + Text = string.Format(GeneralLangRes.Node_Update, update.Version.ToString()), + Tag = update, + }); + } + + radTreeView_Updates.EndUpdate(); + radWaitingBar_Updates.StopWaiting(); } private void LoadActionSet() @@ -108,9 +148,7 @@ public partial class Form1 : RadForm, IMainApi private async void RadMenuItem_OpenRecentWorkspace_Click(object? sender, EventArgs e) { - if (sender is RadMenuItem item && item.Tag is WorkspaceConfig config - && PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).OfType().FirstOrDefault(n => n.Identifier == config.ProviderId) is WorkspaceFeature feature - && feature.CreateFromSettings(config) is IWorkspace workspace) + if (sender is RadMenuItem item && item.Tag is RecentFileItemTag tag && tag.Feature.CreateFromConfig(tag.Config) is IWorkspace workspace) await LoadNewWorkspace(workspace); } diff --git a/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.Designer.cs b/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.Designer.cs new file mode 100644 index 0000000..16c3286 --- /dev/null +++ b/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.Designer.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace ModpackUpdater.Apps.Manager.LangRes { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class GeneralLangRes { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal GeneralLangRes() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ModpackUpdater.Apps.Manager.LangRes.GeneralLangRes", typeof(GeneralLangRes).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Install to {0} ähnelt. + /// + internal static string Node_Install { + get { + return ResourceManager.GetString("Node_Install", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die Update to {0} ähnelt. + /// + internal static string Node_Update { + get { + return ResourceManager.GetString("Node_Update", resourceCulture); + } + } + } +} diff --git a/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.resx b/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.resx new file mode 100644 index 0000000..76ad5de --- /dev/null +++ b/ModpackUpdater.Apps.Manager/LangRes/GeneralLangRes.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Install to {0} + + + Update to {0} + + \ No newline at end of file diff --git a/ModpackUpdater.Apps.Manager/ModpackUpdater.Apps.Manager.csproj b/ModpackUpdater.Apps.Manager/ModpackUpdater.Apps.Manager.csproj index 38a1889..c8d6ef0 100644 --- a/ModpackUpdater.Apps.Manager/ModpackUpdater.Apps.Manager.csproj +++ b/ModpackUpdater.Apps.Manager/ModpackUpdater.Apps.Manager.csproj @@ -6,6 +6,8 @@ enable true enable + icons8_Windows_Update.ico + Minecraft Modpack Update Manager @@ -27,6 +29,11 @@ + + True + True + GeneralLangRes.resx + True True @@ -35,6 +42,10 @@ + + ResXFileCodeGenerator + GeneralLangRes.Designer.cs + ResXFileCodeGenerator TitlesLangRes.Designer.cs diff --git a/ModpackUpdater.Apps.Manager/Program.cs b/ModpackUpdater.Apps.Manager/Program.cs index 5096b32..ed28fcb 100644 --- a/ModpackUpdater.Apps.Manager/Program.cs +++ b/ModpackUpdater.Apps.Manager/Program.cs @@ -1,6 +1,9 @@ +using Pilz; using Pilz.Configuration; using Pilz.Plugins.Advanced; +[assembly: AssemblyAppVersion("1.0.0.0")] + namespace ModpackUpdater.Apps.Manager; public static class Program diff --git a/ModpackUpdater.Apps.Manager/icons8_Windows_Update.ico b/ModpackUpdater.Apps.Manager/icons8_Windows_Update.ico new file mode 100644 index 0000000000000000000000000000000000000000..ceb98ca67e8520b2bbbc5715702c9f3b6f4d3417 GIT binary patch literal 99678 zcmeHwcXXV`buWC9ci#Ks<-MHuk{l5Ln-wc^B-?UMl*D;Dw(O8ptT=9xEXA=M70Z@I zHG*oCM2eDF)F@Ic=$!yaEPJO2Q4~e7qjxNJ7j01pkRZSY5G?oo?tC-f&i7&W+XYC0 zq`Wxi;@kes-20n5cW#-9iTO&*e~bC^Kaat6Qp^*78WZ!2n3$MJlZ@x9@%krt?T$O- z^RLCk{O&JfV(z}%cz){-Vq*T+|BH#4J6AscA76?2huJYPx8gVORs5pyIxaDH;CHU~ zzXh)){CL6a1PVs;=FIr_aP40(Yx@74_iDle3uZsJX#Q(6h>0KbYjfw$_&>qEzbY$f zQeke&DpyXjYc*(9R-!9;$va!-&U*g9+*vaZEdOA^mYkHOuB_xGuFT}cu8gE5_{!o* z>bKV9r$11+@*eW9nLsU@CsOmyNz}A^61hK}O!fOFQR9)xr$rCvDER@n)fXl>~E%XCmYGTX(D-ceTVuw_maQ%1M+@0nY^D*ro;Gs{r;O)XFbrc zbQ&H1FrM01jHe6ddZ}f{!_-nZkyf<_frDx=kI&on?@%W z#L=<$;%VqqC$(k&J#}VtdnQryu3yuIffM9iKT+_fc~V||F*8leW3NVX>{(HadhUzSUU0g zBSvGnm&nU3$LTfg7-@>II;$W1i(hjDc7Ir%$i zPw(q-qF=r5qFsyP>G+a(s$MaL^0n`8TbDm^iz|EcmcpE(O{=quHWp+SZ79enT9=wN+jrL%FkFKC@+0Etz=4DM!9KA3HJtlNZBc% zWfeZ|dGUun>$HPeah6sP-tnma?-8||ym2G}j!hE~`v zW*c@HHjD@DsN6Y`DtAq!8nnlaw%FTYZ_6gvlg{_gPj~IjnL%Ay;{$B~AKG9aw8Ccb zp&fOwJG?t^za10lc-wZmaK4XDpRA(h>bIzJ&n?t=P_+YB*hFk!2?Ad>7dqb`_LggJ zRstPM8*j8BcY=^bBkZrntv{vC>QvZI4OF}R2joK=d`Dg+{qOY2YP8`_YTOUGpdA6( zuzV)dmT>o9m5KY$pzfsc!e;Br1Rru>_icNGE?>G}-m1NP3Hi26Bscg`wfP&=c;FAP z!;XpfPoF5G>RmSre0aGXj1g`NXv=D6`ESJi_hlr|@ul(9ohaLoF`imr8~OLoH}8M$ zq?;Nbmlm{vap8mgSGD=u!WQHY`HEj4#)rTu+m^s8)3$=?JSIZoPu*YGQ)olaig-Gf zg8L`M)9Lo3;{I*>-=JgFxm1@o*}x`n!R=_;3VZbP>Ebi}#|}~bcD(knfmJbP_DsV4 zp9*{b{b>nw@@?33@582p-P^M~o|=}#(Z#`2;#hSy z33O_9EcL$;M}70rhIitq9dx$6O#F81#wVx~GU);)Ix$W=!3%fhUsKzGdDOD^CGnY4 zorlSTHVM99yfSZ?cH~Z{oV3vW=ldT@oJnV1ilx)9q7AUI``&^quzu*=`l|Ttq5ckP zT7ElqDSV%U#a$JX&C(yYW zv2^AIv|&~(co8Rf;eTTS4Rln?HeemI?)T(f`gLks7Ec`*uRSH1=KU`W^pbDWFR5M1 zs3YIdBOhh){g*l3|H!hLG%y`&jc3Qv*_mjE;>DaeYFqesG|*XV-iIG>JGwDen(}@^ zmo5xYpL-{@ZhM-Vl5e3dj9u0tLQYt7?aF+b^1|Hz=!Y}u{Nv-qdS~Eiv;(|2`#jq5 zGI#-*bj+Si-CO3;fWK1cq`s=n)CqiaVZ1cI6HD!jBlH z}>#`omh{thJ+Ecjy3P=8{`*RyaJAR9H{2pz9Ow4vLKUgkk!>QK{oQm-R ztn!%Qv3n9c;r56z%x%INad$HApXqS_!rZrjL1Nm>RG3W|6M~={X#-P12CWCJ%TK3u zdFh08B&}VUMuy#D*eQ(}NJR!rODV1I>bSM>ESF9$5jjGxT?ib0?L3DMw0LCrBS z|NUwZetp;<`zhc;jd>WP{1iWhFE#oXA|G7c=5J!8*Ec^vxlGj@;c?qA%eRSYoH^^3dn)%oR_(;p)zx;l6H;(p~n zfAKSNqA%{wfnQ#em-?eMIjQZ!-wU5FubbHCYxn!=zF*=0#X5?8z*L*dHv&<`dR@#Qv=0MfV0;===z4K0mMf*5pc`wblp2ZyoSmTl-+N zU+;tPV~6d7Y=02Hw$_JM=T-;aRqIyaAA!G!eco;B;46a9h~wq#yK08tO2p0ChX#M1 z>Hpp<{ffbSt?c(zzF*xRZu-Q(O1fXXzUpSG1F1d)TIl>pt-U+g&%-_*?gM=0;rhTi z06zF5eR~Z*KF8ioKdtG{m;P&eKR8!_`=R=RyaCY{`1wcGe)tbK9?v-j?Lqn=eE;l2 zgg>xl(p$dNZqnjtt(Jd3GWGCVQ=$puGaOj5_7ts5H{*1K!%KyQBuCRTO zzH09_@ErYMf2(O|=Ifrjm~)BDZ3a&4>S0Bc`Ba!m$P5 zOZ8{O?Uz0r5pM|A2RR;m@LjUMy&OL0nr;6|l^ef9ZuWVj4`u5nnSOVDaeJz_j7oQZ zkE($)ODsafii~)Kh>vJvWmN4)AB2yOV}OQVebC|)n+X7e-=gYf}RRnS=#8@@?3MaU_sPq)Nsh6Ybi*+>73oFCu~-c{}IW&bYXG@=je`{q8d&l_W+DH+cza?N%eZ&*)Vm05K8;(4mf zyPaC)d}r@R4Pu_1^;zckIvO&m7P7L$v^d7b{gHiQJA-8qXrc2Xt%& z&2b{`2lTA!M+^E=zUo%9{TGK$QyJ?lwnum#L@u8o#P^!nHUZ^GJ1@{e=SSRrCJ{TB zXT%Nkd@{yU17a#F_Q#E>S#}F`>Ux%AfS4D|e(;=uezbxr@^3TSf9c{Nl@(ZHf+{X3 z`hz~@u-%G2IJY|R?#9(wqWvO9HrI&NajqZ748@p$EWB^W(m+q6*$&Ujf1?hLAEFN& z=NI#~jFYkb;mu*46;F*T$5X?mpPAnq=<}N6UBnaFK4ju~opl&Uv>*8wffhPH;@Ape zu11_s#&I~$(8LqsH*JXJoG8gR+i~o0Dm4LLYJ6Mzfmmp5=C|o=cO~qj8Prp|+WcO3 zZ63KHC$xuW_??;Vj^-fd(F?Q2lZ?Jjand|Kui^Vk#SYgC-jSRV7L!~7CJxL zB;#9W6A)wM*q(~1ar~L_BxTV&XB?gO?o&+>d8D4ysnom(abf7&V;l>XF~%m0`JReA z^RxWm^2H&H&u6G61#MGAFRU!u^s~% zc}UA5=0CTeNyJz=*2^(x$bw_vrYz*RI0l(CulO-t9Ozfgv0VMzUMBwsz!dau-Fp-8 zxjys#vt5v4gr%|LkBqQ{7AK5#EFrgE8^xVR;*-!c(I7n zqW#Cvm!|puKxaJr&9sD5z%G^hjl6)otCmuc2GYM&b`V&`K1csJgdL(ms{JYSFL zb6j8a3w=}m80S_8-nF-1^aHuxLKd8RATcHKAdvel^c2Vb(GSi;Q1O4EbCIiJ<^b?q z4&5vA0AyYQ+a_X8l>HI*BHO)8oTmWFW1kZINr4tRKMLA@mA9Z{O791camE#o4>isq z2gVlXGFbY;`WJl>^P%1!Ew@3>Z&3au=T-;aMf+P-ANZ>6bE~zR zB@Y6=j5RVBBA8DstY6Q_>ue6R(D~8kH90>*yM2~E6dHLOA^T7e$l(au2i5-3`SrZ{ zS<55#A3FCg`fij1Q4T~o5aj@Kz_1fXaJ?84^F7Su6zWQS|J$gQvR?6Vd=Yh5e4Y5^ zxvGARn2+KMM&0V&V98vN%F~KLjcfET%7G{cq8x~FAj*L#2cjIfS{!(9?(=_zJT_10 zT(;nQQH=ES3un)8FPQZ-cJ8>o{!nxL^O5#t)St(_uCLz5#Grl}dxcyb8Hf8FzE`yW z*B1xgo}KV5$nA1C*GB$$|`aP0885RZm4StR9aXt1u zT$|>+@YDlyUVMroB78R7@7-wcKl_J=A9(JGM<^2F&)#VL3)kLXKY0HGzj^3BiiG&H z;eKx{-rtmw@n?vO%vzI^T!@@!7xuW2l#Hvf#})5$CHA@!`(5##SH`|qt1=T^2CZ=A zqlQ)NgY^pb!D15oVX5m(u{YKn?2n~L?30DMYp(s~`gfDC7Xb2=Oya#MLQ>M=!i=O3 zUS6?c#s3@)ul8VX5#&l2>vgh$eLn1Y-`2coQ9mndX!ZPWa~}{(9ysp_qUD0ioQNFG ztq~N+2iNxrQMq#}hcVO@`-dEM+QTFiZ_wAfM6Ni;mBbz=_MGvn%md_7sC)#K7h>{2 z=1Hl1FO_#^@W8rXN-#cTCoRU#b|d@a8fBGlUYU1~kprS~&etLjhxZskE{>T~gncc{ zJTKnELFTHdy(C2bpvr~R_t~)LrE2-Ldakh8^DRUkx7x2oTxD+h=X<7^`O*3wZIN<8 z^dIq2<^k_XC-UEr2jkas)@44Dg$FYK-pu<}IruW?P~}dF9Cnq9A7t+nGuPObGi~Ps z?}Jw_a@qrV?aYV$SF8WvL3IxH)KfWUdj22hVus@Z=lbdUipX5jM(pY5Mn1p$vq{u| zyx2z0?`13~JYfG9-UG(M2Pa<0{C>p`-WyPjh0(~L>-9yw0{UN*Jx%1>aL&J|TL{4e zk^3+6=FPlEwVw%(2d-m44r&APYKu3Hr$ZYi(4mbJ=m=^7j%=Gi75Gdo_#yTNijWT~ zmtNpPs}DG^`^x*T>IG`DrWv`1$TBo1|(H+R!2R6jsM2Zh)-g=Ol0u2|69|u0Z3jLS$2E3=FnYU=?fu<8p z9w0Z-3*G3(o;H=(SEdZadE!mHpC!gaHF)DW^0G>$vR*G=qVCr9R8sU^D#Kn;4Xh); z12Hz32PPkQd}zGTYb?MI-rMp@@vm}4YBR7WrpkGgd)NpZs9ajfgC^{A=|Nr~=b4v4 zU({~Dk2>qJ=%oJ>DqH_gV*e%9i*Dee1o{7$FAZ7yu06YeJ%Oq}{}mnGK7ksr_ov#E zX&5g;@Z-R)tJHsBpf+t9btB))!UL`Wk~-0kT*3xCFH4PsyuVNW;zcyj=hJ#a-A+|I ze@M-x^XP0}gZj96y?ps1RqcI{Du5fYFP5sIU_R))(D=bT;r_FI#A9Hz`k(WSmZCYo-ZKk(z8*K*Zhug^&v-=M#L8JWzb#db^6XsDmk08u* zIl;84*_M*_l!YJQ$>D9&%smzLJ%%Iif7S!4{|(FU3FMSY9*DeHt!{_sM-TYY_Nleq z1HB$QuuW35^hWR`E;CRb6F>m

Q>Y1b63v(&xelrsbtuFnlzKnG}R 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 literal 0 HcmV?d00001 diff --git a/ModpackUpdater.Apps/Symbols/cancel.svg b/ModpackUpdater.Apps/Symbols/cancel.svg index 1a0b7ea..ce8cfda 100644 --- a/ModpackUpdater.Apps/Symbols/cancel.svg +++ b/ModpackUpdater.Apps/Symbols/cancel.svg @@ -1,6 +1 @@ - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/checkmark.svg b/ModpackUpdater.Apps/Symbols/checkmark.svg index 0ec54cb..7b46217 100644 --- a/ModpackUpdater.Apps/Symbols/checkmark.svg +++ b/ModpackUpdater.Apps/Symbols/checkmark.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/close.svg b/ModpackUpdater.Apps/Symbols/close.svg index fb5ed9c..ff4ba5b 100644 --- a/ModpackUpdater.Apps/Symbols/close.svg +++ b/ModpackUpdater.Apps/Symbols/close.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/delete.svg b/ModpackUpdater.Apps/Symbols/delete.svg index 72b0583..2f1752f 100644 --- a/ModpackUpdater.Apps/Symbols/delete.svg +++ b/ModpackUpdater.Apps/Symbols/delete.svg @@ -1,6 +1 @@ - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/done.svg b/ModpackUpdater.Apps/Symbols/done.svg index 126184a..a70dddc 100644 --- a/ModpackUpdater.Apps/Symbols/done.svg +++ b/ModpackUpdater.Apps/Symbols/done.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/download_from_ftp.svg b/ModpackUpdater.Apps/Symbols/download_from_ftp.svg index 340a861..4958a17 100644 --- a/ModpackUpdater.Apps/Symbols/download_from_ftp.svg +++ b/ModpackUpdater.Apps/Symbols/download_from_ftp.svg @@ -1,11 +1 @@ - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/general_warning_sign.svg b/ModpackUpdater.Apps/Symbols/general_warning_sign.svg index 78eca79..604ebe0 100644 --- a/ModpackUpdater.Apps/Symbols/general_warning_sign.svg +++ b/ModpackUpdater.Apps/Symbols/general_warning_sign.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/github.svg b/ModpackUpdater.Apps/Symbols/github.svg index b1ac899..bb611ad 100644 --- a/ModpackUpdater.Apps/Symbols/github.svg +++ b/ModpackUpdater.Apps/Symbols/github.svg @@ -1,8 +1 @@ - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/new_window.svg b/ModpackUpdater.Apps/Symbols/new_window.svg index 61eaedb..fb133fb 100644 --- a/ModpackUpdater.Apps/Symbols/new_window.svg +++ b/ModpackUpdater.Apps/Symbols/new_window.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/opened_folder.svg b/ModpackUpdater.Apps/Symbols/opened_folder.svg index 9cb2635..76b5d73 100644 --- a/ModpackUpdater.Apps/Symbols/opened_folder.svg +++ b/ModpackUpdater.Apps/Symbols/opened_folder.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/refresh.svg b/ModpackUpdater.Apps/Symbols/refresh.svg index e762078..ad2d95e 100644 --- a/ModpackUpdater.Apps/Symbols/refresh.svg +++ b/ModpackUpdater.Apps/Symbols/refresh.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/replay.svg b/ModpackUpdater.Apps/Symbols/replay.svg index 65e6af4..e6274ed 100644 --- a/ModpackUpdater.Apps/Symbols/replay.svg +++ b/ModpackUpdater.Apps/Symbols/replay.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/save.svg b/ModpackUpdater.Apps/Symbols/save.svg index b5040fc..92c9b0e 100644 --- a/ModpackUpdater.Apps/Symbols/save.svg +++ b/ModpackUpdater.Apps/Symbols/save.svg @@ -1,9 +1 @@ - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/settings.svg b/ModpackUpdater.Apps/Symbols/settings.svg index a087527..eae8242 100644 --- a/ModpackUpdater.Apps/Symbols/settings.svg +++ b/ModpackUpdater.Apps/Symbols/settings.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/software_installer.svg b/ModpackUpdater.Apps/Symbols/software_installer.svg index ca6fe34..0d3da89 100644 --- a/ModpackUpdater.Apps/Symbols/software_installer.svg +++ b/ModpackUpdater.Apps/Symbols/software_installer.svg @@ -1,8 +1 @@ - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/time_machine.svg b/ModpackUpdater.Apps/Symbols/time_machine.svg index 10d9c5c..a66af50 100644 --- a/ModpackUpdater.Apps/Symbols/time_machine.svg +++ b/ModpackUpdater.Apps/Symbols/time_machine.svg @@ -1,11 +1 @@ - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/tools.svg b/ModpackUpdater.Apps/Symbols/tools.svg index 4aa505c..32a049b 100644 --- a/ModpackUpdater.Apps/Symbols/tools.svg +++ b/ModpackUpdater.Apps/Symbols/tools.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/update_done.svg b/ModpackUpdater.Apps/Symbols/update_done.svg index f9a2318..22bda2f 100644 --- a/ModpackUpdater.Apps/Symbols/update_done.svg +++ b/ModpackUpdater.Apps/Symbols/update_done.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/workspace.svg b/ModpackUpdater.Apps/Symbols/workspace.svg index 47e0494..b2dce08 100644 --- a/ModpackUpdater.Apps/Symbols/workspace.svg +++ b/ModpackUpdater.Apps/Symbols/workspace.svg @@ -1,10 +1 @@ - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ModpackUpdater.Apps/Symbols/wrench.svg b/ModpackUpdater.Apps/Symbols/wrench.svg index 92b079d..63c6f55 100644 --- a/ModpackUpdater.Apps/Symbols/wrench.svg +++ b/ModpackUpdater.Apps/Symbols/wrench.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file