summaryrefslogtreecommitdiff
path: root/Hutch/Views/Pastes
Commit message (Collapse)AuthorAgeFilesLines
* fix: blank mailing list from Projects, swipe flicker, hidden uploadChristian Cleberg2026-07-161-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Three problems from manual testing. Opening a mailing list from More → Projects showed a blank screen, while the same tap on a project pinned to Home worked. handleTabNavigation reset the target path and appended to it two Task.yields later. When the target tab is already on screen — Projects lives under More — the reset starts an animated pop of the view the user is standing on and the appends land mid-animation. From Home the tab actually changes, so the More stack is quiescent and the appends land cleanly. Each case now builds its path and assigns it once, so SwiftUI gets a single diff with nothing to race. Destructive swipe actions made the row vanish and spring back while the confirmation was still up. role: .destructive makes SwiftUI perform the row removal on activation, which allowsFullSwipe: false does not prevent — the report was a tap, not a full swipe. These buttons only record pending state and wait for an answer, so they are plain buttons tinted red instead. Six sites: the two added here, plus trackers, pastes, and tracker ACLs and labels, which had the same flicker already. The artifacts upload control was invisible. It was declared as a toolbar item from a view that is a segment inside RepositoryDetailView's tab switch rather than its own navigation destination, so it never reached the navigation bar. It is a row in the list now, and also an action on the empty state — the overlay covers the list, and a repository with no artifacts is precisely the one that needs uploading.
* feat(cache): persist read-only API responsesv3.3.1Christian Cleberg2026-05-061-1/+1
| | | | | | | | | | | | Add a bounded stale-while-revalidate cache at the Sourcehut API boundary with stable keys, centralized TTLs, request coalescing, payload hashing, and LRU disk pruning. Cache high-value read-only repo, build, ticket, project, profile, paste, and Home/Work Queue data while keeping mutations network-only and invalidating related prefixes after successful writes. Add focused cache tests and implementation notes.
* fix: more sonarqube quality fixesv3.1.5Christian Cleberg2026-04-131-4/+4
|
* fix: sonarqube code smell fixesv3.1.4Christian Cleberg2026-04-133-17/+17
|
* feat(theme): AMOLED true-black rows via themedRow()Christian Cleberg2026-04-132-0/+16
| | | | | | | | | | Apply listRowBackground(Color.black) per row in AMOLED mode using ThemedRowStyle and themedRow() across Lists and Forms. Use themedList() for scroll/grouped backgrounds. Treat segmented and clear list rows with isAMOLED-aware listRowBackground where Color.clear was required. Removes reliance on UIKit appearance for list cells on iOS 16+. Implements: https://todo.sr.ht/~ccleberg/hutch/24
* feat: redesign paste detail view as full-screen file viewerChristian Cleberg2026-04-131-65/+235
| | | | | | | | | | | | Replaces the list-based layout with a full-screen viewer that matches the repository file tree pattern. File contents are now the primary focus using CodeFileTextView (line numbers, wrap toggle). A compact sticky header shows the filename, visibility badge, owner, date, and abbreviated hash. Paste metadata moves to a Details sheet accessible via the bottom toolbar. Duplicate share buttons are consolidated: link sharing lives in the ··· menu and content sharing is in the toolbar. Fixes: https://todo.sr.ht/~ccleberg/hutch/13
* perf: cache filtered collections and add equatable row viewsChristian Cleberg2026-04-132-9/+22
| | | | | | | | | | | | | | | | Convert filteredJobs, filteredPastes, and filteredTickets from computed properties to stored properties updated via didSet on their inputs. Each update function guards with an equality check before assigning, so @Observable skips the notification when the filtered result hasn't changed — preventing list re-renders on auto-refresh when no visible data has actually changed. Add Equatable conformance to BuildRowView, PasteRowView, TicketRowView, and SelectableTicketRow, and apply .equatable() at each ForEach call site. When a list does re-render, SwiftUI now skips body evaluation for rows whose model value is identical to the previous pass. Implements: https://todo.sr.ht/~ccleberg/hutch/57
* feat: add multi-account supportChristian Cleberg2026-04-121-1/+1
| | | | | | Implements: https://todo.sr.ht/~ccleberg/hutch/49 Implements: https://todo.sr.ht/~ccleberg/hutch/50 Implements: https://todo.sr.ht/~ccleberg/hutch/51
* feat: add theme and high-density display modesChristian Cleberg2026-04-122-0/+2
| | | | | Refs: https://todo.sr.ht/~ccleberg/hutch/24 Implements: https://todo.sr.ht/~ccleberg/hutch/25
* fix: add nested comments to satisfy sonar rule swift:S1186Christian Cleberg2026-03-241-1/+3
|
* feat: swipe actions on tickets, pastes, builds, and home dashboardChristian Cleberg2026-03-222-1/+117
|
* feat: add search to builds, trackers, tickets, pastes, mailing lists, and inboxChristian Cleberg2026-03-222-0/+19
|
* v2.1: bundled polish and fixesChristian Cleberg2026-03-192-7/+7
|
* feat: implement support for projects, lists, and pastesChristian Cleberg2026-03-194-0/+791