chore: small cleanups from the 2026-09 code review (checklist)
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
The checklist names entry points across the project, including App.axaml.cs, MainActivity.OnPause, SystemAlarmService.cs, IncidentFile.SanitizeFileName, and DispatcherTimerTicker; read the relevant unchecked item and its referenced code first. Several items involve concurrency, lifecycle, security, or cancellation across subsystems, so select a narrowly scoped item and check whether it has already been split into another issue. Done means the chosen item is implemented and its behavior is covered by appropriate tests.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
From the 2026-09-09 code review of main (35d86e1). Small, independent items; each is a short PR. Tick them off here.
- Four copy-paste JSON stores (
JsonRecentFilesStore,JsonLastSaveFolderStore,JsonLastPdfExportStorein AppLogic,JsonTrustStorein Sync) repeat the same read/deserialise/catch (JsonException)/write scaffolding. Extract one genericJsonFileStore<T>with the atomic temp+rename write that #286 added to the trust store. — #329 -
JsonTrustStore.Persist()mutates_cachebefore the disk write; ifFile.Movethrows, memory and disk diverge until the next write. Write first, then commit the in-memory change (noted in the #286 review). — #331 -
AboutViewModel.cs:68-77andLinksViewModel.cs:103-112are byte-identicalOpenUrlAsynctry/catch blocks; share one helper (also listed in #167 as "URL validation + opening duplicated"). — #332 -
RemoteIncidentSession.cs:496-501: a three-line comment block is duplicated verbatim. — #331 -
TasksSection.cs:54(PDF) usesDateTimeOffset.Nowto render "overdue", so the same incident exports differently depending on wall-clock time and the section is untestable. Pass theIClock(or an explicit "as of" timestamp) into the report. — #334 -
ForceUnit.StatusandRoleAssignment.Roleare free strings validated against nothing;Incident.StatusChangeText(:666) switches on the string, so a typo in master data silently falls through. Validate againstMasterDataSetat the session boundary, or model status as a small value type. — #355 -
App.CreateMainViewModel(App.axaml.cs:25) is a mutable public static delegate, a service-locator seam in an otherwise constructor-injected design. Pass the factory intoAppexplicitly. -
MainView.axaml.cs:19-32re-attachesPropertyChanged/Cancelled/… handlers to every newPendingPromptwithout detaching from the previous one. Same shape inIncidentWorkspaceView.axaml.cs:38,45. — #371 -
MainActivity.OnPausefires_ = _store?.FlushAsync()without awaiting; the last save can be lost when Android kills the process. Block briefly (with a timeout) as the desktopExithandler does. -
SystemAlarmServiceis never disposed on Android, so its temp WAV files leak. -
SystemAlarmService._voiceTempFilesis an unsynchronizedDictionarywritten byTempFileForonSerialAudioQueue's worker thread (SystemAlarmService.cs:107-125, reached fromPlayBlocking:80) and enumerated byDisposeon the UI thread at exit (:152) — a cue in flight during shutdown enumerates while the other thread mutates. Same class as theDispatcherTimerTickeritem below, but unlike that one this is genuinely cross-thread. While there: the temp path is a fixedlagebuch-{sound}.wavin the world-writable system temp dir (:116), with none of the per-open GUID directory and symlink refusalAttachmentTempPathsgives attachments — another local user can pre-create or symlink that path. (Found re-auditing #167.) - No
CancellationTokenSourceexists anywhere insrc/; tokens are only forwarded. A slow join, a large upload or a long PDF export cannot be cancelled by the user. Wire a cancel button on the join and export flows to a real CTS. -
IncidentFile.SanitizeFileName(#285) strips control characters but not Unicode format characters (e.g. U+202E RLO), so a display-name spoof is still possible in the Dateien list. StripUnicodeCategory.Formattoo. -
DispatcherTimerTickerallocates_subscribers.ToArray()on every tick and a throwing subscriber aborts the rest of the tick on the UI thread; isolate subscribers (also listed in #167). -
RemoteIncidentSession's per-device attachment cache underattachment-cache/is never evicted (also listed in #167). — split out as #382, tracked there. -
HttpClientHandlercreated inRemoteIncidentSessionis now disposed (#286); checkSystemAlarmService._voiceTempFilesandPdfLicense._configuredstatic state for testability while there.
- Lingua principale
- C#
- Stelle
- 1
- Fork
- 3
- Merge medio
- 4h 34m
- PR unite (30g)
- 182
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di CodeForFire/lagebuch
-
bug ux
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
CodeForFire/lagebuch#714 ·
I maintainer di solito rispondono entro 1 giorno
-
bug ux
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
CodeForFire/lagebuch#713 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
CodeForFire/lagebuch#405 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
CodeForFire/lagebuch#349 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
CodeForFire/lagebuch#348 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di CodeForFire/lagebuch
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
KnifeLemon/Filee#363 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
area-Native untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
dotnet/machinelearning#7837 ·
I maintainer di solito rispondono entro 2 giorni