Compare commits

..

2 Commits

Author SHA1 Message Date
zinface d8e94c87bc fix(app/detail): 详情页未更新警示横幅去除 Emoji 2026-06-10 10:41:53 +08:00
zinface e97052b93c feat: 添加软件更新警醒横幅
- 在应用详情页顶部添加警醒横幅
- 当软件超过一年未更新时显示警告提示
2026-06-09 09:54:30 +08:00
5 changed files with 34 additions and 34 deletions
-1
View File
@@ -26,7 +26,6 @@ linux:
Categories: "System;"
mimeTypes:
- "x-scheme-handler/spk"
- "x-scheme-handler/apt"
target:
- "AppImage"
- "deb"
+1 -17
View File
@@ -45,7 +45,7 @@ class ListenersMap {
}
}
const protocols = ["spk", "apt"];
const protocols = ["spk"];
const listeners = new ListenersMap();
export const deepLink = {
@@ -81,22 +81,6 @@ export function handleCommandLine(commandLine: string[]) {
try {
const url = new URL(target);
// Handle apt:// protocol: convert to spk://search/pkgname
if (url.protocol === "apt:") {
// Format: apt://pkgname
const pkgname = url.hostname || url.pathname.split("/").filter(Boolean)[0];
if (pkgname) {
const query: Query = { pkgname };
logger.info(`Deep link: apt protocol converted to search: ${pkgname}`);
listeners.emit("search", query);
} else {
logger.warn(
`Deep link: invalid apt format, expected //pkgname, got ${target}`,
);
}
return;
}
const action = url.hostname; // 'search'
logger.info(`Deep link: action found: ${action}`);
-15
View File
@@ -318,21 +318,6 @@ ipcMain.handle("check-for-updates", async () => {
}
});
// Register custom protocol handlers
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient("spk", process.execPath, [
path.resolve(process.argv[1]),
]);
app.setAsDefaultProtocolClient("apt", process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient("spk");
app.setAsDefaultProtocolClient("apt");
}
app.whenReady().then(() => {
// Set User-Agent for client
session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
@@ -10,4 +10,4 @@ Keywords=appstore;
Terminal=false
StartupNotify=true
StartupWMClass=spark-store
MimeType=x-scheme-handler/spk;x-scheme-handler/apt
MimeType=x-scheme-handler/spk
+32
View File
@@ -262,6 +262,23 @@
<!-- 右侧应用详情+ 截图 -->
<div class="flex-1 min-w-0 space-y-5">
<!-- 警醒横幅 - 早于一年未更新 -->
<div
v-if="displayApp?.update && isOutdated(displayApp.update)"
class="rounded-2xl border-l-4 border-amber-500 bg-amber-50 p-4 dark:bg-amber-950/30 dark:border-amber-600"
>
<div class="flex items-center gap-3">
<i class="fas fa-exclamation-triangle text-amber-500 text-lg"></i>
<div>
<p class="text-sm font-medium text-amber-800 dark:text-amber-300">
注意该软件已超过一年未更新
</p>
<p class="text-xs text-amber-700/80 dark:text-amber-400/80 mt-0.5">
最后更新于 {{ displayApp.update }}可能存在兼容性或安全问题请谨慎安装
</p>
</div>
</div>
</div>
<!-- 应用详情 -->
<div
v-if="displayApp?.more && displayApp.more.trim() !== ''"
@@ -633,4 +650,19 @@ const onOverlayWheel = (e: WheelEvent) => {
if (target.closest(".overflow-y-auto, .overflow-auto")) return;
e.preventDefault();
};
// 判断是否超过一年未更新
const isOutdated = (updateDate: string) => {
if (!updateDate) return false;
try {
// 假设日期格式如 "2023-01-15" 或 "2024年12月20日"
const date = new Date(updateDate);
if (isNaN(date.getTime())) return false;
const oneYearAgo = new Date();
oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);
return date < oneYearAgo;
} catch {
return false;
}
};
</script>