add options to update and clear direct links

This commit is contained in:
2024-10-03 10:46:16 +02:00
parent 3ec94fa22d
commit 690355266c
10 changed files with 205 additions and 4 deletions

View File

@@ -0,0 +1,29 @@
using ModpackUpdater.Apps.Manager.Api.Plugins.Params;
using ModpackUpdater.Apps.Manager.LangRes;
using ModpackUpdater.Apps.Manager.Ui;
using Pilz.Plugins.Advanced;
using Telerik.WinControls.UI;
namespace ModpackUpdater.Apps.Manager.Features.CM;
internal class ClearDirectLinkFeature : PluginFunction, IPluginFeatureProvider<ClearDirectLinkFeature>
{
public static ClearDirectLinkFeature Instance { get; } = new();
public ClearDirectLinkFeature() : base(FeatureTypes.ActionsContextMenu, "origin.cleardirectlink", FeatureNamesLangRes.ClearDirectLinkFeature)
{
}
protected override object? ExecuteFunction(PluginFunctionParameter? @params)
{
if (@params is not MainApiParameters p
|| p.Api.MainWindow is not MainForm mainForm
|| mainForm.Controls.Find("radGridView_Actions", true).FirstOrDefault() is not RadGridView gridView
|| gridView.SelectedRows.FirstOrDefault()?.Tag is not InstallAction selectedAction)
return null;
SharedFunctions.ClearDirectLinks(p.Api, selectedAction);
return null;
}
}

View File

@@ -0,0 +1,29 @@
using ModpackUpdater.Apps.Manager.Api.Plugins.Params;
using ModpackUpdater.Apps.Manager.LangRes;
using ModpackUpdater.Apps.Manager.Ui;
using Pilz.Plugins.Advanced;
using Telerik.WinControls.UI;
namespace ModpackUpdater.Apps.Manager.Features.CM;
internal class UpdateDirectLinkFeature : PluginFunction, IPluginFeatureProvider<UpdateDirectLinkFeature>
{
public static UpdateDirectLinkFeature Instance { get; } = new();
public UpdateDirectLinkFeature() : base(FeatureTypes.ActionsContextMenu, "origin.updatedirectlink", FeatureNamesLangRes.UpdateDirectLinkFeature)
{
}
protected override object? ExecuteFunction(PluginFunctionParameter? @params)
{
if (@params is not MainApiParameters p
|| p.Api.MainWindow is not MainForm mainForm
|| mainForm.Controls.Find("radGridView_Actions", true).FirstOrDefault() is not RadGridView gridView
|| gridView.SelectedRows.FirstOrDefault()?.Tag is not InstallAction selectedAction)
return null;
SharedFunctions.FindNewDirectLinks(p.Api, selectedAction);
return null;
}
}

View File

@@ -1,5 +1,4 @@
using ModpackUpdater.Apps.Manager.Api.Model; using ModpackUpdater.Apps.Manager.Api.Model;
using ModpackUpdater.Apps.Manager.Features.Tools;
using ModpackUpdater.Apps.Manager.Ui; using ModpackUpdater.Apps.Manager.Ui;
using ModpackUpdater.Manager; using ModpackUpdater.Manager;
using Pilz.UI.Extensions; using Pilz.UI.Extensions;
@@ -24,6 +23,7 @@ internal static class SharedFunctions
var failed = false; var failed = false;
var msg = default(string); var msg = default(string);
var factory = new ModpackFactory();
var rows = new Dictionary<GridViewRowInfo, InstallAction>(); var rows = new Dictionary<GridViewRowInfo, InstallAction>();
for (var i = 0; i < selectedRows.Length; i++) for (var i = 0; i < selectedRows.Length; i++)
@@ -36,7 +36,6 @@ internal static class SharedFunctions
{ {
try try
{ {
var factory = new ModpackFactory();
var result = await factory.ResolveSourceUrl(action); var result = await factory.ResolveSourceUrl(action);
failed = string.IsNullOrWhiteSpace(result); failed = string.IsNullOrWhiteSpace(result);
} }
@@ -107,4 +106,52 @@ internal static class SharedFunctions
return true; return true;
} }
public static void FindNewDirectLinks(IMainApi api, params InstallAction[] actions)
{
var mainForm = api.MainWindow as MainForm;
var gridView = mainForm?.Controls.Find("radGridView_Actions", true).FirstOrDefault() as RadGridView;
var rwb = mainForm?.Controls.Find("radWaitingBar_Actions", true).FirstOrDefault() as RadWaitingBar;
var factory = new ModpackFactory();
rwb?.StartWaiting();
gridView?.BeginUpdate();
foreach (var action in actions)
{
if (action.SourceType != SourceType.DirectLink)
{
Task.Run(async () =>
{
action.SourceUrl = await factory.ResolveSourceUrl(action);
}).Wait();
api.UpdateItem(action);
}
}
gridView?.EndUpdate();
rwb?.StopWaiting();
}
public static void ClearDirectLinks(IMainApi api, params InstallAction[] actions)
{
var mainForm = api.MainWindow as MainForm;
var gridView = mainForm?.Controls.Find("radGridView_Actions", true).FirstOrDefault() as RadGridView;
var rwb = mainForm?.Controls.Find("radWaitingBar_Actions", true).FirstOrDefault() as RadWaitingBar;
rwb?.StartWaiting();
gridView?.BeginUpdate();
foreach (var action in actions)
{
if (action.SourceType != SourceType.DirectLink)
{
action.SourceUrl = null;
api.UpdateItem(action);
}
}
gridView?.EndUpdate();
rwb?.StopWaiting();
}
} }

