chore: prepare for v2.0 release
- Remove bin/obj/publish from git tracking - Update .gitignore for .NET project (source only) - Add release.ps1 local publish script (replaces Gitea workflow) - Remove .gitea/workflows/release.yml - Fix duplicate group names to show library names - Fix HTML export to show Name column in duplicates report - Fix consolidated permissions HTML to show folder/library names Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -36,11 +36,24 @@ public class DuplicatesService : IDuplicatesService
|
||||
var groups = allItems
|
||||
.GroupBy(item => MakeKey(item, options))
|
||||
.Where(g => g.Count() >= 2)
|
||||
.Select(g => new DuplicateGroup
|
||||
.Select(g =>
|
||||
{
|
||||
GroupKey = g.Key,
|
||||
Name = g.First().Name,
|
||||
Items = g.ToList()
|
||||
var items = g.ToList();
|
||||
var name = items[0].Name;
|
||||
var libraries = items
|
||||
.Select(i => i.Library)
|
||||
.Where(l => !string.IsNullOrEmpty(l))
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.OrderBy(l => l, StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
return new DuplicateGroup
|
||||
{
|
||||
GroupKey = g.Key,
|
||||
Name = libraries.Count > 0
|
||||
? $"{name} ({string.Join(", ", libraries)})"
|
||||
: name,
|
||||
Items = items
|
||||
};
|
||||
})
|
||||
.OrderByDescending(g => g.Items.Count)
|
||||
.ThenBy(g => g.Name)
|
||||
|
||||
@@ -77,6 +77,7 @@ public class DuplicatesHtmlExportService
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Name</th>
|
||||
<th>Library</th>
|
||||
<th>Path</th>
|
||||
<th>Size</th>
|
||||
@@ -97,6 +98,7 @@ public class DuplicatesHtmlExportService
|
||||
sb.AppendLine($"""
|
||||
<tr>
|
||||
<td>{j + 1}</td>
|
||||
<td>{H(item.Name)}</td>
|
||||
<td>{H(item.Library)}</td>
|
||||
<td><a href="{H(item.Path)}" target="_blank">{H(item.Path)}</a></td>
|
||||
<td>{size}</td>
|
||||
|
||||
@@ -506,8 +506,12 @@ a:hover { text-decoration: underline; }
|
||||
|
||||
if (entry.LocationCount == 1)
|
||||
{
|
||||
// Single location — inline site title, no badge
|
||||
sb.AppendLine($" <td>{HtmlEncode(entry.Locations[0].SiteTitle)}</td>");
|
||||
// Single location — inline site title + object title
|
||||
var loc0 = entry.Locations[0];
|
||||
var locLabel = string.IsNullOrEmpty(loc0.ObjectTitle)
|
||||
? HtmlEncode(loc0.SiteTitle)
|
||||
: $"{HtmlEncode(loc0.SiteTitle)} › {HtmlEncode(loc0.ObjectTitle)}";
|
||||
sb.AppendLine($" <td>{locLabel}</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
else
|
||||
@@ -520,9 +524,12 @@ a:hover { text-decoration: underline; }
|
||||
// Hidden sub-rows — one per location
|
||||
foreach (var loc in entry.Locations)
|
||||
{
|
||||
var subLabel = string.IsNullOrEmpty(loc.ObjectTitle)
|
||||
? $"<a href=\"{HtmlEncode(loc.SiteUrl)}\">{HtmlEncode(loc.SiteTitle)}</a>"
|
||||
: $"<a href=\"{HtmlEncode(loc.SiteUrl)}\">{HtmlEncode(loc.SiteTitle)}</a> › {HtmlEncode(loc.ObjectTitle)}";
|
||||
sb.AppendLine($"<tr data-group=\"{currentLocId}\" style=\"display:none\">");
|
||||
sb.AppendLine($" <td colspan=\"5\" style=\"padding-left:2em\">");
|
||||
sb.AppendLine($" <a href=\"{HtmlEncode(loc.SiteUrl)}\">{HtmlEncode(loc.SiteTitle)}</a>");
|
||||
sb.AppendLine($" {subLabel}");
|
||||
sb.AppendLine(" </td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user