Skip to content

Commit b746e8e

Browse files
committed
feature: allow to select multiple tags and delete theme from context menu (#1717)
Signed-off-by: leo <[email protected]>
1 parent 6a8bde4 commit b746e8e

13 files changed

+595
-245
lines changed

src/Models/Tag.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using CommunityToolkit.Mvvm.ComponentModel;
32

43
namespace SourceGit.Models
54
{
@@ -9,7 +8,7 @@ public enum TagSortMode
98
Name,
109
}
1110

12-
public class Tag : ObservableObject
11+
public class Tag
1312
{
1413
public string Name { get; set; } = string.Empty;
1514
public bool IsAnnotated { get; set; } = false;
@@ -22,13 +21,5 @@ public string CreatorDateStr
2221
{
2322
get => DateTime.UnixEpoch.AddSeconds(CreatorDate).ToLocalTime().ToString(DateTimeFormat.Active.DateTime);
2423
}
25-
26-
public FilterMode FilterMode
27-
{
28-
get => _filterMode;
29-
set => SetProperty(ref _filterMode, value);
30-
}
31-
32-
private FilterMode _filterMode = FilterMode.None;
3324
}
3425
}

src/Resources/Locales/en_US.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,9 @@
279279
<x:String x:Key="Text.DeleteBranch.WithTrackingRemote" xml:space="preserve">Also delete remote branch ${0}$</x:String>
280280
<x:String x:Key="Text.DeleteMultiBranch" xml:space="preserve">Delete Multiple Branches</x:String>
281281
<x:String x:Key="Text.DeleteMultiBranch.Tip" xml:space="preserve">You are trying to delete multiple branches at one time. Be sure to double-check before taking action!</x:String>
282+
<x:String x:Key="Text.DeleteMultiTags" xml:space="preserve">Delete Multiple Tags</x:String>
283+
<x:String x:Key="Text.DeleteMultiTags.DeleteFromRemotes" xml:space="preserve">Delete them from remotes</x:String>
284+
<x:String x:Key="Text.DeleteMultiTags.Tip" xml:space="preserve">You are trying to delete multiple tags at one time. Be sure to double-check before taking action!</x:String>
282285
<x:String x:Key="Text.DeleteRemote" xml:space="preserve">Delete Remote</x:String>
283286
<x:String x:Key="Text.DeleteRemote.Remote" xml:space="preserve">Remote:</x:String>
284287
<x:String x:Key="Text.DeleteRepositoryNode.Path" xml:space="preserve">Path:</x:String>
@@ -788,6 +791,7 @@
788791
<x:String x:Key="Text.TagCM.CopyName" xml:space="preserve">Copy Tag Name</x:String>
789792
<x:String x:Key="Text.TagCM.CustomAction" xml:space="preserve">Custom Action</x:String>
790793
<x:String x:Key="Text.TagCM.Delete" xml:space="preserve">Delete ${0}$...</x:String>
794+
<x:String x:Key="Text.TagCM.DeleteMultiple" xml:space="preserve">Delete selected {0} tags...</x:String>
791795
<x:String x:Key="Text.TagCM.Merge" xml:space="preserve">Merge ${0}$ into ${1}$...</x:String>
792796
<x:String x:Key="Text.TagCM.Push" xml:space="preserve">Push ${0}$...</x:String>
793797
<x:String x:Key="Text.UpdateSubmodules" xml:space="preserve">Update Submodules</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@
283283
<x:String x:Key="Text.DeleteBranch.WithTrackingRemote" xml:space="preserve">同时删除远程分支 ${0}$</x:String>
284284
<x:String x:Key="Text.DeleteMultiBranch" xml:space="preserve">删除多个分支</x:String>
285285
<x:String x:Key="Text.DeleteMultiBranch.Tip" xml:space="preserve">您正在尝试一次性删除多个分支,请务必仔细检查后再执行操作!</x:String>
286+
<x:String x:Key="Text.DeleteMultiTags" xml:space="preserve">删除多个标签</x:String>
287+
<x:String x:Key="Text.DeleteMultiTags.DeleteFromRemotes" xml:space="preserve">同时在远程仓库中删除</x:String>
288+
<x:String x:Key="Text.DeleteMultiTags.Tip" xml:space="preserve">您正在尝试一次性删除多个标签,请务必仔细检查后再执行操作!</x:String>
286289
<x:String x:Key="Text.DeleteRemote" xml:space="preserve">删除远程确认</x:String>
287290
<x:String x:Key="Text.DeleteRemote.Remote" xml:space="preserve">远程名 :</x:String>
288291
<x:String x:Key="Text.DeleteRepositoryNode.Path" xml:space="preserve">路径 :</x:String>
@@ -792,6 +795,7 @@
792795
<x:String x:Key="Text.TagCM.CopyName" xml:space="preserve">复制标签名</x:String>
793796
<x:String x:Key="Text.TagCM.CustomAction" xml:space="preserve">自定义操作</x:String>
794797
<x:String x:Key="Text.TagCM.Delete" xml:space="preserve">删除 ${0}$...</x:String>
798+
<x:String x:Key="Text.TagCM.DeleteMultiple" xml:space="preserve">删除选中 {0} 个标签...</x:String>
795799
<x:String x:Key="Text.TagCM.Merge" xml:space="preserve">合并 ${0}$ 到 ${1}$...</x:String>
796800
<x:String x:Key="Text.TagCM.Push" xml:space="preserve">推送 ${0}$...</x:String>
797801
<x:String x:Key="Text.UpdateSubmodules" xml:space="preserve">更新子模块</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@
283283
<x:String x:Key="Text.DeleteBranch.WithTrackingRemote" xml:space="preserve">同時刪除遠端分支 ${0}$</x:String>
284284
<x:String x:Key="Text.DeleteMultiBranch" xml:space="preserve">刪除多個分支</x:String>
285285
<x:String x:Key="Text.DeleteMultiBranch.Tip" xml:space="preserve">您正在嘗試一次性刪除多個分支,請務必仔細檢查後再刪除!</x:String>
286+
<x:String x:Key="Text.DeleteMultiTags" xml:space="preserve">刪除多個標籤</x:String>
287+
<x:String x:Key="Text.DeleteMultiTags.DeleteFromRemotes" xml:space="preserve">同時刪除遠端存放庫中的這些標籤</x:String>
288+
<x:String x:Key="Text.DeleteMultiTags.Tip" xml:space="preserve">您正在嘗試一次性刪除多個標籤,請務必仔細檢查後再刪除!</x:String>
286289
<x:String x:Key="Text.DeleteRemote" xml:space="preserve">刪除遠端確認</x:String>
287290
<x:String x:Key="Text.DeleteRemote.Remote" xml:space="preserve">遠端名稱:</x:String>
288291
<x:String x:Key="Text.DeleteRepositoryNode.Path" xml:space="preserve">路徑:</x:String>
@@ -792,6 +795,7 @@
792795
<x:String x:Key="Text.TagCM.CopyName" xml:space="preserve">複製標籤名稱</x:String>
793796
<x:String x:Key="Text.TagCM.CustomAction" xml:space="preserve">自訂動作</x:String>
794797
<x:String x:Key="Text.TagCM.Delete" xml:space="preserve">刪除 ${0}$...</x:String>
798+
<x:String x:Key="Text.TagCM.DeleteMultiple" xml:space="preserve">刪除所選的 {0} 個標籤...</x:String>
795799
<x:String x:Key="Text.TagCM.Merge" xml:space="preserve">合併 ${0}$ 到 ${1}$...</x:String>
796800
<x:String x:Key="Text.TagCM.Push" xml:space="preserve">推送 ${0}$...</x:String>
797801
<x:String x:Key="Text.UpdateSubmodules" xml:space="preserve">更新子模組</x:String>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
3+
4+
namespace SourceGit.ViewModels
5+
{
6+
public class DeleteMultipleTags : Popup
7+
{
8+
public List<Models.Tag> Tags
9+
{
10+
get;
11+
}
12+
13+
public bool DeleteFromRemote
14+
{
15+
get;
16+
set;
17+
} = false;
18+
19+
public DeleteMultipleTags(Repository repo, List<Models.Tag> tags)
20+
{
21+
_repo = repo;
22+
Tags = tags;
23+
}
24+
25+
public override async Task<bool> Sure()
26+
{
27+
_repo.SetWatcherEnabled(false);
28+
ProgressDescription = "Deleting multiple tags...";
29+
30+
var log = _repo.CreateLog("Delete Multiple Tags");
31+
Use(log);
32+
33+
foreach (var tag in Tags)
34+
{
35+
var succ = await new Commands.Tag(_repo.FullPath, tag.Name)
36+
.Use(log)
37+
.DeleteAsync();
38+
39+
if (succ)
40+
{
41+
foreach (var r in _repo.Remotes)
42+
await new Commands.Push(_repo.FullPath, r.Name, $"refs/tags/{tag.Name}", true)
43+
.Use(log)
44+
.RunAsync();
45+
}
46+
}
47+
48+
log.Complete();
49+
_repo.MarkTagsDirtyManually();
50+
_repo.SetWatcherEnabled(true);
51+
return true;
52+
}
53+
54+
private readonly Repository _repo;
55+
}
56+
}

