From 793a75b8a2301904e2c0542d050c0afdce3eef00 Mon Sep 17 00:00:00 2001 From: Gmer4Lfe Date: Fri, 14 Aug 2026 17:38:48 -0400 Subject: [PATCH] Remember the last ten manual syncs so a repeat is one click MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Retyping two paths and nine checkboxes correctly every time is where the mistakes come from, and "one-off" described how a transfer is scheduled rather than how often it is run. Pinned entries are exempt from the rotation — the command used twice a year is both the most worth keeping and the first that ten ordinary runs evict. Stored server-side, so the list is there from any screen, and loading one fills the form and stops rather than running it. --- Plugin/unraid/api/manual_sync.php | 138 +++++++++++++++++++++++++++++- Plugin/unraid/pages/rsync.php | 133 ++++++++++++++++++++++++++++ 2 files changed, 268 insertions(+), 3 deletions(-) diff --git a/Plugin/unraid/api/manual_sync.php b/Plugin/unraid/api/manual_sync.php index b7fbcbf..c203ffc 100644 --- a/Plugin/unraid/api/manual_sync.php +++ b/Plugin/unraid/api/manual_sync.php @@ -8,10 +8,17 @@ // OPERATIONAL MODEL // Entirely outside the profile system. The scheduled tiers sync configured shares with // configured profiles; this is for the one-off move that does not belong in a conf file — -// seeding a new host, recovering a share, copying something once. Nothing here is recorded, -// scheduled, or repeated. +// seeding a new host, recovering a share, copying something once. Nothing here is scheduled. // -// Six actions on one URL, in the order the panel uses them: hosts, browse, browse_local, +// The last ten are remembered, which the header used to deny. "One-off" turned out to describe +// how a transfer is scheduled, not how often it is run: seeding a host and recovering a share +// are done repeatedly, and retyping two paths and nine checkboxes correctly each time is where +// the mistakes come from. Pinned entries are exempt from the rotation, because the command used +// twice a year is both the most valuable to keep and the first that ten ordinary runs evict. +// Recording is a record of intent only — nothing re-runs itself, and loading an entry fills the +// form and stops. +// +// Eight actions on one URL, in the order the panel uses them: recent, hosts, browse, browse_local, // run, poll, stop. run returns a token immediately and the transfer continues detached; poll // reads its log until a sentinel appears; stop kills it. // @@ -105,6 +112,9 @@ // [user=root] [bw_limit=] [use_key=0|1] [flags=] // GET ?action=poll&token= output so far, and whether it finished // POST action=stop token= cancel a running transfer +// GET ?action=recent the remembered syncs, pinned first then newest +// POST action=recent_update id= op=rename|sticky|delete +// [name=