View File

@@ -0,0 +1,24 @@
using ModpackUpdater.Apps.Manager.Api.Plugins.Params;
using ModpackUpdater.Apps.Manager.LangRes;
using Pilz.Plugins.Advanced;
namespace ModpackUpdater.Apps.Manager.Features.Tools;
internal class ClearDirectLinksFeature : PluginFunction, IPluginFeatureProvider<ClearDirectLinksFeature>
{
public static ClearDirectLinksFeature Instance { get; } = new();
public ClearDirectLinksFeature() : base(FeatureTypes.Tools, "origin.cleardirectlinks", FeatureNamesLangRes.ClearDirectLinksFeature)
{
}
protected override object? ExecuteFunction(PluginFunctionParameter? @params)
{
if (@params is not MainApiParameters p || p.Api.CurWorkspace?.InstallInfos is null)
return null;
SharedFunctions.ClearDirectLinks(p.Api, [.. p.Api.CurWorkspace.InstallInfos.Actions]);
return null;
}
}

View File

@@ -0,0 +1,24 @@
using ModpackUpdater.Apps.Manager.Api.Plugins.Params;
using ModpackUpdater.Apps.Manager.LangRes;
using Pilz.Plugins.Advanced;
namespace ModpackUpdater.Apps.Manager.Features.Tools;
internal class UpdateDirectLinksFeature : PluginFunction, IPluginFeatureProvider<UpdateDirectLinksFeature>
{
public static UpdateDirectLinksFeature Instance { get; } = new();
public UpdateDirectLinksFeature() : base(FeatureTypes.Tools, "origin.updatedirectlinks", FeatureNamesLangRes.UpdateDirectLinksFeature)
{
}
protected override object? ExecuteFunction(PluginFunctionParameter? @params)
{
if (@params is not MainApiParameters p || p.Api.CurWorkspace?.InstallInfos is null)
return null;
SharedFunctions.FindNewDirectLinks(p.Api, [.. p.Api.CurWorkspace.InstallInfos.Actions]);
return null;
}
}

View File

@@ -78,6 +78,24 @@ namespace ModpackUpdater.Apps.Manager.LangRes {
} }
} }
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Clear direct link ähnelt.
/// </summary>
internal static string ClearDirectLinkFeature {
get {
return ResourceManager.GetString("ClearDirectLinkFeature", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Clear direct links ähnelt.
/// </summary>
internal static string ClearDirectLinksFeature {
get {
return ResourceManager.GetString("ClearDirectLinksFeature", resourceCulture);
}
}
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die GitLab workspace ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die GitLab workspace ähnelt.
/// </summary> /// </summary>
@@ -96,6 +114,24 @@ namespace ModpackUpdater.Apps.Manager.LangRes {
} }
} }
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Update direct link ähnelt.
/// </summary>
internal static string UpdateDirectLinkFeature {
get {
return ResourceManager.GetString("UpdateDirectLinkFeature", resourceCulture);
}
}
/// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Update direct links ähnelt.
/// </summary>
internal static string UpdateDirectLinksFeature {
get {
return ResourceManager.GetString("UpdateDirectLinksFeature", resourceCulture);
}
}
/// <summary> /// <summary>
/// Sucht eine lokalisierte Zeichenfolge, die Find updates ähnelt. /// Sucht eine lokalisierte Zeichenfolge, die Find updates ähnelt.
/// </summary> /// </summary>

View File

@@ -123,12 +123,24 @@
<data name="CheckSingleActionHealthy" xml:space="preserve"> <data name="CheckSingleActionHealthy" xml:space="preserve">
<value>Check healthy</value> <value>Check healthy</value>
</data> </data>
<data name="ClearDirectLinkFeature" xml:space="preserve">
<value>Clear direct link</value>
</data>
<data name="ClearDirectLinksFeature" xml:space="preserve">
<value>Clear direct links</value>
</data>
<data name="GitLabWorkspace" xml:space="preserve"> <data name="GitLabWorkspace" xml:space="preserve">
<value>GitLab workspace</value> <value>GitLab workspace</value>
</data> </data>
<data name="UpdateCollectorFeature" xml:space="preserve"> <data name="UpdateCollectorFeature" xml:space="preserve">
<value>Find update</value> <value>Find update</value>
</data> </data>
<data name="UpdateDirectLinkFeature" xml:space="preserve">
<value>Update direct link</value>
</data>
<data name="UpdateDirectLinksFeature" xml:space="preserve">
<value>Update direct links</value>
</data>
<data name="UpdatesCollectorFeature" xml:space="preserve"> <data name="UpdatesCollectorFeature" xml:space="preserve">
<value>Find updates</value> <value>Find updates</value>
</data> </data>

View File

@@ -1,4 +1,4 @@
namespace ModpackUpdater.Apps.Manager.Features.Tools; namespace ModpackUpdater.Apps.Manager.Ui;
partial class UpdatesCollectorUi partial class UpdatesCollectorUi
{ {

View File

@@ -1,7 +1,7 @@
using ModpackUpdater.Manager; using ModpackUpdater.Manager;
using Telerik.WinControls.UI; using Telerik.WinControls.UI;
namespace ModpackUpdater.Apps.Manager.Features.Tools; namespace ModpackUpdater.Apps.Manager.Ui;
public partial class UpdatesCollectorUi : RadForm public partial class UpdatesCollectorUi : RadForm
{ {