Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@ GitHub Shine is organized into four tabs — **Dashboard**, **Accounts**, **Arch
- **Drag-to-reorder** — arrange the dashboard cards by drag-and-drop (or the `‹ ›` buttons); your layout is persisted between sessions.
- **"Needs your attention" inbox** — pulls your GitHub notifications and highlights the ones that matter: mentions, assignments, and requested reviews.
- **Repository archive** — on the Archive tab, multi-select repos and download a source zip of each one's default branch into a folder of your choice, with per-repo progress, a Saved/Failed badge, and cancellation.
- **Local clones** — on the Clone tab, pick a folder and keep real working copies of the repos you monitor. A repo that isn't there yet is cloned; one that already is gets fast-forwarded on whatever branch it's checked out on. Uncommitted changes, a detached HEAD or a diverged branch are reported and skipped rather than touched.
- **Native notifications** — get notified about new issues, new pull requests, and failed workflow runs; mute them from the Settings tab or the tray menu.
- **Tray menu with repo list** — a monochrome template tray icon whose menu opens the dashboard, refreshes, toggles mute, and lists your repositories (in the same order as the sidebar) — click one to open it on GitHub.
- **Settings tab** — mute notifications, choose the repository sort order (shared by the sidebar and tray), set the refresh interval, and back up or restore the database.
Expand DownExpand Up@@ -90,6 +91,7 @@ src/GitHubShine/
├─ Features/
│ ├─ Accounts/ Account/repo config, secure token vault
│ ├─ Archive/ Bulk source-zip download of selected repos
│ ├─ Clone/ Local git working copies: first clone, then fast-forward
│ ├─ Dashboard/ Snapshots, polling, Mediator handlers
│ ├─ Settings/ App settings, file dialogs, database backup/restore
│ └─ Tray/ System tray icon + repo menu
Expand Down
4 changes: 4 additions & 0 deletions src/GitHubShine/Components/Layout/MainLayout.razor
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,6 +66,7 @@
const string ReposIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='4' width='18' height='16' rx='2'/><path d='M3 9h18'/><path d='M9 9v11'/></svg>";
const string PersonsIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='8' r='3.4'/><path d='M5.5 20c0-3.3 2.9-5.6 6.5-5.6s6.5 2.3 6.5 5.6'/><path d='M12 2.2v1.2'/><path d='M12 12.6v1.2'/></svg>";
const string ArchiveIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='4' width='18' height='4' rx='1'/><path d='M5 8v11a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8'/><path d='M10 12h4'/></svg>";
const string CloneIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='9' y='9' width='12' height='12' rx='2'/><path d='M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1'/></svg>";
const string SyncIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M4 10a8 8 0 0 1 13.7-5.7L20 6'/><path d='M20 3v4h-4'/><path d='M20 14a8 8 0 0 1-13.7 5.7L4 18'/><path d='M4 21v-4h4'/></svg>";
const string SettingsIcon = "<svg viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='3'/><path d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33h.09a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82v.09a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z'/></svg>";

Expand DownExpand Up@@ -113,6 +114,9 @@
// "what am I watching" screens and read as a group in the bar.
entries.Insert(2, new(PersonsIcon, "People", "People", "/persons", IsSection(rel, "persons")));
entries.Add(new(ArchiveIcon, "Archive", "Archive", "/archive", IsSection(rel, "archive")));
// Clone sits next to Archive: both take monitored repos and put them in a folder, one as
// a zip snapshot, the other as a live working copy you can keep catching up.
entries.Add(new(CloneIcon, "Clone", "Clone", "/clone", IsSection(rel, "clone")));
entries.Add(new(SyncIcon, "Sync", "Sync", "/sync", IsSection(rel, "sync")));
}
entries.Add(new(SettingsIcon, "Settings", "Settings", "/settings", IsSection(rel, "settings")));
Expand Down
Loading