src/ViewModels/Repository.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,9 +1755,19 @@ private object BuildVisibleTags()
17551755
UpdateTagFilterMode(historiesFilters);
17561756

17571757
if (Preferences.Instance.ShowTagsAsTree)
1758-
return TagCollectionAsTree.Build(visible, _visibleTags as TagCollectionAsTree);
1758+
{
1759+
var tree = TagCollectionAsTree.Build(visible, _visibleTags as TagCollectionAsTree);
1760+
foreach (var node in tree.Tree)
1761+
node.UpdateFilterMode(historiesFilters);
1762+
return tree;
1763+
}
17591764
else
1760-
return new TagCollectionAsList() { Tags = visible };
1765+
{
1766+
var list = new TagCollectionAsList(visible);
1767+
foreach (var item in list.TagItems)
1768+
item.FilterMode = historiesFilters.GetValueOrDefault(item.Tag.Name, Models.FilterMode.None);
1769+
return list;
1770+
}
17611771
}
17621772

17631773
private object BuildVisibleSubmodules()
@@ -1813,9 +1823,15 @@ private void UpdateBranchTreeFilterMode(List<BranchTreeNode> nodes, Dictionary<s
18131823

18141824
private void UpdateTagFilterMode(Dictionary<string, Models.FilterMode> filters)
18151825
{
1816-
foreach (var tag in _tags)
1826+
if (VisibleTags is TagCollectionAsTree tree)
1827+
{
1828+
foreach (var node in tree.Tree)
1829+
node.UpdateFilterMode(filters);
1830+
}
1831+
else if (VisibleTags is TagCollectionAsList list)
18171832
{
1818-
tag.FilterMode = filters.GetValueOrDefault(tag.Name, Models.FilterMode.None);
1833+
foreach (var item in list.TagItems)
1834+
item.FilterMode = filters.GetValueOrDefault(item.Tag.Name, Models.FilterMode.None);
18191835
}
18201836
}
18211837

@@ -1831,8 +1847,17 @@ private void ResetBranchTreeFilterMode(List<BranchTreeNode> nodes)
18311847

18321848
private void ResetTagFilterMode()
18331849
{
1834-
foreach (var tag in _tags)
1835-
tag.FilterMode = Models.FilterMode.None;
1850+
if (VisibleTags is TagCollectionAsTree tree)
1851+
{
1852+
var filters = new Dictionary<string, Models.FilterMode>();
1853+
foreach (var node in tree.Tree)
1854+
node.UpdateFilterMode(filters);
1855+
}
1856+
else if (VisibleTags is TagCollectionAsList list)
1857+
{
1858+
foreach (var item in list.TagItems)
1859+
item.FilterMode = Models.FilterMode.None;
1860+
}
18361861
}
18371862

18381863
private BranchTreeNode FindBranchNode(List<BranchTreeNode> nodes, string path)

0 commit comments

Comments
 (0)