From 3b2130f286b9d2a15b73d55e48c532a43cf9fe08 Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:02:05 +1100
Subject: sidebar: updates module
---
src/modules/sidebar/modules/news.tsx | 2 +-
src/modules/sidebar/modules/updates.tsx | 109 ++++++++++++++++++++++++++++++++
src/modules/sidebar/packages.tsx | 1 +
3 files changed, 111 insertions(+), 1 deletion(-)
create mode 100644 src/modules/sidebar/modules/updates.tsx
(limited to 'src/modules')
diff --git a/src/modules/sidebar/modules/news.tsx b/src/modules/sidebar/modules/news.tsx
index f3be53e..aba37c7 100644
--- a/src/modules/sidebar/modules/news.tsx
+++ b/src/modules/sidebar/modules/news.tsx
@@ -99,7 +99,7 @@ export default () => (
>
!!n)}
+ className={bind(Updates.get_default(), "news").as(n => (n ? "expanded" : ""))}
hscroll={Gtk.PolicyType.NEVER}
name="list"
>
diff --git a/src/modules/sidebar/modules/updates.tsx b/src/modules/sidebar/modules/updates.tsx
new file mode 100644
index 0000000..3b159c6
--- /dev/null
+++ b/src/modules/sidebar/modules/updates.tsx
@@ -0,0 +1,109 @@
+import Palette from "@/services/palette";
+import Updates, { Repo as IRepo, Update as IUpdate } from "@/services/updates";
+import { MenuItem, setupCustomTooltip } from "@/utils/widgets";
+import { bind, execAsync, GLib, Variable } from "astal";
+import { Astal, Gtk } from "astal/gtk3";
+
+const constructItem = (label: string, exec: string, quiet = true) =>
+ new MenuItem({ label, onActivate: () => execAsync(exec).catch(e => !quiet && console.error(e)) });
+
+const Update = (update: IUpdate) => {
+ const menu = new Gtk.Menu();
+ menu.append(constructItem("Open info in browser", `xdg-open '${update.url}'`, false));
+ menu.append(constructItem("Open info in terminal", `uwsm app -- foot -H -- pacman -Qi ${update.name}`));
+ menu.append(new Gtk.SeparatorMenuItem({ visible: true }));
+ menu.append(constructItem("Reinstall", `uwsm app -- foot -H -- yay -S ${update.name}`));
+ menu.append(constructItem("Remove with dependencies", `uwsm app -- foot -H -- yay -Rns ${update.name}`));
+
+ return (
+
+ );
+};
+
+const Repo = ({ repo }: { repo: IRepo }) => {
+ const expanded = Variable(false);
+
+ return (
+
+
+
+
+ {repo.updates.map(Update)}
+
+
+
+ );
+};
+
+const List = () => (
+
+ {bind(Updates.get_default(), "updateData").as(d => d.repos.map(r => ))}
+
+);
+
+const NoUpdates = () => (
+
+
+
+
+
+
+);
+
+export default () => (
+
+
+
+ (n > 0 ? "list" : "empty"))}
+ >
+
+
+
+
+
+
+);
diff --git a/src/modules/sidebar/packages.tsx b/src/modules/sidebar/packages.tsx
index 97381b1..c073850 100644
--- a/src/modules/sidebar/packages.tsx
+++ b/src/modules/sidebar/packages.tsx
@@ -3,6 +3,7 @@ import Updates from "./modules/updates";
export default () => (
+
--
cgit v1.2.3-freya