feat(clipboard): removed unused date filter and date headers, went with a simple "time ago" indicator per entry which feels more natural

This commit is contained in:
Lemmy
2026-03-13 22:31:15 -04:00
parent d9d453184d
commit 4496407969
9 changed files with 36 additions and 108 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ SmartPanel {
return false;
if (!Settings.data.appLauncher.enableClipPreview)
return false;
return selectedIndex >= 0 && results && !!results[selectedIndex] && !results[selectedIndex].isHeader;
return selectedIndex >= 0 && results && !!results[selectedIndex];
}
readonly property int previewPanelWidth: Math.round(400 * Style.uiScaleRatio)
+1 -1
View File
@@ -65,7 +65,7 @@ Rectangle {
readonly property int badgeSize: Math.round(effectiveIconSize * Style.uiScaleRatio)
readonly property int entryHeight: Math.round(badgeSize + (launcherDensity === "compact" ? (Style.marginL + Style.marginXXS) : (Style.marginXL + Style.marginS)))
readonly property bool providerShowsCategories: currentProvider.showsCategories === true
readonly property bool providerShowsCategories: (currentProvider.showsCategories !== undefined ? currentProvider.showsCategories : true) && providerCategories.length > 0
readonly property var providerCategories: {
if (currentProvider.availableCategories && currentProvider.availableCategories.length > 0) {
@@ -93,7 +93,7 @@ Variants {
return false;
if (!Settings.data.appLauncher.enableClipPreview)
return false;
return launcherCore.selectedIndex >= 0 && launcherCore.results && !!launcherCore.results[launcherCore.selectedIndex] && !launcherCore.results[launcherCore.selectedIndex].isHeader;
return launcherCore.selectedIndex >= 0 && launcherCore.results && !!launcherCore.results[launcherCore.selectedIndex];
}
// Dimmer background (click to close)
@@ -26,7 +26,6 @@ Item {
// Categories
property var availableCategories: Settings.data.appLauncher.enableClipboardChips ? ["All", "Images", "Links", "Files", "Code", "Colors"] : []
property bool showsCategories: Settings.data.appLauncher.enableClipboardChips
property string selectedCategory: "All"
function selectCategory(cat) {
@@ -38,41 +37,6 @@ Item {
}
}
// Date Filtering
property bool hasDateFilter: Settings.data.appLauncher.enableClipboardDateHeaders
property string dateFilter: "all"
property var availableDateFilters: [
{
"label": I18n.tr("launcher.date-filter-all-time"),
"action": "all",
"icon": iconMode === "tabler" ? "calendar" : "x-office-calendar"
},
{
"label": I18n.tr("launcher.date-filter-today"),
"action": "today",
"icon": iconMode === "tabler" ? "calendar-event" : "view-calendar-timeline"
},
{
"label": I18n.tr("launcher.date-filter-yesterday"),
"action": "yesterday",
"icon": iconMode === "tabler" ? "calendar-time" : "view-calendar"
},
{
"label": I18n.tr("launcher.date-filter-previous-7-days"),
"action": "week",
"icon": iconMode === "tabler" ? "calendar-week" : "view-calendar-week"
}
]
function selectDateFilter(filter) {
if (dateFilter !== filter) {
dateFilter = filter;
if (launcher) {
launcher.updateResults();
}
}
}
property var categoryIcons: {
"All": iconMode === "tabler" ? "border-all" : "view-grid",
"Images": iconMode === "tabler" ? "photo" : "image",
@@ -258,15 +222,7 @@ Item {
// Search clipboard items
const searchTerm = query.toLowerCase();
// Date grouping trackers
const headersEnabled = Settings.data.appLauncher.enableClipboardDateHeaders;
const now = Date.now() / 1000;
const todayStart = new Date();
todayStart.setHours(0, 0, 0, 0);
const todayStartTs = todayStart.getTime() / 1000;
const yesterdayStartTs = todayStartTs - 86400;
let currentGroup = "";
const catMap = {
"Images": "image",
@@ -292,50 +248,14 @@ Item {
return;
}
// Date Filter
const firstSeen = ClipboardService.firstSeenById[item.id] || now;
if (root.dateFilter !== "all") {
if (root.dateFilter === "today" && firstSeen < todayStartTs)
return;
if (root.dateFilter === "yesterday" && (firstSeen >= todayStartTs || firstSeen < yesterdayStartTs))
return;
if (root.dateFilter === "week" && (firstSeen >= yesterdayStartTs || firstSeen < (todayStartTs - (86400 * 7))))
return;
}
// Check date group logic
if (headersEnabled && !searchTerm && root.selectedCategory === "All" && root.dateFilter === "all") {
let groupName = I18n.tr("launcher.date-filter-all-time");
if (firstSeen >= todayStartTs) {
groupName = I18n.tr("launcher.date-filter-today");
} else if (firstSeen >= yesterdayStartTs) {
groupName = I18n.tr("launcher.date-filter-yesterday");
} else if (firstSeen >= todayStartTs - (86400 * 7)) {
groupName = I18n.tr("launcher.date-filter-previous-7-days");
}
if (groupName !== currentGroup) {
currentGroup = groupName;
results.push({
"name": currentGroup,
"description": "",
"icon": iconMode === "tabler" ? "calendar" : "x-office-calendar",
"isTablerIcon": true,
"isImage": false,
"hideIcon": true,
"isHeader": true,
"clipboardId": "",
"onActivate": function () {}
});
}
}
// Format the result based on type
let entry;
if (item.isImage) {
entry = formatImageEntry(item);
entry = formatImageEntry(item, firstSeen);
} else {
entry = formatTextEntry(item);
entry = formatTextEntry(item, firstSeen);
}
// Add activation handler
@@ -371,12 +291,16 @@ Item {
return results;
}
function formatImageEntry(item) {
function formatImageEntry(item, firstSeen) {
const meta = ClipboardService.parseImageMeta(item.preview);
const timeStr = Time.formatRelativeTime(new Date(firstSeen * 1000));
let desc = meta ? `${meta.fmt} ${meta.size}` : item.mime || "Image data";
if (timeStr)
desc += ` ${timeStr}`;
return {
"name": meta ? `Image ${meta.w}×${meta.h}` : "Image",
"description": meta ? `${meta.fmt} ${meta.size}` : item.mime || "Image data",
"description": desc,
"icon": iconMode === "tabler" ? "photo" : "image",
"isTablerIcon": true,
"isImage": true,
@@ -389,7 +313,7 @@ Item {
};
}
function formatTextEntry(item) {
function formatTextEntry(item, firstSeen) {
const preview = (item.preview || "").trim();
const lines = preview.split('\n').filter(l => l.trim());
@@ -415,6 +339,10 @@ Item {
}
}
const timeStr = Time.formatRelativeTime(new Date(firstSeen * 1000));
if (timeStr)
description += ` ${timeStr}`;
let defaultIcon = iconMode === "tabler" ? "clipboard" : "text-x-generic";
let colorHex = "";
if (Settings.data.appLauncher.enableClipboardSmartIcons) {
@@ -517,7 +445,7 @@ Item {
// Get preview data for the preview panel
function getPreviewData(item) {
if (!item || item.isHeader)
if (!item)
return null;
return {
"clipboardId": item.clipboardId,
@@ -63,15 +63,6 @@ ColumnLayout {
enabled: Settings.data.appLauncher.enableClipboardHistory
}
NToggle {
label: I18n.tr("panels.launcher.settings-clip-date-headers-label")
description: I18n.tr("panels.launcher.settings-clip-date-headers-description")
checked: Settings.data.appLauncher.enableClipboardDateHeaders
onToggled: checked => Settings.data.appLauncher.enableClipboardDateHeaders = checked
defaultValue: Settings.getDefaultValue("appLauncher.enableClipboardDateHeaders")
enabled: Settings.data.appLauncher.enableClipboardHistory
}
NDivider {
Layout.fillWidth: true
visible: Settings.data.appLauncher.enableClipboardHistory