v3.7.0
This release stops a local video being uploaded once per player action,
makes the interface report what actually happened instead of assuming success,
and fixes two GUI Modal actions that opened a second window and hung forever.
It also adds upload cancellation, double-tap seeking, a Modal log source in
the GUI, and quiets a large amount of misleading ERROR noise in the host logs.
It has no breaking changes
Added
-
Frontend→ An in-flight upload can be cancelled from the task tray, which
stops the transfer and drops the row rather than leaving it to finish -
Frontend→ Double-tapping the left or right side of the player skips 5
seconds, matching the arrow keys -
Launcher→ TheGUILogs panel reads theModal-hosted app's logs as
well as the localDocker Composestack, chosen with a new Source control,
with the same tail and follow controls
Fixed
-
Frontend→ Running two player actions on the same device video uploaded
the whole file twice. ClickingGenerate SRTandTo MP4on one video sent it
in full on each action and left two profile files sharing a name. An action
started while an upload is still running now joins that upload instead of
beginning its own -
Frontend→ A player action on a file that had since been deleted reported
success while the server rejected it, and no task ever appeared. Actions now
wait for the result and report the real outcome, naming a deleted file rather
than failing silently -
Frontend→ A profile video deleted while it was loaded showed the
Convert To Playprompt, which could never succeed. A deleted file is now told
apart from a container the browser cannot decode, and clears the player -
Frontend→ Deleting a file left the jobs it removed on the tasks
dashboard, where deleting them failed with a not-found error that could not be
cleared. Those jobs are dropped as the file is deleted, and any task that is
already gone server-side clears instead of erroring. Transcripts and clips are
refreshed the same way -
Frontend→ OniOSa recording's audio slider never moved and its length
showed as0:00, because a browser recording carries no duration until it has
been read in full. The duration is now picked up when it becomes known -
Frontend→ OniOSthe file dialog stopped responding after a few
uploads. Picking the same file twice raised no event, and each preview held its
audio in memory for the rest of the session, so repeated picks exhausted the
browser. File inputs now reset between picks and previews are released once
nothing shows them -
Launcher→DownandDownload Datain theGUI'sModal Hostpanel
opened a second application window and hung indefinitely. The packaged app
embedsPython, so themodalCLI could not be run the way those two actions
ran it.Download Datanow streams the volume directly andDownstops the app
in-process, so neither spawns anything -
Launcher→ TheModal Hostpanel's mode pills kept whatever was true
when the panel first opened, so a change made inSettingswas not reflected on
returning to it. They are re-read on every visit, as theDashboardalready did -
CLI→mirumoji modal logs --tailaccepted counts themodalCLI
rejects, surfacing its raw usage text. It is bounded to the accepted range, also
takes-t, and states that it does not apply with--follow -
Server→ Video conversions, saved clips andAnkiexports were mirrored
to theModalvolume repeatedly while they were still being written, re-copying
the same output several times over. Each is now written aside and moved into
place when finished, so it is copied once -
Server→ Ordinary outcomes were logged as failures. A stale reference
from the interface produced a databaseERRORand a full traceback on every
attempt, burying real problems. Only genuine failures are logged that way now -
Server→ Deleting a task that was already gone failed instead of
succeeding, which left the interface unable to clear it. Deleting a task that no
longer exists now succeeds -
Server→ A cancelled upload was recorded as a server failure rather than
as the deliberate action it is