Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Read: preserve draft and playback when loading text from History or Saved resources

Aperta
#173 8 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
macos, swift

Direzione di ricerca

Start with the History and Saved resources actions in Sources/LocalVoice/CaptureHistoryView.swift and DemoLibraryView.swift, then read the import decision and replacement logic in AppModel.swift. Check ReadSelectionChecks and add shared-owner plus native entry-point coverage for idle, playing, paused, and generating states. Done means Keep preserves the current reading and playback, while Replace installs the chosen text, stops old playback, and prevents stale generation results from affecting it.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Outcome and priority

P1 functional defect. Choosing Read aloud elsewhere can silently replace the saved draft while the page still displays the previous reading and paused transport.

Native reproduction

Preview 2.3.0, build 20260928054038, clean source 00be555139f87d4557f48fcffc132b8621c251a2; macOS 26.5.1 (25F80), built-in display. Verified through Copy build details in the running app and bundle metadata.

  1. In Read, enter synthetic passage A (274 characters), Listen with Mac voices, then Pause at about 0:06 of 0:18.
  2. Open Saved resources, select a different prompt B (22 characters), and click Read aloud.
  3. No Replace/Keep choice appears. The page still shows highlighted A and Resume at 0:06/0:18, but the character count is 22.
  4. Stop reveals editable B. A was replaced behind the paused display.

Original draft, voice and rate were restored, and synthetic playback stopped. Screenshots/AX receipts stay private. Audible output and export were not independently checked.

History has the same direct assignment in source; that entry point was not separately exercised.

Source owner and bounds

Library action and History action directly set speechText. speechText persistence does not resolve playback. Read's displayed text can still be playingTrack.text while draft-based controls use B.

Reuse the existing reading-import decision and confirmed replacement. Source inspection shows Save audio checks the full signature before reusing audio, so this is not evidence that cached A is exported as B. It can generate B while the page still shows A; that mismatch belongs to this request.

Chosen behaviour

Every Read import uses one state owner. If current nonempty text differs, show the existing Replace reading / Keep current choice.

Keep current preserves exact draft, player/generation and playback position. Replace stops old playback/generation, invalidates stale audio/progress and any stale selection review, rejects any late completion from the old generation, displays the chosen text immediately, and waits for Listen. Identical text does not restart playback. An empty draft can accept new text directly. Import does not silently send text to an online provider.

Acceptance

  • Exercise History and Saved resources with idle nonempty, playing, paused and generation-in-progress Read states.
  • Keep preserves text and position; Replace makes text/count/progress/next action agree and leaves playback stopped.
  • Replacing during generation cancels the old operation where supported and detaches its results before installing the new draft. Late A completion cannot restore A audio, progress or errors over B. Keep current preserves A generation. Reuse/coordinate #16 for local cancellation rather than relying on invalidateAudio alone.
  • Identical imports do not restart; empty imports follow existing empty-text validation.
  • A pending macOS Service review cannot remain attached to unrelated imported text.
  • Save audio and playback use the content clearly presented after the decision, including the Mac and online provider state models.
  • Add meaningful shared-owner checks and native entry-point coverage. Existing ReadSelectionChecks alone do not prove the History/Library wiring.
  • Record signed installed retest with Copy build details.

Coordination

New request under #164, related to #134 and #17's safe Service behavior. #161 owns a different audio-source exception path. Coordinate AppModel edits with other recovery work.

Lingua principale
Swift
Stelle
0
Fork
1
Merge medio
8h 16m
PR unite (30g)
210

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Ship-Work/workbench

Tutte le issue di Ship-Work/workbench

Issue simili

Altre issue su Swift

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.