Skip to content

Commit

Permalink
Merge pull request #3135 from mrixner/pause-updates
Browse files Browse the repository at this point in the history
  • Loading branch information
marticliment authored Jan 5, 2025
2 parents 6532a67 + 3102af5 commit 7cfceb6
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
"el": "Greek - Ελληνικά",
"et": "Estonian - Eesti",
"en": "English - English",
"en-CA": "English (Canada)",
"es": "Spanish - Castellano",
"fa": "Persian - فارسی‎",
"fi": "Finnish - Suomi",
"fr": "French - Français",
"fr-CA": "French (Canada)",
"gu": "Gujarati - ગુજરાતી",
"hi": "Hindi - हिंदी",
"hr": "Croatian - Hrvatski",
Expand Down
2 changes: 2 additions & 0 deletions src/UniGetUI.Core.Tools.Tests/ToolsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ public async Task TestWhichFunctionForNonExistingFile()
[InlineData("Flask-RESTful", "Flask RESTful")]
[InlineData("vcpkg-item[option]", "Vcpkg Item [Option]")]
[InlineData("vcpkg-item[multi-option]", "Vcpkg Item [Multi Option]")]
[InlineData("vcpkg-item[multi-option]:triplet", "Vcpkg Item [Multi Option]")]
[InlineData("vcpkg-single-item:triplet", "Vcpkg Single Item")]
public void TestFormatAsName(string id, string name)
{
Assert.Equal(name, CoreTools.FormatAsName(id));
Expand Down
2 changes: 1 addition & 1 deletion src/UniGetUI.Core.Tools/Tools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public static Tuple<bool, string> Which(string command, bool updateEnv = true)
/// <returns>The formatted string</returns>
public static string FormatAsName(string name)
{
name = name.Replace(".install", "").Replace(".portable", "").Replace("-", " ").Replace("_", " ").Split("/")[^1];
name = name.Replace(".install", "").Replace(".portable", "").Replace("-", " ").Replace("_", " ").Split("/")[^1].Split(":")[0];
string newName = "";
for (int i = 0; i < name.Length; i++)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,73 @@
using UniGetUI.Core.Logging;
using UniGetUI.Core.SettingsEngine;
using UniGetUI.Core.Tools;
using UniGetUI.PackageEngine.Interfaces;

namespace UniGetUI.PackageEngine.Classes.Packages.Classes;

public static class IgnoredUpdatesDatabase
{
public class PauseTime
{
private int _daysTill;
public int Months { get { return Weeks / 4; } set { Weeks = value * 4; } }
public int Weeks { get { return Days / 7; } set { Days = value * 7; } }
public int Days { get { return _daysTill; } set { _daysTill = value; } }

public string GetDateFromNow()
{
DateTime NewTime = DateTime.Now.AddDays(_daysTill);
return NewTime.ToString("yyyy-MM-dd");
}

public void Parse(string Date)
{
try
{
DateTime ParsedDate = DateTime.ParseExact(Date, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime Now = DateTime.Now;
if (ParsedDate > Now)
{
_daysTill = (int)(ParsedDate - Now).TotalDays;
}
else
{
_daysTill = (int)(Now - ParsedDate).TotalDays;
}
}
catch (FormatException ex)
{
Logger.Error($"Couldn't parse date {Date}:");
Logger.Error(ex);
}
}

public string StringRepresentation()
{
if (Months >= 12 && Months % 12 == 0)
{
int Years = Months / 12;
if (Years > 1) return CoreTools.Translate("{0} years", Years);
else return CoreTools.Translate("1 year");
}
else if (Months >= 1)
{
if (Months > 1) return CoreTools.Translate("{0} months", Months);
else return CoreTools.Translate("1 month");
}
else if (Weeks >= 1)
{
if (Weeks > 1) return CoreTools.Translate("{0} weeks", Weeks);
else return CoreTools.Translate("1 week");
}
else
{
if (Days != 1) return CoreTools.Translate("{0} days", Days);
else return CoreTools.Translate("1 day");
}
}
}

public static IReadOnlyDictionary<string, string> GetDatabase()
{
return Settings.GetDictionary<string, string>("IgnoredPackageUpdates") ?? new Dictionary<string, string>();
Expand Down Expand Up @@ -63,6 +125,21 @@ public static bool HasUpdatesIgnored(string ignoredId, string version = "*")
{
string? ignoredVersion = Settings.GetDictionaryItem<string, string>("IgnoredPackageUpdates", ignoredId);

if (ignoredVersion != null && ignoredVersion.StartsWith("<"))
{
try
{
var ignoreDate = DateTime.ParseExact(ignoredVersion[1..], "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
if (ignoreDate > DateTime.Now) return true;
else Remove(ignoredId);
}
catch (FormatException ex)
{
Logger.Error($"Couldn't parse update ignoration {ignoredVersion}:");
Logger.Error(ex);
}
}

// Check if the package is ignored
return ignoredVersion == "*" || ignoredVersion == version;
}
Expand Down
28 changes: 28 additions & 0 deletions src/UniGetUI/Pages/SoftwarePages/SoftwareUpdatesPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using UniGetUI.Interface.Enums;
using UniGetUI.Interface.Widgets;
using UniGetUI.PackageEngine;
using UniGetUI.PackageEngine.Classes.Packages.Classes;
using UniGetUI.PackageEngine.Enums;
using UniGetUI.PackageEngine.Interfaces;
using UniGetUI.PackageEngine.Operations;
Expand Down Expand Up @@ -143,6 +144,32 @@ public override BetterMenu GenerateContextMenu()
};
menuDetails.Click += (_, _) => ShowDetailsForPackage(SelectedItem);

MenuFlyoutSubItem menuPause = new()
{
Text = "Pause updates for",
Icon = new FontIcon() { Glyph = "\uE769" },
};
foreach (IgnoredUpdatesDatabase.PauseTime menuTime in new List<IgnoredUpdatesDatabase.PauseTime>{
new() { Days = 1 }, new() { Days = 3 },
new() { Weeks = 1 }, new() { Weeks = 2 }, new() { Weeks = 4 },
new() { Months = 3 }, new() { Months = 6 }, new() { Months = 12 },
})
{
BetterMenuItem menuItem = new()
{
Text = menuTime.StringRepresentation(),
};
menuItem.Click += (_, _) => {
if (SelectedItem != null)
{
SelectedItem.AddToIgnoredUpdatesAsync("<" + menuTime.GetDateFromNow());
PEInterface.UpgradablePackagesLoader.IgnoredPackages[SelectedItem.Id] = SelectedItem;
Loader.Remove(SelectedItem);
}
};
menuPause.Items.Add(menuItem);
}

ContextMenu.Items.Add(menuInstall);
ContextMenu.Items.Add(new MenuFlyoutSeparator());
ContextMenu.Items.Add(menuInstallSettings);
Expand All @@ -157,6 +184,7 @@ public override BetterMenu GenerateContextMenu()
ContextMenu.Items.Add(new MenuFlyoutSeparator());
ContextMenu.Items.Add(menuIgnorePackage);
ContextMenu.Items.Add(menuSkipVersion);
ContextMenu.Items.Add(menuPause);
ContextMenu.Items.Add(new MenuFlyoutSeparator());
ContextMenu.Items.Add(menuShare);
ContextMenu.Items.Add(menuDetails);
Expand Down

0 comments on commit 7cfceb6

Please sign in to comment.