mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 05:43:55 +00:00
feat(app): unread session navigation keybinds (#11750)
This commit is contained in:
parent
1cabeb00d0
commit
52eb8a7a8c
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "فتح الإعدادات",
|
"command.settings.open": "فتح الإعدادات",
|
||||||
"command.session.previous": "الجلسة السابقة",
|
"command.session.previous": "الجلسة السابقة",
|
||||||
"command.session.next": "الجلسة التالية",
|
"command.session.next": "الجلسة التالية",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "أرشفة الجلسة",
|
"command.session.archive": "أرشفة الجلسة",
|
||||||
|
|
||||||
"command.palette": "لوحة الأوامر",
|
"command.palette": "لوحة الأوامر",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Abrir configurações",
|
"command.settings.open": "Abrir configurações",
|
||||||
"command.session.previous": "Sessão anterior",
|
"command.session.previous": "Sessão anterior",
|
||||||
"command.session.next": "Próxima sessão",
|
"command.session.next": "Próxima sessão",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Arquivar sessão",
|
"command.session.archive": "Arquivar sessão",
|
||||||
|
|
||||||
"command.palette": "Paleta de comandos",
|
"command.palette": "Paleta de comandos",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Åbn indstillinger",
|
"command.settings.open": "Åbn indstillinger",
|
||||||
"command.session.previous": "Forrige session",
|
"command.session.previous": "Forrige session",
|
||||||
"command.session.next": "Næste session",
|
"command.session.next": "Næste session",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Arkivér session",
|
"command.session.archive": "Arkivér session",
|
||||||
|
|
||||||
"command.palette": "Kommandopalette",
|
"command.palette": "Kommandopalette",
|
||||||
|
|||||||
@ -32,6 +32,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Einstellungen öffnen",
|
"command.settings.open": "Einstellungen öffnen",
|
||||||
"command.session.previous": "Vorherige Sitzung",
|
"command.session.previous": "Vorherige Sitzung",
|
||||||
"command.session.next": "Nächste Sitzung",
|
"command.session.next": "Nächste Sitzung",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Sitzung archivieren",
|
"command.session.archive": "Sitzung archivieren",
|
||||||
|
|
||||||
"command.palette": "Befehlspalette",
|
"command.palette": "Befehlspalette",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Open settings",
|
"command.settings.open": "Open settings",
|
||||||
"command.session.previous": "Previous session",
|
"command.session.previous": "Previous session",
|
||||||
"command.session.next": "Next session",
|
"command.session.next": "Next session",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Archive session",
|
"command.session.archive": "Archive session",
|
||||||
|
|
||||||
"command.palette": "Command palette",
|
"command.palette": "Command palette",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Abrir ajustes",
|
"command.settings.open": "Abrir ajustes",
|
||||||
"command.session.previous": "Sesión anterior",
|
"command.session.previous": "Sesión anterior",
|
||||||
"command.session.next": "Siguiente sesión",
|
"command.session.next": "Siguiente sesión",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Archivar sesión",
|
"command.session.archive": "Archivar sesión",
|
||||||
|
|
||||||
"command.palette": "Paleta de comandos",
|
"command.palette": "Paleta de comandos",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Ouvrir les paramètres",
|
"command.settings.open": "Ouvrir les paramètres",
|
||||||
"command.session.previous": "Session précédente",
|
"command.session.previous": "Session précédente",
|
||||||
"command.session.next": "Session suivante",
|
"command.session.next": "Session suivante",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Archiver la session",
|
"command.session.archive": "Archiver la session",
|
||||||
|
|
||||||
"command.palette": "Palette de commandes",
|
"command.palette": "Palette de commandes",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "設定を開く",
|
"command.settings.open": "設定を開く",
|
||||||
"command.session.previous": "前のセッション",
|
"command.session.previous": "前のセッション",
|
||||||
"command.session.next": "次のセッション",
|
"command.session.next": "次のセッション",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "セッションをアーカイブ",
|
"command.session.archive": "セッションをアーカイブ",
|
||||||
|
|
||||||
"command.palette": "コマンドパレット",
|
"command.palette": "コマンドパレット",
|
||||||
|
|||||||
@ -32,6 +32,8 @@ export const dict = {
|
|||||||
"command.settings.open": "설정 열기",
|
"command.settings.open": "설정 열기",
|
||||||
"command.session.previous": "이전 세션",
|
"command.session.previous": "이전 세션",
|
||||||
"command.session.next": "다음 세션",
|
"command.session.next": "다음 세션",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "세션 보관",
|
"command.session.archive": "세션 보관",
|
||||||
|
|
||||||
"command.palette": "명령 팔레트",
|
"command.palette": "명령 팔레트",
|
||||||
|
|||||||
@ -31,6 +31,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Åpne innstillinger",
|
"command.settings.open": "Åpne innstillinger",
|
||||||
"command.session.previous": "Forrige sesjon",
|
"command.session.previous": "Forrige sesjon",
|
||||||
"command.session.next": "Neste sesjon",
|
"command.session.next": "Neste sesjon",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Arkiver sesjon",
|
"command.session.archive": "Arkiver sesjon",
|
||||||
|
|
||||||
"command.palette": "Kommandopalett",
|
"command.palette": "Kommandopalett",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Otwórz ustawienia",
|
"command.settings.open": "Otwórz ustawienia",
|
||||||
"command.session.previous": "Poprzednia sesja",
|
"command.session.previous": "Poprzednia sesja",
|
||||||
"command.session.next": "Następna sesja",
|
"command.session.next": "Następna sesja",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Zarchiwizuj sesję",
|
"command.session.archive": "Zarchiwizuj sesję",
|
||||||
|
|
||||||
"command.palette": "Paleta poleceń",
|
"command.palette": "Paleta poleceń",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "Открыть настройки",
|
"command.settings.open": "Открыть настройки",
|
||||||
"command.session.previous": "Предыдущая сессия",
|
"command.session.previous": "Предыдущая сессия",
|
||||||
"command.session.next": "Следующая сессия",
|
"command.session.next": "Следующая сессия",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "Архивировать сессию",
|
"command.session.archive": "Архивировать сессию",
|
||||||
|
|
||||||
"command.palette": "Палитра команд",
|
"command.palette": "Палитра команд",
|
||||||
|
|||||||
@ -28,6 +28,8 @@ export const dict = {
|
|||||||
"command.settings.open": "เปิดการตั้งค่า",
|
"command.settings.open": "เปิดการตั้งค่า",
|
||||||
"command.session.previous": "เซสชันก่อนหน้า",
|
"command.session.previous": "เซสชันก่อนหน้า",
|
||||||
"command.session.next": "เซสชันถัดไป",
|
"command.session.next": "เซสชันถัดไป",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "จัดเก็บเซสชัน",
|
"command.session.archive": "จัดเก็บเซสชัน",
|
||||||
|
|
||||||
"command.palette": "คำสั่งค้นหา",
|
"command.palette": "คำสั่งค้นหา",
|
||||||
|
|||||||
@ -32,6 +32,8 @@ export const dict = {
|
|||||||
"command.settings.open": "打开设置",
|
"command.settings.open": "打开设置",
|
||||||
"command.session.previous": "上一个会话",
|
"command.session.previous": "上一个会话",
|
||||||
"command.session.next": "下一个会话",
|
"command.session.next": "下一个会话",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "归档会话",
|
"command.session.archive": "归档会话",
|
||||||
|
|
||||||
"command.palette": "命令面板",
|
"command.palette": "命令面板",
|
||||||
|
|||||||
@ -32,6 +32,8 @@ export const dict = {
|
|||||||
"command.settings.open": "開啟設定",
|
"command.settings.open": "開啟設定",
|
||||||
"command.session.previous": "上一個工作階段",
|
"command.session.previous": "上一個工作階段",
|
||||||
"command.session.next": "下一個工作階段",
|
"command.session.next": "下一個工作階段",
|
||||||
|
"command.session.previous.unseen": "Previous unread session",
|
||||||
|
"command.session.next.unseen": "Next unread session",
|
||||||
"command.session.archive": "封存工作階段",
|
"command.session.archive": "封存工作階段",
|
||||||
|
|
||||||
"command.palette": "命令面板",
|
"command.palette": "命令面板",
|
||||||
|
|||||||
@ -886,6 +886,52 @@ export default function Layout(props: ParentProps) {
|
|||||||
queueMicrotask(() => scrollToSession(session.id, `${session.directory}:${session.id}`))
|
queueMicrotask(() => scrollToSession(session.id, `${session.directory}:${session.id}`))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function navigateSessionByUnseen(offset: number) {
|
||||||
|
const sessions = currentSessions()
|
||||||
|
if (sessions.length === 0) return
|
||||||
|
|
||||||
|
const hasUnseen = sessions.some((session) => notification.session.unseen(session.id).length > 0)
|
||||||
|
if (!hasUnseen) return
|
||||||
|
|
||||||
|
const activeIndex = params.id ? sessions.findIndex((s) => s.id === params.id) : -1
|
||||||
|
const start = activeIndex === -1 ? (offset > 0 ? -1 : 0) : activeIndex
|
||||||
|
|
||||||
|
for (let i = 1; i <= sessions.length; i++) {
|
||||||
|
const index = offset > 0 ? (start + i) % sessions.length : (start - i + sessions.length) % sessions.length
|
||||||
|
const session = sessions[index]
|
||||||
|
if (!session) continue
|
||||||
|
if (notification.session.unseen(session.id).length === 0) continue
|
||||||
|
|
||||||
|
prefetchSession(session, "high")
|
||||||
|
|
||||||
|
const next = sessions[(index + 1) % sessions.length]
|
||||||
|
const prev = sessions[(index - 1 + sessions.length) % sessions.length]
|
||||||
|
|
||||||
|
if (offset > 0) {
|
||||||
|
if (next) prefetchSession(next, "high")
|
||||||
|
if (prev) prefetchSession(prev)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset < 0) {
|
||||||
|
if (prev) prefetchSession(prev, "high")
|
||||||
|
if (next) prefetchSession(next)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.env.DEV) {
|
||||||
|
navStart({
|
||||||
|
dir: base64Encode(session.directory),
|
||||||
|
from: params.id,
|
||||||
|
to: session.id,
|
||||||
|
trigger: offset > 0 ? "shift+alt+arrowdown" : "shift+alt+arrowup",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
navigateToSession(session)
|
||||||
|
queueMicrotask(() => scrollToSession(session.id, `${session.directory}:${session.id}`))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function archiveSession(session: Session) {
|
async function archiveSession(session: Session) {
|
||||||
const [store, setStore] = globalSync.child(session.directory)
|
const [store, setStore] = globalSync.child(session.directory)
|
||||||
const sessions = store.session ?? []
|
const sessions = store.session ?? []
|
||||||
@ -1024,6 +1070,20 @@ export default function Layout(props: ParentProps) {
|
|||||||
keybind: "alt+arrowdown",
|
keybind: "alt+arrowdown",
|
||||||
onSelect: () => navigateSessionByOffset(1),
|
onSelect: () => navigateSessionByOffset(1),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "session.previous.unseen",
|
||||||
|
title: language.t("command.session.previous.unseen"),
|
||||||
|
category: language.t("command.category.session"),
|
||||||
|
keybind: "shift+alt+arrowup",
|
||||||
|
onSelect: () => navigateSessionByUnseen(-1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "session.next.unseen",
|
||||||
|
title: language.t("command.session.next.unseen"),
|
||||||
|
category: language.t("command.category.session"),
|
||||||
|
keybind: "shift+alt+arrowdown",
|
||||||
|
onSelect: () => navigateSessionByUnseen(1),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "session.archive",
|
id: "session.archive",
|
||||||
title: language.t("command.session.archive"),
|
title: language.t("command.session.archive"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user