From 2946969543b9fc68cb41abd5d237f0292c105e0c Mon Sep 17 00:00:00 2001 From: Erik Brinkman Date: Wed, 14 Oct 2026 11:40:04 -0400 Subject: [PATCH] feat: upgrade galore --- .github/workflows/build.yml | 1 + PLAN.md | 197 ++++- .../{OFL-Fraunces.txt => OFL-Literata.txt} | 2 +- .../kotlin/cc/hafa/reader/MainActivity.kt | 2 +- .../cc/hafa/reader/ReaderApplication.kt | 6 +- .../cc/hafa/reader/data/RoomReaderStore.kt | 9 + .../hafa/reader/sync/FirestoreAccountStore.kt | 5 +- .../kotlin/cc/hafa/reader/ui/AccountScreen.kt | 9 +- .../kotlin/cc/hafa/reader/ui/AddFeedScreen.kt | 31 +- .../kotlin/cc/hafa/reader/ui/ArticleScreen.kt | 55 +- .../main/kotlin/cc/hafa/reader/ui/ChipRows.kt | 74 ++ .../kotlin/cc/hafa/reader/ui/Components.kt | 148 +++- .../main/kotlin/cc/hafa/reader/ui/DueDot.kt | 61 ++ .../kotlin/cc/hafa/reader/ui/EntryList.kt | 53 +- .../kotlin/cc/hafa/reader/ui/ReaderScreen.kt | 42 +- .../cc/hafa/reader/ui/ReaderViewModel.kt | 84 +- .../cc/hafa/reader/ui/SettingsScreen.kt | 138 ++-- .../main/kotlin/cc/hafa/reader/ui/Sidebar.kt | 13 +- .../main/kotlin/cc/hafa/reader/ui/Theme.kt | 66 +- .../src/main/res/drawable/sleeping_dot.xml | 31 - android/app/src/main/res/font/fraunces.ttf | Bin 360440 -> 0 bytes android/app/src/main/res/font/literata.ttf | Bin 0 -> 342600 bytes .../app/src/main/res/font/literata_italic.ttf | Bin 0 -> 330236 bytes android/app/src/main/res/font/public_sans.ttf | Bin 103316 -> 96864 bytes .../src/main/res/font/public_sans_italic.ttf | Bin 0 -> 101104 bytes android/app/src/main/res/values/strings.xml | 21 +- .../kotlin/cc/hafa/reader/core/CheckQueue.kt | 20 +- .../kotlin/cc/hafa/reader/core/FeedCheck.kt | 99 ++- .../kotlin/cc/hafa/reader/core/FeedSearch.kt | 13 +- .../main/kotlin/cc/hafa/reader/core/Filter.kt | 86 ++- .../cc/hafa/reader/core/HttpsUpgrade.kt | 163 ++++ .../kotlin/cc/hafa/reader/core/LoadGate.kt | 111 +++ .../main/kotlin/cc/hafa/reader/core/Model.kt | 12 + .../main/kotlin/cc/hafa/reader/core/Opml.kt | 9 +- .../kotlin/cc/hafa/reader/core/ReaderModel.kt | 481 +++++++++--- .../kotlin/cc/hafa/reader/core/ReaderView.kt | 64 +- .../kotlin/cc/hafa/reader/core/Resolve.kt | 7 +- .../kotlin/cc/hafa/reader/core/Schedule.kt | 18 + .../kotlin/cc/hafa/reader/core/TopicRows.kt | 28 + .../cc/hafa/reader/core/sync/AccountStore.kt | 2 +- .../cc/hafa/reader/core/sync/Documents.kt | 5 +- .../kotlin/cc/hafa/reader/core/sync/Engine.kt | 39 +- .../kotlin/cc/hafa/reader/core/sync/Host.kt | 2 + .../cc/hafa/reader/core/sync/Session.kt | 26 + .../cc/hafa/reader/core/CheckQueueTest.kt | 17 + .../cc/hafa/reader/core/FeedSearchTest.kt | 11 +- .../kotlin/cc/hafa/reader/core/FilterTest.kt | 35 + .../cc/hafa/reader/core/HttpsRedirectTest.kt | 21 +- .../cc/hafa/reader/core/HttpsUpgradeTest.kt | 141 ++++ .../cc/hafa/reader/core/LoadGateTest.kt | 93 +++ .../cc/hafa/reader/core/NormalizeUrlTest.kt | 15 +- .../kotlin/cc/hafa/reader/core/OpmlTest.kt | 8 +- .../cc/hafa/reader/core/ReaderModelTest.kt | 303 +++++++- .../cc/hafa/reader/core/ScheduleTest.kt | 25 + .../kotlin/cc/hafa/reader/core/TestDoubles.kt | 1 + .../cc/hafa/reader/core/TopicRowsTest.kt | 30 + .../cc/hafa/reader/core/sync/DocumentsTest.kt | 4 +- .../hafa/reader/core/sync/SyncEngineTest.kt | 4 +- android/scripts/cut-fonts.sh | 45 ++ extension/README.md | 8 + extension/manifest.json | 3 + extension/package.json | 1 + extension/src/background.test.ts | 246 ++++++ extension/src/background.ts | 68 +- shared/fixtures/https.json | 111 +++ shared/fixtures/ids.json | 12 + shared/src/check.test.ts | 76 ++ shared/src/check.ts | 59 +- shared/src/filter.test.ts | 39 + shared/src/filter.ts | 85 ++- shared/src/https.test.ts | 202 +++++ shared/src/https.ts | 230 ++++++ shared/src/protocol.ts | 16 +- shared/src/schedule.test.ts | 11 + shared/src/schedule.ts | 21 + web/bun.lock | 4 +- web/package.json | 2 +- web/src/app.css | 8 +- web/src/lib/components/add-feed.svelte | 33 +- web/src/lib/components/add-pane.svelte | 2 +- web/src/lib/components/article.svelte | 82 +- web/src/lib/components/chip-rows.svelte | 62 ++ web/src/lib/components/confirm-button.svelte | 51 ++ web/src/lib/components/due-dot.svelte | 7 + web/src/lib/components/empty-list.svelte | 30 - web/src/lib/components/entry-card.svelte | 7 +- web/src/lib/components/entry-list.svelte | 121 +-- .../lib/components/install-extension.svelte | 2 +- web/src/lib/components/ios-unavailable.svelte | 4 +- web/src/lib/components/segmented.svelte | 10 +- web/src/lib/components/settings-pane.svelte | 198 +++-- web/src/lib/components/shortcuts-pane.svelte | 43 +- web/src/lib/components/sidebar.svelte | 18 +- web/src/lib/components/text-field.svelte | 47 ++ web/src/lib/components/topic-chip.svelte | 44 ++ web/src/lib/copy.ts | 41 +- web/src/lib/extension.svelte.ts | 11 +- web/src/lib/load-gate.test.ts | 92 +++ web/src/lib/load-gate.ts | 115 +++ web/src/lib/opml.test.ts | 49 +- web/src/lib/opml.ts | 9 +- web/src/lib/reader.svelte.ts | 722 ++++++++++++++++-- web/src/lib/reader.test.ts | 699 ++++++++++++++++- web/src/lib/reading-font.test.ts | 31 + web/src/lib/reading-font.ts | 32 + web/src/lib/sync.svelte.ts | 11 + web/src/lib/sync.test.ts | 6 + web/src/lib/sync/documents.test.ts | 4 +- web/src/lib/sync/documents.ts | 5 +- web/src/lib/sync/firebase.ts | 33 + web/src/lib/sync/host.ts | 2 + web/src/lib/topic-rows.test.ts | 13 + web/src/lib/topic-rows.ts | 64 ++ web/src/lib/track.test.ts | 68 ++ web/src/lib/track.ts | 43 ++ web/src/lib/urls.test.ts | 10 +- web/src/lib/urls.ts | 7 +- web/src/routes/(policy)/privacy/+page.svelte | 26 +- web/src/routes/+layout.svelte | 4 +- web/src/routes/+page.svelte | 35 +- 120 files changed, 6190 insertions(+), 891 deletions(-) rename android/app/src/main/assets/licenses/{OFL-Fraunces.txt => OFL-Literata.txt} (97%) create mode 100644 android/app/src/main/kotlin/cc/hafa/reader/ui/ChipRows.kt create mode 100644 android/app/src/main/kotlin/cc/hafa/reader/ui/DueDot.kt delete mode 100644 android/app/src/main/res/drawable/sleeping_dot.xml delete mode 100644 android/app/src/main/res/font/fraunces.ttf create mode 100644 android/app/src/main/res/font/literata.ttf create mode 100644 android/app/src/main/res/font/literata_italic.ttf create mode 100644 android/app/src/main/res/font/public_sans_italic.ttf create mode 100644 android/core/src/main/kotlin/cc/hafa/reader/core/HttpsUpgrade.kt create mode 100644 android/core/src/main/kotlin/cc/hafa/reader/core/LoadGate.kt create mode 100644 android/core/src/main/kotlin/cc/hafa/reader/core/TopicRows.kt create mode 100644 android/core/src/test/kotlin/cc/hafa/reader/core/HttpsUpgradeTest.kt create mode 100644 android/core/src/test/kotlin/cc/hafa/reader/core/LoadGateTest.kt create mode 100644 android/core/src/test/kotlin/cc/hafa/reader/core/TopicRowsTest.kt create mode 100755 android/scripts/cut-fonts.sh create mode 100644 extension/src/background.test.ts create mode 100644 shared/fixtures/https.json create mode 100644 shared/src/https.test.ts create mode 100644 shared/src/https.ts create mode 100644 web/src/lib/components/chip-rows.svelte create mode 100644 web/src/lib/components/confirm-button.svelte create mode 100644 web/src/lib/components/due-dot.svelte delete mode 100644 web/src/lib/components/empty-list.svelte create mode 100644 web/src/lib/components/text-field.svelte create mode 100644 web/src/lib/components/topic-chip.svelte create mode 100644 web/src/lib/load-gate.test.ts create mode 100644 web/src/lib/load-gate.ts create mode 100644 web/src/lib/reading-font.test.ts create mode 100644 web/src/lib/reading-font.ts create mode 100644 web/src/lib/topic-rows.test.ts create mode 100644 web/src/lib/topic-rows.ts create mode 100644 web/src/lib/track.test.ts create mode 100644 web/src/lib/track.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6a73a66..b56d578 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,6 +92,7 @@ jobs: working-directory: shared - run: bun install --frozen-lockfile - run: bun lint + - run: bun test - run: bun pack - uses: actions/upload-artifact@v7 with: diff --git a/PLAN.md b/PLAN.md index d115843..867caa9 100644 --- a/PLAN.md +++ b/PLAN.md @@ -30,12 +30,58 @@ fetches feeds itself and syncs through Firebase. - **Formats:** RSS 2.0, Atom and JSON Feed. - **Images:** never stored. The article keeps the image URL and the reader loads it from the original site. -- **https only:** no plain http anywhere. Addresses typed or imported as - `http://` are rewritten to `https://` before the first try (a feed that then - fails shows as failing); feed, site, icon and image addresses from feeds are - kept only when https (http upgraded); links and pictures in article text are - upgraded to https, and a picture that cannot load over https is dropped. The - web app's content policy loads pictures and media from https and data only. +- **https only:** no plain http is ever fetched. An `http://` address typed + or pasted is refused ("Reader can't add http addresses. Try https + instead."). Any other plain http feed (one listed in an OPML file, a Feedly + search result, or a followed feed saved with http, as older devices and + accounts hold) is tried at its https address (`shared/src/https.ts`, ported + in `android/core/.../HttpsUpgrade.kt`, cases in `shared/fixtures/https.json`): + it counts only when the answer is a 200 that stays on https, parses as a + feed, and looks like the same feed (the same name ignoring capitals and + spacing, an article in common by guid or link, or a site on the same host as + the known site or the http address, ignoring `www.`; a feed the person + renamed is not compared by name, since its own name is not kept). An + imported feed that passes is added at https and one that fails is left out + and counted; a search result that fails is not shown. An address whose host + is not a public name (an IP address or a number browsers read as one, a + name of one label, `localhost`, or a name under `.local`, `.internal`, + `.home.arpa` or `.lan`), or that has a user name or password, is never + tried and fails (`probeAllowed`), since these addresses come from files, + searches and accounts, not from the person, and trying them must not reach + the device or its network. A followed http feed + is never put on the schedule and never counts as due; each one is tried once + each time the app starts (alongside its checks of due feeds), at most six + at once, and again on each later refresh while its tries get no definite + answer (no answer at all, as offline or after a timeout, or a 408, 425, 429 + or 5xx), at most three tries without one (`UNSETTLED_TRIES`) until the app + starts again. Background checks (the extension's timer, Android's WorkManager) + never try them; the app does it when it opens. One that passes keeps its id + (so its articles, marks, settings and group stay), takes the https address + as a change of its own (`updatedAt`, sent to the account, so other devices + move too) and takes the answer as its first check (on the web the answer + goes to the extension with the feed's address, as `first`, and starts its + schedule, as an added feed's answer does; answers that would make one + message larger than 8 MiB of JSON are spread over several `track` + messages, each listing every feed; the extension skips a `first` that is + not a fetch's answer and leaves that feed due); one that fails, or whose https + address is already followed, shows "This feed's address is http, not + https, so Reader can't fetch it." A redirect from https to plain http is + followed at the https form of its address, never at http (the extension's + content policy has `upgrade-insecure-requests`, which browsers apply to + every redirect; Android follows such redirects itself), and fails when + nothing answers there. A site that sends its https address back to http + then loops; the extension tells that from no answer by asking the address + again without following redirects, and reports a redirect answer as not on + https, a definite answer ("The feed is not on https." when adding). A feed's id is therefore the hash of the + address it was first followed at, so adding and importing also treat a feed + whose address matches as already followed, including one followed at the + http form of the address; adding that https address moves such a feed there + when it passes the same comparison, and otherwise adds the https feed as a + feed of its own beside it. Feed, site, icon and image + addresses from feeds are kept only when https (http upgraded); links and + pictures in article text are upgraded to https, and a picture that cannot + load over https is dropped. The web app's content policy loads pictures and + media from https and data only. ## Data model @@ -184,9 +230,13 @@ from a device. over the weekend and quiet hours are skipped. Waits range from 15 minutes to 7 days, never shorter than the site's `Retry-After` or `Cache-Control: max-age`, and a failing feed backs off from 15 minutes by doubling, or longer when the - site asks. Opening the app and the refresh control force a check of every - feed, so freshness comes from the reader and the schedule only has to avoid - missing posts. Every fetch sends `ETag` and `If-Modified-Since`; a `304` ends + site asks. Opening the app queues a check of every feed that is due, + without waiting for it and without showing a refresh (the web sends + `checkDue`, which the extension answers as soon as the checks are queued, + then takes in what the extension found while the app was closed; the + results land through the usual drain), and the refresh controls force a + check of the feeds they cover, so freshness comes from the reader and the + schedule only has to avoid missing posts. Every fetch sends `ETag` and `If-Modified-Since`; a `304` ends it. The chance a feed has news since its last successful check is `1 - (beta / (beta + activity))^alpha` over the expected activity since then; a feed never checked counts as one, a failing feed as 0.5 if it is due and @@ -241,7 +291,8 @@ decides). Web with the extension closed gets nothing until a device opens. store) and synced like entries. The panel opens where the article does, and as a full page on a phone. It holds sort (Newest or Oldest), words and topics (Starred has only the sort); the unread-only switch is in the list's - bar, not here. A feed's panel also has its group and Unsubscribe. + bar, not here. A feed's panel also has its group and Unsubscribe. The panel + also holds the reading font, which is one choice for the whole app (see below). - **Words and topics** (`shared/src/filter.ts`): type a word or phrase and press Enter; two buttons choose whether new words hide matching articles or, once any "only show" word exists, keep only articles that have one. Words match the title @@ -249,7 +300,14 @@ decides). Web with the extension closed gets nothing until a device opens. whitespace matches any whitespace, a word boundary is required at an end only when that end is a word character, and each list is compiled once. Every topic the feed supplies starts on; tap one to turn it off, and an article whose - topics are all off is hidden. Chips never move when toggled. A feed's own + topics are all off is hidden. Every list of topics or words (the panel's + words and topics, and an article's topics, on Starred too) is ordered by how + many of the view's articles carry or match each (most first, then by name; an + article lists each of its topics once), wrapping into up to three rows; when + they need more, they go in three rows read down each column and scroll + sideways. Chips never move when toggled. On a phone each topic chip, and + each word's remove button, takes taps 44 pixels tall (48 dp on Android) + around its smaller outline; both lists use the same chip. A feed's own settings also apply in every group and view it appears in. - **Managing feeds and groups:** a feed's panel has its name (rename), a group field (type a name, with the existing groups suggested; empty for no group) and @@ -266,41 +324,108 @@ decides). Web with the extension closed gets nothing until a device opens. profiles, Mastodon profiles. YouTube `@handle` pages are found through their page link. Any other text searches Feedly's public feed search through the extension (a dependency to watch: it is not a documented open API and the - query goes to Feedly). -- **OPML import:** drop a file on the panel or choose one; folders are kept; - unusable addresses are skipped; the panel says when a file lists nothing or - nothing new. + query goes to Feedly). A result listed at plain http is tried at its https + address before it is shown (see https only), so searching can contact the + sites of up to eight results the person never picked. +- **OPML import:** drop a file on the panel or choose one; an "Add to group" + field above it, the same type-or-pick field as a feed's group, puts all the + imported feeds in the group named (made if new); left empty ("Folders from + the file") it keeps the file's own folders; + unusable addresses are skipped; plain http feeds go as https only (see https + only) and the panel counts those left out; it says when a file lists nothing + or nothing new. A file's `htmlUrl` is kept as the feed's site, and written + back on export. - **Feed pictures:** the feed's own icon, else the site's `/favicon.ico`, else a letter tile. The sidebar rows keep one icon column in both states. - **Refreshing:** the Reader name goes to All items and checks every feed, as does `Shift R`; clicking the row of the view you are in, the `r` key and pulling the list down from its top on a phone check the feeds of that view, as does the - Refresh button in the footer that ends every non-empty list ("End of list" - and Refresh, shown once every row is drawn); there is no Refresh - button in the bars and no gesture at the bottom. Opening the app checks every feed. A refresh drops the read articles + Refresh bar that ends every non-empty list (shown once every row is drawn); + there is no Refresh button in the bars and no gesture at the bottom. Opening + the app checks only the feeds that are due, in the background: nothing turns, + the logo does not pulse, the list keeps its rows and Refresh stays usable. A + refresh drops the read articles kept in the list as soon as it starts; on a phone the list shows a turning - marker until it ends. + marker until it ends. Only a refresh the person asks for shows: an import's + first check of its feeds runs behind the loading screen, and every other + check and every change from the account lands unseen. - **Unread only:** one switch for the whole app, an eye button in the list's bar (at the bottom on a phone), on by default; it lists only unread articles in every feed and group (not in Starred) and hides feeds in the sidebar that have nothing unread (the one you are viewing stays). Changing view closes the open article. A failed feed is not colored: after two failures in a row a small muted marker appears, with the reason in the feed's panel and in a band at the top of its list. +- **Reading font:** Literata (the default) or Public Sans, chosen in every view's + panel and applied everywhere. It sets article text, article titles and the + large page headings; the rest of the interface is always Public Sans, and + counts, bylines and code use the system monospace. It is kept on the device + only (`h-reader:reading-font` in the web's local storage, the `reader` shared + preferences on Android, both `literata` or `public-sans`) and is not synced. + The web serves both fonts from the app's own site (fontsource variable + weights, upright and italic; the browser fetches only the scripts and styles + a page uses), so every script fontsource offers (Latin, Cyrillic, Greek, + Vietnamese) is covered. Android bundles both, upright and italic, cut with + fonttools from Google Fonts' variable files by `android/scripts/cut-fonts.sh` + (pinned sources; run it again to remake `res/font`): weights 400 to 800, + Literata's optical size fixed at 12 pt, and Literata kept to Basic Latin, + Latin-1, Latin Extended-A and B, Vietnamese, combining marks, general + punctuation, currency signs, modern Greek and the Cyrillic of Russian, + Ukrainian, Belarusian, Bulgarian, Serbian and Macedonian (Public Sans has + Latin only and keeps every glyph). Polytonic Greek, other Cyrillic, and + Greek and Cyrillic in Public Sans fall back to the system font. - **Speed:** the list draws only the first 60 rows and more as the end nears; sorting and the word and topic filters are computed once per change, not per - toggle. With 20,000 articles, toggling unread only takes about 60 ms, all on + toggle. The view's topic and word counts, and the topic order each row + looks its topics up in, are worked out once per view and kept while only + read or starred marks change. With 20,000 articles, toggling unread only takes about 60 ms, all on the main thread. - **Reading state:** opening an article does not mark - it read, leaving it does; read articles stay listed until the view changes; + it read, leaving it does; read articles, here or on another device, stay + listed until the view changes; stepping past either end closes the article. - **Sidebar order:** groups come first, then loose feeds; each list is ordered by unread count (most first), then working before failing, then by name; the feeds inside a group follow the same rule, and a group counts as failing only when all of its feeds - do. The `[` and `]` keys follow the same order. The order is worked out at - load and again after each refresh, and holds in between; counts still update live, and feeds added - later go after the rest. -- **Loading logo:** the logo pulses while the app loads, feeds refresh, or a feed is - being added (not with reduced motion). + do. The `[` and `]` keys follow the same order. The order is worked out when + the loading screen lets the person in and again after each refresh they ask + for (not after the checks made on opening), and holds in between; counts + still update live, and feeds added later go after the rest. +- **Loading logo:** the sidebar logo pulses while feeds refresh at the + person's request or a feed is being added (not with reduced motion). +- **Loading screen:** while what is loading can still change the lists, an + opaque screen covers the app and takes every tap, key and swipe (Back still + leaves the app from the list on Android): at opening, while stored data is + read (and, on the web, the extension is found and what it fetched while the + app was closed is taken in); while the account's data arrives, at opening + when signed in and after signing in or replacing this device's data, until + its feeds and settings have come from the server, the entry listener's first + changes are stored and the first pass has the last 90 days (sync offline, + failing or waiting for a choice does not hold it); and after an import, + until its feeds' first check is in. It is blank for its first 300 ms, so an + instant load shows nothing, then shows the turning logo for at least 700 ms; + after 15 s it lets the person in whatever is still loading, which goes on + unseen. Each time it lets the person in, the lists are settled: the article + list and the sidebar take in everything that has arrived and the sidebar + order is worked out again. The state machine is `web/src/lib/load-gate.ts` + and `android/core/.../LoadGate.kt`, with the same timing and tests. +- **No pop-in:** once the person is in, articles and feeds that arrive in the + background (checks, the extension's drains, WorkManager, the account) wait + for the lists to be settled: the article list takes them in when the view + changes, unread only is switched, or a refresh the person asked for ends; the + sidebar when unread only is switched or such a refresh ends. A feed the + sidebar does not list (nothing unread under unread only) stays out when its + articles arrive, and an article read on another device stays listed until + the view changes, as one read here does. A list or sidebar that shows + nothing takes in what arrives, since no row can move; a feed the person adds + shows at once. Unread counts still change as marks and articles arrive. +- **Refresh dot:** a small accent dot on the sidebar logo and on the phone's menu + button ("Some feeds are due for a check") says a refresh would help: a feed's + scheduled check is more than 30 minutes late (`OVERDUE_MS`, twice the shortest + wait, so the background timers normally get there first) and nothing is + checking feeds. It is worked out from the earliest next check, one pass per + change and one timer, and clears once a refresh has saved the late feeds. The + web learns each feed's next check, and whether the extension is checking, from + its drain replies. - **First run:** with no feeds, the reader asks for a first feed and, below that, offers sign-in ("Already use Reader?" and a "Sign in to sync your feeds" button, the same sign-in as the sidebar's), for someone whose feeds @@ -327,7 +452,8 @@ decides). Web with the extension closed gets nothing until a device opens. such readers break when the site changes. - **Navigation:** one page app; the extension plays the part a service worker does for a PWA (fetching, schedule, background). On a phone the menu button in the - list's bottom bar opens the feed list over the articles (the title is plain text), + list's bottom bar opens the feed list over the articles, as does tapping the view's name + beside it ("Show feeds"), as does a swipe in from the left edge on the web (the Android app opens it only from the button, since a sideways swipe on a card marks it read); moving between the article list and an article adds browser history entries, so Back steps out. On Android, Back on the article list @@ -340,7 +466,11 @@ decides). Web with the extension closed gets nothing until a device opens. read, share and open the original, which on a phone appear only there; view settings, add feed and sync have Back and the screen's name. On Android the bars slide away while scrolling down and come back on the way up, on every new screen or article, and - whenever the article is too short to scroll. Wide screens keep the bars at the top. + whenever the article is too short to scroll; there every scrolling screen ends with + room for the bar's full height and a margin, the same whether the bar is shown or + not, so the end clears the bar and there is room to scroll back up and bring it back. + The web's bars always show and sit below the content, so it needs no such room. Wide + screens keep the bars at the top. - **Gestures (phone):** swipe a card sideways to mark it read or unread; swipe an article left or right and it slides to the next or previous one in the list's order (a pager on Android); a swipe of at least 90 pixels (90 dp on Android) past the first or last slides @@ -348,11 +478,12 @@ decides). Web with the extension closed gets nothing until a device opens. while a shorter one springs back; pull down at the top of the list to check the view's feeds (Material's pull to refresh on Android, the same marker on the web). -- **End of list:** the last row of a list that has articles says "End of list" and - has a "Refresh" button that checks the view's feeds as pulling down does; while - they are checked the button keeps its label, is disabled and its icon turns - (still when the system or browser turns motion off). It sits above the bottom - bar; there is no pull-up gesture. +- **End of list:** the last row of a list that has articles is a full-width + "Refresh" bar, tappable anywhere across it, that checks the view's feeds as + pulling down does; while they are checked it keeps its label, is disabled and + its icon turns (still when the system or browser turns motion off). It sits + above the bottom bar; there is no pull-up gesture. A list with no articles + shows only a line of text, with no picture. - **Sidebar:** a brand header (the icon and "Reader") stays in place while the sidebar collapses to an icon strip, which opens over the list when hovered; icons and rows keep their positions so the change is a smooth width and fade. diff --git a/android/app/src/main/assets/licenses/OFL-Fraunces.txt b/android/app/src/main/assets/licenses/OFL-Literata.txt similarity index 97% rename from android/app/src/main/assets/licenses/OFL-Fraunces.txt rename to android/app/src/main/assets/licenses/OFL-Literata.txt index 22fa7ce..9d3b4e3 100644 --- a/android/app/src/main/assets/licenses/OFL-Fraunces.txt +++ b/android/app/src/main/assets/licenses/OFL-Literata.txt @@ -1,4 +1,4 @@ -Copyright 2018 The Fraunces Project Authors (https://github.com/undercasetype/Fraunces) +Copyright 2017 The Literata Project Authors (https://github.com/googlefonts/literata) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: diff --git a/android/app/src/main/kotlin/cc/hafa/reader/MainActivity.kt b/android/app/src/main/kotlin/cc/hafa/reader/MainActivity.kt index c1d4713..9af932c 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/MainActivity.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/MainActivity.kt @@ -18,7 +18,7 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { - ReaderTheme { + ReaderTheme(viewModel.readingFont) { ReaderScreen(viewModel) } } diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ReaderApplication.kt b/android/app/src/main/kotlin/cc/hafa/reader/ReaderApplication.kt index 882856d..2ea9c9b 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ReaderApplication.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ReaderApplication.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.util.Log import cc.hafa.reader.core.HttpFeedFetcher import cc.hafa.reader.core.ReaderModel +import cc.hafa.reader.core.ReaderPreferences import cc.hafa.reader.core.sync.SyncEngine import cc.hafa.reader.data.ReaderDatabase import cc.hafa.reader.data.RoomReaderStore @@ -51,11 +52,14 @@ class ReaderApplication : Application() { // Set once a screen shows, so sync listens to the account; a process started only to check feeds just uploads. private val onScreen = AtomicBoolean(false) + /** The reader's small choices on this device. */ + val preferences: ReaderPreferences by lazy { SharedReaderPreferences(this) } + /** Everything the reader holds, for the whole process. */ val model: ReaderModel by lazy { ReaderModel( store = RoomReaderStore(ReaderDatabase.open(this).dao()), - preferences = SharedReaderPreferences(this), + preferences = preferences, fetcher = HttpFeedFetcher(OkHttpClient()), scope = scope, onBackgroundWork = { RefreshWorker.finishInBackground(this) }, diff --git a/android/app/src/main/kotlin/cc/hafa/reader/data/RoomReaderStore.kt b/android/app/src/main/kotlin/cc/hafa/reader/data/RoomReaderStore.kt index 38098f9..04e0b16 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/data/RoomReaderStore.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/data/RoomReaderStore.kt @@ -7,6 +7,7 @@ import cc.hafa.reader.core.Feed import cc.hafa.reader.core.FeedModel import cc.hafa.reader.core.FeedSchedule import cc.hafa.reader.core.ReaderPreferences +import cc.hafa.reader.core.ReadingFont import cc.hafa.reader.core.ReaderStore import cc.hafa.reader.core.Sort import cc.hafa.reader.core.ViewSettings @@ -172,6 +173,10 @@ class RoomReaderStore(private val dao: ReaderDao) : ReaderStore { private const val UNREAD_KEY = "unread-only" private const val VIEW_KEY = "view" +private const val READING_FONT_KEY = "reading-font" +// stored values, the same as the web's +private const val LITERATA_VALUE = "literata" +private const val PUBLIC_SANS_VALUE = "public-sans" /** The reader's small choices in shared preferences. */ class SharedReaderPreferences(context: Context) : ReaderPreferences { @@ -184,4 +189,8 @@ class SharedReaderPreferences(context: Context) : ReaderPreferences { override var lastView: String get() = shared.getString(VIEW_KEY, null) ?: "all" set(value) = shared.edit { putString(VIEW_KEY, value) } + + override var readingFont: ReadingFont + get() = if (shared.getString(READING_FONT_KEY, null) == PUBLIC_SANS_VALUE) ReadingFont.PublicSans else ReadingFont.Literata + set(value) = shared.edit { putString(READING_FONT_KEY, if (value == ReadingFont.PublicSans) PUBLIC_SANS_VALUE else LITERATA_VALUE) } } diff --git a/android/app/src/main/kotlin/cc/hafa/reader/sync/FirestoreAccountStore.kt b/android/app/src/main/kotlin/cc/hafa/reader/sync/FirestoreAccountStore.kt index 42c66e9..34b7f53 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/sync/FirestoreAccountStore.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/sync/FirestoreAccountStore.kt @@ -39,6 +39,7 @@ import com.google.firebase.firestore.Source import kotlinx.coroutines.tasks.await import java.util.concurrent.Executor import java.util.concurrent.Executors +import java.util.concurrent.atomic.AtomicBoolean // Errors the rules or the data give, which no retry fixes. private val REFUSALS = setOf( @@ -146,6 +147,8 @@ class FirestoreAccountStore(private val db: FirebaseFirestore, private val uid: } override fun listenEntries(sinceMs: Long, onChanges: (List) -> Unit, onError: (Throwable) -> Unit): Stop { + // The first snapshot is passed on even when empty, so sync knows the listener has caught up. + val heard = AtomicBoolean(false) val registration = entries.whereGreaterThan("syncedAt", timestamp(sinceMs)).addSnapshotListener(snapshotExecutor) { snapshot, error -> if (error != null) { onError(error) @@ -153,7 +156,7 @@ class FirestoreAccountStore(private val db: FirebaseFirestore, private val uid: val changes = snapshot.documentChanges .filter { change -> change.type != DocumentChange.Type.REMOVED && !change.document.metadata.hasPendingWrites() } .map { change -> EntryChange(change.document.id, parseEntry(change.document.data), syncedAt(change.document)) } - if (changes.isNotEmpty()) { + if (changes.isNotEmpty() || heard.compareAndSet(false, true)) { onChanges(changes) } } diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/AccountScreen.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/AccountScreen.kt index 8ffd42d..613c52c 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/AccountScreen.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/AccountScreen.kt @@ -13,14 +13,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Login import androidx.compose.material.icons.automirrored.outlined.Logout @@ -194,11 +191,7 @@ fun AccountScreen(viewModel: ReaderViewModel) { bottomBar = { scrollBehavior -> BackBottomBar(stringResource(R.string.sync_heading), scrollBehavior, viewModel::back) }, ) { padding -> Column( - Modifier - .fillMaxSize() - .padding(padding) - .verticalScroll(rememberScrollState()) - .padding(horizontal = 20.dp, vertical = 24.dp), + Modifier.scrollingScreen(padding), verticalArrangement = Arrangement.spacedBy(12.dp), ) { if (report.status == SyncStatus.Waiting) { diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/AddFeedScreen.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/AddFeedScreen.kt index e7802ac..a01b400 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/AddFeedScreen.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/AddFeedScreen.kt @@ -7,17 +7,14 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Login import androidx.compose.material.icons.filled.Menu @@ -121,11 +118,7 @@ fun AddFeedScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { bottomBar = { scrollBehavior -> BackBottomBar(stringResource(R.string.add_feed), scrollBehavior, viewModel::back) }, ) { padding -> Column( - Modifier - .fillMaxSize() - .padding(padding) - .verticalScroll(rememberScrollState()) - .padding(horizontal = 20.dp, vertical = 24.dp), + Modifier.scrollingScreen(padding), verticalArrangement = Arrangement.spacedBy(24.dp), ) { AddFeedForm(snapshot, viewModel, first = false) @@ -151,11 +144,7 @@ fun FirstFeedScreen(snapshot: Snapshot, viewModel: ReaderViewModel, onMenu: () - val arriving = report.email.isNotEmpty() && !report.feedsKnown && report.status in setOf(SyncStatus.Connecting, SyncStatus.Syncing, SyncStatus.Synced) Column( - Modifier - .fillMaxSize() - .padding(padding) - .verticalScroll(rememberScrollState()) - .padding(24.dp), + Modifier.scrollingScreen(padding, margin = 24.dp), verticalArrangement = Arrangement.Center, ) { if (arriving) { @@ -186,6 +175,8 @@ private fun AddFeedForm(snapshot: Snapshot, viewModel: ReaderViewModel, first: B val adding = snapshot.state.adding // a topic search, as opposed to adding an address or a file var searching by remember { mutableStateOf(false) } + // the group imported feeds go into; blank keeps the file's folders + var importGroup by remember { mutableStateOf("") } // When an address could not be added and was searched for instead, finding nothing gives the address's problem. fun search(text: String, problem: FeedProblem? = null) { @@ -242,7 +233,7 @@ private fun AddFeedForm(snapshot: Snapshot, viewModel: ReaderViewModel, first: B if (source == null) { viewModel.notify(Notice.Text(R.string.import_failed)) } else { - viewModel.importOpml(source) + viewModel.importOpml(source, importGroup.trim().ifEmpty { null }) } } } @@ -269,7 +260,7 @@ private fun AddFeedForm(snapshot: Snapshot, viewModel: ReaderViewModel, first: B Column(verticalArrangement = Arrangement.spacedBy(24.dp)) { if (first) { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { - Text(stringResource(R.string.empty_title), fontFamily = Fraunces, fontWeight = FontWeight.Bold, fontSize = 24.sp) + Text(stringResource(R.string.empty_title), fontFamily = ReaderTheme.readingFamily, fontWeight = FontWeight.Bold, fontSize = 24.sp) Text(stringResource(R.string.empty_body), fontSize = 14.sp, lineHeight = 20.sp, color = colors.muted) } } @@ -349,8 +340,16 @@ private fun AddFeedForm(snapshot: Snapshot, viewModel: ReaderViewModel, first: B } HorizontalDivider(color = colors.line) Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { - Text(stringResource(R.string.import_title), fontFamily = Fraunces, fontWeight = FontWeight.Bold, fontSize = 18.sp) + Text(stringResource(R.string.import_title), fontFamily = ReaderTheme.readingFamily, fontWeight = FontWeight.Bold, fontSize = 18.sp) Text(stringResource(R.string.import_body), fontSize = 14.sp, lineHeight = 20.sp, color = colors.muted) + GroupField( + importGroup, + snapshot.view.folders, + label = stringResource(R.string.import_group_label), + placeholder = stringResource(R.string.import_keep_folders), + enabled = !adding, + onEdit = { group -> importGroup = group }, + ) val shape = RoundedCornerShape(12.dp) Column( Modifier diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/ArticleScreen.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/ArticleScreen.kt index 9afcc90..b85251d 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/ArticleScreen.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/ArticleScreen.kt @@ -13,8 +13,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -93,8 +91,8 @@ import androidx.compose.ui.unit.sp import cc.hafa.reader.R import cc.hafa.reader.core.Entry import cc.hafa.reader.core.Selection +import cc.hafa.reader.core.articleTopics import cc.hafa.reader.core.decodeHtmlEntities -import cc.hafa.reader.core.ViewSettings import cc.hafa.reader.core.showsLeadImage import cc.hafa.reader.core.topicOff import coil3.SingletonImageLoader @@ -306,21 +304,12 @@ private fun ArticlePage( start = padding.calculateStartPadding(layoutDirection) + side, end = padding.calculateEndPadding(layoutDirection) + side, top = 24.dp, - bottom = padding.calculateBottomPadding() + 32.dp, + bottom = scrollEndPadding(), ), verticalArrangement = Arrangement.spacedBy(16.dp), ) { item(key = "head") { Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { - val dateText = if (entry.dated) articleDate(entry.published) else "" - val feedTitle = state.feeds.firstOrNull { feed -> feed.id == entry.feedId }?.title ?: "" - val meta = listOf(feedTitle, entry.author, dateText).filter { part -> part.isNotEmpty() }.joinToString(" · ") - Text( - meta, - fontFamily = FontFamily.Monospace, - fontSize = 12.sp, lineHeight = 16.sp, - color = colors.muted, - ) val title = remember(entry.title, entry.url, colors) { if (entry.url.isEmpty()) { AnnotatedString(entry.title) @@ -335,12 +324,21 @@ private fun ArticlePage( } Text( title, - fontFamily = Fraunces, + fontFamily = ReaderTheme.readingFamily, fontWeight = FontWeight.Bold, fontSize = 30.sp, lineHeight = 36.sp, style = LocalTextStyle.current.copy(lineBreak = LineBreak.Heading), ) + val dateText = if (entry.dated) articleDate(entry.published) else "" + val feedTitle = state.feeds.firstOrNull { feed -> feed.id == entry.feedId }?.title ?: "" + val meta = listOf(feedTitle, entry.author, dateText).filter { part -> part.isNotEmpty() }.joinToString(" · ") + Text( + meta, + fontFamily = FontFamily.Monospace, + fontSize = 12.sp, lineHeight = 16.sp, + color = colors.muted, + ) } } if (showImage) { @@ -360,13 +358,18 @@ private fun ArticlePage( // The actions and topics wait for the body, so they do not show under the title and then jump down. if (split != null && entry.categories.isNotEmpty()) { item(key = "categories") { + val topics = remember(entry.categories, view.topicOrder) { articleTopics(entry.categories, view.topicOrder) } // Starred has no topic filter, so there the topics are plain labels. if (state.selection == Selection.Starred) { - Text(entry.categories.joinToString(" · "), fontSize = 12.sp, lineHeight = 16.sp, color = colors.muted) + ChipRows(topics) { topic -> TopicLabel(topic) } } else { // The chips read the view's settings, which change at once; only the list waits for a refresh. - CategoryChips(entry.categories, view.viewSettings) { topic -> - viewModel.model.toggleTopic(topic, fromArticle = true) + ChipRows(topics) { topic -> + TopicChip( + topic, + off = topicOff(view.viewSettings, topic), + onToggle = { viewModel.model.toggleTopic(topic, fromArticle = true) }, + ) } } } @@ -375,17 +378,6 @@ private fun ArticlePage( } } -/** The article's topics as filter chips; turning one off hides its articles from the view. */ -@OptIn(ExperimentalLayoutApi::class) -@Composable -private fun CategoryChips(categories: List, settings: ViewSettings, onToggle: (String) -> Unit) { - FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - for (category in categories) { - TopicChip(category, off = topicOff(settings, category), onToggle = { onToggle(category) }) - } - } -} - /** * The drag past the first or last page, which the pager leaves unused: the * pages follow it, and on release one of at least [threshold] pixels slides @@ -470,7 +462,7 @@ private fun BodyBlock(block: HtmlBlock) { val links = TextLinkStyles(SpanStyle(color = colors.accent)) val text = remember(block.html, links) { AnnotatedString.fromHtml(block.html, linkStyles = links) } val quoted = block.quoteDepth > 0 || block.kind == TextKind.Caption - val style = bodyStyle(block) + val style = bodyStyle(block, ReaderTheme.readingFamily) Row( Modifier .fillMaxWidth() @@ -530,8 +522,8 @@ private val HEADING_STYLES = listOf( TextStyle(fontSize = 16.sp, lineHeight = 24.sp, fontWeight = FontWeight.SemiBold), ) -private fun bodyStyle(block: HtmlBlock.Text): TextStyle { - val base = TextStyle(fontFamily = PublicSans) +private fun bodyStyle(block: HtmlBlock.Text, family: FontFamily): TextStyle { + val base = TextStyle(fontFamily = family) return when (block.kind) { TextKind.Heading -> base.merge(HEADING_STYLES[(block.level - 1).coerceIn(0, HEADING_STYLES.size - 1)]) TextKind.Caption -> base.copy(fontSize = 14.sp, lineHeight = 20.sp, fontStyle = FontStyle.Italic) @@ -561,6 +553,7 @@ private fun BodyTable(table: HtmlBlock.Table) { .fillMaxHeight() .border(0.5.dp, colors.line) .padding(horizontal = 8.dp, vertical = 6.dp), + fontFamily = ReaderTheme.readingFamily, fontSize = 14.sp, lineHeight = 20.sp, fontWeight = if (cell.header) FontWeight.SemiBold else FontWeight.Normal, diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/ChipRows.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/ChipRows.kt new file mode 100644 index 0000000..e4bdb11 --- /dev/null +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/ChipRows.kt @@ -0,0 +1,74 @@ +package cc.hafa.reader.ui + +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.rememberScrollState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.semantics.isTraversalGroup +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.traversalIndex +import androidx.compose.ui.unit.Constraints +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import cc.hafa.reader.core.TOPIC_ROWS +import cc.hafa.reader.core.rowCount +import cc.hafa.reader.core.wrappedRows + +/** + * A [chip] for each of [items], laid left to right in up to [TOPIC_ROWS] rows; when they need more, they go in that + * many rows read down each column, and the block scrolls sideways. Each chip sits in its own traversal group, ordered + * by its place in [items], so screen readers go through them in that order either way. Every list of topics or words + * is shown this way. + */ +@Composable +fun ChipRows(items: List, chip: @Composable (Item) -> Unit) { + BoxWithConstraints(Modifier.fillMaxWidth()) { + val available = constraints.maxWidth + val content = @Composable { + items.forEachIndexed { index, item -> + Box( + Modifier.semantics { + isTraversalGroup = true + traversalIndex = index.toFloat() + }, + ) { chip(item) } + } + } + Layout(content, Modifier.semantics { isTraversalGroup = true }.horizontalScroll(rememberScrollState())) { measurables, _ -> + val gapPx = 8.dp.roundToPx() + val placeables = measurables.map { measurable -> measurable.measure(Constraints()) } + val wrapped = wrappedRows(placeables.map { placeable -> placeable.width }, available, gapPx) + val positions: List + val width: Int + val height: Int + if (rowCount(wrapped) <= TOPIC_ROWS) { + val rowHeights = IntArray(rowCount(wrapped)) + wrapped.forEachIndexed { index, position -> + rowHeights[position.row] = maxOf(rowHeights[position.row], placeables[index].height) + } + val rowTops = rowHeights.runningFold(0) { top, rowHeight -> top + rowHeight } + positions = wrapped.map { position -> IntOffset(position.left, rowTops[position.row]) } + width = wrapped.indices.maxOfOrNull { index -> wrapped[index].left + placeables[index].width } ?: 0 + height = rowTops.last() + } else { + val rowHeight = placeables.maxOf { placeable -> placeable.height } + val columnPositions = ArrayList(placeables.size) + var left = 0 + for (column in placeables.chunked(TOPIC_ROWS)) { + column.forEachIndexed { row, _ -> columnPositions.add(IntOffset(left, row * rowHeight)) } + left += column.maxOf { placeable -> placeable.width } + gapPx + } + positions = columnPositions + width = left - gapPx + height = rowHeight * TOPIC_ROWS + } + layout(width, height) { + placeables.forEachIndexed { index, placeable -> placeable.place(positions[index]) } + } + } + } +} diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/Components.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/Components.kt index 0f81030..66214ca 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/Components.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/Components.kt @@ -4,7 +4,15 @@ import android.content.res.Resources import androidx.compose.animation.core.animate import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.calculateEndPadding +import androidx.compose.foundation.layout.calculateStartPadding +import androidx.compose.foundation.layout.isImeVisible +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer @@ -12,13 +20,17 @@ import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.union import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.windowInsetsTopHeight import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material3.BottomAppBar @@ -55,10 +67,13 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalResources import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration @@ -82,7 +97,11 @@ private const val NOT_FOUND = 404 private const val GONE = 410 private const val TOO_MANY_REQUESTS = 429 -/** An icon button labeled for screen readers; a toggle that reads as on or off when [pressed] is given. */ +/** + * An icon button labeled for screen readers; a toggle that reads as on or off + * when [pressed] is given. [dotted] puts a due dot on the icon's corner (see + * [WithDueDot]) and has screen readers say a refresh is suggested. + */ @Composable fun IconAction( icon: ImageVector, @@ -91,18 +110,26 @@ fun IconAction( tint: Color = ReaderTheme.colors.muted, iconSize: Dp = 24.dp, pressed: Boolean? = null, + dotted: Boolean = false, ) { + val suggestion = stringResource(R.string.refresh_suggested) + val announced = Modifier.semantics { + if (dotted) { + stateDescription = suggestion + } + } if (pressed == null) { - IconButton(onClick = onClick, colors = IconButtonDefaults.iconButtonColors(contentColor = tint)) { - Icon(icon, contentDescription = label, modifier = Modifier.size(iconSize)) + IconButton(onClick = onClick, modifier = announced, colors = IconButtonDefaults.iconButtonColors(contentColor = tint)) { + WithDueDot(dotted) { Icon(icon, contentDescription = label, modifier = Modifier.size(iconSize)) } } } else { IconToggleButton( checked = pressed, onCheckedChange = { onClick() }, + modifier = announced, colors = IconButtonDefaults.iconToggleButtonColors(contentColor = tint, checkedContentColor = tint), ) { - Icon(icon, contentDescription = label, modifier = Modifier.size(iconSize)) + WithDueDot(dotted) { Icon(icon, contentDescription = label, modifier = Modifier.size(iconSize)) } } } } @@ -161,6 +188,51 @@ fun ReaderScaffold( ) } +// Material's bottom app bar height, without the system bars under it. +private val BOTTOM_BAR_HEIGHT = 80.dp + +// Space past the end of a screen's scrolling content, above the bottom bar. +private val SCROLL_END_MARGIN = 32.dp + +/** + * The space below a screen's scrolling content: the bottom bar's full height, + * the system bars under it, and a margin. It stays the same while the bar + * slides away, so the end clears the bar and there is always room to scroll + * back and bring the bar back. + */ +@Composable +fun scrollEndPadding(): Dp = + BOTTOM_BAR_HEIGHT + WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + SCROLL_END_MARGIN + +/** + * The outer padding of a screen's scrolling column, from the scaffold's + * [padding]: the column runs on under the bottom bar, so its scrolling room + * does not change as the bar slides away, except while typing, when it stops + * above the keyboard and the bar so the field in use stays in sight. + */ +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun underBarPadding(padding: PaddingValues): PaddingValues { + val layoutDirection = LocalLayoutDirection.current + return PaddingValues( + start = padding.calculateStartPadding(layoutDirection), + top = padding.calculateTopPadding(), + end = padding.calculateEndPadding(layoutDirection), + bottom = if (WindowInsets.isImeVisible) padding.calculateBottomPadding() else 0.dp, + ) +} + +/** + * The modifier of a screen's full-size scrolling column, from the scaffold's [padding]: [underBarPadding] outside the + * scroll, then [margin] at the sides, a top margin and [scrollEndPadding] at the end inside it. + */ +@Composable +fun Modifier.scrollingScreen(padding: PaddingValues, margin: Dp = 20.dp): Modifier = + fillMaxSize() + .padding(underBarPadding(padding)) + .verticalScroll(rememberScrollState()) + .padding(start = margin, top = 24.dp, end = margin, bottom = scrollEndPadding()) + /** Slide a hidden bottom bar back into view. */ @OptIn(ExperimentalMaterial3Api::class) suspend fun BottomAppBarScrollBehavior.showBar() { @@ -177,20 +249,36 @@ fun BackBottomBar(title: String, scrollBehavior: BottomAppBarScrollBehavior, onB } } -/** A screen's name in its bottom bar, taking the room the buttons leave. */ +/** + * A screen's name in its bottom bar, taking the room the buttons leave; with + * [onClick], tapping it does what [clickLabel] says. + */ @Composable -fun RowScope.BarTitle(title: String) { - Text( - title, - modifier = Modifier +fun RowScope.BarTitle(title: String, onClick: (() -> Unit)? = null, clickLabel: String? = null) { + val tappable = if (onClick == null) { + Modifier + } else { + Modifier + .heightIn(min = 48.dp) + .clip(RoundedCornerShape(8.dp)) + .clickable(onClickLabel = clickLabel, role = Role.Button, onClick = onClick) + } + Box( + Modifier .weight(1f) - .padding(horizontal = 8.dp) - .semantics { heading() }, - fontSize = 18.sp, - fontWeight = FontWeight.SemiBold, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) + .then(tappable) + .padding(horizontal = 8.dp), + contentAlignment = Alignment.CenterStart, + ) { + Text( + title, + modifier = Modifier.semantics { heading() }, + fontSize = 18.sp, + fontWeight = FontWeight.SemiBold, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } } /** The page color behind the status bar, for screens whose bar is at the bottom, so content scrolls under it unseen. */ @@ -246,7 +334,7 @@ fun SiteIcon(source: String, title: String, modifier: Modifier = Modifier, size: } } -/** A bordered button in the text color, with an optional leading [icon], drawn with [iconModifier]. */ +/** A bordered button in the text color, with an optional leading [icon]. */ @Composable fun OutlineButton( label: String, @@ -254,7 +342,6 @@ fun OutlineButton( modifier: Modifier = Modifier, icon: ImageVector? = null, enabled: Boolean = true, - iconModifier: Modifier = Modifier, ) { val colors = ReaderTheme.colors OutlinedButton( @@ -267,7 +354,7 @@ fun OutlineButton( contentPadding = if (icon == null) ButtonDefaults.ContentPadding else ButtonDefaults.ButtonWithIconContentPadding, ) { if (icon != null) { - Icon(icon, null, modifier = iconModifier.size(ButtonDefaults.IconSize)) + Icon(icon, null, modifier = Modifier.size(ButtonDefaults.IconSize)) Spacer(Modifier.width(ButtonDefaults.IconSpacing)) } Text(label) @@ -306,7 +393,10 @@ fun ConfirmButton(label: String, confirmLabel: String, confirming: Boolean, onCl } } -/** A topic as a filter chip, struck through while [off]; [count] shows after it when given. */ +/** + * A topic as a filter chip, struck through while [off]; [count] shows after it when given. The one chip for topics in + * the settings and under an article; Material keeps its touch area at least 48dp tall. + */ @Composable fun TopicChip(topic: String, off: Boolean, onToggle: () -> Unit, count: Int? = null) { val colors = ReaderTheme.colors @@ -333,7 +423,19 @@ fun TopicChip(topic: String, off: Boolean, onToggle: () -> Unit, count: Int? = n ) } -/** A row of choices of which exactly one is on. */ +/** A topic in a chip's outline that does nothing when pressed, for views without a topic filter. */ +@Composable +fun TopicLabel(topic: String) { + val colors = ReaderTheme.colors + Box( + Modifier.heightIn(min = 32.dp).border(1.dp, colors.line, FilterChipDefaults.shape).padding(horizontal = 12.dp), + contentAlignment = Alignment.Center, + ) { + Text(topic, style = MaterialTheme.typography.labelLarge, color = colors.text) + } +} + +/** A row of choices of which exactly one is on, each at least 48dp tall. */ @Composable fun Segmented(options: List>, value: Value, onChange: (Value) -> Unit, modifier: Modifier = Modifier) { val colors = ReaderTheme.colors @@ -343,6 +445,8 @@ fun Segmented(options: List>, value: Value, onChange selected = option == value, onClick = { onChange(option) }, shape = SegmentedButtonDefaults.itemShape(index, options.size), + // Material draws these 40dp tall; a finger needs 48. + modifier = Modifier.heightIn(min = 48.dp), colors = SegmentedButtonDefaults.colors( activeContainerColor = colors.accentSoft, activeContentColor = colors.text, @@ -364,6 +468,8 @@ fun problemText(resources: Resources, problem: FeedProblem): String = FeedProblem.NotAFeed -> resources.getString(R.string.error_not_a_feed) FeedProblem.NotWebAddress -> resources.getString(R.string.error_not_https) FeedProblem.NotHttps -> resources.getString(R.string.error_not_https_feed) + FeedProblem.HttpRefused -> resources.getString(R.string.error_http_refused) + FeedProblem.HttpFeed -> resources.getString(R.string.error_http_feed) FeedProblem.Unreadable -> resources.getString(R.string.error_unreadable) is FeedProblem.Status -> when (problem.status) { UNAUTHORIZED, FORBIDDEN -> resources.getString(R.string.error_refused) diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/DueDot.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/DueDot.kt new file mode 100644 index 0000000..4e5aebf --- /dev/null +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/DueDot.kt @@ -0,0 +1,61 @@ +package cc.hafa.reader.ui + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import cc.hafa.reader.core.ReaderState +import cc.hafa.reader.core.refreshSuggestedAt +import kotlinx.coroutines.delay + +/** + * Whether a refresh would help now (see [refreshSuggestedAt]). The time is + * worked out again only when the feeds or the checking marks change, and one + * wait turns it on when that time comes. + */ +@Composable +fun refreshSuggested(state: ReaderState): Boolean { + val suggestedAt = remember(state.feeds, state.refreshing, state.checking) { refreshSuggestedAt(state) } + val suggested by produceState(initialValue = false, suggestedAt) { + val wait = suggestedAt - System.currentTimeMillis() + value = wait <= 0 + if (wait > 0 && suggestedAt != Long.MAX_VALUE) { + delay(wait) + value = true + } + } + return suggested +} + +/** + * [content] with, when [shown], a small accent dot on its top corner saying a + * refresh would help, ringed in the bar's color; the web's `due-dot.svelte`. + * Decorative: the control it marks says it in words. + */ +@Composable +fun WithDueDot(shown: Boolean, content: @Composable () -> Unit) { + Box { + content() + if (shown) { + val colors = ReaderTheme.colors + Box( + Modifier + .align(Alignment.TopEnd) + .offset(x = 4.dp, y = (-4).dp) + .size(12.dp) + .background(colors.side, CircleShape) + .padding(2.dp) + .background(colors.accent, CircleShape), + ) + } + } +} diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/EntryList.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/EntryList.kt index c86f28f..6d0641c 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/EntryList.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/EntryList.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.core.rememberInfiniteTransition import androidx.compose.animation.core.tween -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -20,7 +19,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items @@ -57,8 +55,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.rotate import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -68,6 +66,7 @@ import cc.hafa.reader.R import cc.hafa.reader.core.Entry import cc.hafa.reader.core.Selection import cc.hafa.reader.core.ViewTitle +import cc.hafa.reader.core.articleTopics import coil3.compose.AsyncImage import kotlinx.coroutines.launch import java.time.Instant @@ -97,8 +96,9 @@ fun EntryList(snapshot: Snapshot, viewModel: ReaderViewModel, listState: LazyLis ReaderScaffold( bottomBar = { scrollBehavior -> ReaderBottomBar(scrollBehavior) { - IconAction(Icons.Filled.Menu, stringResource(R.string.feeds), onMenu, tint = colors.text) - BarTitle(viewTitleText(view.viewTitle)) + val suggested = refreshSuggested(state) + IconAction(Icons.Filled.Menu, stringResource(R.string.feeds), onMenu, tint = colors.text, dotted = suggested) + BarTitle(viewTitleText(view.viewTitle), onClick = onMenu, clickLabel = stringResource(R.string.show_feeds)) IconAction( if (state.unreadOnly) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility, stringResource(R.string.unread_only), @@ -125,7 +125,7 @@ fun EntryList(snapshot: Snapshot, viewModel: ReaderViewModel, listState: LazyLis contentPadding = PaddingValues( start = padding.calculateStartPadding(layoutDirection), end = padding.calculateEndPadding(layoutDirection), - bottom = padding.calculateBottomPadding(), + bottom = scrollEndPadding(), ), ) { val problem = shownFeed?.error ?: "" @@ -136,6 +136,7 @@ fun EntryList(snapshot: Snapshot, viewModel: ReaderViewModel, listState: LazyLis EntryCard( entry = entry, source = feedTitles[entry.feedId] ?: "", + topics = remember(entry.categories, view.topicOrder) { articleTopics(entry.categories, view.topicOrder) }, active = entry.id == state.currentId, onOpen = { viewModel.openEntry(entry.id) }, onToggleRead = { model.toggleReadFor(entry.id) }, @@ -153,9 +154,8 @@ fun EntryList(snapshot: Snapshot, viewModel: ReaderViewModel, listState: LazyLis .fillParentMaxSize() .padding(32.dp), horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterVertically), + verticalArrangement = Arrangement.Center, ) { - Image(painterResource(R.drawable.sleeping_dot), contentDescription = null, modifier = Modifier.width(160.dp)) Text(stringResource(R.string.no_entries), fontSize = 14.sp, lineHeight = 20.sp, color = colors.muted) } } @@ -169,9 +169,10 @@ fun EntryList(snapshot: Snapshot, viewModel: ReaderViewModel, listState: LazyLis private const val FULL_TURN = 360f private const val TURN_MS = 1000 -/** The end of the list: a note and a button that checks the view's feeds as pulling down does; its icon turns while they are checked. */ +/** The end of the list: a full-width row that checks the view's feeds as pulling down does; its icon turns while they are checked. */ @Composable private fun ListEnd(refreshing: Boolean, onRefresh: () -> Unit) { + val colors = ReaderTheme.colors val turning = refreshing && animationsOn() val angle = if (turning) { rememberInfiniteTransition(label = "refresh").animateFloat( @@ -183,22 +184,21 @@ private fun ListEnd(refreshing: Boolean, onRefresh: () -> Unit) { } else { 0f } - Column( - Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 24.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(12.dp), - ) { - Text(stringResource(R.string.end_of_list), fontSize = 14.sp, lineHeight = 20.sp, color = ReaderTheme.colors.muted) - OutlineButton( - stringResource(R.string.refresh), - onClick = onRefresh, - modifier = Modifier.heightIn(min = 48.dp), - icon = Icons.Outlined.Refresh, - enabled = !refreshing, - iconModifier = Modifier.rotate(angle), - ) + val content = if (refreshing) colors.muted else colors.text + Column { + Row( + Modifier + .fillMaxWidth() + .heightIn(min = 56.dp) + .clickable(enabled = !refreshing, role = Role.Button, onClick = onRefresh) + .padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon(Icons.Outlined.Refresh, contentDescription = null, tint = content, modifier = Modifier.size(18.dp).rotate(angle)) + Text(stringResource(R.string.refresh), fontSize = 14.sp, lineHeight = 20.sp, color = content) + } + HorizontalDivider(color = colors.line) } } @@ -240,6 +240,7 @@ private fun age(published: Long): String { private fun EntryCard( entry: Entry, source: String, + topics: List, active: Boolean, onOpen: () -> Unit, onToggleRead: () -> Unit, @@ -326,7 +327,7 @@ private fun EntryCard( } Row(verticalAlignment = Alignment.CenterVertically) { Text( - entry.categories.joinToString(" · "), + topics.joinToString(" · "), modifier = Modifier.weight(1f), fontSize = 12.sp, lineHeight = 16.sp, color = colors.read, diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderScreen.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderScreen.kt index f2b1e52..14201a7 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderScreen.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderScreen.kt @@ -21,14 +21,18 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.PointerEventPass +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalResources import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.UriHandler import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import cc.hafa.reader.R +import cc.hafa.reader.core.GatePhase import cc.hafa.reader.core.viewKey import kotlinx.coroutines.launch +import java.text.NumberFormat /** * The phone layout: the article list, with the feed list in a drawer opened @@ -39,6 +43,7 @@ import kotlinx.coroutines.launch @Composable fun ReaderScreen(viewModel: ReaderViewModel) { val snapshot by viewModel.snapshot.collectAsStateWithLifecycle() + val gate by viewModel.gate.collectAsStateWithLifecycle() val colors = ReaderTheme.colors val drawerState = rememberDrawerState(DrawerValue.Closed) val scope = rememberCoroutineScope() @@ -54,6 +59,7 @@ fun ReaderScreen(viewModel: ReaderViewModel) { viewModel.notices.collect { notice -> val message = when (notice) { is Notice.Text -> resources.getString(notice.text) + is Notice.Count -> resources.getQuantityString(notice.text, notice.count, NumberFormat.getInstance().format(notice.count)) is Notice.Problem -> problemText(resources, notice.problem) } snackbarHostState.showSnackbar(message, withDismissAction = true) @@ -65,14 +71,7 @@ fun ReaderScreen(viewModel: ReaderViewModel) { .fillMaxSize() .background(colors.page), ) { - if (current == null || !current.state.loaded) { - Logo( - Modifier - .size(48.dp) - .align(Alignment.Center), - loading = true, - ) - } else { + if (current != null && current.state.loaded) { val state = current.state val listKey = "${viewKey(state.selection)}|${state.unreadOnly}|${current.view.viewSettings.sort}" LaunchedEffect(listKey) { listState.scrollToItem(0) } @@ -95,6 +94,33 @@ fun ReaderScreen(viewModel: ReaderViewModel) { ScreenContent(current, viewModel, listState) { scope.launch { drawerState.open() } } } } + if (gate.blocks) { + LoadingCover(showLogo = gate.phase == GatePhase.Shown) + // Back still leaves the app from the list, but does not move between screens behind the cover. + BackHandler(enabled = drawerState.isOpen || viewModel.screen == Screen.Detail) {} + } + } + } +} + +/** The loading screen: an opaque cover that takes every touch, so nothing half loaded shows or can be tapped, with the turning logo once [showLogo]. */ +@Composable +private fun LoadingCover(showLogo: Boolean) { + Box( + Modifier + .fillMaxSize() + .background(ReaderTheme.colors.page) + .pointerInput(Unit) { + awaitPointerEventScope { + while (true) { + awaitPointerEvent(PointerEventPass.Initial).changes.forEach { change -> change.consume() } + } + } + }, + contentAlignment = Alignment.Center, + ) { + if (showLogo) { + Logo(Modifier.size(48.dp), loading = true) } } } diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderViewModel.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderViewModel.kt index 9bfc7d4..51c6c31 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderViewModel.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/ReaderViewModel.kt @@ -1,7 +1,9 @@ package cc.hafa.reader.ui import android.app.Application +import android.os.SystemClock import android.util.Log +import androidx.annotation.PluralsRes import androidx.annotation.StringRes import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -12,9 +14,12 @@ import cc.hafa.reader.R import cc.hafa.reader.core.FeedHit import cc.hafa.reader.core.FeedProblem import cc.hafa.reader.core.FeedProblemException +import cc.hafa.reader.core.LoadGate import cc.hafa.reader.core.ReaderModel import cc.hafa.reader.core.ReaderState import cc.hafa.reader.core.ReaderView +import cc.hafa.reader.core.ReadingFont +import cc.hafa.reader.core.loadingBusy import cc.hafa.reader.core.Selection import cc.hafa.reader.core.sync.RetentionDays import cc.hafa.reader.core.sync.SyncEngine @@ -28,10 +33,13 @@ import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter @@ -76,6 +84,14 @@ sealed interface Notice { @param:StringRes val text: Int, ) : Notice + /** A message that names a count. */ + data class Count( + /** Plurals resource of the message, taking the count as its argument. */ + @param:PluralsRes val text: Int, + /** The count. */ + val count: Int, + ) : Notice + /** Why a feed cannot be added. */ data class Problem( /** What went wrong. */ @@ -122,6 +138,14 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) .flowOn(Dispatchers.Default) .stateIn(viewModelScope, SharingStarted.Eagerly, null) + // Whether the account's data holds the loading screen: from opening and from signing in or replacing this device's data, until the screen lets the person in. + private val accountAwaited = MutableStateFlow(true) + + private val mutableGate = MutableStateFlow(LoadGate.started(SystemClock.elapsedRealtime())) + + /** The loading screen, which holds the person while what can still change the lists loads. */ + val gate: StateFlow = mutableGate.asStateFlow() + private val noticeChannel = Channel(Channel.BUFFERED) /** Messages for the snackbar, each shown once. */ @@ -135,6 +159,12 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) var detail by mutableStateOf(Detail.Article) private set + private val preferences = application.readerApplication.preferences + + /** The font for article text and titles on this device. */ + var readingFont by mutableStateOf(preferences.readingFont) + private set + init { viewModelScope.launch(logFailures) { // the drawer has no room for why sign-in failed; the account screen says it @@ -147,11 +177,38 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) .collect { notify(Notice.Text(R.string.sync_error)) } } viewModelScope.launch(logFailures) { - model.load() - model.refresh() + model.openChecks() + } + viewModelScope.launch(logFailures) { + combine(model.state, syncUi, accountAwaited) { state, sync, awaited -> loadingBusy(state, sync.report, awaited) } + .distinctUntilChanged() + .collectLatest { busy -> + var wake = stepGate(busy) + while (wake != null) { + delay((wake - SystemClock.elapsedRealtime()).coerceAtLeast(0)) + wake = stepGate(busy) + } + } } } + /** + * Move the loading screen on, with [busy] saying whether something that + * can still change the lists is loading; when it next changes on its own, + * or null. Letting the person in settles the lists and stops the + * account's data from holding them again until they next sign in. + */ + private fun stepGate(busy: Boolean): Long? { + val before = mutableGate.value + val next = before.step(busy, SystemClock.elapsedRealtime()) + mutableGate.value = next + if (before.blocks && !next.blocks) { + accountAwaited.value = false + model.settle() + } + return next.wakeAt() + } + /** Show [notice] in the snackbar. */ fun notify(notice: Notice) { noticeChannel.trySend(notice) @@ -182,6 +239,12 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) } } + /** Choose the reading font, and remember it. */ + fun chooseReadingFont(font: ReadingFont) { + readingFont = font + preferences.readingFont = font + } + /** Open the add-feed screen. */ fun startAdding() { closeArticle() @@ -216,6 +279,7 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) fun signIn() { val engine = syncEngine.value if (engine != null) { + accountAwaited.value = true engine.signIn() } else if (syncBroken.value) { brokenSignIn.value = true @@ -235,6 +299,7 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) /** Replace this device's data with the waiting account's. */ fun replaceLocal() { + accountAwaited.value = true syncEngine.value?.replaceLocal() } @@ -306,13 +371,15 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) } /** - * Import OPML text, then show the list when anything was new; when nothing - * was, or the file cannot be read, the snackbar says why. + * Import OPML text into [group] (null keeps the file's folders, empty is + * no group), then show the list when anything was new. When nothing was, + * when http feeds were left out, or when the file cannot be read, the + * snackbar says so. */ - fun importOpml(source: String) { + fun importOpml(source: String, group: String?) { viewModelScope.launch(logFailures) { val result = try { - model.importOpml(source) + model.importOpml(source, group) } catch (cancelled: CancellationException) { throw cancelled } catch (failure: Exception) { @@ -323,9 +390,12 @@ class ReaderViewModel(application: Application) : AndroidViewModel(application) notify(Notice.Text(R.string.import_failed)) } else if (result.found == 0) { notify(Notice.Text(R.string.import_none)) + } else if (result.skipped > 0) { + notify(Notice.Count(R.plurals.import_skipped_http, result.skipped)) } else if (result.added == 0) { notify(Notice.Text(R.string.import_nothing_new)) - } else { + } + if (result != null && result.added > 0) { finishAdding() } } diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/SettingsScreen.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/SettingsScreen.kt index eb6b8c0..6cdc367 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/SettingsScreen.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/SettingsScreen.kt @@ -3,17 +3,12 @@ package cc.hafa.reader.ui import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Close import androidx.compose.material3.DropdownMenuItem @@ -32,6 +27,7 @@ import androidx.compose.material3.TextFieldColors import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -49,16 +45,21 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import cc.hafa.reader.R +import cc.hafa.reader.core.ReadingFont import cc.hafa.reader.core.Selection import cc.hafa.reader.core.Sort -import cc.hafa.reader.core.hasWord +import cc.hafa.reader.core.byCount +import cc.hafa.reader.core.knownWordCounts import cc.hafa.reader.core.topicOff +import cc.hafa.reader.core.wordCounts +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext /** Which list of words the field adds to. */ private enum class WordMode { Hide, Only } /** The current view's settings: name, sort, words, topics, and the feed's group or the group's removal. */ -@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterial3Api::class) @Composable fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { val (state, view) = snapshot @@ -73,8 +74,9 @@ fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { var draft by remember { mutableStateOf("") } var confirming by rememberConfirming() val words = if (mode == WordMode.Hide) settings.hideWords else settings.onlyWords - val wordCounts = remember(view.baseEntries, words) { - words.associateWith { word -> view.baseEntries.count { entry -> hasWord(listOf(word), entry) } } + val entries = view.baseEntries + val wordCounts by produceState(knownWordCounts(entries, words) ?: emptyMap(), entries, words) { + value = withContext(Dispatchers.Default) { wordCounts(entries, words) } } fun changeWords(next: List) { @@ -95,15 +97,11 @@ fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { bottomBar = { scrollBehavior -> BackBottomBar(stringResource(R.string.settings), scrollBehavior, viewModel::back) }, ) { padding -> Column( - Modifier - .fillMaxSize() - .padding(padding) - .verticalScroll(rememberScrollState()) - .padding(horizontal = 20.dp, vertical = 24.dp), + Modifier.scrollingScreen(padding), verticalArrangement = Arrangement.spacedBy(32.dp), ) { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { - Text(title, fontFamily = Fraunces, fontWeight = FontWeight.Bold, fontSize = 30.sp, lineHeight = 36.sp) + Text(title, fontFamily = ReaderTheme.readingFamily, fontWeight = FontWeight.Bold, fontSize = 30.sp, lineHeight = 36.sp) if (feed != null && feed.error.isNotEmpty()) { Text(problemText(feed.error), fontSize = 14.sp, lineHeight = 20.sp, color = MaterialTheme.colorScheme.error) } @@ -133,6 +131,17 @@ fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { ) } + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { + Text(stringResource(R.string.reading_font_label), fontSize = 14.sp, lineHeight = 20.sp, fontWeight = FontWeight.Medium) + Segmented( + listOf(ReadingFont.Literata to stringResource(R.string.font_literata), ReadingFont.PublicSans to stringResource(R.string.font_public_sans)), + viewModel.readingFont, + viewModel::chooseReadingFont, + Modifier.fillMaxWidth(), + ) + Text(stringResource(R.string.reading_font_hint), fontSize = 12.sp, lineHeight = 16.sp, color = colors.muted) + } + // Starred lists what was starred by hand, so it offers only the sort. if (selection != Selection.Starred) Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { Text(stringResource(R.string.rules_label), fontSize = 14.sp, lineHeight = 20.sp, fontWeight = FontWeight.Medium) @@ -154,38 +163,34 @@ fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { colors = readerFieldColors(), ) if (words.isNotEmpty()) { - FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - for (word in words) { - val removeLabel = stringResource(R.string.remove_rule) - InputChip( - selected = false, - onClick = { changeWords(words.filter { known -> known != word }) }, - label = { Text(word) }, - trailingIcon = { - Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(6.dp)) { - Text((wordCounts[word] ?: 0).toString(), fontFamily = FontFamily.Monospace, fontSize = 12.sp, color = colors.muted) - Icon(Icons.Outlined.Close, contentDescription = removeLabel, modifier = Modifier.size(InputChipDefaults.IconSize)) - } - }, - border = InputChipDefaults.inputChipBorder(enabled = true, selected = false, borderColor = colors.line), - ) - } + ChipRows(byCount(words) { word -> wordCounts[word] ?: 0 }) { word -> + val removeLabel = stringResource(R.string.remove_rule, word) + InputChip( + selected = false, + onClick = { changeWords(words.filter { known -> known != word }) }, + label = { Text(word) }, + trailingIcon = { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(6.dp)) { + Text((wordCounts[word] ?: 0).toString(), fontFamily = FontFamily.Monospace, fontSize = 12.sp, color = colors.muted) + Icon(Icons.Outlined.Close, contentDescription = removeLabel, modifier = Modifier.size(InputChipDefaults.IconSize)) + } + }, + border = InputChipDefaults.inputChipBorder(enabled = true, selected = false, borderColor = colors.line), + ) } } } - if (selection != Selection.Starred && view.topics.isNotEmpty()) { + if (selection != Selection.Starred && view.topicOrder.counts.isNotEmpty()) { Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { Text(stringResource(R.string.topics), fontSize = 14.sp, lineHeight = 20.sp, fontWeight = FontWeight.Medium) - FlowRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - for (item in view.topics) { - TopicChip( - item.topic, - off = topicOff(settings, item.topic), - onToggle = { model.toggleTopic(item.topic, fromArticle = false) }, - count = item.count, - ) - } + ChipRows(view.topicOrder.counts) { item -> + TopicChip( + item.topic, + off = topicOff(settings, item.topic), + onToggle = { model.toggleTopic(item.topic, fromArticle = false) }, + count = item.count, + ) } Text(stringResource(R.string.topics_hint), fontSize = 12.sp, lineHeight = 16.sp, color = colors.muted) } @@ -193,7 +198,14 @@ fun SettingsScreen(snapshot: Snapshot, viewModel: ReaderViewModel) { if (feed != null) { DividedSection { - GroupField(feed.folder, view.folders) { name -> model.setFolder(feed.id, name) } + GroupField( + feed.folder, + view.folders, + label = stringResource(R.string.group_label), + placeholder = stringResource(R.string.no_group), + hint = stringResource(R.string.group_hint), + onCommit = { name -> model.setFolder(feed.id, name) }, + ) ConfirmButton( label = stringResource(R.string.unsubscribe), confirmLabel = stringResource(R.string.confirm_unsubscribe), @@ -276,23 +288,40 @@ private fun CommitField(label: String, value: String, onCommit: (String) -> Unit ) } -/** The feed's group: type a name or pick one in use; empty takes the feed out of its group. */ +/** + * A group name field: type a name or pick one of [folders], suggested as it is typed. [onEdit] gets every edit and + * [onCommit] the name when Done is pressed or the field is left changed from [current]; [placeholder] is shown while + * empty. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable -private fun GroupField(current: String, folders: List, onCommit: (String) -> Unit) { +fun GroupField( + current: String, + folders: List, + label: String, + placeholder: String, + hint: String? = null, + enabled: Boolean = true, + onEdit: (String) -> Unit = {}, + onCommit: (String) -> Unit = {}, +) { var text by remember(current) { mutableStateOf(current) } var focused by remember { mutableStateOf(false) } val focusManager = LocalFocusManager.current val suggestions = folders.filter { name -> name != text && name.contains(text.trim(), ignoreCase = true) } + fun edit(next: String) { + text = next + onEdit(next) + } ExposedDropdownMenuBox( - expanded = focused && suggestions.isNotEmpty(), + expanded = focused && enabled && suggestions.isNotEmpty(), onExpandedChange = {}, ) { OutlinedTextField( value = text, - onValueChange = { next -> text = next }, + onValueChange = ::edit, modifier = Modifier - .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable) + .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable, enabled) .fillMaxWidth() .onFocusChanged { focus -> if (focused && !focus.isFocused && text.trim() != current) { @@ -300,23 +329,28 @@ private fun GroupField(current: String, folders: List, onCommit: (String } focused = focus.isFocused }, - label = { Text(stringResource(R.string.group_label)) }, - placeholder = { Text(stringResource(R.string.no_group)) }, - supportingText = { Text(stringResource(R.string.group_hint)) }, + enabled = enabled, + label = { Text(label) }, + placeholder = { Text(placeholder) }, + supportingText = if (hint != null) { + { Text(hint) } + } else { + null + }, singleLine = true, keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences, imeAction = ImeAction.Done), keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), colors = readerFieldColors(), ) ExposedDropdownMenu( - expanded = focused && suggestions.isNotEmpty(), + expanded = focused && enabled && suggestions.isNotEmpty(), onDismissRequest = {}, ) { for (name in suggestions) { DropdownMenuItem( text = { Text(name) }, onClick = { - text = name + edit(name) focusManager.clearFocus() }, contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding, diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/Sidebar.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/Sidebar.kt index 35742bf..3350d29 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/Sidebar.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/Sidebar.kt @@ -32,6 +32,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -89,6 +91,8 @@ fun Sidebar(snapshot: Snapshot, viewModel: ReaderViewModel, onPicked: () -> Unit .fillMaxHeight() .padding(bottom = 12.dp), ) { + val suggested = refreshSuggested(state) + val suggestion = if (suggested) stringResource(R.string.refresh_suggested) else "" Row( Modifier .padding(NavigationDrawerItemDefaults.ItemPadding) @@ -99,11 +103,18 @@ fun Sidebar(snapshot: Snapshot, viewModel: ReaderViewModel, onPicked: () -> Unit viewModel.goHome() onPicked() } + .semantics { + if (suggested) { + stateDescription = suggestion + } + } .padding(horizontal = 16.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - Logo(Modifier.size(32.dp), loading = !state.loaded || state.refreshing || state.adding, labeled = false) + WithDueDot(suggested) { + Logo(Modifier.size(32.dp), loading = !state.loaded || state.refreshing || state.adding, labeled = false) + } Text(stringResource(R.string.app_name), fontWeight = FontWeight.SemiBold, fontSize = 18.sp, color = colors.text, maxLines = 1) } LazyColumn(Modifier.weight(1f)) { diff --git a/android/app/src/main/kotlin/cc/hafa/reader/ui/Theme.kt b/android/app/src/main/kotlin/cc/hafa/reader/ui/Theme.kt index fc18021..adeb802 100644 --- a/android/app/src/main/kotlin/cc/hafa/reader/ui/Theme.kt +++ b/android/app/src/main/kotlin/cc/hafa/reader/ui/Theme.kt @@ -12,10 +12,12 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp import cc.hafa.reader.R +import cc.hafa.reader.core.ReadingFont /** The web app's palette (web/src/app.css), one set per light or dark. */ @Immutable @@ -74,27 +76,51 @@ private val DarkColors = ReaderColors( private val LocalReaderColors = staticCompositionLocalOf { LightColors } -private fun publicSans(weight: Int) = - Font(R.font.public_sans, FontWeight(weight), variationSettings = FontVariation.Settings(FontVariation.weight(weight))) +private val LocalReadingFont = staticCompositionLocalOf { ReadingFont.Literata } -private fun fraunces(weight: Int) = - Font(R.font.fraunces, FontWeight(weight), variationSettings = FontVariation.Settings(FontVariation.weight(weight))) +// the bundled font files hold weights 400 to 800 only (scripts/cut-fonts.sh) +private fun publicSans(weight: Int, style: FontStyle) = + Font( + if (style == FontStyle.Italic) R.font.public_sans_italic else R.font.public_sans, + FontWeight(weight), + style, + variationSettings = FontVariation.Settings(FontVariation.weight(weight)), + ) + +private fun literata(weight: Int, style: FontStyle) = + Font( + if (style == FontStyle.Italic) R.font.literata_italic else R.font.literata, + FontWeight(weight), + style, + variationSettings = FontVariation.Settings(FontVariation.weight(weight)), + ) + +/** Public Sans, the interface's face and one of the reading fonts, with real italics. */ +val PublicSans = FontFamily( + listOf(400, 500, 600, 650, 700, 800).flatMap { weight -> listOf(publicSans(weight, FontStyle.Normal), publicSans(weight, FontStyle.Italic)) }, +) -/** Public Sans, the web app's text face. */ -val PublicSans = FontFamily(publicSans(400), publicSans(500), publicSans(600), publicSans(650), publicSans(700), publicSans(800)) +/** Literata, the default reading font, with real italics. */ +val Literata = FontFamily( + listOf(400, 500, 600, 700, 800).flatMap { weight -> listOf(literata(weight, FontStyle.Normal), literata(weight, FontStyle.Italic)) }, +) -/** Fraunces, the web app's heading face. */ -val Fraunces = FontFamily(fraunces(400), fraunces(600), fraunces(700), fraunces(800)) +/** The family [ReadingFont] draws with. */ +val ReadingFont.family: FontFamily + get() = when (this) { + ReadingFont.Literata -> Literata + ReadingFont.PublicSans -> PublicSans + } // The web sets no letter spacing, so neither does any style here. private val ReaderTypography = Typography().let { base -> Typography( - displayLarge = base.displayLarge.copy(fontFamily = Fraunces, letterSpacing = 0.sp), - displayMedium = base.displayMedium.copy(fontFamily = Fraunces, letterSpacing = 0.sp), - displaySmall = base.displaySmall.copy(fontFamily = Fraunces, letterSpacing = 0.sp), - headlineLarge = base.headlineLarge.copy(fontFamily = Fraunces, letterSpacing = 0.sp), - headlineMedium = base.headlineMedium.copy(fontFamily = Fraunces, letterSpacing = 0.sp), - headlineSmall = base.headlineSmall.copy(fontFamily = Fraunces, letterSpacing = 0.sp), + displayLarge = base.displayLarge.copy(fontFamily = PublicSans, letterSpacing = 0.sp), + displayMedium = base.displayMedium.copy(fontFamily = PublicSans, letterSpacing = 0.sp), + displaySmall = base.displaySmall.copy(fontFamily = PublicSans, letterSpacing = 0.sp), + headlineLarge = base.headlineLarge.copy(fontFamily = PublicSans, letterSpacing = 0.sp), + headlineMedium = base.headlineMedium.copy(fontFamily = PublicSans, letterSpacing = 0.sp), + headlineSmall = base.headlineSmall.copy(fontFamily = PublicSans, letterSpacing = 0.sp), titleLarge = base.titleLarge.copy(fontFamily = PublicSans, letterSpacing = 0.sp), titleMedium = base.titleMedium.copy(fontFamily = PublicSans, letterSpacing = 0.sp), titleSmall = base.titleSmall.copy(fontFamily = PublicSans, letterSpacing = 0.sp), @@ -107,9 +133,9 @@ private val ReaderTypography = Typography().let { base -> ) } -/** The reader's colors, following the system's light or dark setting. */ +/** The reader's colors, following the system's light or dark setting, and its [readingFont]. */ @Composable -fun ReaderTheme(content: @Composable () -> Unit) { +fun ReaderTheme(readingFont: ReadingFont = ReadingFont.Literata, content: @Composable () -> Unit) { val colors = if (isSystemInDarkTheme()) DarkColors else LightColors val scheme = if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme() MaterialTheme( @@ -134,13 +160,17 @@ fun ReaderTheme(content: @Composable () -> Unit) { outlineVariant = colors.line, ), ) { - CompositionLocalProvider(LocalReaderColors provides colors, content = content) + CompositionLocalProvider(LocalReaderColors provides colors, LocalReadingFont provides readingFont, content = content) } } -/** Access to the reader's palette. */ +/** Access to the reader's palette and reading font. */ object ReaderTheme { /** The palette in use. */ val colors: ReaderColors @Composable get() = LocalReaderColors.current + + /** The family for article text and titles. */ + val readingFamily: FontFamily + @Composable get() = LocalReadingFont.current.family } diff --git a/android/app/src/main/res/drawable/sleeping_dot.xml b/android/app/src/main/res/drawable/sleeping_dot.xml deleted file mode 100644 index 5b239df..0000000 --- a/android/app/src/main/res/drawable/sleeping_dot.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - diff --git a/android/app/src/main/res/font/fraunces.ttf b/android/app/src/main/res/font/fraunces.ttf deleted file mode 100644 index 8210f9488d3c732359a9292dd09aca3f2bae830e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360440 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

_b5`Ec9fq?7KrG-p>D_) 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 z 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

`|07gb9h$JvH9?x= zhDS@bw6kNwxFJc~*L*L#JnV1=pv>=ANDE;lcIAAl{f?ErdlB4(cAoIsRq{kWEpkWR zk_Ss^t29~uEA1-plY0rX@IO2w>|&V(yUJ@LVFy299X;HaU#sJy&WmzY?zZ|aErZoh zt8FODX2Z1O8j%nFqyz`BEp(g(^@2v2g`t4Zj z9faiC!rp%2-D=tydRKB>tT)zz3TsoPwnI659O~B6l{KCU@!NV0>&f;m#OWowyooW$ zPpj)SIC}Zt<=sk*SQ*y<8+w8+)_Etin|yV@9kNh zYP+f28&Ub*6a3e{THbM+>Pu_8wI}(qqWx5qZ#`e7@~!8}o|U)h`mP(7VR!0dm-#%7HtenfVW4DBT5ll`blzBkd*~UKj(E z*@b#bjR(@tgIRK%(i6eHxohZ4nse8Z=b^3D@>8oUYuQ^kD!&@vfvOcxTiU0~N%fj4 z>yYknReG!Ht9^J>ZVQ-}rN|q_#|5m2E{Js=c%jQOu8|kk9XXVQ}be%a@t$ft7r>$nZ+Z4tj zSdxIm5wU?Kz-L4N3=AK)#<*Gbh2mO>^yIErLo?4Dx}@q zggUO3jx3pCKVzA>Z`QB1tt>fC?JZ};+njz-+zozHJcQ3aLEXB@dagEFCmuat4YC~S zC!}5Z&6@Mnl4FzCFy>07-|EZKoDR2W9^BmiT&X`I>|WL91WV70Vb(BkZY!fNZ`{B2 zRrJF*xOUC=Z8efm*P1e7AHRNj$bZd!w7mc9D6H(Vo}^_d|2^b7eQSf?+CjcK%TdaQ zov-5^<>EJL(&=FT_944xp4f}^*Ja7qZEul%%ZhKI$xZs4^tJ3W7rx15ZY$3TRkjoD zAKO`_l^(7e~rjf;AH z;_A*sy|{zE57$*sOXGoLDOfE%#zJ1=}dj8VSLONKxZL{<7>F_^`X3l+NerJL2 z?A=`}y^XYqT7Fw=U%SsJh4@*KA@z4{JT@rhvSp@*#xacLS{7>ST!%f8*7^SAd^MWR zM#?s%x+QMSPZ(zh|Eu%LI%U;Zs5-uU8)1F3=2}~|AM%m)EwHufw>Q@FYOV>F;wY?H z7sASnr{K8yU6@iRwM^8P-a)HO3wp6d`L7jz+uGOurp;$oS2r^rYH9h@`VLt=xl3Lz zwCON+D%@AbT`TNLcP+h7{#7mq&DE9qm6WdLzS;G0OH*(c+H_Vrlfv&Yq@Puu(P01J zq4e`CbM~5Mt^K8Z`tegWe#{EHb@QPRQg&IP>r?NV7Shwe_hCY)pX{~1UL-FKwTJ37 zSNmhlwo1?Oz2=7J$Lu|~a{gMKy4p6C>8`x5_G$ZO%-f$wuh%)NlN}Ca(m=md9p|dp zG_r@kD&emVzs;pN>nz0TNJk@KnoiAfSIa)jZAbb4ejzf9cH7h?^cJ<yIhUqPRw?W)aIcGb4!Hk57EIV0jr?YT4-S31<>t(KR6@NadO-A4o$+1F53 z*-t-Pwx6f8)+)Ky$XEzVbsXNwXu){y^HgrN<}0BLR_C>z{Dfzj^%uEw+#&8zcdYxK zyV(88y&bI)Z4zx7jf^&rj)<;{u8(et-t(RP8orkw>BstUeh)vxpX|TlzvjR0zv1Wm zCcnu4#Q)Ua?(gyU`uqH!{R94S|CIlmf7UPe|L`yP7yV2AeV@cp+$ruE_lo<*1LL*h z!SS$o-FSGsK|CVfF5W&K8}AtJ6iyHa{5yWJ?kuegqs;x}AODb9CmQIbt?kzeFGQKGlI93^^>+rUcIdCK+A zt{Y|h0DRm(j{Q^qDc6B={u_MOKkG(N-pgHQ%KSywjxvAAwWr+QcWe5@C$2r^AHhy> zC$}c`(9>;5UG#DrQy+cZ*3`*Bw+Z#Kw%e4t8SF+S$fJIrTK$Z9!da;5MSZ zM!3zWv+dlr)Z6y1A9Xj@?N0se=q6EzJGrsc<3#LtiFa{RsLx&9c_%k`&q^mYSiA$>6S&Gp4h zOL0SJD+8Uim$l*G++epZ?PiEukG3-u^E$b8Fw=(IP+HMww+$`nEH|0f^t_95|Da8E zpjCb7A~(QwbA;p$cZ2xX&8^M9*b$y<=Z3oxm^X4`;W+-ab35`ccH`YHm?yd2Fz@aT zg45l>ZZd83Fw8UDG0%$GBjok#(8MqmVob-rBMO$OuCK`u%$LKIZ zJ3KlZ^NeT)_9j0*Ix;#Ao8zNX+<@rR=nS_(G%LCg8M`RD$PJFZ7hUYOisnXFV*X*& zej;_I%N!=!rx=o@5(E`jjMK{BR(L%zxCA!yjkM4`^bH_*bNB3j?WAsNCMSqGO zbnT;uqE|4#8oi2nMYIC*YtdVn-}W7l&yK#6+Z*ZaiP@z0G~e3~!o0R0gA|SRV=?dO zcf>s2?}B-f-yI1zsXoO|^?M_G`}mWPUX$(F{uDpcZS7COxKkTOYNBkrBdelFPjp?R-ewklJm{0g8u`xZhy?@$2jrke>j2kbVwY_xKq5e7l z9QLNU#`?dbxjOil{VVWQ|0=q2gmLt_2VrAc@`!jyJj5Lv4~>UnZ(8yw zY00DG_2Tv1pm_awee6wR&XC4DGTt!W5Y4qwyb&Rcj7RcxR6Gioo5h=9zeT(S=F#zJ zmy>QiQMz@Hc!zigY{tZ6+&a>;XT{^S2wE6DR=HsNzPnI@6BYrD>pFZZp_+M_@T$GF4KDkc0PS7;_e$wpw zOS2y+&Az`h`+?HzQ>EGWl4hSO&Ayj3`xkNpas%9+xk0%>&@}r2((DIGvmYSMevmZ# zzS8U`pE?<6XvS*x6`z57XR!Pt)0cn!gxLy&oF-3V)!#7QK9k|1bYz ze;C^LW`DHlT7Rs@#mAYh^(UBq^(UE5C0w+r|Ds0Ar~8M{p|kvB{z*R@P5F#J*L0yj zUnA$Qm@f2RHT_5YZ=>}tK-+!f|1-|T?fm!Rj`5oQ60}!0f4ONaKQHbR_w!fA1LA@H zDjQ?_t4%-oYtc;W`RmX?Tlniu$M}V&QT#2YOZ+0!BK}s>7XCKV6aFWr8~jhv1PA-u zP1gNy;$!3E{cqzFD*Ddqx`eEhjI`3=W>td9{0<0PvoBPf6x6j_gDXX z?wQ;({vWw#bItv-c)&Z5`Jh z@ZFGvHiQ5H0)!ACK@ZRPVDn9Itmu3i5dUiOmgRpMQeU2<>bWpB&gcl0iltM%XMWuMEA-O9TJ zsX1A*>@xXvc|sjZQGzGof62du(Smn<)%9)SWj(TCijobJ-&=W<{MaMNBZ{ItqR8)5 zFBi#GE>UXb|J2L1@}OJ!JJlNp zfpW||-tSk($?xD@pKyKN(Yt)?a^io(%O90LLp&gTN#(0D-pb2gmA_5AdYw!AzthX# zN2|B+s<&0|k9mqxJ)wGD_3E8GDR--~V`=vMSLL6hP2!Kqn~7JwEgyFD^2_ob5?6>6 zDuq@Nq$pNY@;*wDIUXKMt5K{|NmT0psaNb)9JrOgQ@x7E70=zutCp#@-O5vx;^nDc z@qyyYf62e5ct>$7f4lllpyhLdSH-AO@8lI-3ag`cd)@8*{|&F?D2jMjiL2MGyi%$3 za`bM8+|K=bywX7GQAQ}uxAJc7ZdSK;Wj6mi&#lJof8Z&~t%i8l4d^Glx>s!*^U4zC z?5Q3Y;nVPp(oN?UO1yHha>G~{>3o`-PPxbJfZOB$Z+YcG5t3<&={GU zWb9lG=ppeD@Md^2)@ajp8A{vd2v6rbk;b?03Y$n*D_LvN8_aZdD3OhjW|w``N`fP# z$H99coi9ID7Qf1gJYGJFQ$MeMRSi6;KUSYm1F!0J@VW2{;diSa=F>lJSb$`MAHTQSj zrS4jHlY1(khB0w3ai2|Oboa&X8{A3UUJjwJ-J9Jz-EAK3yc~!!(7Qj(G(a0eLJ^~_ z67-p3>E%p=7$b+!s?k<)J0IG}G)QcGXv1i$6KEZ|4>1kSQa<$HXsa^<*av)uv_d{@ z`e-Y2hz~uF`d;Q zDj#|gu(a}_$Iu3Fjwf~^?FACTP8u3FgeZ#a@mczAv>)|%N_HSL z4WZ{G>k!g1M$yxf8ibLybYm$6~9%ALQ?ycTBtuA=_vxmo8p|+z8}W^W|dkL#_IEj#J1hu`* z4I|`(wB1|}LTaS7a+eWGMA|c4GeXZ0ymQC!^!;_D{#TImE~$&UOrSxCqE^+Bcn66? zUq(?x_sCN1sO?GaIXvSBIu-ga!P7jRsMkQnZQO2@dx(E-3!W?IpFMG>x z(xc3N#*CaKgi6>K5&DR4-$3**e3><J{kYbLVP@bKOgtN2-h%`fB~8?v`pxK1IeLY0<>j_v2-Bt zD#3{-s2OQ{7()MxKo1`=T7;@cFXIf3;Mh!_qwyT-L6kD_@wIqbi&IH{ou#C78*rx&%Bv`fS~9NnXX*6uS{Cx9ARXEJ^W1n& zCdpyq#{0Jtar;RDWuWEM)RO}A5NC*_XJmf8VE^4_50m(Q_$M9WB#roqG#aPk6aHm{ z-yDxq)JG_L44#b81<)Pz#8f`Qyq?&O6`r^8nqfloc3S4+q!sWYJj3gZ?d4PJ$n($~ zQ`>}mgs?*JqqYnw!l+_Zw3jE`h}6=6I|m$)u{2THsDtO_IMH|D<@RUz`9h!M>m(zw z%V8vj#__#_ubC#N@8Cj|cNE3t7naVZw6*taSx0GCZdtyT(ym*&Z39(?mf=Q6DG&V6 zfP#h1frt`Q63UrUV(X@&TwzTEdjU#Ac~V}KH>Ji&jdM206TE?v5A8}&kM+}2v^m$gf`E~j3ttzEx~dV{~ezii#=mDG`C8#b<|POaFow3cc{ z!cyw;x((acQ=RKJ)~=&^`MZ_eX^Ov#khz7HZ^RF+-neDi2HI;A3G27)*s_5(Ze6`$ z1#Q~8zIGEGvvq4s9BtmZy=E(&y>om@^nsJuZ%C&Kaxue{1?iAO+HF0OT7VbQE2~T=ay^zi` znIbmqtO>-2xqZ_t0B z-=yE7-=_aazeE3t{xkg-`mglg=y&P&==bTr(;v_u(jU?Ppg*QRp+ALn%;&I*`I7#M z{+j-VK13geUCeR%D9%BT;~exPeTqI!H_(lA6Mcqmrq9yn=oY$_K2KkuFVb!FCHgXb z1*fGQu%Nj{chcACF1nlUp>NQ=^i8^t5iw$VfF7i+^bkEvkI*)H6wDeT1j8~M<3y}% zcw0gRqh^$h3r<>H5psjYjR&J;G>jMHjb9&}z3Lc$M$ZH=1||@DT1Y!g2ouVLVLuhl zL@<%Ct&3)2m{_b5@k|1f$e5WVCYecLQkgU+owrlWVzQYWCYQ-$@|gnI>l87?ObJeM zXW#_4oS6xGomtFmoZwb5b8&(@pQ&aR;0$*WPH^vHmM}{p{nX+dcR5aRS2C+`e!B*z zx9f;y53>;`xSN?R%vPM+ZpW$Z-ONr{`Ru~U?e2eZL?%XKY$U$lI82NH!GHgE;vQqe z<6p+eC*fYhc>de)o(UVNTVuWSKZ|#qn4f1Z@Mq?i`7`qlSPordI+^Q`{JUW}bOUxn zH;KIvb{T`jN{AU|Mi?6`g|O(d49k)eb=V4tai;DJ3n5qsu?koRxjNKL>{!Wp{J*Pi zoZGXm+&4I1uVt6PmSzRJl3fLB8l17ing(a=>_(iiZ-!OmR&vS?dz!o1oj7T)V=Zhw zy9>6kyV?0>Njvya>&<>&0n>@V0~ zvcFnx4YHCveFlJm9U-Ug1I0r zjZ3lfwz)iatL7H)9Bwgp7q^643QkuGUbmcE!L8(0ajUsC+*&(-%;Gs@E|jLo08C)4x&Q-w5ppu)#J<9!>`wjP3?r+??+jCvBl!t+h-!yjd9<6>cKv^m+fPUIfip$ro&>&n<)p@ zgPHl9i8C<^xM(h#SqO}-WfpOdaE~yLaL;o;VIJjv%e~G#&i#S=1M@WZ7WWSGBdpWH z`bN{wVC|d@o75%L3ThoB)?HK`b%1&p))vn|lKv$uEZ(5rfeif-^(A$LIz=^8S1Bv- zqoIT7IAEiUUI<)lqIY0dR!={Kof$*_p1BWp7JkegjK)uxX}G_{RA4$HokJS^1$Qs* zUqWBO&__6wrB8Ae+^=%=xL@NA;C_SKhbR2$K5jqil5qFqF6AD=UBNwoyE}IfcMtAC z>?qI@w->Ptt`1MGCoR%j(V__WeTMxxF#8wwABa5$Oux*&#{QN47_rCM=RotnXaB~2 zg4hq(AA|m1XWwN%MeGUodCZ0XX5V8!L+pp_PcSduVBcpyN9;-V1__a^6vOUkU&8$|dkyz1>~-ARS?Eew z8z<$qd`~1AA~^}a9QP}<_G83o?kUJvDo}+IGJPp%L!b{* zlGnCC284w z5ki+cK*fyro>;@lAZeykxv&f`bC{1?(5eh}aiOp|Uq-FM482Jw(CNH&G=m;|30Q;Z zpWwb2a~O9z4EL3McqJe1A-SLyq=R0_T?Tt^a*sxz#_;bz71(hz{9csi?{+=`97+KT zjb|rhVGHd5c9#Kai5BaPJ0aY?{+7JCX|8dN$_ zM=2F}D;|c`P1rwuZ}|Xlvt(5Tu7kN?XwYYKYcYeyS|T{U%H!Y}_Gf$#>>~kexbx}! zIE|MFEda7dv2r|)72*l31W$tFKh6FKwF|qr?=9)@kO@=}#03GebZ(XdWDHXc&iDI& zai8)3hn=6_e`xPF&0+Uf@t@lNIqVkxy?cd!&pzQQdkxb1b+(J`9+%FERG!MEf$j+X zf5or8`>3yoj7lBh-ya#|-_)=Y8I>A>>|vgg_JGUpXS=Bd`mQ>}@o+K36N z#d%4=tyUQFo+;$;j`2ON1aGB`?Q_TWw?UA}Q~ueN=ngwom9R=dMsKF1kkec7rV#dc zl#=Z6AYD?N6U=_x@fM>OzmoZ)M`4s7+2i4DNV2N=lRX~ZrGey2C6hfKl}h$_R5sb; zQ8`$D$(l>N5j;Rj-p9ZyC#Qc3IY&*ui2Fw5ad^W{2r+m=aFxST*k9o(vUYQj-0=+L zGG9mw5qO6-9j7EE(79Go3#l5&r5osP~wpzD80f47uQSe28eDDLtJn zqzkf;pvguNz66Yr5Nae*-U-hWJvuqN;&)gSm5qzK2XW*!G`F5_yVN^q9kD?)n!+O@qoQMC;}R0hNy#axY3Ui6S=l+c zdHDr}Ma9!frkBnrE3cSYIcs*++7c5+S*OHprWy@ErTD@l7`VAYmY`=TwJ-c@A z*~@SK2zd3>1Jpx!+2(O<^q-=hrk;hW`d91Xr4OTUTCQRLZ-uor?}cmfyk^ zR#a51uBbpalfUI^R>mhMuUN4@CT3O4;*F)TDJeB6DQi+PbEmqyc{i4tH?6#A1Mh_P z>eGpvHp$)3J0#7UHZ8fRC^Ku!5zOqr+fx7NfBoQ*NABMAP+i@Q`taMjyu4(f7|v)k zPB+Hi!udoCsMUVk6&EKb19LnnEC`j$WW_RBmQ3b8)y?AFSgLV$iNO(5H9T-QGH`H3 zyb}^q($b0(#vB>0n8eV?ibaF&^wnVwn@UAeqs#lrIPg5>1* zxPt81st3Zuk_`setoZmXDIlie;#9fT-D|cgJU)JIvDrT%$HP=UBOx}~n5NYx&kM?1 z9-17L6_=z)_B4lbs(?Vn+(Iw&+F7%h&^U!>pqcSB$NEGC=FC{VFh75O)$~EwTxe2A~ba#g*o9DzQX=Ai`;c{81yLPrYJRz$% z$wjM8NN{%vkJo18c$fp`W>#e7%uhB(C(KPL2}>@LO}IdvUS`y4ebgZnp@$#bzkeb& z5wbrekxHB;(&B)y&`^m{?qgiOIt+oBn8ZYh+=(yaBqP6ieN>cK91=42%Pw8JjaK=i~RCDo$z^tVLeCENDX8?fI%QuN@nAxt-D~^K;6A^)ixTt>DAko zuEV?c40I9Xl;4bJ$mq-Kg%@+YKZ&&|*x=msd}uOyk|LNDDr9+tr3V=Ud-p^TK( zBOSI2c%JOoNtuZ|;gqR-eC$SYZ`B{ZMeLwohF>sN`2T+Y4+H;)f&at6KaBx_2Yvgo z3Erdv$0GJ4PLzb_li+-W`|;cif<6sRC5hAEse}tcS4j~LNW&h5a6g>m31!D>6unQq z&$p+dKs(z7OYMPvaEq z73y_}#_v;~;uP@|bq=ReA@tq!URYjy4Q)aylM4;h)A-8IFY(5A6LSGylrUg-`VjPm z&#^D@r$abn!WVB&vn|+dcC&*xk#WYi4!m(1x(@rdFP+3rE>50K{!SrI(N1fe{@dwK zPN$sCIbCt;b{Z7XB4?4S$XgU33KPYOQbakTX`(vOLD8F{zlui1VsV%_R-7Wv6_6tlAM#YOL`^4 z_y~jCxx#s#^AhJ(&YPTfI@dWLbbj3Vm{cY8lIo=<=?>{{r5&^DclqViW!PIibaa$iuH=^ioJ>l6+cw`MDYv7?-Xw- z29>nZS?Q|uRt6};l(EVb<%wKYM)O@wtZ8m7(E$_d1f8u?}yTSW{cc*us zw@oY2sv-6ov?lFp?Pl#gT8s8U?GLoiYJaBvwYJ?S&?np{-Y3K7A)k-&0gP1N^}gGE z@AJLi_YvQxd=LAc_HFS?^~?1u@q5|t6Tcq69vuW`-74KC-A-Md?x5~*-7~tEbg$~( z*1fO$RCh>s%HQB0?w{bF;a})q?myT6F8`JOzxV&6|9k%D^)7l(eU<(Z{Zsm%=zoFh zclx*Vf7Aa%-=e>w@750n+!JutkZt&BU{v6*gK~pj4UP(aI=IWY!1%gxC?qxH)sSN$ zO(7RTIz#$H=}=jyN2p(DaA2*`e^7^p~u65!y>~r zhustQr?87**TQa^vQ5RN3e$b2`%Mp;X(StE`jB|`@jCV|6Ohk-1COf7irZT2FW?9UJm>n^DVh+T7 z67x;W$(XY-mtwBR^v8_GiepP+?~i>X_NmyP#$Jij$1RHcZQMXS9WRYn$NR(w#V?Cr zAHO61NPJ`b`Gk;!(u8{wED0Ybe33Ac=#;2P^hoqe3{H$pOiIj2oSrx*aZ%#(#Px}< zC%%*Te&VNzhZ0XEo=d!(*kw*J=a{FN*PEX;zhpj}de&nsZXUopZfFE z-=v;QZBD(IdNnOPEk5nBw5QXKq%-Lm>ATZkOK;0CXKc>+N2X_{F0&%DKJ&rMA7nn0 z*^m{KwKeOFtSebv*~!`4vY*a=A^ZL8-s~ZKO6-Z86S=Or-njv}J9F!D|C-yK7m*jA zwZxo-@68dinH+r$05lXZm1id}(dz3#E-S6f^Q>JU-*IGM}>bW!uVLE<0Ye5mq?%5P?gXDMfu%&MRD!ED9s{MirAJ~YRD zPT`!5bACAIRF$e~LDl_L&2yQ#adVf=eSYr8bGzmR&nus|Z{GX!Me~*OHS=}zjq{`C zo9AcFFPvXCziR&C`9GTf<@}q~k<}}!|5E)y^=H-X)x-FVk92|Sf*A{DFIcc(?}7uk zK3ed_f`J923;h=w7e+2zw{Yvi*B7=g>|Qvyh*~6Bb^8<>HMWjmabfSaOq=9 zk1lPf(bvqYd8FpanjhD^gzMKeuh;ys=G~fq)O=ZUw5Fk^1=r=8>ot8fBlt*&tk$zu zUmI2%SDR9sU0Z~!taeWA!rI!}HMN^-pQ-&r?S*9l%aWHZUG~DVKQ9|x9yR4MFV9#$ zbNTw^k1T&{`MDL66|pPUulVhXKdks<#pp`O%9xcYD|1(_UHQt&*H?bD^6D!0Rh6qA zU-itY7gzlj*B@5>Wz~nPzF2hxSHr57RhL&?U)8s2WVQF|#MOIOf42I}>h3j)HDPOF z)+DXTTvM>7bj_?a8`k`I&1Y){*SfEbUYoQwYwfJHE7v}<_T{y&u6=XuU)FxG_OrEz z)}CD3y!PVStLx0`cCLG9-Sg|dSf9B5+4XYm zd~d+-Q-NSXi zulu_0VqIrlza`Ex)3VC)faN*MYnBfz=Pmu@s+Zw1)ECvSt>0Gvqx!e&57&3?WA|zH zh3zZeSG{ljzWw`tweO34$M!Yu>)SW7pWCn7pS(Y3f60E!{y*;TxZiO9{QIB3zwv;_ zfkg*iKG6Dr{(+hYe)d4~LDRvl2mkxv^#|h~-1gwB5B}l7u7{$ssXDR~FNAm((A#^t zz4Pk1ROs!@k&#D_{{7u|-)~Zeh8j&8jrQoEl?t%baVArEjLE_o4TeCYMP)LXB28z{ znoJ=^eA3JL%{TW6^^rY&9V5dN_w)5njT6h}I#xD<0v0NHA72KtDoGO~?SN2=P|A-~ zQ%5E5=SvA`oRF62m?oQ4Zfc8D<8}yOGz|zszZ-%Oq2^GbHK8UO9u)c})Fc+lL^zfq zNw@C5PzUMicje#d`H6g@bxBrPJFZ^6+SyM}9=gfHYV^dIg#`yjn2U4Gdi$`7J34xY zhpg5Si_CFEEmKCj%PJB7YM?z`Uc9it7K0xHYiY;$8{<2A8cG}M9?aSl~hEW z%vGa>np>+GY`4+QVyPA?Sc3N)EE+CY;RADi;4&fGf^HMhYn4e zJ62RE(8hK^m(tO3ly^stc66lV7eU9In_FC*iQj3Z(@e_tlP6DJk_4t@XXnI4Yi_i( zwDhPWva>VIRGg*GIn-zjHa0djHJz%L4-JckhFOLg1-==JHZCsATh8@df{Tld(`e*_ zSDTL>IdTL@7I0O8)l3>Y&7mB}g(z0xf3j5=Ip$zXW#px`N_wbjc@pppqVTpi%>@@j3J3QIIKe+-r-q;1Ex z>^K;Q!?Ewm>6?LMn;s*T`y|+`pda<=gpf}7)ixiEGpL^qmP?ft?oGt zcjQQ?b)Q<{Ch70$qf%3~H#<9TT1PdpsX}|Ce$!azk7BOnXF4go0>YxQvz4}S6S930+d_KnCjBFe{Nae|#R%h2_q zBAywaJq%`i_yXhQ9hQL;+}x;uPE_2b)pqsX=;>h?jZW=I`S=F(BwD#s-2b-aNiPzC zr6a-`*3l6fnw^T$4rC)C`9hT$4r7 zbPle+zoEexXapcCzVx9(e2nVtZD??$OxRr7aheF|ygND$AHnb+I{Xc|v>_uC6q%8l zVK7h%zTY9C!3_*xpw06Ao2;PYf^ z53O%TMp{a8TIRhA=2jGD<>qGOWtpfLi`-_TIg#l7&%-0UEuN;)#qB245HJz;VIY$XqNfbElZ z0dzYyR-@MFhK3K`|M0`VzyJ65Pn=Nq^|d%T=?wn*pkV(XvG~Z5kKcdqy${|y+thP? zXlS7S>Q$-@2nh)``f1OfC5X?VUZ$Ss`P0QqMpGDug#%j%@X8roIl9!6GrDAS1qYro z#;GdNqLHj3$Kc2+64ZW;I4386|DJa=-JnKoHrr@Oh{0P*jpmGIjb_=q#M22sH=TQ~VokIuH9mnb#xaFyoo}A} z=+A%t^C!(Cs=(a2P?60})si)k}1CXCH6L% zC(Q!IlvV8e#|0@(F+f_KtWi*?DeuYho`F<5F7G)3hxOy_3iYUk5|gC8+rwgSTg|r} zBdj>~H2e_*;IXF(>jnYGaaFi|y?X&!rgL8>aNX1Aq|t$9gA9fMKW}hEzp#j?Ovn+1 z$q^=uK~$8^d7$xQjKQZZqbgncZ2K6LS}duIlhcUR2ID18m46jZ73beG!( zupJ-Qtb7NJZU7wSo}Mm&_Fbh?YZTEz@Do6$b~oA^{`7c3Mwoly$>uI6`)rs)=*?*q zuY6!K&{8*x$Tmuo8By;K((WPo^J_)5wN>eUl$S7(r37}DJ8j=AnocXa6zaiEo#;F*kv($sn9P3cNJmFO zW=4KlRaI3{qA9+xI2Q{Y5!NG=-QC?bZ9JlJRHeXnp+zC`SiQfK)Y*39+>xVAJgd}U$45qvA3t{H!u9LdZ;ntSH?Ow$*r4HZmdU*XN#p5h zP;tcvDQxXWKl$Vn`=~uds5VfiafP+4tCbK9Wc)z>WGgp2&1{bJ(?rC@ged9$8-tuu ztB=Si%nbLGUx)su;i^a*Su}s?(xuMx%JOnjl4EpKxW#F7bQqSn^>*?#6Y_Oexp)Nx z1bDml;#KmfsK{`G#ziid`-DeDMJ-zp?l1&yc@^1MY17IC?EH{GC+cfG*D)ee=^_&{ za&mIgvweIVhbAW_t+=wXGCRy$Ycdtp)Kr!grN_m`M0E7yB`}Rl2Be=Dyp}=0VC(> z>E+08q^Q-APim&bou+VAamf z68x9Xz=-&tfZ1~b=!l?zU{ic5taKCbHy;*{Z>!%}r#p5?_w5cz@MSi7Tp{Nu<4p8r zOjj|s%H^PM{^!meK8g)}_psDm7u?zqAJNfcW!?1HFQ;Zk;lHgcb@I@lK$8(=4jpZ1 z?Xbw(TN{oM9Y9!QP>_93$?Nv)HJ!h7tJ;i4hZ?5%@e+l>1=dG>n?KJOf{Zxa+B9W>jeW&B0_r-;ks)tlqN5u$pLr8NL((IZSAA13x5| z%6+k?4Ax44SA1;F1gvr*s_zuP$s<@j)6^l023F&h=ZOG)%HoaeYg6Q`mh+vxEuBM? z@GKhFAPDrwO^HvJH4? z^@rAx{db}^4}sb!Z?y<}=5dK@l9Y4%K4bu9zt+yqYn`2)ixw?iTw46wT>gw$3?3_!)fQ7Nq zk|l95l#P6YB|17HDk>sk`YAWJT&M}^xaL+;oe0!&4}EMhL)%+%}os_EV7f0 zO$}!*xadQI1A{G6BY0%wNrO>u2(eSx9JC(R(ZMU=dU|g5baoaL%&43zi8M4xM;U_PI1jYS^oC*#iDnfot=jR$(u)k9UX;*D@78ivs5{)2wLPiN!&NzeDlRW{_^%8 zERw^qaPjH+`HrKcMJY!Pcl$UmCxPt~*F7xrAgfo~fKOq~qD6~q7A#u46dSGD<+YWS zZf+x3Dy-HaxgloyBHm?Z)AY@*8#iu9uqtI_8jVzuu+ACDI(PV3V{1pfs|`Cdxxy9V zBpl`z4))cUV?jYTt~P)looKsefbPR+kr{&mbq1`5A>-@eK42lsb{)Fao|{lu3`*77 zkl^4TI4^bpg4lpdNGcJntIDRA6lNFXMtCYmhd8MyP&0z!vV`K|;u!ElizSq1q*9Kt z4Rm8}-5j(IfL>5*_stO}7;bVS{iZPD@B&4>3SZgcD4k9<)YabJLrXO}M@~!*#~krG z5f?amNCat)G6~NJHU}Y*NSkyX6Ga}Yqb98dK|)%%<600Rq?sK@Huz2uXn6?2z8iuJ zq2{njtyS<(1`AIL{RtJyML9x1k{og1KP67O>zF^a{P&N)M8@BMms@C7>Z%wWVn=P= z7`7`!f5oW1LwHhfXRROwt2!iyP(t~1Y_SUBO!0WtC?h2$yI`(MNt^>c!~r-_M@P@l z$S7@LY<;%+%u#&C2ee`3Nn^0D=PH`Ge$yrbWzhYm5YR0%gTts(p}t#uXpHl zt~_~AQnhXpcc18+ogTc=o`v$hH4Xidr|+v5(O`4qnHKbFNTJq+@!bm2u*2wAzcR#V z2n!DhNG!#{!QA=t=FiNCjE>8$Dv9t=D-}wGNE@i*$mCFY5_%7>>hH(-vnt43GMg%~ zSQ4QU!9Tr0;S<7@)}H&dyHtuAC@7-k=bV zko`;BpvW&QUTBkOGecdNn`HXS0}>1IMqXihR1ho*++8*Pro`gevuCHpMnz{{I!*u@`wD=A4SpCq;T;xR}1)sDv>CgYVGr*&0o zU=NH#Ja2C=wMr_s-MBL}Wz!N<^Gcx5V)HXmVb-_BXNrd1$(=w|iS70RGz?kkw4SqM`N{9BEw`6e<1fJa0_%zIHF&B*4d8m`rNF z_51`3Tef^R9P>fL6L55Qvuyu`#>NJ~!m{1ncZNrb-q$hH*5bW`r^dMO-AGGQ(ZEMf zpLL|S=`@c0&bFO+`;E6hJ=NUac}<%b5QQyrk~v1NVK1LPefrd?##UAvm<8G@Nj6YM zi-jG5hHGE6Qmb`iIxjX$M|&?_a?^Ml(&Wx`?@b^GZ+jcvvE6lMhOdK!oAA%CT7yxb zVSb;dVF}fYY7Fru;9K*m=T}#xN2R9b%q=(19U!Vem*D6;ehvrHwjq%e;~*No-hTPo zHBkg+X-2X}Me#Fo5VYJj;y5FN#%H7;w@i&2ZksP~tsoU)9n_>XB*-6WlUA`5Qf(bI zX$=XQ!9O`^4G9y|2L;ez5rI(~BibK#o6&Js%A9B?XXo*4fa72}&fE!DmjJft z!NJy6sGcrf1g|>RX7h|9FFcndM-tIVZwNKT=i*>6I~%vM%EUw}2NIXj5Ey7^Ze}G^ z|4nPXPv3>phap)VJ98FQz_kyGB$DQ4gFYa@Xy){+7v$w;W)v)3xNv4tpr76|5ZlG5NaJ0Bi)w0W)^4mx z^;6=M>MG@tT8Q_jGlS%q-7aBipz0JH>{zmBRwQxLD4it=S63J5&6@)Q{UR`VXGHxI z6B83mdM~oDx=58uHy7u=fo@nSw0Bs=a+wPb0^H>OYMsGbM(OohB{ztru9uN&^nQNQ zp>9mgR;$#{k@odd&XOk1mM)M!dy2#!fl>Lh7tctE`d9iN?TCQy(f?Hz*??4`$GMb7 z;_D>(-#~^VZB50-M4X(g#kaLJ5R-&c4QH=jOUunIC``>QDTNeKTvBW{4-B*tBZTI* z0kKaa(IMpI1_u*EA}w}f0fs|g3(K~MH-=;=i6LlAwl@UbIDZ5b*mxDPyd9hrKX=n(hE?(?m)HpU()7=;C zD{&-x=rOgvBGgCfaGhL-AXt*l}yatN~H0-?4~jEzpton4k2F$MMZLoHZbOu-)+1B=%rYl~Zq zh%n+4&MlF3ozeF?&LggXT5h*&DL_hq^2((PEm&61o;}yunFkRw$zSPa1uN}$ zi^fDS!Ei@88e)P0phruyKos?g(a}i&@TWmMMJTVd5qb0M+2)DbfN#_gX4HFow4Afo zK#z_(as8)N}sTP!=p*yr5=DUVr}uVzP9u z?9;VZ@(%f8XJ%M6~B2cuRvqNznP{cSuVbJSf&2suAcIxQiI21evJ3AX8gMm*q zcU(;+tSBoy9J)k)PU-bW4jnmi$jVR#AJBv&6-&qUjbl=2<%%(>RG?P*`RR!2g-`5oOtgviSJe^uSX$&Xo z%q;>A4O(ZSoT4;_ zaALraAEj0FfOT{Xxf{&o5Tc6k7uyz#ZrCPvQ)9ebRkU@83J=#SMPln^=p#EhsZuvd z|F6RXj#N4|?t9yOL7vx1NQ;y~fKkv&>HLs3NuJLj)z(o4VFuZsEaIP>B+my3w|8`O42(MC zAlubdVr_43xzsU;LlO*2fJ!8?Uc#`nQ&KsG)R9B$QI8|EzEk2;^Y0X&=$(L#+sAi; z&Qf7(1eLx>sZp^b{Puo~Caay#AxEqcy z;(VJhh1G$dTQLxRcuLnn9TJn8E0DV}E@6hyW_wRXNlI{~byV&n(EePEuiHR#%T1v@ zwH7b1c)DN$)N8Mw8{pgO{OAudkHGNM_O`RaWbmG3U37b#2vnsf1;(lP2f$O7NK77vLEsuTwUg>i-;W8(BogNs@rk-572xb#8p>$GWt63fVLCo7}~+Quv5 zE3`*QS^?4I>BfjgEO*CyH{aHq1=w!358r}pzNI@OU$ij~4z{-wn{2EtgGJM4%qYsr z%rBXVSA(j`a|=Mvm6dbm&ef|2pdjoKc^Gq%Fg=>ex72xI)eZ zIo5)D&mpVcp9rY2v3jL+=pvTQmYz{vNUT7)ThMOO@Nnlf?AWeeyWT_5<>M@|T_G!W`>2mG$}S(*qU{(c6R|(+>AcZD#PoJzV7hvTX@(VP zcs3h0vj?@Rh8kJ01iHM~nEOs2|C=^lR;Vb7L z`kWsSx!d(n{97EIo%~+9lY^U4o|Z;! zu+)VCt--;tHf;(D04Rr(nF%cm~)$bE@gmjhn$iWFzfhIcC7Kj(os>O5A5k zd}{fLxL|?Ri!aXUpjd(yiF5W;+rXUqL@vHC{+(WI@YZOJ_&Qf&tjQQn&bNw^!VSKj zo*10ENN1_5Pe4F`($;^qwfXen!!13-1Y2S#k8HMK4ETuD1zIRmOmvV&&cLdJnI!A^ zOwqD#a<`FcXDusu)w-!v&%gYmcd5IF=kn8!r;Hr6erx&EgW3xAX`t-a^)PD=p z4V-y0mgIk?FD_yh|E_e4_o$}!$T;4k-=IecrtqqYqN4J76@`$Ovocdtp!7?K4u@14 z5topVngijirw8YdXU<%_h@EgdZAh-#m4^@Zk?VfZy<66=U%zEnKD8fT@Oy$>;@zv) z&95jgr?RPsEOmOR)Xx-(t)o^(4|KFNo`#ySrMa;Q8-erZ&!20;L8KfKqz<|p#<{0| zWVGJ3uj^*djX_4~rtu93HU{aH_?SO8X5XC-nEe#Yb!gZ-JMnsoq_C_kDG4-?nHnEq zOiB)=l3*^*Nu|xrkRfDFN{oARvnhe}D#}T0AL~-o5-ilxesxMs$;ne{)AO~-WRq$n z(W$lad?mnj@cPwWXfL5w>hJIC>b!F4@@;@k3RQa>!k|eq_yOwhZ>z&a3fEirLv$NU z5+~Fn%)%=4(A3?DY17epwXd%nCnsf@k-kL3-P6^>Iuq6RLa4s2Lsrg31b%7>W=9*3 zL9L8guQnvWtSHXl+k}@(Pb0w`Wi*CSK(|~nX|@>fpyRBc8u!0L{?zi?@$$k-CM5}V zl#io4<}0LW9Mg;bEJTLZG4V zL2Tv_*ifb<#-|s~t1OJ6saY0<@Lu%bkc}s|N3@|k{Z3dJPb=p&>Axtz$Bv5jlIa^YKE&N#$Yiepf zCyYQj>M{1w6vSd1Ra7*4!Q#c~>FUjul@SpkrnIcQyyD`ljB=GRq?oMPI*0li&aPZ3 zk*rt&bqcBTO!L{3Ut8#R-Vy2*;3W&aFq?SE9zyqE@Aa!!7#0?x%=GE=7uPH{dwX~V zM8{=jLO)qvSv3=T(z4{_-d=FjW^rsxbU3m7PqEa67y}J@AFt7qNAU_3IN-U~mMZ~W zmoJ@fMx?d%{H1FmKd6tOKZ4CcaDd-MeSn@Amhdb3a`cimY3n1!u6}x)f2y^5KX>uq zFf7b%B_-8W)z#_gUS80UhXHvhsi}7@uC7R|Uo1!f-d7Ja$YXxdJ=CsOT_%e@8fjr&z=rro<=m`_PX2_$h5*m>c#`}f!Si_kL*mTj1FYF4v#RDS-Ij+>{ys@Ade5GG zAw=CzSyJxav~JI?)w4=du_z`c;uf1%HMeHnx^){iEdI{^VKW;v);ow!wjo+1a&mHl z1Tfq_E&#+uIWhYpoyd|ZIe+CGUIjYQaOP~|@zb5((HVY5yo0`k-bc=S;?2CcoR9#K zdFGtTN*q<4gIen%IjU;8#OjmF?%G(6Z?*jp*N^bUw&&o<$Bm!BuW&s=)hYL4Z@#o5 z8DF7|%dc8;Umjolhtxy(i;ZmR0gIcAqX*i+i_WxL!7I)L8T1CD1!r84lg^yMKj2yW zto16}Ko3K~96^b(lggZBqIxx6|A>#*Ig6Q2Q1Q8L-ef@7tGIhn}H+tlF~&uapoG z#*PkN=+j9gBVCXcTe}%*9A?Q--v~xTsdW?A`}DS+{u-*VBWKQ@2i{s+FAoUEb2@zh zte{}v6c}RfH9z<8PcQg5UJ07X=AqA_enmaa?b)(r%g$l|_7lvE52*(JIz+vxaqQgL z^H%qOgxtJoHQVN5SYF1LrH}FjoAG7o7W{?OVf^W81Ac|;6#iK13+iL)BjUNun>X*+ zQ-G5J3tHh9clzFY3+>DNGx$$0ph}sL5NL$7Jb{3(Es9U28fTn$PL z2Bw`^InLU4ul z63^iqga@btUXzEN5LQk`HV6v@@Q$U<&2iX=(MyGwjIQ^=KC?P;P%5nX_4~We#oU?pqDbVo?d}Q%B z)x=+fG6->j@lnOHN z7gOov>;;?Fl$4uSe%IY4poWRb(SR?=p8{q-a^Agr8)m`SJlGG4nK}=CB+LV^#KbUs z#F@;43h+fTS;r~jL#(S46fxXyL!VRuvU+Epg&F+F@M|#qL3)AhjT3x;oeY9Q2~i;C zNCrG-wodI+)7fGF$kf7;s>R#$!FQkHuZN}gZCkl=<*H>Xm#w|KdYqU2fcgQ3@KIbx z_!0haoQ-^r`TsZYiZ_t*9`za~`V;KlO`A65+ou6|pLQzm6S!+e0YAu7x-9TMA9;Pq zEm@yLstJxVOY%KoB%c2^KwR$p6@_?7QsDCZ-FL?hEW(7ln_^S>*(%^d;!SEIOnj#}p@BFN5Hw}1vBcT;mP9Wh+OlYA?b*{XCMV&2o%oozgt+)DkY53M@c@4vpz7T>Z3+uB_>q@;{rr$wUKtQTZLw%=YEum4 zF@uM@yFw~3Wnw*Y;;R$a>b0;QA3Q}r%;Hq4uuiQNG|2(a2g z+8E%x-3~r$G)&~N8VFScOxPHalYg}%{?4`0y5xBq3&x4!N$Ll__uZG67)fTCDaxFZ z4*uaV&32FBh{$~^+l~Hu30ViegJ(|6qXx8YfNIiD>!sB|ldAMoyNUau&=_!b@qs2a z5~Gn{y=c#L;NwO9B04=G^aJqDee~{~IY>DWv;D4lg|JY_$sunS7SCR>b^G@1HBiL* zdTX`8(8QVy#^}sx*o)@Ig@^b<6U*!Vbk0&wAS1xV*426jr`L^_dTivlNi3D&9ZdTF zA@0qi+DfxL!KYn%S`k7B0a`%_2?U5;7-56KHny>iZS26|-C;*KBO)s!DP*d4PghNy>C-)Rx@u-lO|98e)194_*||kHBQhKg@5V-e009Do5Fmus`F-z6 z7_cKdv;XPm6Ar(}<9*xx?!Dh#ewRCn3bSpJ zE;8Eyz+frU5?F=2)wT~~G)E#c!O*O~r?qWQXH%2kf9KAppUsL)MuVlGKSzP-beAjNNNKaHX?UG6?-mx|-Tt{n6%dFl6A zZ9DgtmU+v>?xox_@|KU<`Ao3=Ypg9mj7Pu6NI3TXr5>y^zf-|}oAqbDq6en!Z{>R6 zW}fZvXVMDhSq=NO-7UWQK8s)Zy;t_|)$hL;!S0_k@iCIsX*ix{BZ-~Mw{vL?q%4cY zP*&;M*WoJ3Ep6V92W-9Vs|uvO9V@;gPUfW*f6==?1x0nS&5i?W;(1uCsfU!=-~C0@ zRUjpC@*j8BiL{g9kfy4vnv|RKetC2ZImplYpFu z4}-ydCr@D>dq@EkAi4DR_961Tr9lDLUqa_{D3@VwThrKG9z1psb6kl7yWIgs8$iqs zVmfFp4-u0>0VkFA=^qk#UM^Y$d8v#i*N6ptgAe3RmN>dI92pi9! z!w0*jr~QFM0udPL_zH52qARE(o=N=5j)oIF1YT#6VZ0Fwai*qstWIXDmn;>%xF;xt zwqWr7)@oJT9Yj7<7R%+0#o>nlwt6P4_Imd=lbpH2>ip7-V`(H35g#IwKS&YxP3r(5%vd$Volo4KdV7&shT?)P&~ zwd}h!xu;*;!x#N|`5ktp)%X<40bYLNzwXJuz{tCPgH`f?^ST_>uD1T(Hj6q73s|lnAbCz>_`dWc9C&FEj=0!B^4EQpeM6r z75>Ccc7L44d{hU6kC=GCr;mfdo=%=rV{~+NmC@-$ytEYV6k5*|n%c96viojTRs*Ta zHV(r-wuL`1_826KR%tG{VtRQBjMo8-)M|D|UdPwn(dhCL*wq?OPRk3mb=4WJ*6iv& z3ch);p;S1Hh`b4ZBx1LF2`a`qplgtr>#NOVcr;`i##2bso6$+|&_GO9RO|#xudiH< zCN|g0%GNhGV=?4I=21%XbEz}#-XGeRp1gR6rM1E>e2AC7@(#w)j9Fp=Ldo8?TD_$7 z7Q!|@f3URVaKIIX%L7~U($akr&4C|wby}@df$x?TbYinj;0OZQGci3q6)+kn1Jl!! zxFhU^FoA058L8Ma3&yNB_JW(gi2eg=jPuBiUy- zfQCTEOR?C(VmQ2jyCsCL!~oXHc16W>WptG33MCRnquX^k2|mc~$!7Gggz#3Z&BF%| zfQn(f7ku)pZ})! zWOCTCyt=(#|9cDq9(M_6HveR3^@}D&M-#2Cm}J8@+tq0Ng}(U(bM>nb@OJmEfa=MO zhVkX{MFkE#`2$8ykUYOCgM!5OaTP_-eD$TqA_bR8Vq98UUheA~ehpDcLkHYu=u4HE z3~g}kL!4?~R}1ip06|w>EF1^9f@rajQvs_YliaDr=QL=JUYh_!7z8XVn0;%F$JR_m+D(NmfR(l;+J*S_gVp z1_`jWmm7f^gzak5$puu#(@qeqbqwKdbpTCbf3>wB!inW;EVamXA%Y8c-B(g)ax-!m zZC2#k+}g>xb|sRXZJU_3*M#2M?d|U?cq-Z1hd1!e%0S@rdk-Gm{p`-2z+|aF5Hgt> z5sB5@+}2{TAj%s&1K^iYA2Mwvq6CyZoL#{RDvWb8(^Ht+eK2kPzLc5cP>}3Zhfi5; zLk!KI{E1NbCx3!7a(-5cPKOaZc}TRIC*Xjk(}?_?3a+o~^>$zy*?(4w9L`cb4f}8j zHo2*iFg!GI{rV)xgwn{`Y_I1)~@m0>|DO z#fX>$GTTgm3x0V#{bmC(kcW|>8KW8;NQ3@~k zs2%5gA$e(sr9oud{#Ncc>zQXe&iNwJoR8XZ&VSJ&+e0y4Vb_TL4$@r7@8l5tbKlF0vm3*7=-1pAISQj0s>|8Q{(JPabUs9SIx`Vim>hrhtlP_#YArRjwcN-gP=YH* zVWiL0)@qf)Y%Co0*mtTcM0v7zLWg#0HnP~B|8~XR&?!G=)J6hcZ8yg!`fxU$~h6q(~UaJ$?L6eBZ5sP@q*y{2k z34unOwaZowqso2MTQ(S|m3jZ8`}cFR_FHJJC9k5~y9b@W2UTRDw)Gx4MzV1RPaN*+ zZN-DGy*)j9+T67?;+8jPi+c~%>$}wm-=fXwA4f2dP>A@OnFXMj0M%9iB1Ad1h$UEBLay`pyG;a6qQ%&906P7CwTNlf9^1sut^~TFjh*iy_FHzDm|FlBFH>QyK_ zzXWOl-qq*|T~=XbD&=bst1Q4ksxd2svFXvr z_wL@G42L2a%((>rC88le_Qb*_Uu{64juuCWIFU!S%J<0dQXfmVp8OqI6(HSFY2(4by2?CUZ)vIdmfCW(S`oMB3PO)%%*%Dzu}PJSKz#Wxns1L{MgF3 zM#8QTnKpKX7_`=4@a{c=?emMD-&rX#xO#`KzjyOpIGVopTkpPm9(e>#*YNOQcdMfe zMVt+eraHU5Sfw&p4OSQQUnF+j@{p6Aed^xb$v9@47IL4`v`UsvkSIvxo+Ohxv$Y0? zew$iCt&v0Dg8V5tvfsNGh_SltKFqK&6vBS?`=c3Usm-}CwYNQy6|1ccOg0^2`C)i2 zg<5L2BSU-?>6PF%&!73>hk5$c>8Q+~=olP^+?QgpSAEUp+V(}j_u-3o?r^y;f0fI< zb7$L^*|{T*1$OSfi9UBY^xVxD!KnrR!Ny3$qrg`ARl_K=I1z^4RAa+;UWK>!D~I?6 zQPRq-J`JN!HHq0L4?*saAAqaY)p^Oe!rNk0a6{P9qmLiY&nJ_#oLQ(W74Z40#E7y- zKxKf0QW7?vDy)T;?@}lHa6U2*C#Qirnab(P>^yAZSJ`=B?>Bbc$9CQC{`v0v_}2TZ zyo}G`fp4c@DNbJ6{Y?6bXQc5h4Ug?#0*|)$_eFcV`%iS4&M%n5bbbnHS`OqKty%#K zKA;Q$=HA`C$AyyzEzBb7)z|jwNj2o>RK$secScArOiqVkciKJ6-8*`n*ovrSdmZ0( zzwuwZ-#H7rSK-C|A7U1|0I`QOnMZ-y)i0QjmuX6+6+r&VB_fr+#>Uh0G3`0~LNfb7 z^Nv}8TzWOBrG>)ej-Y6Uo9$kw-S}g9rN$ z4lrr0;|NtA2UU~({&aYF^f_>akwOi~*QYEmA~DgG0U*KxSd5_UoqxT(Mf0UDZ?P6f zOZ|a^J-t0WugzP`M^QZBR(W6oEK4i~UEF(g@uFCK?i>&n#^82B==Jm@j+)=jew+Pn zo*VCP$xG0$przJucy?W=)@4Mp)Os}j?z><8?XUgz-a>Ve&S*m@>}!D11z^Y7^CwR( zEd@h!0sTGz`NN}+lPSsu)HZi`IY?Ufm2#1vN^%fVizFT+Ff#|`lsI5QYnz!7X(G0X2o;mbWZ(-& zlw5enjm8r3#_}@i#psPWJ#9aFW7aCNfNoC7^%gf#GprhE0xO(Q=xwb?ifS@abw2bf zk>GMZDB^L`sdT2iyhz01L=gGAkmL!~d99DwIDD`uvGa2scMak2qx+b@M-Lx`!`&V6 zj7Vjy?dfT^sLbvT2%08WgG)6J=_9Ogb@ue^YXGv+EmEY%Xd4ZX(husu7*Wtr=uD$l z7Z%8*3L(cQudX&0h*m(2vvUqdb#5$d>vA{GQA5X?ZF60)DJ$`uSLvaB<*-gHw+Nz#F zpi@VroNRnK`1$7*u&3v3N0;!8IzFG4$)z;$bnuFbka9H$gr9Tg5Z$QP>U#QmyL-C# zPE9p6w(P<7-A8r!Wb&4lhMFpU3Mpj3=9E5pJ~sBWwN)Yk4A%z=E?tP9-@cu8_Z{r> zw(XdYn%ruzW7(=)#Brk^T{Q-j_R;`%hl+(}f(s~oCL~^beMzaISV3n23B*|0-X`^Ken>>+in%)?43x|H5D^VzX?nj$;?`wcmMvc(|eh-` zpF42o{O}1c!t4;WFI6=*LLaO(2&3V+P$UsV@BirU{`Lnyze^5TQ;}%m1BFm2SLqQp zTTwa6tfmS$tp3qT1WlSs6tuFWSUS>>h(@OF;a5KT`49j8-+%ZhDuCa1B^XJnZTNU& zql&2Nv_^}%O4vs>1PIxE3WgGK8$~4uUXqiWS)$8zy0qL(Hsx>_G&fmiM|It;iq7zq6gboz9*<&>>EWzq~`dJsnj7#8yd1e5#!MBddE_6x=pP-+)jS%Tc+QTV)I2iU{!b(!VlH;_ zJi34rWo@5%p7-L(|3fItz+ISMiY7#*PJqvM@2#i^hwtBoPw)Qc_ru|e3Ow4o*A1(! zzEG`E>upYVA7<#Nx48iZT_>R3HK;#@jGwDlFP%Ns>`6Q<+{*0$h+U4g~HY#`AD?$m`{B=7U%{z+)T%O4h#47E*A`S12wlG1h}s zJDWONO#C@=JZ1_?ZB4F{ncPo4xj#NL`E*sP%x4y|Tr8N|wd@^l$6aaejybz*rvMa0 z@gUI?e;JK|z{ek9*!eYA>|AqHw%Y0lyUMq3Gi%PSGTZ9lj#kw>?i9H@61&tcj`$HM zG!;#7WeQpfEb-N~7|?$D`%j%28q^mT>vak$6Io3put6=rjj@?6_A)7-5BcpYRGADm zB6eyG28(=c1`5*Hs80!_(&Mqt&bF2sX)y5o*<+s!@d=NgjXix5Ow3NN>^NKKw)6nz zuMp!c zfkI`|?t}fcyK1n#99A(y`|-gG*RNkYLtXOS5@N|p71`{FBDI-F#$f|lU0nnM%MxqG+LmO}$%=X)SG zr(edLwq!E!R0M-4+mQ$%Q+R4}DwS$$J8=?n0#I-jdPNdHoepL)9UUi!V4cTbIP?-g z9DAkJPX1SNvlxW_p=DxJk*;Qw>yhJ*+83z#RlLth?-Ou5NgN#ro z@<%@&9W5?)H6ShqCwZ-pC)><|KVep^)nk)Hh!S2h`navl&&-M_C#75pjOmv;C8ZzDW zic$Tlwy#{l@kk}x0GCfuUpUB}&A%8j%N@xH+qpLTik3h8@WY?}-0v?fbvL5~Lt{%* zaj~%o@ky}ze(_khjSes7q)|@KdNHpKhZprldivTc%Nu)1UVBe>du@-`?b1cDJe0-O zvcHF_+&QNOKwcVsis(YK*{m;+D~r?;pQ4V0<=XTL4)#$5E_HTH{|aO3+CHLudoAXY zy6*jGue-gv$Ln%vB4{ooGFY1T_ZW==6jnfSRG!f|H1w6pOfHHY+$rnY_Ehzx0K!GXcs)zmaFz@!n~IK6jI&+#(=78x2if{H1dX#2*E>(?$_ zI6r)PVE^^YiopSw2;DB<*L(K*b<`pAX@mtO1|mq@HSVq>{Vj@ca49tBBl=B#xh%$F zrA#nlMAs{9w{JiA{KJo)u85>UikUVe>W?z3my3w_b9VJut(@q^IlTe&__GfgdTaqX zwi-2#4oKbRw)Xl8zyHIZ;>S5z(%4|PNtLtUU>hZ7cOz*+WGI{1{kTctfZW@?;7}1D7W)u{In89`f09m#-c} znPXeIs}^`{Kwz)VWL6hexQwrZr&MscLH|=ya_C8nrk_0v84!Qj*J_Py!1a`)Y0^fm zs}yCT`IROGSG@S}-l!i2!RP*^j8r9;uSE1^rs}%-su~Z1I6aO^7za=UL6n$RyGX?y zOA6Q_o_=xn(IX#cJ@tW*R?CtLbJ3i%Vn-#IbH96 zAe2HUqbrNKmEW#w0}fs^qNX06C$Y~4co7Vhx$jKVKzT~7D@B9RcV0!Lf>z}1^Kub(?; z(o2!MUMhAE0?~f38LlB+IxUisdI&WYY5_Ug!poCMrMb!E2zV{<3Ty!GwEGOGQD0LX zT7df}oKk4%Y#MC}g*YwVc@&HZB{?c0vPQnQN(*!p9Hoc9@tyB{XCFBe*>2o$IyI!` zE3K_?5q@-}mrtw9YTCc^oiDw9;rhEss=M3|+qh~Gmf=hkk>D!=l!?Vskcuk6xWTfq zMPt-5Dm+T;@150UWk^3UYElci*55$u4UZlz5HrBT#{i6p1Lr$>@Zj;2=g&1ZN@Ysa z73+nH+SM}%=MZAqP7S{KCb3H4l!Nf<1QeuaqmRH>NNogMMMV!_m3rh;pflPv9j?E*rD zE?vHS;{x#)9zSL%%pkCcr-QCnJz$W76KiW*4h$e7<5mfv-6|?(=0o!{h*jriLCkXdh@r)u|0dL< z9p9AEoH!RB-S*83m=A!M*icOZphq}zq6QfGNMbWBN0n~)Pfwh9?e(_VSrpi+sX;J& zBPN0ekCotq3L#vS>AE_bS+O3TpF^K#7tr;(I+PL_8w)`NL!QjIXc9Ha58;`0!|z28LIiLd+v|h|&VOu*?jMz|t}W6b7NdqCa`^ZKS}z zixL#bvg$f^`uz2q@BQxY{_gwl+`Mv{r2oTud-I)lZrpqiR)lZ7|Fw7C`R4oAP9E~q zxoTaW{^Qs1t8c$^{5Yv^i4RKX(lXaxY=dSipdNkYnG{x%fVqotp3kI{(a~T0?9Kyt ziT!gisJBKgHw}3O{b82ZGq{{Epe(42c40DS=*fJ{ON zvK0up8L1iug+d88y9xUqh&2&gg2KC;;ii1*qy&a{sTfF0JTB@3r1+`4kCW)>l_8Qk zORlkSu(r0Z4j$n|N?C!?y!FBv3;2`D9Ln2T65I+fIU@NY8|u6^Bykkp3ixX|e_ zB3u)b;iZO#egZ0m+={OD=4K#F9XkV^@AbiBhxT>@y14hqY1Q!X833)neg?P^1LuZ& z5$&czTvYh+?O*yQ=km)#(2cSGXPN!aj6p0yEVKkWnKx37k`Z%cb3gw4_Q#JFH&ZZ- za)bq?xOAyZHn$JhJ*?k~remxLrE;itl)BvM1_uDVR|!@}S86RiapDT}QC!zgoXBJd z*Na1mh8o@NZMG52IgE4yT`~e}dADpoCx$2fI86WM|;*VXWkf zwNo-{_u+>c?T`QSw)M-M?%0;Ltp@WTyWvG4LafcZe{rw(KGC4T`gEhRl-TP3`unMuh zSm#R9B*w-vwb@{qIZvGy-Pl;U33v?KrQQBqJ8Y{5a(6wLW77;N;W0Otke1t=4UV``G8oMA(_cgm(`q22XW3845k5OLv;vDzkAkm-rS1_HPy%N=BMPb;(lBS5^GnI{U2(zOhPGY!U&Cp3&&+2RJOtt66^A`HwD3>FXCmP)l z7I4AY7Er1+*4}<}kk~N1E*&(M=xS6Y9vHZI9_OUj&tE!xm>~K<{D5OjpdNBEvy$JM zAj)vM2*r;~>X)d6T{p(2A(yKZ{8Ts$_#JXRTby<}_wNTGfE)sonOJ8hst5J=!_d&` z;|0as?1&ku-IdOnZCtFbZhH$Z*E~DE9M!-0vctiA85&%0hL>z^M&Xlz0qCa7VTG{2 z{~S&$XV0EFd*A@oj3BcALMx=r1xDhK-B*TG&A7(K=jUo_dI@YgHuYp6mBOAQT=;PR5#$zFu)9&b+KRR+ zoQtyz*9t<7UaqSnat-@#24QUx=q2V#yqM#juVZ{Q+d2EGQ-jCw$qsvYEy=d-a@W}; zm{dVoZTI2B`&`sf7J&E#)1IB1T|nJ1tJS2H^E1GXv1t`Fsc?`0$WN}7|CP)lT0ve2 zq8T7R&keCWOY=9raRABQ|8fg10H_eW z_ur?kGX1cc^2%dyc7B2Fhgpjagn2+eB>8?&UC5a87@jNHEg5JSTgvdFR^HBh? z5lrRg%^PoAzI^$F*WEL8@#4jkeZ3ti40Q%cuIfIh?f^ zoE-bf)!VzTrK-IQ=PZe?uH)#13xj*9Ye3V3#HxiI!Q`l{sjoJbsD$z5NQ_Y(=Yq__ zpgY{m2zX+pvn?mKgn(t*xloKJpE>hwr-q!I2XmU3pyKd%6T4xjtFoDtQR!=IO{asC z_#vS|Xb7$XNL{(O!rg!DSa&0J7Ab5m$#)Z^0Aeed>6)I(_m7WcB&4=fROCd?uFkR6 zCYHnHHQuvWHK&G049{`7g{e)nALyKr^Cd+kmfGgt6DOOR&YbIOX>95_GtdrigU<$B zwhRGpr8X1mbI>Dag2C|Y6#g+E!$^V(7?QSCD7r-G!XU<&VtkpN(GtxH8i7*FPo6BV ztYzpzeYrW4t*|5Jv8k7svTKMP$-&8N@(~e>Do{zW60s=qENVolctm{)Z3+;nrc^;| zgiBJG*B#iA<^8FwEZSW&pf<sr?UtQW6$pu4aa#G|=c_aRl6QO91Wl<;X62m}Ht4c#kkx68Oml4_KY$V%lT)Z+cpj5^PF(=hk&OJTeJuR-P%Jub( zy3&2{6#vvIFMO|7MDX#9*qJ7?4nmNGZ}H%H$L89u7L_pq3SYvxW@#yfq(_=gGDTHz ze8?ftd>y^=sBm~oNQ_7FdpWdwYk6dwUO%N{Jxk z!ybzYsPCFw$$=NeHLPG5zGBRf*%AoETcG3;B?^Y_4 zaqyJ6`55*iO-senp`mLyUL87UC^woMuHN25hYlRNa^>bt?DmW319if8%SBvuG9C}` zdO-AjffCr=J;5USL9Y5IkiyO5DdEMgWaZQ^(O&EBf)At`hOHROS8O8)@-49${B!3H^^qCr>pOMoAn-l@mihD7!2I}A{P{!vH-TaUkgh+Z{%sB~?$2ar`Vb%2 zcjg^LAi`iu{VU(CE}{y*DAhp#DyYT9ghY$SMWRjc#uxvlUiGea+Y8%Y&e0Z2>lHc5 zXRPn}Y{XGyBYNAjqJq-OuC4}i379F#L+tRh*C+@Ua>C|p?ds~Rqbz_&bl8D|f?^C4 z2nd>+_QS#Ts6?kN)|HhZU=qSY4rJ6K6x@b@Ty#1dJ6g~0%680fDarD~$Dce#>n>+B z$(JH$7tJF3QIGU{#x6X8%%ll~-i+S;3?>(nG?&vj^ZwgPJx9oLw3og)Iqo05M;GM3 zDIzKTOsFud9O%24=EkFsA3K~|Ig~_x*CrA`XeRLFKxGqpJXq>}xO6R*HbV)?N^H`H&fFItyJ111Dl{$Mq!-QRj zJO|2;V=F_KV@EH#stVR)LO#V!MwW=@V09ITVkl0fMh%@MDf2Oryr>dFqM@PIMeL#y zkzRk{!h7%z{?>)VM-TRi4jejq{>>Zje!B;e3*^st>G$8h3X}8YYd7Bg<^d++;kyJ9 zi~;KTF8^D<{k8YrV~l?0>nHZPDsA;$$IjzpUwQAs1-+gGH%JWCZ3lo5)k=Nc2W4Ku zgE_3e-lA3r`4ad~5$yewPagSU;Tww}i32QKB8QJ0fF*Xje{6!C8`zhy0M>GCv%0WM zi+5;lBK#b`_QtOF z*s=Z&Vi0ds6e}xSZYboXicAD28^rM=ID8(=A-EEYiNz8coCnG^UM@#WmDlPaT0 zgOVB3<74C#SS%zG)k_Yi_d=nns`gfrK-bb%RTT=|yNk!M7G zuI{eRBLnq_$Wy#n6bG{?oy?*j8*}?2Tgugn0#YkWBI0Z=jbhxR5AJ+Aw!o1oWJ11J zQRc*S*SmOhhUM}3{@3*6_w!BkztO6I2`Hn`*&JqA9*90tUR*pdaEXXP2*QB@p>Un( z6wsLt;(+XJcj1I$OvAWuc4OlMbG5fsiY&_9-W(evbcED9X5#POeLnW^&b<|(Fuj9I zadSM9-KqJ!S@w?3{fs%YZ(n!2-NUSOYrEaPuyF5lxFxo&bkUBLolVty+$m}}f-qd}4$2e>y07##y&_a8aZZI>>MJ)I8Z!yfN`@^Fc> z8PD&y{AyWi^Q-mugxW-+HR8S8fGLrj)T0~GSQ7VZ>mt$N!^rPAfBxL1%jY1XZ(f0i z9Jl8$T|9hP$WI{8Mg*;*2%33I>EV`A*!c8K{fAGUKR-M`4MH{|F0;y_(IC}Kh#)0W z@pLIXL$X#S5^@d-;z2mP$)z?Bmj-Y!1iS+v2pXv8V{(nIs(C78j(e&VoRufcBi!s* z^Pb!ce+lDg5(wZnMul-o!6ju|QAuZGqq7r^2VA`_Z3aJETa!w0Fg}M2rPqc58chl{ z*JF{Z9gikqpvN@iGEzwQ{81i+j8+1nnIlBx?h}e&^^GC4Sct>Xdb;BoU8e#4e6JD<} zH^MC*MLzxb#i!wAm|prs<0p zsXaa}ok))mK>L^4Cdsa^Y`e2l!SWL3tRJ1~u`zxEMx+kxi0ul96Fg)R4a5#oU}S=iGb?Buf`L2+UP&akO}`t-Lt>cspAh z@_EEyr!BQ!FJ*->ZAUB6L&g!}VY5}5O4Mp8bSJoip+0HV08 zIhhNKj&v@g&?8jIfKwG*iq^`~QjZ6ALR`%?Ztnr4P95y_ARvjUoHQ_Sv>(vS-d5*{ z(?>g`WgE~DWUiLuCqUx%Y!+S*OA`XlTWZ~1NB5UT7gnRo=u=>Ff?XdQfI;Br87W8d zyUqT~Up{{F`KR~SWptLAEOU|Sdbs7r`;BZwSAF~QYIWjz?AX_^5{f4B@`BhG z9BzX`$gQyGH5yTL%0IEO5tx9hidHEUt5HLFnXR#D@8QFT`@Ai1?%ELqkqqk`9t0^g z>TxRMa-&3vxO0DW6xC$2P~YV=0_3)k5!mtMWi@;1e}UStbF}1~FE^PKY6QLTv^H1s z`qEzNmg9ZT{{EpGU;p|WgC|bE^(|cA{MMJgWV11)l?t@j!B@Wi^{;>J>*vn{0sod6 zN)MBy^=$0TPYHP%2)=6(f z*CT{yKpV{O?rj=mG{%vsjkRF<%?$?W>O%w-jHcBN$eeS%CaTPbRJe`BsVPQt@VP)9 zJ2gq@uo_su3sivL;vpT@2r(Ogsy&ktDsA~}*#DXArWQS%_vth@h2rw7E34S0v1Odz z7T1zz&%X86o49V?JbTt^6>(uM6ISL?({%+Sut|)v^9r?kmJWldGd;6Qb3Um zQIe}xC}R(V+$2PHA>v%%g+wd_%frbG z(S5GEN?7x1_ntzj5`yQ<{88Sx;czg%Pr0eC)tiX{wove$o`KU>zOs+JA^*mEZ@>BG zSHF!yTGt0*+f*%Zg$g=Du&vj)ST^K}VD;>_DlFJ@KUuv($udc>YpF5dG;gXjXoc}S z9s)}_W*;llcG3~!;a*s{|KL8Zd-oR>_Im{~Ada{|v|R{gBhDHUBWAOq01slmWD`^V zha@S$iQ4QrDXGUer6?HC-`CytxtJyn7pll7K;cLC4}P#iL&;mI*giDu=n*e>$DD*z z*$8aZFfQ$zo#h?nV*AN6AaF;Y`XXC@9iU5rhM#b zK5wK3cx9O^g&b-HCxnF=U8SUzEz$%|V^~VDgrCkRvA`e)4keK7=%su|zv^>$OijWy z=!A>&6CSs_rKPs^{{0{S=!ZYtOjK9dsSc`X)-zO@pg7} zIu_^ZYY+nj52(J(Xssf_V0M$K!bw1z+;t9Er>Kn#mj-`OsS2bVZZbxWg-c5dk@&*A zPddLa`H&pt?tK0@uw(Q)Vx04oaUYbS)797ExLoh5*Xf=;`^nD`Z3H6m?uAE>#}EnJ zSfdP)koX<{b3!zBA7Y&G95K%1Zu_VQb92DhJi_7sxVd?L$WZBY)iwNfL&HF~Myo3+ z(Z4oCYAkbGmOl5XQMPC75soC8R0+)6PHRPNE=P);(|lYsdzW7|5*O5Fu_&d8(&EI4 z#Kk`(3XA37!E+ZO;otfS^osXx;$N4}9Xu!$I-njqu6AR`c3q`zBBocT)s`3yB??|< zBQ!G;T3nd(ndd_Dv$Jzc8(g8ZsN7UuQmoZchko>vAh*1`ugA!p|M@@fn9+Q6@i)+y zjgh{05r)p^8GEKq6ahK*d{ToqMEv1%t!5FIsToe z{W~=;J>k9dM85mUXzA`JkLq_nxgE$qVP&a=lJAIcsK9}Tjd&n>ejAQ?@gyv^i5MXh zwV}$5fc~~toQRv7nmfu#0Ph@6=jesE)CO6TO11*Js&fxC8+n$WK@N2mvmpQm;&-ip z84~j;)K1}gx;-eV7650STBEG{k;_wQG?g`U_jSt;!6t3;9bxP z;>1ZiJ2S^o*9;(V_IR_!L7x$A^Bu|#g6q+it!BChCBr*NmPwp-Gv<8B% zec-@Bv4}8hWl=YxCR{jC)qNc1B0Er-j4cb0!!2CX)ifebmQKvg*PH~3&TbbY{fQ!t!~#YF~#Kq6cXjEz0t)DxaoDdLal(0()pai>kG%1d?n z1eB$TxDeS*x%U4@wBMD96DKGxZP(yi2q1m;%{Slu8q~4(zxw5CuS5TUPvj~qzN?zr zyE;ksC>VXSr@Ex1#L?1!R&e(0>wBp;ed08QxVA#g-;Iy(xY=ZC1db6D2Fi{=qXn{t zkk5rnLRTP35W7VzE0iJl5jEQ4ktHNE#8egLid?VWK(87k1W-sU%x=aKF)G2gxLWof z9XvhQU8w|5$i#;)UxnfS`gy{ZPM$pL)e$dVEnNUhO?2!TywCwIAhjgQ@|J@KJBn96 z{n6+q=0})XiKc_hWL7po;OaVK|B|P^aJ)kkNb!hlx}|q&I0d zAN|LF`1k+e`#*j3Y;nYdyrqz}XEb4(ei%y(aT?H&|{ov}V z+*0E`JV+r&4AQh1H+3i8k)-prNbTx>qxP|&V8loJQk!6-zhoXRckRA zU3+k3CDXkms89fB|5 z#p9U~VT@SNV)>jv1{du(pPP;&%ny9Y;A|pAUJki6(BHV33s>F%Te>z(xRFVSBshi> z!Idsi8DKQGru=sTaP0F_v;OggL~h^zUl?iEfZYO7WHOb>Ky|ATASJKk|6{)x1x<2P zrI;5(u|~M?(7&OzBEI1`GVA-i9c`W7Za7ExdAtRl_P$e~uao`z2VO_u;4n1=+pbK+ zhdheKHWR6IVr>;(-uU|B(|f^qObG5>D5vA$<>jT&N}9|4{y+YwUyjX&6Q~D=p=34) zRO_+=es6p8-htDnjvwgq)T(nmW{?sJ`Gix&X+7$^b#=Ad)CpKA7U*~nl0oc0AZjSI2D@S2qRArt9|q4)oa(TUd2dW zCm^fuTpRSFV!TfbV$DRxKf8U~r{~?io#l``2k|GjZ$FI6t<_D?LfZELCOoIzF}#D7 zZ=h_Qs|RxPWZ%BMCoWyMcZ|9A+HR85-PjA;c2EDKaaOm6fCl8wi?$r`AGD=4w@; z#np;ZH~oEG9bOV;wx5(EcFEuj&2B_j6DS!dmY_Kyl?G~gU@p9b%wH1jv7)YS?MIx` z{!Wi0FC`A6y$XYp$g70PG&pz^NDBm{YLC;xh1EHlq3f^!N1H+RJ`>bz=3M#7?YnnB z^RL9?DavY9r&gZfq`Z)om08)nO{lt}Qc6^;g>W>y5d-b59Xix=;`lK{6Q4M7_|X22 zRuDOL$mcUEOSBsge|-Bk#o_YdwZq*1^z%h|ZEG`F7Yd5;a&u4OObtdZ#slcfsku-% zvKo$QtnDx!9z6;;u{}t)en<;5sr4n=Hac0Lo-I zLmN?2NwE~;3b+!X0v277Ajg@=jMxPNiczB|k+2U)9i*D)(9ym=fvACyW1pR@Gv9H5 zRJ4QJCOd+nL)FTublebcU~XZ-`(B1r&)*X=0x=O%EUkY69i1QRzl)-AackE#4=RW z05z@sB&-K}sjdRhaBe3tmVB`|%fu{Wp5`(CYvB!*p_z%K0(tu=k8@zO0m>((y2Vn+i))ALzQT5yvBosX_%|g#y{GJy^qfGwdctsBZv; z#ip+lX0pf;NQh(rEJcZI4lKc0A;KbT4!tl#r~u`d3(QsoOr07o zcSN(q)CYP1XdJTP12L?z-=E_IghPs52KY=0G-{>Kmfna$rmnz76h*-z56twvd%OD1 zoEg4!9R|_s*Dqgq0O==FUmob%iG~m#S z^ZFji^>jHal^Ns?(9pARQPMIy?6nRAx)Lyh*RNeqC0@UF^$JdRuMc0m@ujcklsDb) zeCfi#;LwFPF!-w%&R>Se!*zBqkS=^0aBs}KK?do<<;5p|`Tc+RhkyOuec7*Me@pN` z{l7n+7HNDofkaSfv6gC3c^g-HlTqYgz2^voBB@Nm$DRXY%Cb96fPVU@yqBB3%X=#F zQ9h6Jkwb@jr5b~sIQyB%A-G{tQUGUI}@L{wPJXc;XQwFH|>sx5QC)>dvd zH`F`K$Zd+nghFUJS)tJeRTOzrjj)$wFnpNl6*3-Bo=ZysNlPdiN25}1I>W@>Ad4x@ z;Uq}3-+F8d%Y*Gxz8CCWKC6xB_2s0lj)$$Q^XZ+>k|}`WqOK09kTN%mxdrV5ewf%8 znPMilZ)4-YFwTdg-I0$pX1|(`h9I`(*2Q@f3iRl;QpOq3)>2p3)4i|FwHXcur(!V} z#1_`-+Pr(aEeo@rmaI^s)XR$W24dZ9ayXo|xeHWHCFD|dF#Y z61j=UgPd)j{n}1CcKKKuXKbrnm|VbRrlvqW&~cZS!!UYzjvWP??mvngsWU_P*Wm*m z&+@Vknpw#aE5uPH$;xQql_R51qc!TKf;fa8BJSrnoLOMbBV>OyE0t?YwK%lv%XvqC z_=AAJc68vlLo)xPAMKdWe9QwQ-?>}>=A&{6nLL822UiVI)#fKTocj7>(BzNSZ zRbqeo0-=jt(L5cpcY@rCvUfXIdnX6Uw^^1!)>G5d>S0+ zNCgWCAkukIrerh{V&l1WJBHu1S!Cp3$)&YrbtI@^Z?i!eBlT7SF_p>HcMfN}^Zmr& zC(33il2gSQDIuIWn{_x$YLSq?9)P=QJiR+Xxnb7-;Nhc8Hf})exSTJ7=%00ojqucS5(FBRSrCUnE{lS=nloy%8wqUP zz5N46582ApaxrgD2iY{mwY0cxsDDz^;31-{)kd-+3z7?dV;u(L zDBz~>Y9NsE$r58@It>&RC5=^Ob-i!ntKKRtpAZILZE4&ONBSW|_Q5To*O%yvEe`Jx zVlm!$>->pRr%#<+iD3qSFuJUP-wMcy{)Np|3R^!xBuwC zu~X;3wB#91!{NpR?D@|CFn!-Acow0x1^gUs{~ms~3sZt_ZLH0&Z6eq^Q^eXhj}IO@ zK0smv+ATUJrZbY3X*%?E}M@#UU@OiN3;Q)C1>+*DeZ<28l9=UC13N=72gk zC|L8g!p-$b9Bm&5(^7@blpFnNv{zj&X3#(48CkKbYaf;!(Rl{t8YwE{UlD6X` zpwmK;OrfS_<*OYsmW`PjQx!p-tCml^T+!9Ex~lHT8#gY! z_WFg(7tg@-1ZCj>(i1Wepee20eHe5y)JgUFiom=CO1&_)p5{__?giF_#pMRAWTXh; zhA;)XT&OOxGLEI4jPYrMi=`H_i*?VRPli@viImmR(A4UQuQ#@N`v-?kA_c%#h|}51 zJeD%xAM^WZIvD22=p3(RcCjQu&`Bc;lZ#Pg6m2Lf8Ub(KbLjBFLwz`HcDeP^49V!8 zU*{`q@L9B&N@%>7DKa|u;yl#t;DErfi?i6pvC!iD?85R|lI&tG5Pd~b_)ie~4Obp^ zad`5{<0sg~RV`+-BC*Wu;)P9aK{-1TBB5$C8$4ku0wCIDev&BB9F4JtfMp%-aTl4i z2{5;1Ag*JnhmW`cK;m3?)zuiNnaL%x+rc{E;~{wKN}8XF*=(jFWG}*Ex&R}zA+ISD zu3jNn4Z|7=?@U$!Y(k}0!;Rek;rG7xy&pbU;T6{PVwL*bMIZbIQrU^G7LJc2ZW`BT z51&tx5Y~<+qwxdCKSMj+k?w{#WdW%^=PdKnC{7^#hDrVNIAALpo$`CcghJtB2F#VL3> z7DJ(xq)=S~Z%wJ17l)5(4GeQ7$tL?pka5MllF zjNMhq$tSl~0ngWQ?RDk_MPq*n8RuW&uo z)c%qX(GelCmil5TLhPB&m+5f%-ar52_rCX^e(H9V(cXKH1Cex&AP;OKM>!#Pq9m5n z>!F|A+MB(>s|8U0Uh0ozzx@0GiE$!2qw76(XR+FDKHi1B)B3h+*t#8ed4wSL&AcZ3 zsyp?L-xKe+Gw!(iZ`Ha2vy4O0K2lr$)?VuSzCYL&mBHoigKz8KqS_xNrX+aN$9a$1 zOZ~C$_qU$hLMiJPPuMy5Z#9= zDP}Sw5GYV*K!JK0wT492iQpO~)91Aq<{XhoVEZyxB#Jr&xNJ6p&QM??d+^~yB%s7I zG4gK{OD`lk)QQZ=SyH%lDJ?5hlh9>eHVtN-5UDjKc(ojuz&HyDxs{cWzPGe4TQSW^ zt&yFyvKpD6!ft;)6HbiCVc^YD;u2VR5wxq%@j-IJZQ-iayiKu;&cqf-p@gSn6I0J2 zp=Z}9xq`+?3&1i^D>Aga2&sUUVu_>}?x$kK2gr1d&V}@)B;Tr1i0Utk@kf~{w z8c0nuPa;OZ77~m23vsY8^^>azDCb2*g-Sk$%zau`4p!~bBZCaQ=}|CM0K>M568n5K z@NlS&mB?B=nHhn0Oo^m4Ec!y;h+bPHNJP+Tcr(pcn9b#CA&1zm5(2fEU9U@My-uf9 z2r^jH(%xD4CDc3`*u&=`N zi^8adX@o^(IaaGtnMsEsiDDwPH784nZNWz+eAM`Mj+)7FI0Jqv&n#e0Lzx25zXER} z3tFZ%!Z2fm4wCzd3-1*radZuZ5}7c170F5{$m0esa0H^kB$LaHVr ze5nDHjT*=fhaA8f;glTyCubR~0}@33BKL20c0D^%7@wb6NGggA*{n!iVm6ygRHB>( zfb35T7NDlS8G^c6qd?tj|8xi^Az3*-Y5*`wIGl!#Yzjpp2}!ZZq(&H)2)V^&vdu^c zK`t>+TQIyqiF51sF22|bf(%U0Pou(fj3<;U)g&`Axr!c7r%UU4iK(r_Y_->5uZuUp zY&LMV1|9;eswL&hQmeUK!J#6clt5@IH0?(w_SAAT@q6IZi3oBZ#p3cE17SH0W6dR5 z2%T-6m=lMg6mAdfv0|GG$t#_e!sv6@%^u89nN5U+MN1rToH|NSk0(K+-R8MiC@?)2 z69|fkTBo<@%}7rqi7PZRqy=zi2k=nDw35U;ZK^5Oyz!$(WbJiv*9R!1D584vGB&?JPy@#G&~!nka zWr|{XX<3nipHQlS(8u-F0dFNaz37L|C6Q&Kt6YW7tkw$(@O8CNuQn7*xogp^oJM@f z#9|;F4&~YtV{Q0iN(FxP`|PYSR38dWFRji^hoh19w)s$fou|Q4*U@0JkNX?ko_W6u zy*EZfA*=>5-wKHSD4s{j4{|LK{XnpgeXSQ^>TLB$=1F#;_ca8ou}^+| znwy-R1w>DAG58-WIa+-oFETrs&2B6O3AYMwgXY0KS)n>yRT*3Xsyb@&DKMC17oxXSzp6`@R4YNFYEU0RpoKj4@!au}y5e z#n{0vj+fYulg5d&H%nWOWs+%U+G*#`%x$O7+*#ULo|(=wGo7yYW@g%?O`MDqC*Hs| z7>vOP5FkK+5R#DY`yHKwW!FtJbDt}opZ~1?e*XXazvcagyozvu%X>PUoZDCCyie=- zD^~`mV;Hv4sX@Vy7T4}D0-7DeAeogLoR}8sJ*8!6B1Q1K5B_F~rxR8R|Bmf}t?arkauBxo4Z32N)lCE9=7jSX`GQ48?7|db}c`>Co zJ|1K(4tu%`Lph-`+pTbrt5PNA$I+tW!Gs`LG4#jS zf`)eJeRXd00E8G?;93&$M6~(PX0yXf!RmY`??QaDEzJ&>gB6KD!yL7!ajk>) zH%7{PY!Uc2xs7|z9-6s>X?SF2F3VL%IyKu`J=}Y8ttrET4qYbJ$!3fMLvxsI$x&JN6|hOqzx%$2zD81Vlx<;vhbpK0m@#> ztW0Ax8Tq#1-qVE_0%MptMyKY&`odKp3@VD~Jyvf3w}^=@EiKN$Ten1O%Ff{5OOClB ze(XNzZ0VkR_nzIm{}s;4&?f1@A;?VqfnoHLZ($kxCuNKo_L?sHeVke;m|~be*y!}& zb-pCK@s_o<)>GwaZmGlK-O$z!9`>Q#*&2mRk&&r8t2E{o0dB9_#T@lIACS%iE+xO` zcBEW1bq7P_`kmc4ok9y0=tmRM6D79#ATJ>j4Ge-=djIyhQ=g zOHzu%od+sb{FQQak!)cCO9)yhuOb(_Xti%(B*dBui?ZeHBA*UVKl#F@Y$rxS$_2BkfBE(basoSu# z+k(aAE6g82Z}}|qCiDCFJ0m&;2G3dOl4|oxsvylMEp)hYbBVuUGj(@MB*EZ9>}=Nj z(2Yx&*?R^C`>;cT!r@pzBI)jiBqTXwagq;-|MJI|djHi6EqWGm9e8<;!tcFz~&~>BcBS(S*{J4u%V6Zsm>9`8c*P ziHIPH;GUTgV{BUbJr!Hag(TU>5`5uK^$*LnD8r``o|d z_uw49S=1S#Rqx^dN^4*(%suy>Z-SG>pb-N=bj;5r_Z5lzvIov25sQR z)e$kNMmphB#h3uAAO3Peq2-0?85~EvwGpuq3?q#QoCY1{S_8~HI2*~xw0}{q$M>WX zj|T3@WQ%?00G$T$Mk2Zp6U&lw<}XmE=Djhc8u?&>%x`t+`;pxrR z3fh`g72DHvI+elhu-hDPu~}YQ?aI)y^V4%PIg=CGrQRM^>%hldmQ$Lo1sM&R0YY$3 zImlVi1`+H)Cj+w)Oo0h8DP1jxV0j#XQn0ILVuap5J5a+S)Pfjm?|D340jVn!sz#4;Dhm!2%) zdnh3wD_=gn5%X^sbDB9Le(kv@pWMa#i1|DG{RK0Hzfop@xyD>)E;5%84>EmBpZwUd z!%v<%^~Kk>V)p)H=5Lw5Vg3nVY(HZDgL#X2%MRsv5%PeptSu`mxbXDzJ9cc{ym2!u z%Z@(%#1ohUhP};GI=v~cbSMy7jAUnj@ry7_}S z8~hToAX&=JUYb*b49Cx%tJmqKlC@cl+K3#6v+4Q*52#s>0~WJpn~N3^54zWa9T=m; zfK|)bSO#Ram~TQb(B^IA^YFG#GY>wgOkaS#WLXI$@0z~hDJeS62p82WoQ!%rX}jmi za&vlyt+%p#6K15U92sfaKmk|J0DOnRMr@RS zgVR=uEkLbpdeNl?t9~gh6q=ezFRF6cWCb8CjY|#?p6)_BOy18pdSK@{G&0oF%UU5Q zoDyScFvm6Kf-JVT2iJ#tZ*-@ul;Rm*Fp>^rh#{pTG7q!3d$aJYWMPJL^qkBEEf`o1 zxz$nb0=nEp!r57*`1qDtg5-4%%um!icS3k^DR&wqq3S9&decdbj@)u~w zblod~vG~oK@W1&`VyDDa0Bn+E3lZlEBBt+n83Ey6mb^0TDW}|SyNeA1&12&C|_9UUR7LL+kE6WFoE{(CX)#GaazB+ko1Z&l$ns( z&Mw9lYds~oSp}}j>c-7b%Gpql4MX$5z>Qwetu)>0R8sNMBo;KEe}-j46Ld7Y0B#(9 z^Wcd^rQohaA~90=S;RLr;TxNcz-_~v|HiF>aCq|aFUAPOWz;t^6%sVz-lp;^*(HdG zrsia^2$C|cs_z73-HC&Tn%8e?+uQkh*oVIO)KU1XY1`F-@*jNs)bG6T+82)RY+aLY zHk-6cQW=Xbh|=s?c@<#i*0^^zpqxV43W@Ma2Y0RP*`*n<;;Z%3wk!-pI(Z)ZEj;i78$z2Ekx4jFtXrqM#C|+qpHek_3VOmP}?dD z;c^8Vo$^g!ZiNLUyR;aWB@(y#&;8`B0|z@=YN{j>1_mew#i5`7{A$GH+Ioo3jl(Er zMV*~`ma~k~f^1Mo$$K(cQ(YxdO0sRgH>_G?S*vvlf+Yj`)ZA$ALc~hVyTT zt|B@ejDWy`yw(4~zx?C=&O?VEKlD(t(t1qCDrn<_XbDDkz4d=SSv0ve?~wiCm%sew z#@05zd{3f$9s`i*6hx%mx_p_~88>_Y={Koh6=Ghuv4uElo7Sj8H$iU9stT}BJK#{W zG7wzEU=0T+j5_dK*tm=>0ydDzWX>*#a|XkDQyN%98X5T_jmq>kK1Xh4jYJY!W5z@< zLni|$TX-IP>pPghdV5B|d4wXg+3fLXpy6VM6JC3|mBeu6xu5~eQa?U(UtEQcA|3Qj zi2;z`XQ2I+2zxW6dV9IY^TB`q=lSy=UA#VU>8dXZm+)SZSmHHJ+#b06{y7?$#Z{FK zgLFBT@EU5@l$zp!p7(xU_4Y3YLXymq^2erEnhH2ilKzt#TM1@)hFD2qdu)%s0qKFt4 zC_p4Cf%OqA&}2-n$<*t1XUn4g+u%*!S(0I?Ji9*nXp(0~_N2{I^P%~<`S=`+EAg9) zN0#H*1W33KV{TrO)%fTkm+b()2K-#vM~>{Oab!rAxbYMU2Eej6iN!D?0k%wj*>&s-E7oix)8-Ot6NCMAFh?u~Jt_iQB8i zPAAV5i>0OY-6Sj+>Da{3^~)Fe(LsnrK>D8~G=BdKN^P;2Rcf8P0FD>H&}YdErne^; zwA)u>%j)sZ%CjvNc${y>m)dNB(wionh{RY4AShySoeqYxV1rDK3|>9|pWEB2^8^05 z`5CKq21+?WmNh#}ig4#!KYA~iS<)uV3;%=?z+bAHp!Za=a6+;?)_du#e_R4)HV}bT zc27&|y0tVuYs(w=Jay_MfW4l2Zr{F_0nGFJfE52O^DfgX+PAL-$hUvaykP<`$kUxW z+u+r;y5nFqpdet1rg1D25p&@AE06}fqD+2aReh_S(fk|+_ zp%Xv92#?Vku!H8J%R2IRTItT#OTD6SJh{&OF-q;J0W5^wUXP7ZYm3V@Gt+$;TZOUEV>-t@NZ?h;2K3*eyI zQmX{EEyj$z;^dd~dGwSKiemUJ0e>Mq9ouiL$D4V0S`MT(mt@psWoz0Vd+M2&Ui3QdNK|bOs^#naDhu-46j|2 zldD!i&>Z{rx9K?978;c74AZ`z`J*%InSMdG$f5kr&l5p+b1HcA=EMxv*6V%q^E+EM z@9li{*~5n)JNE3e$B*o6Zr%lB*R5Myw{73PIw!G&!-lQPQEV-?Zk721=EkiA=uhQ! zx<&!AI6ls@6N8v^&Xxo7n1!$>1XGdG?)TpZGw8wvfRq7+NG=bJj=~sABw`3Omu1Hw zeBfs%(#U{1%xnNF1K^@&@Az;qJ)=~<@WRWlZ$wqzpg-&BS6_VT5O6_g93KI+LgyM# zw^h4FK*k`SmSoU<87ur zM*@^IZ-z$C!p|BQ03=Kf`TcVF92(YZg&k{DE{78pm|H1iYW1?kN$^iqa_Aok@q+J-6$f4~F}$ z4Mc)~lS{gHOZN};Ud7oZCfpB`p>rRXtST(z_afh=@9@LR3E3w%<{~{KBf}%Z!`rvF z?`hxNB8%+XB3YOVp;-aDQc#eeUs+gKzP7NicKwCkidt8pqPaoCwpR9z>Iz*>%|?4b zp=j2z+epD&Ba_+f;jj)yN7S7%tdN(xvGl<@YjBXhNo~)y>jOgrI{1g6O_tY+jn=7C z$+zguBS-M1>wfhsI!=x>8s}?$zG1Qj7m440|6P&zrx58v!E62cEj#w?EiDB|5qM_n z)-^!X`r@u#CypK41vgf0TiUj4A!JQcvCCQLN+f`ot<#m1&>oHRN(YSdjErua^mtA1 zN_Vllqy#AUR%-%Y;4n=jd-(`*F9(qV%nyjXz%VH)a+);2>eDFFi;Ao|g|spUim>*g zB8#OF>waq~w4`&U6X2hL;(|XcsT5QW=&OL=cj@Eirgb$X4zC7^v$E;dbMFRC)~Z&% z@1I6aH6|kqnb(3O%~aroUtCz96y=z~=#@(~S@v?kw!+;Q{DP_sIZzH$m%%s68dxWt zsfvPE3)g2xFgQ^p1xp?bXO{raGfyTg_?1?uz`+HP&KwvWS~iun^SQo>T$>l+%K*%! znI*FF1~~`w04ab6BQo=3AQaV#7pF!H%l-XBKzImqTMl)|0;55jY6%b}Dm4STu3#Fw zJwl6uSX?S4f>KH#K8QoXu^U%ma#WLV^=8H;Vi61!mY1W`t>@1NO$ANs0LuI^V1K#Q zL5k9NLC`1Lp4-g>D#m89PR_z&#)g?I+m>&NVB0x(CvLab)ipJ&-+1KlwH|j}9Z;CQ8g}&J`#Hb*WsiSJ&GS^xpsedeVG!HF zU^vbK_u$S5=Cg%RoY{Bq;7c!oOV#=4wr!DkOs3bA*u=OOu{djYL!{GQPn0?&N}rW7 zzn>~6O8qWn{$-S;3EGmdq1O^dKB}oO%9Lrj&e|&Xs!e;{#Z?=RJol_C=Om%8ojmEV zK6~o;uBLi-jW@D7=cPDZ1zzEHP*>)ykA_im_g7UZvA55kzJ z;|{n8B$N?y9pHdUyU{o_bcfIY2k*e*;>Hcqhtz>)iyPr@g>Y3$k|W{^sOj1Q80itm zEfWB)O)YEJu6yJdVRtk&xd>WQV|2M5ee|g(ASNh+e?n*i7OdL`OriEV=D2swG!sdv zGzK-m1e8z*#rVWN4+5YKEsfih@_~kEp;uc544*qNT2juTD zTMZ04GdROYW~Of6xcv4{A`Aut@!6LMC-bY! zx0oL@?}}c28Dgol=MP~`f^qzs`kJzi&Q;|lnS@c&99d%ZO6)>4fZWH1Ivj?hpJ;G; z6l8Nhtl%(hkm^``Aut;T(>ENB#NixMqXCr>7t3_{Wzw>;a)&|T#hjCDF^(4B*-}@# z1^~d2r?s_#*SrKa?!X=Vi$%2Bty?*}@zX8MEv;L2Km6*e;N!mZVk`4D{?0OA1S9tA z%vt4YufP}L=~o|vk~B6ksx;H+XbD*;d8@%6a}|${W@X(<;xgm^;80c;AlC%bURb1n z^*K6PT91in^=gTjr^Sf&%ihUvBZTFX}~=GLxJnY(WElj46yS~YYq3u{vcJEGx z=_r(O>{hWjJIrQhPuR0z(<>_nAE}zWi$T>Q-<&l&OE8`jfF&ID4Ji~86H^mobTH%_ z3t*4s^DQpU&U!7gv+xD%a53D&BR~6@)tY?q(`eGKqXx~PP=7DDTtjz~p`Sbqw>{kP zNINhWw(r>4(XnIu){V_DkZNgJziwSir8zj>(!w$95CvpTaa{|yc|l<_b6BV$z{wC0 zez?LaKwZH*b`bj$%$S@D%3SEUIAL^RH_)?EAaLRFDcH0zz5KVqXUMDN*gJZ-plNnHrZP4?qMexK+sjaqdqR zM9fHadT?MMsBk#2xWVm;lflxHEm;~PyE#7ZQ)rRed^1TdR64y;4P8S9w*I>4QcPji z=pWws%F~Y?czEaThsyJu&iaE#40F_Jrn@R518T%_XgOOgYI835Jk=hloafhaJQ3h0(|jZXEjl{~qDgFZZ#sZ)t$iba z%xNE4TEA{bCm14d*al+s(EfcLkAfK8Qdd#T6Qd19#id1eiBS$aF)}|h0%CNCBSuF+ zcl$#TRu5Yqw3*Uq=5%^WptF%mjj}Lr!;jVFl>zg6{;^J5UP<+)c2Xk16g(d~a)c(` zJdUFcf#MaY4)usc-B202iqlfJ6S&mUoE$0NsvI@y_me&EfZd)9!MNV$DxDZ!zc!Lk zrWI7Rw#MVhfNpJQfU?1vQZD_W2_{T|>`HI>{F4gBR7p2!N_EAD3ES4z5aR&X3ewAS@G#-Th^>+zESx*TkGqf?$z|v$rHf(_`=ICzx2Y( zFF*e!P0oqu9_`%l{PQg>&mDbi+v(3|Z{Bpet?e}P8gTt+m#0!?W)2Oa5())|%(a2c zOoakh;EuFUp@3K7JGa3!R>h!u>@@@eOf%$<^io3u#Tyc*6Q==nr&95)@;b^2vt9OkHaK`LUe%fU#14GbZpy9q1N4-V?$1wHPrXmeq$9qR?1KWVP~<-r4ug zJ3})wH$F~FgPM44K9_?EYPxubWyOlHA}lT+v0mb?n~<|CGxV)cCQ!jfb`U@1Yw9DoXE~Y~PuClxo|2^f!P8oK4W0O<(FK9GFFNV{PWPa*puRF%? zmb&szUt!M0c$a9@;$<^OzrmL*xsD0wzh_W}I#zbrqcICJCKFl{ z<&4Fnrch{l3S3zH7QwL&hLlQpdY!~H5u6VS9>gzwmXfr$)j=uHv$6f~vyjX@duV4p z_|oN@+8^Hp76SbpXMR`q<&$6^ocO{P=-2!a^F3nI;qQAmJ}Z3&9I?k<*^E1X3b`%) zeftco)4Xps|2GT2QnR!NR*mb8O{iHe3*DU?H^u@mL{ZB?v_fhYjbZwO(=ZT>4r5m? zFn+a`JjlyTGBv{)Wh-TjT4utPTv{Rc{@ae!&Nv3%dmmfn(FG~AdqI9B5~5IW7Aw@U zJ`LdE<>jlZbGizKho_@#R1Wc(6p{>JrGw=%4fq&_6R3%zfX5d`krk<`l`zGTY7L;7 znR%}=EYn%hx;B_ECC4jiU_lz_Wd@S#J;zhfMG_L7ITMPXDVx#wcz!G&e94m1;X8}yvJ5)V1xAVw=Z$JxY|+p24uTH5wN0Pc3l_Pv$C{oTbaGgY606g*;9q6p`KmxUF(?%iLpkh z+|Eo@mmcCbU1@0^##>&QTNe{N7OltAIblDPgl~peJE&f#A`#)>C?kxN+;G7aI@ks@ z9P;z?ZCY7kS*4OI^_doQGK|V(QlTDANGV&g90Dsawg7#x-hST#v~b1HZc%FFMXnrO zS2k!%KWJt!&3qvl4X~ViP{mMOF)Kq8eEEeH;C8OaHO+lPH0sHLFeojbZv^HW_zMIk zdp~;T?YH0lcs!!8p{o6< za%-{M0Hreqn7=)}W1%iXMTI99o(>e)-@<&vURlA{tPIbm#bektj4mj%p=FG`36q??kwPxi$I7@yf3xij$ zEG#U?VWnSMf=@~hr>xO5vk{DZjoBC)8sPIv8I`79Zd7u+Gy6kbXBa2{%+qL#YRQa0 zBsN;hSG%*c5bWey)6Mu{j?9IH2GoPpggp^tZKc%@VLfU;a0s+kS9L(GCDnX;nkKMN zm{$x@ODR0q!9Sm;1bP8bH-KEd%tIcoA!!HkTLz`X)K-`e5Oa4nF4h@UA5BEp}PLI!W{L|;{M%eBfPH4q#o`U!ghc;XJV-ck=xsbhNAK7+`LaSH1bNFl~a%TydE$^kBkIa6Pm>&njPVv z;^xE8IzuZ%3AkCXkwt^c@&9#(_Fw*_AC^Le<*VVq3pweud4yMMROrH@)RK#X09?52 zhY~`C!@$qbmP#i$v-i)?ce;DRi_45$EXNG3q!~JHDy<;ieQD*d&(M&x3@oxaH8nK_ z@&u`^V8;g(65xEOWHdudG#2t>l&O-$F+ z3Nwgmz$ED?ZK^9Z|JLuBn_Z=&gdF1cjbaZq83QBTYBP1E^^SxjtW>R*>!7JqQBjnU zt`fA7xe;xaqr7tSDtskQfA0q$e9-G>FkLKlSzwE0$Oc!&rW1jHy?gwdM>H(J^>)x_9=%8G4xN>xA#&gn8~ zOwiTm%Bu^*&5nf3dUMjVRMBz6R{8i?Ek+rLbD_<+cLIS0awRyk7zl{$AVdoF zQoIAzT$wf#)IZ)!*GV9Z=KEKu8E7YopQ~BQmE0tK_&CY}q{=ZLbVaW8jE`gI0DnI% zEnBwj-CJ3yQXADO)s`(A*Eet6vE%4b$jx``c+&+@W5MSRry~#y#z?0}5r_Urb8}_3#adsllq)he;%YYy$^EM#CFi zT@RsVtEQ%AL)cnDm3nFla{2V61kAi@QztM<_qSB!8I+tLOahB!2*3(w0lFXo1nOcW zZZJSa4I5X?AE1~CWWB{2&#$_Wir| zV3CIirFuw>8kFtoLwX&%6bTGm>-T{KXNVI56u3#!wtHX?D$I5p6qR7LACH-HYyQud>KPlSzr6%IyI3GO7v@Ur9hr$k~{d(5GPQ zNDPMA;1clPLqY1gOj02a1bwPFYXUC~HX{*%YCehFYwpoxGa7?ID6xStdf)(g z>r5)K{h9*X=e*v^y9#W6Xna9;&0z5R@j0yMuH7#oOU}AqL7vTUNu=WR`wWD;z`+z= z1_D@&0Ml<=>>e6wXsEPtN`7EInoGf8Y+38ff+LUm`dVlwHHe_rCkd-GY}jj;>a*RI zm@%N&Fx&s}`Ct9p&o2xB9(^IIP~dZtcr6pRZ(jxRHWXUcz%hoWD&L@1suWUQmi;D` z2VyicC(+EZ+Vib4^acixSWM^{1AXK1IQ+ykttY8wmBUfJ8Pc+ccWm3)c^s0>qmPhC z8!T%{Lp2)S0vG z*;z&`18gMOIxo_A_zXRgme$_>YrO)s!kXXOD-Y5rOv(Em>8T0g00>S=-Rj_@D}vLE zj6Hkq7oL*f^#3Jq;@~#)_4N+pi=FV@>g!v*+MRAnuXM+j6xXmnxAtxii@ zk!Th@)Y%C^X6?8LD9u3rhheb604FJ!4u*QKps#xa5}nBn{I-U2=)p=jfhP1bA<)dU zWe9sb(%z}{`FaVjd35ah^@f&~($bceO`GdmAQ$0&wYA|e$21@Ch2=Iv|7h9J0+^pN z2#SFf>u^j=7>!VDFd8Q&u*#B!j!5Y!EGR4ziHZswF6aE6E1<4#P6Y~_`T0cxHUACd z4ENdjCfIdMT@1y8QG-`#=8- zz+t}x*M?b#4xN7K&^|a$0j6JTeba`9>VrpXYAbV@Q;_PD7*_;0kl3oi980>u32=Ld z#^JtnMSv@@=H~i*xBB~UfolWNZCRPeooTo$xqX59h}V?s>A!llo1i})WU>GQ_%#&X zB|49@Tv$(3l zFw(+rl4Wg>u*s#Wyu9-AOP9X#!cwiIb|?7y9Cg* z?(QG{@L%707o+p8o?UQks0V~JbnTM!6E{bEii~v!#K9dMSRhu{-<7duLE`HR%3Vp( zY8@w99fAaOa4;N(Rym1(IngSZI+*i^hDK-MxGSC%t%3>f(8huz{pcZ{Mmd3&sDf|! zE0F$o6Z$hy0XJ{og*vvk@7~tBc@4Cln}OljSm#-#0_%4XfQgOFX7~qzS7cY|&@Ijh zHStL@P1w)Eu^l;3a1|C6yO{RRw<`8;&R@jA?9&9%WIuZ&-x1rMJ=ZY77Ut9v6$7Gst9)Klvj4-$UTZ+R%`I@q2!!xiCIkO6Yys<g?@=dEC!q_PQ>>HBfTK% zPX;C-y}&FXY)FYqaC{hH7GVxyO-kI3W4af``}&kLdT>nXdiZNYc;)qq5SANmF*jRjN_FuewOkGX;B{cm5D3MCw#h;H`SX@lgc8LgYxIf zmD)y>Udr<;_5W@8-IrEsyNkYaw~nH}PdQG_S7;Bq&$p!rb@;Ee3G-DvkFfF{waZ^7 z(-2~=t&l!fFQFf)t@yksZ{~FJT&M%xoxJ36Pbq~=TK`uozRaf~{zqX=i@!dm(+UenLM| zd+p`(!aZ7(l5GgxASyH8o-6%{Yr^|0c~M_ddHGm)hpS^sKd;m|rC)@$rm@NV1cAmV z)r0ck`&cNy5I?XU^gPC+Fc$C6TPXjpjprZVeP`tvj1&46xxlY|scWF98TW+idK_Ox z_&9lu89^Pe=F&AT7M`Q{ljJkpyBF>r(>tPnyL-NpcIvzLA5&VGt5(vaatP0)=7Ve8 z{P-2bDRU4@a~qvwUKQ3@ZjPn-=bsQTFA4Li@SgDeN{n}fd)zxTPxE6`tYJ!+a&AOLHx| z`|i1L{ZnJg?AH4=daQGEBzz%Q)+x)pWXB9Z@Tx3lr-s?PYFb8arBn(42_Eo z2w2y-e#W}OqR%<{1$`oVCFMHSw3TP*n4ZHoEcD&4#dIHIlY5S0S`%MGp#DAefMdFs z61en=agEAE^9S__jg!>=yZ<<)oqz4Q-*m4%B~AXBmHFYDxJTFSdsp%v%0+D`e0y|! z1%djKj)fSGP+Wv(-bMUu@_BmZv!+MSvF8y!MEHOY?<2+@g*z8w+~dkb^AeSl z!bOBz{IL)Vb)e@dAboKs!U2T+d^m>q1b-~VxF_0+@CX9hkP8P9)4EURLX2Yx#@BBO z>^D(v^s6Kdf#xIXWB#10D~`GN50HNr?$Le$V}ctOFCxYmXaJj`a8Imj)4AI2`G~oLG&aa@Q#QA#v~VV5mP`uT&O`zp(z<8 z`A8Rmqw)UoZp{7y<@z}SAFtHuWn6m+fsaLfc!$;oAr|@)b*1{!epGT8-!=6+>dRf@ z#~*7--e;|dsm-3_1GO2^b$FKx^!%?7CXfcwVr#KSfjtciEOd_kc?0p8Cwy!{OacAQ zZbhKyF!s3lp5iSC+YpG(Lrm)+x1PU-V``&Q2tPphI|P~+DImXs|3$VP=3i3gdpcb(;U!RBe~)l~UX(Un`vxCVzQ2p` zBLv(N(&hGvdR)^Y%>*B!i02Sy5ta}H9)SnX(KtdmSH>6Bh01sl@mEoP=xG6RFWKi9 zQ`GOGFDB1Lf5snk{ZC^60b`BE2X{<;4mmT8DJ~s8=Eea%+fP>+k%1A-$2DT~8dDN^ OPx`lX4PoUc8U4Q@z*cAg literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/font/literata_italic.ttf b/android/app/src/main/res/font/literata_italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6b43b7092121bbeed10ee8fa44293f061431908d GIT binary patch literal 330236 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

?n2; zJB#R~Ay2xU#I7Qm2^%yML^Hv1u|hmZ93l=Chl#_*$-#o%7VWC9aLeX7Sg96eG1a2Abkq{Jy=P3Ip+-jDLySe zBR(rWCq6H}Ag&Z&6nPp$Sf0kfmqkuNV}3<^Ra_&!CRU0668|l}F1{hYDZVAXEv^-- z#dpMa#rMSb#dYF(@dNQg@gs4A__4TA{6zdz{7n2@{6hRv42;aij7V#Uw1!A)h_r@C zYlyUlNNb3+hDd9Ow1&tbxNWc$ZYORpwh%c}hy4!Xf%0D=9wZJChl<0*;o=DKU~!~) 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

jR^^#17vc~5&!V}8ba4)Y7%3;18@ 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 mAmytDJiL8ZRks;rN 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 S1^LxJGo!BvH>MO5@_zu+4x4}g literal 103316 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

+3ekQl9wc)}3P6r&uQSMXaXnc_;sElx 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

vp|jtIocfJ${ET~#}Eb0or^+3oCI1e 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 found. %1$s subscribers Import from another reader - Choose the OPML file exported from your old reader. Folders are kept. + Choose the OPML file exported from your old reader. + Add to group + Folders from the file + + Skipped %1$s http feed with no https version. + Skipped %1$s http feeds with no https version. + Choose an OPML file Export as OPML Could not save the file. @@ -31,14 +37,18 @@ Sort Newest Oldest + Reading font + + Applies to every view. + Literata + Public Sans Words Hide Only show Add a word or phrase, then press Enter - Remove + Remove %1$s Words match whole words in the title or summary, ignoring capitals and spacing. Topics - End of list Already use Reader? Sign in to sync your feeds Keep synced articles @@ -48,6 +58,8 @@ 1 year Forever Refresh + + Some feeds are due for a check Select a topic to turn it off. Articles with only turned-off topics are hidden. Name Group @@ -61,11 +73,14 @@ Star Share Feeds + Show feeds Back The site did not answer. Only https addresses can be added. The feed is not on https. + Reader can\'t add http addresses. Try https instead. + This feed\'s address is http, not https, so Reader can\'t fetch it. That address is not a feed and does not point to one. The site answered %1$d. The site refused to let Reader read it. diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/CheckQueue.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/CheckQueue.kt index fad94e7..53de02c 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/CheckQueue.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/CheckQueue.kt @@ -98,6 +98,8 @@ class QueuedCheck internal constructor( * in batches: once no waited-for check is left unfinished and one is done, at * [QueueLimits.saveBatch], [QueueLimits.saveIntervalMs] after the last save * (with a timer when nothing else comes), or when nothing is left to run. + * [onBusy] hears whether anything is queued, running or unsaved each time + * that changes. */ class CheckQueue( private val scope: CoroutineScope, @@ -112,6 +114,7 @@ class CheckQueue( callback() } }, + private val onBusy: (Boolean) -> Unit = {}, ) { private val lock = Mutex() private val saveLock = Mutex() @@ -122,6 +125,7 @@ class CheckQueue( private var unsaved = mutableListOf>() private var lastSave = 0L private var saveTimerArmed = false + private var reportedBusy = false /** Queue checks, joining any already under way, and return each request's check. */ suspend fun enqueue(requests: List): List> = @@ -147,6 +151,7 @@ class CheckQueue( } saveIfReady() pump() + reportBusy() checks } @@ -249,6 +254,16 @@ class CheckQueue( } saveIfReady() pump() + reportBusy() + } + } + + // Called with the lock held. + private fun reportBusy() { + val busy = checking.isNotEmpty() + if (busy != reportedBusy) { + reportedBusy = busy + onBusy(busy) } } @@ -266,7 +281,10 @@ class CheckQueue( try { saveLock.withLock { save(batch.map { (_, finished) -> finished }) } } finally { - lock.withLock { batch.forEach { (finishedCheck, _) -> release(finishedCheck) } } + lock.withLock { + batch.forEach { (finishedCheck, _) -> release(finishedCheck) } + reportBusy() + } } } } else if (unsaved.isNotEmpty() && !saveTimerArmed) { diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/FeedCheck.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/FeedCheck.kt index dc03c8e..a8dabaf 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/FeedCheck.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/FeedCheck.kt @@ -2,9 +2,11 @@ package cc.hafa.reader.core import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.Response import okhttp3.coroutines.executeAsync import java.io.IOException import java.io.InterruptedIOException @@ -51,16 +53,32 @@ private fun Request.Builder.validator(name: String, value: String) { } } +/** Most redirects off https followed at their https addresses in one fetch, as many as browsers follow in all. */ +private const val MAX_UPGRADED_REDIRECTS = 20 + +/** [url] at https, its port moved from http's default to https's, as a browser upgrading an insecure request does. */ +private fun upgradedUrl(url: HttpUrl): HttpUrl = + if (url.isHttps) { + url + } else { + url.newBuilder().scheme("https").port(if (url.port == HTTP_PORT) HTTPS_PORT else url.port).build() + } + +private const val HTTP_PORT = 80 +private const val HTTPS_PORT = 443 + /** * A [FeedFetcher] over OkHttp; a failed request has status zero, and an answer * over [MAX_BODY_BYTES] has no text. Plain http addresses are refused unless - * [httpsOnly] is off, which only tests against a local server do. + * [httpsOnly] is off, which only tests against a local server do. A redirect + * from https to plain http is followed at its https address instead, as the + * web's extension does, so no plain http request is ever sent. */ class HttpFeedFetcher( client: OkHttpClient, private val httpsOnly: Boolean = true, ) : FeedFetcher { - // A redirect from https to plain http is not followed. + // A redirect between https and plain http comes back unfollowed, to be followed here at https. private val client = client.newBuilder().followSslRedirects(!httpsOnly).build() override suspend fun fetch(url: String, etag: String, lastModified: String, timeoutMs: Long): FetchOutcome { @@ -70,45 +88,62 @@ class HttpFeedFetcher( } else if (httpsOnly && !address.isHttps) { FetchOutcome(status = 0, insecure = true) } else withContext(Dispatchers.IO) { - val request = Request.Builder().url(address).apply { - header("User-Agent", USER_AGENT) - header("Accept", "*/*") - validator("If-None-Match", etag) - validator("If-Modified-Since", lastModified) - }.build() - val call = client.newCall(request) - call.timeout().timeout(timeoutMs, TimeUnit.MILLISECONDS) + val deadline = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeoutMs) + var next: HttpUrl = address + var outcome: FetchOutcome? = null + var hops = 0 try { - call.executeAsync().use { response -> - // A redirect left unfollowed leads off https, which counts as no answer. - if (httpsOnly && response.isRedirect) { - return@use FetchOutcome(status = 0, insecure = true) - } - // A body over the limit is left unread, so it counts as no readable feed. - val text = if (response.code == 200) { - if (response.body.source().request(MAX_BODY_BYTES + 1)) { - "" + while (outcome == null) { + val request = Request.Builder().url(next).apply { + header("User-Agent", USER_AGENT) + header("Accept", "*/*") + validator("If-None-Match", etag) + validator("If-Modified-Since", lastModified) + }.build() + val call = client.newCall(request) + call.timeout().timeout(maxOf(1L, deadline - System.nanoTime()), TimeUnit.NANOSECONDS) + call.executeAsync().use { response -> + val location = response.header("Location")?.let { target -> response.request.url.resolve(target) } + if (httpsOnly && response.isRedirect && location != null) { + if (hops < MAX_UPGRADED_REDIRECTS) { + hops += 1 + next = upgradedUrl(location) + } else { + outcome = FetchOutcome(status = 0) + } } else { - decodeBody(response.body.bytes(), response.header("Content-Type") ?: "") + outcome = answerOf(response) } - } else { - "" } - FetchOutcome( - status = response.code, - text = text, - url = response.request.url.toString(), - etag = response.header("ETag") ?: "", - lastModified = response.header("Last-Modified") ?: "", - hint = hintFromHeaders(response::header), - ) } } catch (_: InterruptedIOException) { - FetchOutcome(status = 0, timedOut = true) + outcome = FetchOutcome(status = 0, timedOut = true) } catch (_: IOException) { - FetchOutcome(status = 0) + outcome = FetchOutcome(status = 0) } + checkNotNull(outcome) + } + } + + /** What an answer says; a body over the limit is left unread, so it counts as no readable feed. */ + private fun answerOf(response: Response): FetchOutcome { + val text = if (response.code == 200) { + if (response.body.source().request(MAX_BODY_BYTES + 1)) { + "" + } else { + decodeBody(response.body.bytes(), response.header("Content-Type") ?: "") + } + } else { + "" } + return FetchOutcome( + status = response.code, + text = text, + url = response.request.url.toString(), + etag = response.header("ETag") ?: "", + lastModified = response.header("Last-Modified") ?: "", + hint = hintFromHeaders(response::header), + ) } } diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/FeedSearch.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/FeedSearch.kt index 14f6ee0..77cc8de 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/FeedSearch.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/FeedSearch.kt @@ -6,7 +6,6 @@ import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.doubleOrNull import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull private const val SEARCH_ADDRESS = "https://cloud.feedly.com/v3/search/feeds" private const val SEARCH_COUNT = "8" @@ -24,6 +23,8 @@ data class FeedHit( val icon: String, /** How many Feedly readers follow it. */ val subscribers: Long, + /** Address of the feed's site; empty if unknown. */ + val siteUrl: String = "", ) /** The Feedly search address for a query. */ @@ -37,7 +38,10 @@ fun feedSearchAddress(query: String): String = private fun JsonObject.string(name: String): String? = (this[name] as? JsonPrimitive)?.takeIf { value -> value.isString }?.content -/** The feeds in a Feedly search answer; empty when it cannot be read. */ +/** + * The feeds in a Feedly search answer; empty when it cannot be read. A plain + * http feed keeps its http address, to be tried over https before it is shown. + */ fun parseFeedSearch(text: String): List { val parsed = try { Json.parseToJsonElement(text) @@ -52,14 +56,15 @@ fun parseFeedSearch(text: String): List { null } else { FeedHit( - url = upgradedAddress(id.replace(FEED_PREFIX, "")), + url = webAddress(id.replace(FEED_PREFIX, "")), title = hit.string("title") ?: id, description = hit.string("description") ?: "", icon = upgradedAddress(hit.string("iconUrl") ?: ""), subscribers = (hit["subscribers"] as? JsonPrimitive)?.doubleOrNull?.toLong() ?: 0, + siteUrl = hit.string("website") ?: "", ) } } - .filter { hit -> hit.url.toHttpUrlOrNull()?.isHttps == true } + .filter { hit -> hit.url.isNotEmpty() } .distinctBy { hit -> hit.url } } diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/Filter.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/Filter.kt index b5359ea..5927aa1 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/Filter.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/Filter.kt @@ -148,23 +148,91 @@ fun hasWord(words: List, entry: FilterEntry): Boolean { return matcher(entry.title) || matcher(entry.summary) } -/** The topics the articles carry, commonest first, with how many have each. */ +/** The inputs and result of the last [wordCounts], so the panel counts again only when a word or an article's text changes. */ +private class CountedWords(val entries: List, val words: List, val counts: Map) { + fun matches(otherEntries: List, otherWords: List): Boolean = + words == otherWords && entries.size == otherEntries.size && + entries.zip(otherEntries).all { (known, other) -> known.title === other.title && known.summary === other.summary } +} + +@Volatile +private var lastWordCounts: CountedWords? = null + +/** The last [wordCounts] for these articles and words, if it is still current. */ +fun knownWordCounts(entries: List, words: List): Map? = + lastWordCounts?.takeIf { cached -> cached.matches(entries, words) }?.counts + +/** + * How many of the articles each of the words matches in the title or summary. Slow on a large view, so it is meant + * to run off the main thread; the last result is kept and reused while the words and the articles' text stay the same. + */ +fun wordCounts(entries: List, words: List): Map { + val known = knownWordCounts(entries, words) + return if (known != null) { + known + } else { + val counts = words.associateWith { word -> + val matcher = matcherFor(listOf(word)) + entries.count { entry -> matcher(entry.title) || matcher(entry.summary) } + } + lastWordCounts = CountedWords(entries, words, counts) + counts + } +} + +/** The topics the articles carry, with how many articles carry each, commonest first and then by name. */ fun topicCounts(entries: List): List { val counts = LinkedHashMap() for (entry in entries) { + val seen = HashSet() for (topic in entry.categories) { - val key = topic.trim().lowercase() - val known = counts[key] - counts[key] = TopicCount(topic, (known?.count ?: 0) + 1) + val key = topicKey(topic) + if (seen.add(key)) { + val known = counts[key] + counts[key] = TopicCount(topic, (known?.count ?: 0) + 1) + } } } val collator = Collator.getInstance() - return counts.values.sortedWith { first, second -> - val byCount = second.count - first.count - if (byCount != 0) byCount else collator.compare(first.topic, second.topic) - } + return counts.values.sortedWith { first, second -> compareCounted(collator, first.count, first.topic, second.count, second.topic) } +} + +private fun compareCounted(collator: Collator, firstCount: Int, firstName: String, secondCount: Int, secondName: String): Int { + val byCount = secondCount - firstCount + return if (byCount != 0) byCount else collator.compare(firstName, secondName) +} + +/** The [names] with the highest counts first and then by name, the order every list of topics or words is shown in. */ +fun byCount(names: List, count: (String) -> Int): List { + val collator = Collator.getInstance() + return names + .map { name -> name to count(name) } + .sortedWith { (firstName, firstCount), (secondName, secondCount) -> + compareCounted(collator, firstCount, firstName, secondCount, secondName) + } + .map { (name, _) -> name } } +/** + * A view's topic [counts], commonest first, with the count of each topic looked up by its trimmed lowercase name; + * built once per view so ordering an article's topics does not go through all of them again. + */ +class TopicOrder( + /** The view's topics and how many of its articles carry each, commonest first and then by name. */ + val counts: List, +) { + private val byName: Map = counts.associate { item -> topicKey(item.topic) to item.count } + + /** How many of the view's articles carry [topic], ignoring capitals and surrounding space. */ + fun countOf(topic: String): Int = byName[topicKey(topic)] ?: 0 +} + +private fun topicKey(topic: String): String = topic.trim().lowercase() + +/** An article's topics, each once, in the view's [order]: most articles in the view first, then by name. */ +fun articleTopics(categories: List, order: TopicOrder): List = + byCount(categories.distinctBy(::topicKey), order::countOf) + /** Whether an article stays after the settings' filters are applied. */ fun passes(settings: ViewSettings, entry: FilterEntry): Boolean = compiledFilter(settings)(entry) @@ -185,7 +253,7 @@ private fun compiledFilter(settings: ViewSettings): (FilterEntry) -> Boolean { val only = if (settings.onlyWords.isEmpty()) null else matcherFor(settings.onlyWords) val filter: (FilterEntry) -> Boolean = { entry -> val topicsOff = entry.categories.isNotEmpty() && - entry.categories.all { topic -> topic.trim().lowercase() in off } + entry.categories.all { topic -> topicKey(topic) in off } val hidden = hide(entry.title) || hide(entry.summary) val kept = only == null || only(entry.title) || only(entry.summary) !(topicsOff || hidden) && kept diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/HttpsUpgrade.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/HttpsUpgrade.kt new file mode 100644 index 0000000..7d6bb2f --- /dev/null +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/HttpsUpgrade.kt @@ -0,0 +1,163 @@ +package cc.hafa.reader.core + +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull + +/** Most https addresses tried at once. */ +const val PROBE_CONCURRENCY = 6 + +/** + * Most tries of a plain http feed's https address in one run that get no + * definite answer; after that it waits for the app to start again. + */ +const val UNSETTLED_TRIES = 3 + +private val TRAILING_DOT = Regex("\\.$") + +// A last label that is a number, as in an IPv4 address or the forms browsers read as one. +private val NUMBER_LABEL = Regex("^(?:0x[0-9a-f]*|[0-9]+)$", RegexOption.IGNORE_CASE) + +// Names that only mean something on the local network. +private val LOCAL_NAMES = listOf("localhost", "local", "internal", "home.arpa", "lan") + +private val SPACES_PATTERN = Regex("\\s+") +private val SCHEME_PATTERN = Regex("^https?://", RegexOption.IGNORE_CASE) +private const val SECURE_SCHEME = "https://" + +/** Whether an address is plain `http`, as the shared `isPlainHttp` says. */ +fun isPlainHttp(address: String): Boolean = jsTrim(address).toHttpUrlOrNull()?.isHttps == false + +/** + * An `https` address written as plain `http`, to find a feed followed at its + * http address; empty for anything else, as the shared `plainAddress` says. + */ +fun plainAddress(address: String): String { + val trimmed = jsTrim(address) + val secure = if (isPlainHttp(trimmed)) "" else upgradedAddress(trimmed) + return if (secure.isEmpty()) "" else "http://" + secure.removePrefix(SECURE_SCHEME) +} + +/** + * An `http` or `https` address written out the way browsers write it (the + * scheme and host in lower case, the scheme's own default port left out, an + * international name in its `xn--` form, the fragment kept); empty for + * anything else, and for an address with a user name or password, which + * browsers refuse to fetch. Plain http is kept as it is, so it can be shown + * as http and tried over https before it is used, as the shared `webAddress` does. + */ +fun webAddress(address: String): String = + browserWritten(jsTrim(address)) { url -> url.username.isEmpty() && url.password.isEmpty() } + +/** + * Whether a plain http address may be tried at its https address: its host + * is a public name, not an IP address (nor a number browsers read as one), a + * name of one label, `localhost`, or a name under `.local`, `.internal`, + * `.home.arpa` or `.lan`, and it has no user name or password, as the shared + * `probeAllowed` says. Addresses from a feed list or a search come from + * others, and trying them must not reach this device or its network. + */ +fun probeAllowed(address: String): Boolean { + val url = jsTrim(address).toHttpUrlOrNull() + val host = (url?.host ?: "").replace(TRAILING_DOT, "") + val labels = host.split(".") + return url != null && + url.username.isEmpty() && + url.password.isEmpty() && + labels.size > 1 && + ':' !in host && + !NUMBER_LABEL.matches(labels.last()) && + LOCAL_NAMES.none { name -> host == name || host.endsWith(".$name") } +} + +/** What is known of a plain http feed before its https address is tried. */ +data class KnownFeed( + /** Its plain http address. */ + val url: String, + /** Its name; empty when unknown. */ + val title: String, + /** Its site's address; empty when unknown. */ + val siteUrl: String, + /** Guids of its articles already held. */ + val guids: List = emptyList(), + /** Links of its articles already held. */ + val links: List = emptyList(), +) + +/** A plain http feed's https address, found to serve the same feed. */ +data class HttpsMatch( + /** The https address. */ + val url: String, + /** What it served. */ + val feed: ParsedFeed, + /** The answer it came in. */ + val outcome: FetchOutcome, +) + +// Statuses that ask to try again later rather than say anything of the address. +private val LATER_STATUSES = setOf(408, 425, 429) + +/** + * Whether a probe's answer settles if a feed has an https address: any answer + * from the site, a redirect off https included, except one asking to try again + * later (a timeout, too many requests, or a server error). No answer at all, + * as when offline or the fetch timed out, settles nothing. + */ +fun settledAnswer(outcome: FetchOutcome?): Boolean = + outcome != null && (outcome.insecure || (outcome.status != 0 && outcome.status < 500 && outcome.status !in LATER_STATUSES)) + +private fun normalTitle(title: String): String = title.lowercase().split(SPACES_PATTERN).filter { word -> word.isNotEmpty() }.joinToString(" ") + +private fun withoutScheme(address: String): String = address.replace(SCHEME_PATTERN, "") + +private fun siteHost(address: String): String = address.toHttpUrlOrNull()?.host?.removePrefix("www.") ?: "" + +/** + * Whether a feed read over https looks like the plain http one it stands in + * for: the same name (ignoring capitals and spacing), an article in common (by + * guid or link, ignoring the scheme), or a site on the same host as the known + * site or, failing that, as the http address itself (ignoring `www.`). + */ +fun sameFeed(known: KnownFeed, found: ParsedFeed): Boolean { + val title = normalTitle(known.title) + val guids = known.guids.mapTo(HashSet(), ::withoutScheme) + val links = known.links.filter { link -> link.isNotEmpty() }.mapTo(HashSet(), ::withoutScheme) + val shared = found.entries.any { entry -> + withoutScheme(entry.guid) in guids || (entry.url.isNotEmpty() && withoutScheme(entry.url) in links) + } + val knownHost = siteHost(known.siteUrl).ifEmpty { siteHost(known.url) } + val foundHost = siteHost(found.siteUrl) + return (title.isNotEmpty() && title == normalTitle(found.title)) || shared || (foundHost.isNotEmpty() && foundHost == knownHost) +} + +/** + * Try a plain http feed at its https address. It counts only when the answer + * is a 200 that stays on https, parses as a feed and passes [sameFeed]; + * otherwise, or when [known] is not plain http or not [probeAllowed], there + * is no match, and then nothing is fetched. + */ +suspend fun probeHttps(known: KnownFeed, fetcher: FeedFetcher): HttpsMatch? { + val url = if (isPlainHttp(known.url) && probeAllowed(known.url)) upgradedAddress(known.url) else "" + val outcome = if (url.isEmpty()) null else fetcher.fetch(url, "", "") + val feed = if (outcome != null && outcome.status == 200 && !outcome.insecure) { + try { + parseFeed(outcome.text, outcome.url.ifEmpty { url }) + } catch (_: NotAFeedException) { + null + } + } else { + null + } + return if (outcome != null && feed != null && sameFeed(known, feed)) HttpsMatch(url, feed, outcome) else null +} + +/** Run [work] on every item, at most [limit] at once, keeping the order. */ +suspend fun mapConcurrently(items: List, limit: Int, work: suspend (Item) -> Result): List { + val permits = Semaphore(limit) + return coroutineScope { + items.map { item -> async { permits.withPermit { work(item) } } }.awaitAll() + } +} diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/LoadGate.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/LoadGate.kt new file mode 100644 index 0000000..87d9080 --- /dev/null +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/LoadGate.kt @@ -0,0 +1,111 @@ +package cc.hafa.reader.core + +import cc.hafa.reader.core.sync.SyncReport +import cc.hafa.reader.core.sync.SyncStatus + +/** + * Whether something that can still change the lists is loading: the stored + * data, the first check of imported feeds, or, while the person waits for it + * ([awaited]), the signed-in account's data: sync is starting, or it has not + * caught up and is neither offline nor failing. + */ +fun loadingBusy(state: ReaderState, sync: SyncReport, awaited: Boolean): Boolean { + val arriving = sync.status == SyncStatus.Connecting || + (!sync.caughtUp && (sync.status == SyncStatus.Syncing || sync.status == SyncStatus.Synced)) + return !state.loaded || state.importing > 0 || (awaited && arriving) +} + +/** What the loading screen shows. */ +enum class GatePhase { + /** Nothing: the person is let in. */ + Open, + + /** A blank screen for a moment, so a quick load shows no logo. */ + Waiting, + + /** The turning logo. */ + Shown, +} + +/** How long the loading screen waits, stays and holds out. */ +data class GateTiming( + /** How long a load runs before the logo shows. */ + val delayMs: Long = 300, + /** Shortest time the logo stays once shown, so it never flickers. */ + val minShownMs: Long = 700, + /** Longest time a load holds the person; after it they are let in and the load goes on behind. */ + val timeoutMs: Long = 15_000, +) + +/** + * The loading screen, which holds the person while what can still change the + * lists loads; [step] moves it on. It matches the web app's `load-gate.ts`. + */ +data class LoadGate( + /** What the screen shows now. */ + val phase: GatePhase = GatePhase.Open, + /** When the current load began; null when nothing is loading. */ + val busySince: Long? = null, + /** When the logo appeared; null when it is not shown. */ + val shownSince: Long? = null, + /** Whether the current load ran out of time, so it goes on without holding anyone. */ + val timedOut: Boolean = false, +) { + /** Whether the screen holds the person: nothing behind it takes taps or keys. */ + val blocks: Boolean get() = phase != GatePhase.Open + + /** + * The loading screen at [now], with [busy] saying whether something that + * can still change the lists is loading. + * + * A load holds the person behind a blank screen at first, and behind the + * turning logo once it has run [GateTiming.delayMs]; an instant load shows + * no logo. Once shown, the logo stays at least [GateTiming.minShownMs]. A + * load still running after [GateTiming.timeoutMs] lets the person in and + * holds no one until it ends; the next one starts over. + */ + fun step(busy: Boolean, now: Long, timing: GateTiming = GateTiming()): LoadGate { + val since = busySince ?: now + return if (!busy) { + val shown = shownSince + if (phase == GatePhase.Shown && shown != null && now < shown + timing.minShownMs) { + copy(busySince = null, timedOut = false) + } else { + LoadGate() + } + } else if (timedOut) { + copy(phase = GatePhase.Open, shownSince = null) + } else if (now - since >= timing.timeoutMs) { + LoadGate(GatePhase.Open, since, null, timedOut = true) + } else if (phase == GatePhase.Shown) { + copy(busySince = since) + } else if (now - since >= timing.delayMs) { + LoadGate(GatePhase.Shown, since, now) + } else { + LoadGate(GatePhase.Waiting, since) + } + } + + /** When the screen next changes on its own, for a timer; null when it will not. */ + fun wakeAt(timing: GateTiming = GateTiming()): Long? { + val times = mutableListOf() + val since = busySince + val shown = shownSince + if (since != null && !timedOut) { + times.add(since + timing.timeoutMs) + if (phase == GatePhase.Waiting) { + times.add(since + timing.delayMs) + } + } + // A load that ended while the logo was up lets the person in once it has stayed long enough. + if (phase == GatePhase.Shown && since == null && shown != null) { + times.add(shown + timing.minShownMs) + } + return times.minOrNull() + } + + companion object { + /** A loading screen whose load begins at [now], as when the app opens. */ + fun started(now: Long): LoadGate = LoadGate(GatePhase.Waiting, now) + } +} diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/Model.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/Model.kt index 5bf8dec..9cb8b72 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/Model.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/Model.kt @@ -144,6 +144,16 @@ sealed interface FeedProblem { override val code = "not-https" } + /** What was typed is a plain http address, which is never added. */ + data object HttpRefused : FeedProblem { + override val code = "http-refused" + } + + /** A followed feed's address is plain http, and no https version of it was found. */ + data object HttpFeed : FeedProblem { + override val code = "http-feed" + } + /** An answer that is not a feed, while adding one. */ data object NotAFeed : FeedProblem { override val code = "not-a-feed" @@ -170,6 +180,8 @@ fun feedProblemFromCode(code: String): FeedProblem? = code == FeedProblem.NotAFeed.code -> FeedProblem.NotAFeed code == FeedProblem.NotWebAddress.code -> FeedProblem.NotWebAddress code == FeedProblem.NotHttps.code -> FeedProblem.NotHttps + code == FeedProblem.HttpRefused.code -> FeedProblem.HttpRefused + code == FeedProblem.HttpFeed.code -> FeedProblem.HttpFeed code == FeedProblem.Unreadable.code -> FeedProblem.Unreadable code.startsWith("status:") -> code.removePrefix("status:").toIntOrNull()?.let(FeedProblem::Status) ?: FeedProblem.NoAnswer else -> FeedProblem.NoAnswer diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/Opml.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/Opml.kt index 88b806f..09216ae 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/Opml.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/Opml.kt @@ -13,6 +13,8 @@ data class OpmlFeed( val title: String, /** The folder the feed sits in; empty for none. */ val folder: String, + /** Address of the feed's site; empty when the file gives none. */ + val siteUrl: String = "", ) /** An attribute's value whatever the case of its name, as exporters vary; null when absent. */ @@ -27,7 +29,7 @@ private fun collect(parent: Element, folder: String, feeds: MutableList" + val site = if (feed.siteUrl.isEmpty()) "" else " htmlUrl=\"${escapeAttribute(feed.siteUrl)}\"" + return "$indent" } /** Write feeds as OPML text, listing each group's feeds inside a folder outline and loose feeds after. */ @@ -79,4 +82,4 @@ fun buildOpml(feeds: List): String { } /** The feeds to export, with their names and groups. */ -fun opmlFeedsOf(feeds: List): List = feeds.map { feed -> OpmlFeed(feed.url, feed.title, feed.folder) } +fun opmlFeedsOf(feeds: List): List = feeds.map { feed -> OpmlFeed(feed.url, feed.title, feed.folder, feed.siteUrl) } diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderModel.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderModel.kt index dbfa027..09a9fa7 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderModel.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderModel.kt @@ -90,16 +90,40 @@ interface ReaderPreferences { /** Key of the last view shown; see [viewKey]. */ var lastView: String + + /** The font for article text and titles on this device; not synced. */ + var readingFont: ReadingFont +} + +/** The font for article text and titles; the rest of the interface stays in Public Sans. */ +enum class ReadingFont { + /** Literata, the default. */ + Literata, + + /** Public Sans, the interface's own face. */ + PublicSans, } /** How an OPML import went. */ data class ImportResult( - /** Feeds the file lists. */ + /** Feeds the file lists with a web address. */ val found: Int, - /** How many of them were new. */ + /** How many of them were new and added. */ val added: Int, + /** Plain http feeds left out because no https version was found. */ + val skipped: Int = 0, ) +/** A feed with the http problem when its address is plain http, and without it otherwise. */ +fun markedHttp(feed: Feed): Feed = + if (isPlainHttp(feed.url)) { + feed.copy(error = FeedProblem.HttpFeed.code) + } else if (feed.error == FeedProblem.HttpFeed.code) { + feed.copy(error = "") + } else { + feed + } + /** Shortest time the refreshing marks stay on, so a quick check is still seen. */ private const val MIN_REFRESH_MS = 700L private const val MAX_DISCOVERY_TRIES = 12 @@ -110,12 +134,13 @@ fun hasScheme(text: String): Boolean = SCHEME_PATTERN.containsMatchIn(text) /** * What a person typed or a file listed, as an address: https added when no - * scheme is given, plain http upgraded to https, and empty when it is not a - * web address; the same text the web app makes of it, so feed ids match. + * scheme is given, plain http kept as http (so it can be refused or tried + * over https), and empty when it is not a web address; the same text the web + * app makes of it, so feed ids match. */ fun normalizeUrl(input: String): String { val trimmed = jsTrim(input) - return upgradedAddress(if (hasScheme(trimmed)) trimmed else "https://$trimmed") + return webAddress(if (hasScheme(trimmed)) trimmed else "https://$trimmed") } private val logger: Logger = Logger.getLogger("cc.hafa.reader") @@ -155,6 +180,8 @@ private fun hostOf(address: String): String = address.toHttpUrlOrNull()?.host ?: * a read article stays listed until the view changes or feeds are refreshed; * marking an open article unread by hand sticks when it is left. The sidebar * order is worked out at load and after each refresh, and held in between. + * Articles and feeds that arrive in the background wait for the lists to be + * settled (see [settle]), so rows never move under the person. * * [savingData] says whether the device asks to save data (Data Saver on * Android); then no neighbor's body is downloaded and no picture fetched ahead. @@ -179,6 +206,10 @@ class ReaderModel( private val writes = Channel Unit>(Channel.UNLIMITED) private val manual: MutableSet = ConcurrentHashMap.newKeySet() private val iconsTried: MutableSet = ConcurrentHashMap.newKeySet() + // Plain http feeds tried over https since the reader started with a definite answer, or being tried, by id. + private val httpTried: MutableSet = ConcurrentHashMap.newKeySet() + // Tries of each plain http feed's https address that got no definite answer since the reader started, by id. + private val httpMisses = ConcurrentHashMap() private val applyLock = Mutex() // Held around every change to the feeds and the save it queues, so edits and check results never overwrite each other. private val feedEdits = Any() @@ -248,7 +279,14 @@ class ReaderModel( override suspend fun clear() = clearLocal() } - private val queue = CheckQueue(scope, clock, ::entryFeed, ::checkFeed, ::applyChecks) + private val queue = CheckQueue( + scope, + clock, + ::entryFeed, + ::checkFeed, + ::applyChecks, + onBusy = { busy -> update { current -> current.copy(checking = busy) } }, + ) init { scope.launch { @@ -269,7 +307,12 @@ class ReaderModel( suspend fun load() { loadLock.withLock { if (!state.value.loaded) { - val feeds = store.loadFeeds() + val stored = store.loadFeeds() + val feeds = stored.map(::markedHttp) + val remarked = feeds.filterIndexed { index, feed -> feed != stored[index] } + if (remarked.isNotEmpty()) { + persist { store.putFeeds(remarked) } + } val entries = store.loadEntries() val saved = store.loadSettings() val settings = saved.mapValues { (_, item) -> item.settings } @@ -317,6 +360,7 @@ class ReaderModel( first.entries === second.entries && first.feeds === second.feeds && first.settings === second.settings && first.pinned === second.pinned && first.heldTopics === second.heldTopics && first.frozenRank === second.frozenRank && + first.heldEntries === second.heldEntries && first.heldFeeds === second.heldFeeds && first.selection == second.selection && first.unreadOnly == second.unreadOnly && first.currentId == second.currentId ) @@ -330,20 +374,82 @@ class ReaderModel( if (before.currentId.isNotEmpty()) { close() } - update { current -> current.copy(pinned = emptySet(), heldTopics = emptyMap()) } + update { current -> current.copy(pinned = emptySet(), heldTopics = emptyMap(), heldEntries = current.heldEntries?.let { current.entryIds() }) } } preferences.lastView = viewKey(chosen) } /** Turn the unread-only switch on or off, and remember it; turning it on closes an open article already read. */ fun setUnreadOnly(next: Boolean) { - update { current -> current.copy(unreadOnly = next, pinned = emptySet(), heldTopics = emptyMap()) } + update { current -> + current.copy( + unreadOnly = next, + pinned = emptySet(), + heldTopics = emptyMap(), + heldEntries = current.heldEntries?.let { current.entryIds() }, + heldFeeds = current.heldFeeds?.let { current.feedIds() }, + ) + } if (next && entryById(state.value.currentId)?.read == true) { close() } preferences.unreadOnly = next } + /** + * Let everything that has arrived into the lists, as when the loading + * screen lets the person in and after a refresh: the article list and the + * sidebar take in new articles and feeds, and the sidebar's order is + * worked out again. + */ + fun settle() { + update { current -> + current.copy( + frozenRank = frozenRankOf(current.feeds, current.entries, current.settings), + heldEntries = current.entryIds(), + heldFeeds = current.feedIds(), + ) + } + } + + private fun ReaderState.entryIds(): Set = entries.mapTo(HashSet()) { entry -> entry.id } + + private fun ReaderState.feedIds(): Set = feeds.mapTo(HashSet()) { feed -> feed.id } + + /** + * [next], which adds what arrived in the background to [current], with the + * lists held: a feed the sidebar does not list now stays out until it is + * next settled, so what arrives adds no rows, while a list or sidebar that + * showed nothing takes it in, since no row can move. + */ + private fun heldArrival(current: ReaderState, next: ReaderState): ReaderState { + val listShowed = viewOf(current).visible.isNotEmpty() + val unread = unreadCounts(current.entries, current.feeds, current.settings).byFeed + val listedNow = current.feeds.filter { feed -> feedListed(current, unread, feed) } + val sidebarEmpty = listedNow.isEmpty() + return next.copy( + heldEntries = if (current.heldEntries != null && !listShowed) next.entryIds() else next.heldEntries, + heldFeeds = if (current.heldFeeds == null) { + null + } else if (sidebarEmpty) { + next.feedIds() + } else { + listedNow.mapTo(HashSet()) { feed -> feed.id } + }, + frozenRank = if (current.heldFeeds != null && sidebarEmpty) frozenRankOf(next.feeds, next.entries, next.settings) else next.frozenRank, + ) + } + + /** Show what the person just added: the list takes in every article that has arrived, and the sidebar lists the feed. */ + private fun reveal(feedId: String) { + update { current -> + current.copy( + heldEntries = current.heldEntries?.let { current.entryIds() }, + heldFeeds = current.heldFeeds?.let { held -> held + feedId }, + ) + } + } + /** Change the current view's settings and save them. */ fun changeSettings(change: (ViewSettings) -> ViewSettings) { val key = viewKey(state.value.selection) @@ -656,30 +762,13 @@ class ReaderModel( if (open.unreadOnly && open.selection != Selection.Starred && entryById(open.currentId)?.read == true) { close() } + if (state.value.feeds.any { feed -> isPlainHttp(feed.url) && feed.id !in httpTried }) { + scope.launch { upgradeHttpFeeds() } + } val started = clock() try { - val now = clock() - val chosen = state.value.feeds.filter { feed -> feedIds.isEmpty() || feed.id in feedIds } - val requests = if (chosen.size <= SMALL_REFRESH) { - chosen.map { feed -> CheckRequest(feed.id, 1.0, foreground = true, timeoutMs = FOREGROUND_TIMEOUT_MS) } - } else { - val plan = planRefresh(chosen, now) { feed -> feed.schedule } - plan.ordered.mapIndexed { index, feed -> - val waited = index < plan.foreground - CheckRequest( - feed.id, - plan.probabilities[index], - foreground = waited, - timeoutMs = if (waited) FOREGROUND_TIMEOUT_MS else FETCH_TIMEOUT_MS, - ) - } - } - val checks = queue.enqueue(requests) - checks.filter { (_, request) -> request.foreground }.forEach { (check, _) -> check.settled.await() } - if (queue.busy()) { - onBackgroundWork() - } - update { current -> current.copy(frozenRank = frozenRankOf(current.feeds, current.entries, current.settings)) } + checkNow(feedIds) + settle() } finally { try { val remaining = minRefreshMillis - (clock() - started) @@ -692,26 +781,74 @@ class ReaderModel( } } + /** + * Check feeds now (every feed when [feedIds] is empty) and wait for the + * first ones (see [planRefresh]), showing nothing while they are checked. + */ + private suspend fun checkNow(feedIds: List) { + val now = clock() + // a plain http feed is never fetched; its https address is tried apart from the schedule + val chosen = state.value.feeds.filter { feed -> (feedIds.isEmpty() || feed.id in feedIds) && !isPlainHttp(feed.url) } + val requests = if (chosen.size <= SMALL_REFRESH) { + chosen.map { feed -> CheckRequest(feed.id, 1.0, foreground = true, timeoutMs = FOREGROUND_TIMEOUT_MS) } + } else { + val plan = planRefresh(chosen, now) { feed -> feed.schedule } + plan.ordered.mapIndexed { index, feed -> + val waited = index < plan.foreground + CheckRequest( + feed.id, + plan.probabilities[index], + foreground = waited, + timeoutMs = if (waited) FOREGROUND_TIMEOUT_MS else FETCH_TIMEOUT_MS, + ) + } + } + val checks = queue.enqueue(requests) + checks.filter { (_, request) -> request.foreground }.forEach { (check, _) -> check.settled.await() } + if (queue.busy()) { + onBackgroundWork() + } + } + /** Check the feeds in the current view now. */ suspend fun refreshView() { refresh(view().viewFeedIds) } + /** + * Start the checks the app makes when it opens, without waiting for them: + * load, try plain http feeds over https, and queue the feeds whose schedule + * says they are due. Nothing shows as refreshing, the list keeps its rows + * and the sidebar keeps the order worked out at load. + */ + suspend fun openChecks() { + load() + if (state.value.feeds.any { feed -> isPlainHttp(feed.url) && feed.id !in httpTried }) { + scope.launch { upgradeHttpFeeds() } + } + queue.enqueue(dueRequests(clock())) + if (queue.busy()) { + onBackgroundWork() + } + } + /** Check the feeds whose schedule says they are due, through the same queue, and wait until they are saved. */ suspend fun refreshDue() { val now = clock() - val due = state.value.loaded || store.loadFeeds().any { feed -> feed.schedule.nextFetch <= now } - if (!due) { - return + val due = state.value.loaded || store.loadFeeds().any { feed -> feed.schedule.nextFetch <= now && !isPlainHttp(feed.url) } + if (due) { + load() + queue.enqueue(dueRequests(now)).forEach { (check, _) -> check.stored.await() } } - load() - val requests = state.value.feeds - .filter { feed -> feed.schedule.nextFetch <= now } + } + + /** Background checks of the feeds due at [now]; plain http feeds are never due. */ + private fun dueRequests(now: Long): List = + state.value.feeds + .filter { feed -> feed.schedule.nextFetch <= now && !isPlainHttp(feed.url) } .map { feed -> CheckRequest(feed.id, refreshProbability(feed.schedule, now), foreground = false, timeoutMs = FETCH_TIMEOUT_MS) } - queue.enqueue(requests).forEach { (check, _) -> check.stored.await() } - } /** Wait until every queued check, including those a refresh left to the background, is saved. */ suspend fun awaitChecks() { @@ -728,13 +865,25 @@ class ReaderModel( update { current -> current.copy(adding = true) } try { val start = normalizeUrl(input) - if (start.toHttpUrlOrNull()?.isHttps != true) { + if (isPlainHttp(start)) { + throw FeedProblemException(FeedProblem.HttpRefused) + } else if (start.toHttpUrlOrNull()?.isHttps != true) { throw FeedProblemException(FeedProblem.NotWebAddress) } val found = discover(start) val id = feedId(found.url) - val feed = if (state.value.feeds.none { feed -> feed.id == id }) { - Feed( + val addresses = listOf(found.url) + val existing = followed(state.value.feeds, id, addresses) + val plain = plainAddress(found.url) + // a feed followed at the plain http form of this address moves here when it is the same feed; a different one stays as it is + val atHttp = state.value.feeds.firstOrNull { feed -> feed.url == plain && sameFeed(knownOf(feed), found.parsed) } + if (existing != null) { + select(Selection.FeedView(existing.id)) + } else if (atHttp != null) { + moveToHttps(listOf(atHttp to HttpsMatch(found.url, found.parsed, found.outcome))) + select(Selection.FeedView(atHttp.id)) + } else { + val feed = Feed( id = id, url = found.url, title = found.parsed.title.ifEmpty { hostOf(found.url) }, @@ -745,70 +894,85 @@ class ReaderModel( error = "", updatedAt = clock(), ) - } else { - null - } - // The same feed may have come from the account while the site was being looked up. - val added = feed != null && synchronized(feedEdits) { - var fresh = false - update { current -> - fresh = current.feeds.none { known -> known.id == id } - if (fresh) current.copy(feeds = current.feeds + feed) else current + // The same feed may have come from the account while the site was being looked up. + val added = synchronized(feedEdits) { + var fresh = false + update { current -> + fresh = followed(current.feeds, id, addresses) == null + if (fresh) current.copy(feeds = current.feeds + feed) else current + } + if (fresh) { + persist { store.putFeeds(listOf(feed)) } + } + fresh } - if (fresh) { - persist { store.putFeeds(listOf(feed)) } + if (added) { + forget(listOf("$FEED_TOMBSTONE$id")) + sendToSync(LocalChange(feeds = listOf(feed))) + val now = clock() + val result = withContext(workDispatcher) { checkOutcome(feed.schedule, feed.url, found.outcome, now) } + // the sidebar keeps its order, with the new feed last, until the next refresh + applyChecks(listOf(FinishedCheck(feed, result, now))) } - fresh + select(Selection.FeedView(followed(state.value.feeds, id, addresses)?.id ?: id)) } - if (feed != null && added) { - forget(listOf("$FEED_TOMBSTONE$id")) - sendToSync(LocalChange(feeds = listOf(feed))) - val now = clock() - val result = withContext(workDispatcher) { checkOutcome(feed.schedule, feed.url, found.outcome, now) } - // the sidebar keeps its order, with the new feed last, until the next refresh - applyChecks(listOf(FinishedCheck(feed, result, now))) + val shown = state.value.selection + if (shown is Selection.FeedView) { + reveal(shown.id) } - select(Selection.FeedView(id)) } finally { update { current -> current.copy(adding = false) } } } /** - * Subscribe to every feed in an OPML file and start checking them. Returns - * how many feeds the file lists and how many of them were new. + * Subscribe to every feed in an OPML file and start checking them: into + * [group] when given (empty for no group), else into the file's own + * folders. A plain http feed is tried over https and added there when it + * serves the same feed; otherwise it is left out. Returns how many feeds + * the file lists, how many of them were new, and how many http feeds were + * left out. */ - suspend fun importOpml(source: String): ImportResult { + suspend fun importOpml(source: String, group: String? = null): ImportResult { load() update { current -> current.copy(adding = true) } try { - return importParsed(withContext(workDispatcher) { prepareImport(source) }) + val listed = withContext(workDispatcher) { + parseOpml(source).mapNotNull { item -> normalizeUrl(item.url).ifEmpty { null }?.let { url -> item.copy(url = url) } } + } + val following = state.value.feeds.mapTo(HashSet()) { feed -> feed.url } + val resolved = mapConcurrently(listed, PROBE_CONCURRENCY) { item -> + val secure = upgradedAddress(item.url) + val url = if (isPlainHttp(item.url) && item.url !in following && secure !in following) { + probe(KnownFeed(item.url, item.title, item.siteUrl)).match?.url ?: "" + } else { + secure + } + item to url + } + return importResolved(resolved, group) } finally { update { current -> current.copy(adding = false) } } } - /** OPML feeds with web addresses, each with its id. */ - private fun prepareImport(source: String): List> = - parseOpml(source) - .map { item -> item.copy(url = normalizeUrl(item.url)) } - .filter { item -> item.url.toHttpUrlOrNull() != null } - .map { item -> item to feedId(item.url) } - - private fun importParsed(items: List>): ImportResult { - val known = state.value.feeds.mapTo(HashSet()) { feed -> feed.id } + /** Add listed feeds, each with the https address it resolved to (empty when none was found). */ + private fun importResolved(items: List>, group: String?): ImportResult { + val usable = items.filter { (_, url) -> url.toHttpUrlOrNull()?.isHttps == true } + val feeds = state.value.feeds val added = mutableListOf() - for ((item, id) in items) { - if (known.add(id)) { + for ((item, url) in usable) { + val id = feedId(url) + if (followed(feeds, id, listOf(url, item.url)) == null && added.none { feed -> feed.id == id }) { added.add( Feed( id = id, - url = item.url, - title = item.title.ifEmpty { hostOf(item.url) }, - siteUrl = "", - icon = faviconFor(item.url), + url = url, + title = item.title.ifEmpty { hostOf(url) }, + siteUrl = upgradedAddress(item.siteUrl), + icon = faviconFor(url), renamed = false, - folder = item.folder.trim(), + folder = (group ?: item.folder).trim(), error = "", updatedAt = clock(), ), @@ -824,21 +988,138 @@ class ReaderModel( } forget(added.map { feed -> "$FEED_TOMBSTONE${feed.id}" }) sendToSync(LocalChange(feeds = added)) - scope.launch { refresh() } - return ImportResult(found = items.size, added = added.size) + if (added.isNotEmpty()) { + // The loading screen holds the person until the new feeds' first check is in. + update { current -> current.copy(importing = current.importing + 1) } + scope.launch { + try { + checkNow(added.map { feed -> feed.id }) + } finally { + update { current -> current.copy(importing = current.importing - 1) } + } + } + } + return ImportResult(found = items.size, added = added.size, skipped = items.size - usable.size) } - /** Search Feedly for feeds about [query]; empty when nothing is found or it does not answer. */ + /** + * Search Feedly for feeds about [query]; empty when nothing is found or it + * does not answer. A plain http result is shown at its https address only + * when that serves the same feed, and left out otherwise. + */ suspend fun searchFeeds(query: String): List { update { current -> current.copy(adding = true) } try { val outcome = fetcher.fetch(feedSearchAddress(query), "", "") - return if (outcome.status == 200) withContext(workDispatcher) { parseFeedSearch(outcome.text) } else emptyList() + val found = if (outcome.status == 200) withContext(workDispatcher) { parseFeedSearch(outcome.text) } else emptyList() + val checked = mapConcurrently(found, PROBE_CONCURRENCY) { hit -> + if (isPlainHttp(hit.url)) hit.copy(url = probe(KnownFeed(hit.url, hit.title, hit.siteUrl)).match?.url ?: "") else hit + } + return checked.filter { hit -> hit.url.isNotEmpty() }.distinctBy { hit -> hit.url } } finally { update { current -> current.copy(adding = false) } } } + /** What one try of a plain http feed at its https address found. */ + private data class Probe( + /** The https address found to serve the same feed; null when none. */ + val match: HttpsMatch?, + /** Whether the answer settles the question, so a failure that does not is tried again later. */ + val settled: Boolean, + ) + + /** Try a plain http feed at its https address. */ + private suspend fun probe(known: KnownFeed): Probe = withContext(workDispatcher) { + var answer: FetchOutcome? = null + val match = probeHttps(known) { url, etag, lastModified, timeoutMs -> + fetcher.fetch(url, etag, lastModified, timeoutMs).also { outcome -> answer = outcome } + } + // an address that may not be tried never will be, so there is nothing to wait for + Probe(match, match != null || !probeAllowed(known.url) || settledAnswer(answer)) + } + + /** What is known of a followed feed to tell it from another; a name the person gave is not the feed's own. */ + private fun knownOf(feed: Feed): KnownFeed { + val held = state.value.entries.filter { entry -> entry.feedId == feed.id } + return KnownFeed(feed.url, if (feed.renamed) "" else feed.title, feed.siteUrl, held.map { entry -> entry.guid }, held.map { entry -> entry.url }) + } + + /** + * Try each plain http feed, once while the reader runs, at its https + * address; one whose try got no definite answer (offline, a timeout, a + * failing server) is tried again on the next refresh, up to + * [UNSETTLED_TRIES] tries. One that serves the + * same feed moves there (see [moveToHttps]). One that does not, or whose + * https address is already followed, keeps the http problem. + */ + private suspend fun upgradeHttpFeeds() { + val waiting = state.value.feeds.filter { feed -> isPlainHttp(feed.url) && httpTried.add(feed.id) } + val matches = mapConcurrently(waiting, PROBE_CONCURRENCY) { feed -> + val probe = probe(knownOf(feed)) + val misses = httpMisses.merge(feed.id, if (probe.settled) 0 else 1, Int::plus) ?: 0 + if (!probe.settled && misses < UNSETTLED_TRIES) { + httpTried.remove(feed.id) + } + probe.match?.let { match -> feed to match } + }.filterNotNull() + if (matches.isNotEmpty()) { + moveToHttps(matches) + } + } + + /** + * Move plain http feeds to the https addresses found to serve them: same + * id, articles, marks and group, with the new address saved and sent like + * a person's change, so other devices move too, and the answer taken as + * its first check. A feed whose address changed meanwhile, or whose https + * address is already followed, stays. + */ + private suspend fun moveToHttps(matches: List>) { + val found = matches.associate { (feed, match) -> feed.id to Triple(feed.url, match, feedId(match.url)) } + val now = clock() + val moved = mutableListOf>() + synchronized(feedEdits) { + update { current -> + moved.clear() + val ids = current.feeds.mapTo(HashSet()) { feed -> feed.id } + val idsByUrl = current.feeds.groupBy({ feed -> feed.url }, { feed -> feed.id }) + val feeds = current.feeds.map { feed -> + val candidate = found[feed.id]?.takeIf { (triedUrl, _, _) -> triedUrl == feed.url } + if (candidate == null) { + feed + } else { + val (_, match, newId) = candidate + val taken = (newId != feed.id && newId in ids) || + idsByUrl[match.url].orEmpty().any { id -> id != feed.id } + if (taken) { + feed + } else { + val schedule = feed.schedule.copy(etag = "", lastModified = "", hash = "", nextFetch = 0) + feed.copy(url = match.url, error = "", schedule = schedule, updatedAt = now).also { updated -> moved.add(updated to match) } + } + } + } + if (moved.isEmpty()) current else current.copy(feeds = feeds) + } + if (moved.isNotEmpty()) { + val feeds = moved.map { (feed, _) -> feed } + persist { store.putFeeds(feeds) } + sendToSync(LocalChange(feeds = feeds)) + } + } + if (moved.isNotEmpty()) { + val checks = withContext(workDispatcher) { + moved.map { (feed, match) -> FinishedCheck(feed, checkOutcome(feed.schedule, feed.url, match.outcome, now), now) } + } + applyChecks(checks) + } + } + + /** A feed among [feeds] with this id or one of these addresses. */ + private fun followed(feeds: List, id: String, urls: List): Feed? = + feeds.firstOrNull { feed -> feed.id == id || feed.url in urls } + /** * A feed's picture would not load: look once for the one its site * announces, and use it; nothing changes when the site names none. The new @@ -929,20 +1210,24 @@ class ReaderModel( } } - /** Store changes from the account; nothing here is sent back. */ + /** + * Store changes from the account; nothing here is sent back. New articles + * and feeds wait for the lists to be settled. + */ private suspend fun applyRemote(change: RemoteChange) { for ((id, removedAt) in change.removedFeeds) { dropFeed(id, removedAt) } val forgotten = mutableListOf() if (change.feeds.isNotEmpty()) { - val byId = change.feeds.associateBy { feed -> feed.id } + val incoming = change.feeds.map(::markedHttp) + val byId = incoming.associateBy { feed -> feed.id } synchronized(feedEdits) { update { current -> val known = current.feeds.mapTo(HashSet()) { feed -> feed.id } - current.copy(feeds = current.feeds.map { feed -> byId[feed.id] ?: feed } + change.feeds.filter { feed -> feed.id !in known }) + heldArrival(current, current.copy(feeds = current.feeds.map { feed -> byId[feed.id] ?: feed } + incoming.filter { feed -> feed.id !in known })) } - persist { store.putFeeds(change.feeds) } + persist { store.putFeeds(incoming) } } forgotten.addAll(change.feeds.map { feed -> "$FEED_TOMBSTONE${feed.id}" }) } @@ -951,7 +1236,16 @@ class ReaderModel( val byId = incoming.associateBy { entry -> entry.id } update { current -> val known = current.entries.mapTo(HashSet()) { entry -> entry.id } - current.copy(entries = current.entries.map { entry -> byId[entry.id] ?: entry } + incoming.filter { entry -> entry.id !in known }) + val shown = viewOf(current).visible.mapTo(HashSet()) { entry -> entry.id } + // An article read elsewhere stays listed until the view changes, as one read here does. + val readElsewhere = incoming.filter { entry -> entry.read && entry.id in shown }.map { entry -> entry.id } + heldArrival( + current, + current.copy( + entries = current.entries.map { entry -> byId[entry.id] ?: entry } + incoming.filter { entry -> entry.id !in known }, + pinned = if (readElsewhere.isEmpty()) current.pinned else current.pinned + readElsewhere, + ), + ) } persist { store.updateEntries(incoming) } } @@ -992,6 +1286,8 @@ class ReaderModel( aheadBodies = emptyMap(), aheadPictures = emptyList(), frozenRank = emptyMap(), + heldEntries = null, + heldFeeds = null, ) } persist { store.clear() } @@ -1042,10 +1338,11 @@ class ReaderModel( } savedFeeds = changed savedEntries = added - current.copy( + val next = current.copy( feeds = current.feeds.map { feed -> byId[feed.id] ?: feed }, entries = if (added.isEmpty()) current.entries else current.entries + added, ) + if (added.isEmpty()) next else heldArrival(current, next) } val bodies = pulled.flatMap { found -> found.bodies.entries }.associate { (id, html) -> id to html } if (savedFeeds.isNotEmpty() || savedEntries.isNotEmpty()) { diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderView.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderView.kt index e20722f..d2a274b 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderView.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/ReaderView.kt @@ -39,15 +39,40 @@ data class ReaderState( val loaded: Boolean = false, /** Refreshes under way. */ val refreshCount: Int = 0, + /** Whether any feed is queued, being checked or waiting to be saved, for a refresh or in the background. */ + val checking: Boolean = false, /** Whether a feed is being added or imported. */ val adding: Boolean = false, /** Sidebar positions fixed at load and at each refresh; rows added later follow them. */ val frozenRank: Map? = null, + /** + * Ids of the articles the list may show; ones that arrive later wait until + * the list is next settled, so rows never move under the person. Null + * lets every article in. + */ + val heldEntries: Set? = null, + /** Ids of the feeds the sidebar may list, held like [heldEntries]; null lets every feed in. */ + val heldFeeds: Set? = null, + /** Imports whose feeds are being checked for the first time. */ + val importing: Int = 0, ) { /** Whether feeds are being checked now. */ val refreshing: Boolean get() = refreshCount > 0 } +/** + * When a refresh starts to help: once the first feed is overdue (see + * [overdueAt]), or [Long.MAX_VALUE] while nothing is overdue or feeds are + * being checked, so the suggestion clears once a refresh has saved them. A + * plain http feed is never on the schedule, so it is never overdue. + */ +fun refreshSuggestedAt(state: ReaderState): Long = + if (state.refreshing || state.checking) { + Long.MAX_VALUE + } else { + overdueAt(state.feeds.filter { feed -> !isPlainHttp(feed.url) }.map { feed -> feed.schedule.nextFetch }) + } + /** A feed in the sidebar, with what it is ordered by. */ data class FeedRow( /** The feed. */ @@ -112,8 +137,8 @@ data class ReaderView( val baseEntries: List, /** Entries in the current view, in the chosen order, as listed. */ val visible: List, - /** The topics in the current view, commonest first. */ - val topics: List, + /** The topics in the current view, commonest first, kept as the same object while they stay the same. */ + val topicOrder: TopicOrder, /** Name of the current view. */ val viewTitle: ViewTitle, /** Feeds in the current view; empty means every feed. */ @@ -336,6 +361,20 @@ val NEWEST_FIRST: Comparator = .thenBy { entry -> entry.url } .thenBy { entry -> entry.id } +@Volatile +private var lastTopicOrder: TopicOrder? = null + +/** The topics of [entries] in order, reusing the last order when the counts have not changed, so screens can skip. */ +private fun topicOrderOf(entries: List): TopicOrder { + val counts = topicCounts(entries) + val cached = lastTopicOrder + return if (cached != null && cached.counts == counts) { + cached + } else { + TopicOrder(counts).also { order -> lastTopicOrder = order } + } +} + /** Work out what the screens show from the reader's state. */ fun deriveView(state: ReaderState): ReaderView { val selection = state.selection @@ -348,9 +387,10 @@ fun deriveView(state: ReaderState): ReaderView { } val kept = baseEntries.filter { entry -> keeps(state, viewSettings, entry) }.map { entry -> entry.id }.toSet() val unreadOnly = state.unreadOnly && selection != Selection.Starred + val held = state.heldEntries val visible = ordered.filter { entry -> entry.id == state.currentId || - (entry.id in kept && !(unreadOnly && entry.read && entry.id !in state.pinned)) + ((held == null || entry.id in held) && entry.id in kept && !(unreadOnly && entry.read && entry.id !in state.pinned)) } val counts = unreadCounts(state.entries, state.feeds, state.settings) val unread = counts.byFeed @@ -372,7 +412,7 @@ fun deriveView(state: ReaderState): ReaderView { viewSettings = viewSettings, baseEntries = baseEntries, visible = visible, - topics = topicCounts(baseEntries), + topicOrder = topicOrderOf(baseEntries), viewTitle = viewTitle, viewFeedIds = viewFeedIds, current = state.entries.firstOrNull { entry -> entry.id == state.currentId }, @@ -405,11 +445,21 @@ data class SidebarRow( */ fun sidebarRows(state: ReaderState, view: ReaderView): List = listedRows(state, view.tree, view.unreadByFeed) +/** + * Whether the sidebar lists a feed, given each feed's [unread] count: it is + * the one open, or it was there when the sidebar was last settled and has + * something unread or unread only is off. + */ +fun feedListed(state: ReaderState, unread: Map, feed: Feed): Boolean { + val selection = state.selection + val held = state.heldFeeds + return (selection is Selection.FeedView && selection.id == feed.id) || + ((held == null || feed.id in held) && (!state.unreadOnly || (unread[feed.id] ?: 0) > 0)) +} + private fun listedRows(state: ReaderState, tree: List, unread: Map): List { val selection = state.selection - fun listed(feed: Feed): Boolean = - !state.unreadOnly || (unread[feed.id] ?: 0) > 0 || - (selection is Selection.FeedView && selection.id == feed.id) + fun listed(feed: Feed): Boolean = feedListed(state, unread, feed) val rows = mutableListOf() for (item in tree) { when (item) { diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/Resolve.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/Resolve.kt index e016180..27b7293 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/Resolve.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/Resolve.kt @@ -31,9 +31,12 @@ private val MEDIUM_PATH_PATTERN = Regex("^/(@?[\\w.-]+)/?$") * escaped), as the shared `upgradedAddress` does; empty when it is not a web * address. */ -fun upgradedAddress(address: String): String { +fun upgradedAddress(address: String): String = browserWritten(httpsOnly(address)) { url -> url.isHttps } + +/** An http or https address that [accept] takes, written out as browsers write it; empty for anything else. */ +internal fun browserWritten(address: String, accept: (HttpUrl) -> Boolean): String { // OkHttp escapes "|" where browsers keep it, so it is carried through as a private character - val written = httpsOnly(address.replace("|", PIPE_STAND_IN)).toHttpUrlOrNull()?.takeIf { url -> url.isHttps }?.toString() ?: "" + val written = address.replace("|", PIPE_STAND_IN).toHttpUrlOrNull()?.takeIf(accept)?.toString() ?: "" val hash = written.indexOf('#') val whole = if (hash < 0) written else written.substring(0, hash + 1) + browserFragment(written.substring(hash + 1)) return whole.replace(ESCAPED_PIPE_STAND_IN, "|").replace(PIPE_STAND_IN, "|") diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/Schedule.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/Schedule.kt index ea8eeb8..27577b4 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/Schedule.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/Schedule.kt @@ -218,6 +218,24 @@ fun chooseInterval(model: FeedModel, nowMs: Long): Double { } } +/** + * How late a feed's scheduled check may run before a refresh is suggested, in + * milliseconds. The background checks (about every 15 minutes here, every 5 in + * the browser extension) normally reach a due feed well within it, so only a + * feed they missed, as when the phone slept, counts. + */ +const val OVERDUE_MS = 2 * MIN_INTERVAL_MS + +/** + * When the first of these feeds becomes overdue: the earliest next check plus + * [OVERDUE_MS]; [Long.MAX_VALUE] when there are none. One pass over the next + * checks, so the caller can work it out on every change and wait once for it. + */ +fun overdueAt(nextChecks: Iterable): Long { + val earliest = nextChecks.minOrNull() + return if (earliest == null) Long.MAX_VALUE else earliest + OVERDUE_MS +} + /** Wait after the given number of failures in a row, doubling each time. */ fun retryInterval(failures: Int): Long = min(MAX_RETRY_MS.toDouble(), MIN_INTERVAL_MS * 2.0.pow(failures)).toLong() diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/TopicRows.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/TopicRows.kt new file mode 100644 index 0000000..1207383 --- /dev/null +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/TopicRows.kt @@ -0,0 +1,28 @@ +package cc.hafa.reader.core + +/** The most rows of topics shown before the topics scroll sideways. */ +const val TOPIC_ROWS = 3 + +/** Where one item goes in [wrappedRows]: its [row], counted from zero, and its [left] edge. */ +data class RowPosition(val row: Int, val left: Int) + +/** Where items of these widths go when laid left to right and wrapped at [available], with [gap] between neighbors. */ +fun wrappedRows(widths: List, available: Int, gap: Int): List { + val positions = ArrayList(widths.size) + var row = -1 + var used = 0 + for (width in widths) { + if (row < 0 || used + gap + width > available) { + row += 1 + positions.add(RowPosition(row, 0)) + used = width + } else { + positions.add(RowPosition(row, used + gap)) + used += gap + width + } + } + return positions +} + +/** The number of rows [positions] fill. */ +fun rowCount(positions: List): Int = positions.lastOrNull()?.row?.plus(1) ?: 0 diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/AccountStore.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/AccountStore.kt index f472295..76407cf 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/AccountStore.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/AccountStore.kt @@ -120,7 +120,7 @@ interface AccountStore { /** The newest server write time among the account's entries, read from the server; zero for none. */ suspend fun newestEntrySyncedAt(): Long - /** Listen to entries written after [sinceMs] by the server's clock. */ + /** Listen to entries written after [sinceMs] by the server's clock; the first changes come even when there are none. */ fun listenEntries(sinceMs: Long, onChanges: (List) -> Unit, onError: (Throwable) -> Unit): Stop /** A page of entries newest first, after [after], read from the server. */ diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Documents.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Documents.kt index d98d41d..eb521c9 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Documents.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Documents.kt @@ -6,6 +6,7 @@ import cc.hafa.reader.core.Feed import cc.hafa.reader.core.Sort import cc.hafa.reader.core.ViewSettings import cc.hafa.reader.core.upgradedAddress +import cc.hafa.reader.core.webAddress private const val DAY_MS = 24L * 60 * 60 * 1000 @@ -409,8 +410,8 @@ private fun hasTime(fields: Map): Boolean = fields["updatedAt"] is fun parseSubscription(fields: Map): SubscriptionDocument? { val stored = if (hasTime(fields)) { SubscriptionDocument( - // https only: plain http is upgraded, other addresses are dropped - url = upgradedAddress(text(fields, "url")), + // a plain http feed is kept as http, to be tried over https before any fetch; other addresses are dropped + url = webAddress(text(fields, "url")), title = text(fields, "title"), folder = text(fields, "folder"), renamed = flag(fields, "renamed"), diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Engine.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Engine.kt index 669a4cd..2eb157c 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Engine.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Engine.kt @@ -221,6 +221,7 @@ class SyncEngine( session?.retention, if (known.uid == null) "" else known.photoUrl, session?.feedsKnown ?: false, + session?.caughtUp ?: false, ), ) } @@ -309,25 +310,27 @@ class SyncEngine( * everything on this device. */ fun deleteAccount() { - val account = uid ?: return - mutableUi.update { current -> current.copy(deleting = true, deleteFailed = false) } - scope.launch { - try { - // before anything stops, so a closed chooser leaves sync as it was - auth.ensureRecentSignIn() - emptyAccount(account) - if (preferences.get(ACCOUNT_KEY) == account) { - preferences.set(ACCOUNT_KEY, null) + val account = uid + if (account != null) { + mutableUi.update { current -> current.copy(deleting = true, deleteFailed = false) } + scope.launch { + try { + // before anything stops, so a closed chooser leaves sync as it was + auth.ensureRecentSignIn() + emptyAccount(account) + if (preferences.get(ACCOUNT_KEY) == account) { + preferences.set(ACCOUNT_KEY, null) + } + auth.signOut() + } catch (cancelled: CancellationException) { + throw cancelled + } catch (failure: Exception) { + logger.log(Level.WARNING, "could not delete the account", failure) + mutableUi.update { current -> current.copy(deleteFailed = true) } + } finally { + mutableUi.update { current -> current.copy(deleting = false) } + report() } - auth.signOut() - } catch (cancelled: CancellationException) { - throw cancelled - } catch (failure: Exception) { - logger.log(Level.WARNING, "could not delete the account", failure) - mutableUi.update { current -> current.copy(deleteFailed = true) } - } finally { - mutableUi.update { current -> current.copy(deleting = false) } - report() } } } diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Host.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Host.kt index 45e542b..bc5c7be 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Host.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Host.kt @@ -41,6 +41,8 @@ data class SyncReport( val photoUrl: String = "", /** Whether the signed-in account's feeds have arrived from the server. */ val feedsKnown: Boolean = false, + /** Whether what the account had when this session began is stored here, all but entries older than the recent window; false when signed out. */ + val caughtUp: Boolean = false, ) /** Everything stored on this device, as sync reads it. */ diff --git a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Session.kt b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Session.kt index 237058d..1088216 100644 --- a/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Session.kt +++ b/android/core/src/main/kotlin/cc/hafa/reader/core/sync/Session.kt @@ -120,6 +120,23 @@ class Session( var feedsKnown = false private set + // Whether the account's settings from the server, the entry listener's first changes, and the recent window of entries are stored here. + @Volatile + private var settingsIn = false + + @Volatile + private var entriesIn = false + + @Volatile + private var recentIn = false + + /** + * Whether what the account had when this session began is stored here: its + * feeds and settings from the server, the entry listener's first changes, + * and the recent window of entries; older ones may still be loading. + */ + val caughtUp: Boolean get() = feedsKnown && settingsIn && entriesIn && (recentIn || state.merged) + /** Whether something failed: a write, or a listener that has not come back yet. */ val failed: Boolean get() = writeFailed || broken.isNotEmpty() @@ -511,6 +528,10 @@ class Session( } applyRemote(RemoteChange(settings = pulled, removedSettings = removed)) queue(LocalChange(settings = merged.push.toMap(), removedSettings = merged.pushRemoved.toMap())) + if (settingsReconciled && !settingsIn) { + settingsIn = true + onStatus() + } } private fun listenEntries() { @@ -526,6 +547,10 @@ class Session( serially { try { onEntries(changes) + if (!entriesIn) { + entriesIn = true + onStatus() + } } catch (failure: Exception) { cursorHeld = true throw failure @@ -637,6 +662,7 @@ class Session( } val reached = upper if (!state.merged && reached != null && reached < cutoff) { + recentIn = true loadingOlder = true onStatus() delay(timing.olderPauseMs) diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/CheckQueueTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/CheckQueueTest.kt index e907c56..4e08a16 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/CheckQueueTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/CheckQueueTest.kt @@ -28,6 +28,7 @@ private class Harness(private val test: TestScope, feeds: List, limits: Qu val calls = mutableListOf() val saves = mutableListOf>() + val busyReports = mutableListOf() private var now = 1_000_000L private var timers = mutableListOf Unit>>() private val byId = feeds.associateBy { item -> item.id } @@ -44,6 +45,7 @@ private class Harness(private val test: TestScope, feeds: List, limits: Qu save = { batch -> saves.add(batch.map { finished -> finished.feed.id }) }, limits = limits, setTimer = { delayMs, callback -> timers.add(now + delayMs to callback) }, + onBusy = { busy -> busyReports.add(busy) }, ) fun settle() = test.runCurrent() @@ -96,6 +98,21 @@ class CheckQueueTest { assertEquals(listOf("broken", "broken"), calls) } + @Test + fun `busy is reported once when checks start and once when the last is saved`() = runTest { + val first = feed("a") + val second = feed("b") + val harness = Harness(this, listOf(first, second)) + harness.queue.enqueue(listOf(harness.request(first), harness.request(second))) + harness.settle() + assertEquals(listOf(true), harness.busyReports) + harness.answer("a", done(first)) + assertEquals(listOf(true), harness.busyReports) + harness.answer("b", done(second)) + assertEquals(listOf("a", "b"), harness.saves.flatten()) + assertEquals(listOf(true, false), harness.busyReports) + } + @Test fun `at most the limit run at once, and at most two to one host`() = runTest { val feeds = listOf(feed("a", "same.example"), feed("b", "same.example"), feed("c", "same.example"), feed("d"), feed("e")) diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/FeedSearchTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/FeedSearchTest.kt index 2f40929..2fb59ba 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/FeedSearchTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/FeedSearchTest.kt @@ -15,25 +15,26 @@ class FeedSearchTest { """.trimIndent() @Test - fun `hits are read with the feed prefix dropped, gaps filled and http moved to https`() { + fun `hits are read with the feed prefix dropped, gaps filled and http kept for a later try`() { assertEquals( listOf( - FeedHit("https://cooking.example/feed", "Cooking", "Recipes daily", "https://cooking.example/icon.png", 12345), - FeedHit("https://plain.example/rss", "feed/http://plain.example/rss", "", "", 0), + FeedHit("https://cooking.example/feed", "Cooking", "Recipes daily", "https://cooking.example/icon.png", 12345, "https://cooking.example/"), + FeedHit("http://plain.example/rss", "feed/http://plain.example/rss", "", "", 0), ), parseFeedSearch(answer), ) } @Test - fun `only feed ids count, http is upgraded and repeats are dropped`() { + fun `only feed ids with web addresses count, and repeats are dropped`() { val answer = """{"results":[ {"feedId":"feed/http://a.example/rss","title":"A"}, {"feedId":"feed/https://a.example/rss","title":"A again"}, + {"feedId":"feed/https://a.example/rss","title":"A once more"}, {"feedId":"topic/cooking","title":"Not a feed"}, {"feedId":"feed/ftp://b.example/rss","title":"Not web"} ]}""" - assertEquals(listOf("https://a.example/rss" to "A"), parseFeedSearch(answer).map { hit -> hit.url to hit.title }) + assertEquals(listOf("http://a.example/rss" to "A", "https://a.example/rss" to "A again"), parseFeedSearch(answer).map { hit -> hit.url to hit.title }) } @Test diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/FilterTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/FilterTest.kt index c19c5c7..760820e 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/FilterTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/FilterTest.kt @@ -85,6 +85,41 @@ class FilterTest { ) } + @Test + fun `a topic an article lists twice counts once, and ties go by name`() { + val twice = story.copy(categories = listOf("Zoo", "zoo ", "Apple")) + assertEquals(listOf(TopicCount("Apple", 1), TopicCount("Zoo", 1)), topicCounts(listOf(twice))) + } + + @Test + fun `names go most counted first, then by name`() { + val counts = mapOf("budget" to 2, "senate" to 5, "night" to 2) + assertEquals( + listOf("senate", "budget", "night", "zoo"), + byCount(listOf("budget", "night", "senate", "zoo")) { name -> counts[name] ?: 0 }, + ) + } + + @Test + fun `an article's topics follow the view's counts, each once`() { + val counts = listOf(TopicCount("Politics", 3), TopicCount("Business", 2), TopicCount("U.S.", 2)) + assertEquals( + listOf("politics ", "Business", "U.S.", "US", "Zoo"), + articleTopics(listOf("U.S.", "Zoo", "politics ", "Business", "US"), TopicOrder(counts)), + ) + assertEquals(listOf("U.S."), articleTopics(listOf("U.S.", "u.s."), TopicOrder(counts))) + } + + @Test + fun `word counts count each word's articles and are kept while the text stays the same`() { + val other = Story("Night market opens", "Food stalls.", emptyList()) + val entries = listOf(story, other) + val counts = wordCounts(entries, listOf("night", "budget", "zoo")) + assertEquals(mapOf("night" to 2, "budget" to 1, "zoo" to 0), counts) + assertSame(counts, knownWordCounts(listOf(story, other.copy()), listOf("night", "budget", "zoo"))) + assertEquals(null, knownWordCounts(entries, listOf("night"))) + } + @Test fun `a list of words is compiled once and reused`() { val first = matcherFor(listOf("reuse check")) diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsRedirectTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsRedirectTest.kt index 3efd24d..5e0e227 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsRedirectTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsRedirectTest.kt @@ -10,6 +10,7 @@ import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertTrue class HttpsRedirectTest { @@ -38,12 +39,26 @@ class HttpsRedirectTest { } @Test - fun `a redirect from https to plain http counts as no answer`() = runTest { + fun `a redirect from https to plain http is followed at https, never at http`() = runTest { + val upgraded = secure.url("/moved") + val target = upgraded.newBuilder().scheme("http").build() + secure.enqueue(MockResponse.Builder().code(302).addHeader("Location", target.toString()).build()) + secure.enqueue(MockResponse.Builder().body("").build()) + val outcome = fetcher.fetch(secure.url("/feed").toString(), "", "", FETCH_TIMEOUT_MS) + assertEquals(200, outcome.status) + assertEquals(upgraded.toString(), outcome.url) + secure.takeRequest() + assertEquals("/moved", secure.takeRequest().url.encodedPath) + } + + @Test + fun `a redirect to plain http with no https behind it fails without a plain request`() = runTest { secure.enqueue(MockResponse.Builder().code(302).addHeader("Location", plain.url("/feed").toString()).build()) val outcome = fetcher.fetch(secure.url("/feed").toString(), "", "", FETCH_TIMEOUT_MS) assertEquals(0, outcome.status) - assertTrue(outcome.insecure) - assertEquals(0, plain.requestCount) + assertFalse(outcome.insecure) + // The http server sees only the https attempt's handshake, which it cannot read as a request. + assertTrue(List(plain.requestCount) { plain.takeRequest() }.all { request -> request.failure != null }) } @Test diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsUpgradeTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsUpgradeTest.kt new file mode 100644 index 0000000..18195ce --- /dev/null +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/HttpsUpgradeTest.kt @@ -0,0 +1,141 @@ +package cc.hafa.reader.core + +import kotlinx.coroutines.delay +import kotlinx.coroutines.test.runTest +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull + +/** The shared `https.json` fixture, and trying http feeds over https with a fake fetcher. */ +class HttpsUpgradeTest { + private val fixture: JsonObject = + Json.parseToJsonElement(checkNotNull(javaClass.classLoader.getResource("https.json")).readText()).jsonObject + + private fun JsonObject.text(name: String): String = getValue(name).jsonPrimitive.content + + private fun JsonObject.texts(name: String): List = getValue(name).jsonArray.map { item -> item.jsonPrimitive.content } + + @Test + fun `plain http addresses are told apart as the fixture says`() { + for (case in fixture.getValue("plainHttp").jsonArray.map { item -> item.jsonObject }) { + val input = case.text("input") + assertEquals(case.getValue("output").jsonPrimitive.boolean, isPlainHttp(input), input) + } + } + + @Test + fun `https addresses are written as http as the fixture says`() { + for (case in fixture.getValue("plainAddress").jsonArray.map { item -> item.jsonObject }) { + assertEquals(case.text("output"), plainAddress(case.text("input")), case.text("input")) + } + } + + @Test + fun `addresses are written out as the fixture says`() { + for (case in fixture.getValue("webAddress").jsonArray.map { item -> item.jsonObject }) { + assertEquals(case.text("output"), webAddress(case.text("input")), case.text("name")) + } + } + + @Test + fun `only public hosts are tried over https, as the fixture says`() { + for (case in fixture.getValue("probeAllowed").jsonArray.map { item -> item.jsonObject }) { + val input = case.text("input") + assertEquals(case.getValue("output").jsonPrimitive.boolean, probeAllowed(input), input) + } + } + + @Test + fun `answers settle a probe as the fixture says`() { + for (case in fixture.getValue("settledAnswer").jsonArray.map { item -> item.jsonObject }) { + val outcome = FetchOutcome(status = case.getValue("status").jsonPrimitive.int, insecure = case.getValue("insecure").jsonPrimitive.boolean) + assertEquals(case.getValue("settled").jsonPrimitive.boolean, settledAnswer(outcome), case.text("name")) + } + assertFalse(settledAnswer(null)) + } + + @Test + fun `feeds count as the same as the fixture says`() { + for (case in fixture.getValue("sameFeed").jsonArray.map { item -> item.jsonObject }) { + val known = case.getValue("known").jsonObject + val found = case.getValue("found").jsonObject + val links = found.texts("links") + val parsed = ParsedFeed( + title = found.text("title"), + siteUrl = found.text("siteUrl"), + iconUrl = "", + entries = found.texts("guids").mapIndexed { index, guid -> + FeedEntry(guid, "", links.getOrElse(index) { "" }, 0, "", "", "", emptyList(), "") + }, + ) + val knownFeed = KnownFeed(known.text("url"), known.text("title"), known.text("siteUrl"), known.texts("guids"), known.texts("links")) + assertEquals(case.getValue("same").jsonPrimitive.boolean, sameFeed(knownFeed, parsed), case.text("name")) + } + } + + @Test + fun `web addresses keep http and https and drop the rest`() { + assertEquals("http://example.com/rss", webAddress(" HTTP://Example.com/rss ")) + assertEquals("https://example.com/", webAddress("https://example.com")) + assertEquals("", webAddress("ftp://example.com/rss")) + assertEquals("", webAddress("")) + } + + private val known = KnownFeed("http://blog.example/rss", "Blog", "") + private val feed = "Bloghttps://blog.example/aa" + + @Test + fun `the https address is fetched and a matching feed taken`() = runTest { + val fetcher = FakeFetcher() + fetcher.answers["https://blog.example/rss"] = FetchOutcome(status = 200, text = feed, url = "https://blog.example/rss") + val match = probeHttps(known, fetcher) + assertEquals(listOf("https://blog.example/rss"), fetcher.requests) + assertEquals("https://blog.example/rss", match?.url) + assertEquals("Blog", match?.feed?.title) + } + + @Test + fun `failures, redirects off https, non-feeds and other feeds are refused`() = runTest { + val outcomes = listOf( + FetchOutcome(status = 0), + FetchOutcome(status = 404), + FetchOutcome(status = 0, insecure = true), + FetchOutcome(status = 200, text = "Hello"), + FetchOutcome(status = 200, text = "Parkedhttps://parking.example/"), + ) + for (outcome in outcomes) { + assertNull(probeHttps(known, { _, _, _, _ -> outcome }), outcome.toString()) + } + } + + @Test + fun `nothing is fetched for an address that is not plain http`() = runTest { + val fetcher = FakeFetcher() + assertNull(probeHttps(known.copy(url = "https://blog.example/rss"), fetcher)) + assertNull(probeHttps(known.copy(url = "ftp://blog.example/rss"), fetcher)) + assertEquals(emptyList(), fetcher.requests) + } + + @Test + fun `work runs a few at a time and keeps its order`() = runTest { + var running = 0 + var most = 0 + val results = mapConcurrently((1..7).toList(), 3) { item -> + running += 1 + most = maxOf(most, running) + delay(10L - item) + running -= 1 + item * 10 + } + assertEquals((1..7).map { item -> item * 10 }, results) + assertEquals(3, most) + } +} diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/LoadGateTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/LoadGateTest.kt new file mode 100644 index 0000000..85280a4 --- /dev/null +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/LoadGateTest.kt @@ -0,0 +1,93 @@ +package cc.hafa.reader.core + +import cc.hafa.reader.core.sync.SyncReport +import cc.hafa.reader.core.sync.SyncStatus +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertTrue + +class LoadGateTest { + private val timing = GateTiming() + + /** The gate after each of [steps], a busy flag at a time, from the app opening at 0. */ + private fun run(vararg steps: Pair): LoadGate = + steps.fold(LoadGate.started(0)) { gate, (busy, now) -> gate.step(busy, now) } + + @Test + fun holdsThePersonFromTheStartWithoutTheLogo() { + val gate = LoadGate.started(0) + assertEquals(GatePhase.Waiting, gate.phase) + assertTrue(gate.blocks) + assertEquals(timing.delayMs, gate.wakeAt()) + } + + @Test + fun anInstantLoadNeverShowsTheLogo() { + assertEquals(GatePhase.Waiting, run(true to 50L).phase) + assertEquals(GatePhase.Open, run(true to 50L, false to 120L).phase) + } + + @Test + fun aSlowLoadShowsTheLogoThenLetsThePersonIn() { + val shown = run(true to timing.delayMs) + assertEquals(GatePhase.Shown, shown.phase) + assertEquals(timing.delayMs, shown.shownSince) + val done = shown.step(false, timing.delayMs + timing.minShownMs + 1) + assertEquals(GatePhase.Open, done.phase) + assertNull(done.wakeAt()) + } + + @Test + fun theLogoStaysItsShortestTime() { + val early = run(true to timing.delayMs, false to timing.delayMs + 100) + assertEquals(GatePhase.Shown, early.phase) + assertEquals(timing.delayMs + timing.minShownMs, early.wakeAt()) + assertEquals(GatePhase.Open, early.step(false, timing.delayMs + timing.minShownMs).phase) + } + + @Test + fun aLoadThatRunsTooLongLetsThePersonIn() { + val late = run(true to timing.delayMs, true to timing.timeoutMs) + assertEquals(GatePhase.Open, late.phase) + assertTrue(late.timedOut) + assertNull(late.wakeAt()) + assertFalse(late.step(true, timing.timeoutMs * 2).blocks) + } + + @Test + fun aNewLoadStartsOver() { + val later = run(false to 10L, true to 1000L) + assertEquals(GatePhase.Waiting, later.phase) + assertEquals(1000L, later.busySince) + assertEquals(GatePhase.Shown, later.step(true, 1000 + timing.delayMs).phase) + } + + @Test + fun aLoadAfterOneThatTimedOutHoldsAgain() { + val next = run(true to timing.timeoutMs, false to timing.timeoutMs + 1, true to timing.timeoutMs + 2) + assertEquals(GatePhase.Waiting, next.phase) + assertFalse(next.timedOut) + } + + @Test + fun wakesForTheLogoThenForTheTimeLimit() { + assertEquals(timing.delayMs, run(true to 10L).wakeAt()) + assertEquals(timing.timeoutMs, run(true to timing.delayMs).wakeAt()) + } + + @Test + fun theAccountHoldsThePersonWhileItArrivesButNotOfflineOrFailing() { + val loaded = ReaderState(loaded = true) + assertTrue(loadingBusy(ReaderState(), SyncReport(SyncStatus.Off), awaited = false)) + assertFalse(loadingBusy(loaded, SyncReport(SyncStatus.Off), awaited = true)) + assertTrue(loadingBusy(loaded, SyncReport(SyncStatus.Connecting), awaited = true)) + assertTrue(loadingBusy(loaded, SyncReport(SyncStatus.Syncing, "reader@example.com"), awaited = true)) + assertFalse(loadingBusy(loaded, SyncReport(SyncStatus.Offline, "reader@example.com"), awaited = true)) + assertFalse(loadingBusy(loaded, SyncReport(SyncStatus.Error, "reader@example.com"), awaited = true)) + assertFalse(loadingBusy(loaded, SyncReport(SyncStatus.Synced, "reader@example.com", caughtUp = true), awaited = true)) + assertFalse(loadingBusy(loaded, SyncReport(SyncStatus.Syncing, "reader@example.com"), awaited = false)) + assertTrue(loadingBusy(loaded.copy(importing = 1), SyncReport(SyncStatus.Off), awaited = false)) + } +} diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/NormalizeUrlTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/NormalizeUrlTest.kt index 632e501..a2da353 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/NormalizeUrlTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/NormalizeUrlTest.kt @@ -10,9 +10,9 @@ class NormalizeUrlTest { "https://Example.com" to "https://example.com/", "HTTPS://example.com/a b" to "https://example.com/a%20b", "example.com" to "https://example.com/", - " http://example.com/feed " to "https://example.com/feed", - "http://example.com:80/x" to "https://example.com/x", - "http://example.com:8080/x" to "https://example.com:8080/x", + " http://example.com/feed " to "http://example.com/feed", + "http://example.com:80/x" to "http://example.com/x", + "http://example.com:8080/x" to "http://example.com:8080/x", "https://example.com:443/x" to "https://example.com/x", "https://EXAMPLE.com/Path?Q=1#Frag" to "https://example.com/Path?Q=1#Frag", "https://example.com/a%20b" to "https://example.com/a%20b", @@ -25,10 +25,11 @@ class NormalizeUrlTest { "ftp://example.com/feed" to "", "" to "", "not a url" to "", - "https://user:pass@example.com/" to "https://user:pass@example.com/", + // a user name or password is refused, as the shared webAddress fixture says + "https://user:pass@example.com/" to "", "https://example.com." to "https://example.com./", "https://example.com/feed?x=%7e" to "https://example.com/feed?x=%7e", - "mailto:x@example.com" to "https://mailto:x@example.com/", + "mailto:x@example.com" to "", "https://example.com/a^b`c" to "https://example.com/a%5Eb%60c", "https://[::1]:8443/feed" to "https://[::1]:8443/feed", "https://example.com/a?b=c|d#e|f" to "https://example.com/a?b=c|d#e|f", @@ -55,7 +56,7 @@ class NormalizeUrlTest { val hits = parseFeedSearch( """{"results":[{"feedId":"feed/http://Example.com","iconUrl":"http://Example.com/i.png"},{"feedId":"feed/https://example.com/"}]}""", ) - assertEquals(listOf("https://example.com/"), hits.map { hit -> hit.url }) - assertEquals("https://example.com/i.png", hits.single().icon) + assertEquals(listOf("http://example.com/", "https://example.com/"), hits.map { hit -> hit.url }) + assertEquals("https://example.com/i.png", hits.first().icon) } } diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/OpmlTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/OpmlTest.kt index 680ea15..7c3a2bf 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/OpmlTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/OpmlTest.kt @@ -11,14 +11,14 @@ class OpmlTest { fun `lists feeds with their folders`() { val source = """x - + """ assertEquals( listOf( - OpmlFeed("https://one.example/feed", "One", "News"), + OpmlFeed("https://one.example/feed", "One", "News", "https://one.example/"), OpmlFeed("two.example/rss", "Two", ""), OpmlFeed("https://three.example/feed", "", ""), ), @@ -47,7 +47,7 @@ class OpmlTest { class BuildOpmlTest { private val feeds = listOf( OpmlFeed("https://a.example/feed?x=1&y=2", "A & \"B\" ", ""), - OpmlFeed("https://b.example/feed", "B", "Tech"), + OpmlFeed("https://b.example/feed", "B", "Tech", "https://b.example/?a=1&b=2"), OpmlFeed("https://c.example/feed", "C", "News"), ) @@ -56,6 +56,8 @@ class BuildOpmlTest { val text = buildOpml(feeds) assertContains(text, """text="A & "B" <c>"""") assertContains(text, """xmlUrl="https://a.example/feed?x=1&y=2"""") + assertContains(text, """htmlUrl="https://b.example/?a=1&b=2"""") + assertFalse("htmlUrl=\"\"" in text) assertTrue(text.indexOf("News") < text.indexOf("Tech")) assertTrue(text.indexOf("Tech") < text.indexOf("a.example")) } diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/ReaderModelTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/ReaderModelTest.kt index 09528ac..eb80d6f 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/ReaderModelTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/ReaderModelTest.kt @@ -4,6 +4,8 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch import cc.hafa.reader.core.sync.RemoteChange +import cc.hafa.reader.core.sync.SyncReport +import cc.hafa.reader.core.sync.SyncStatus import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent @@ -49,6 +51,83 @@ class ReaderModelTest { private fun ReaderModel.titles(): List = view().visible.map { entry -> entry.title } + private fun article(id: String, feedId: String, published: Long, read: Boolean = false): Entry = + Entry(id, feedId, id, "Story $id", "", published, true, "", "", "", "", emptyList(), read, false, published) + + @Test + fun `articles arriving in the background wait until the list is next settled`() = runTest { + val model = model() + model.addWithItems("https://a.example/feed", "one") + val feed = model.state.value.feeds.single() + model.select(Selection.All) + model.settle() + model.syncHost.apply(RemoteChange(entries = listOf(article("later", feed.id, now)))) + assertEquals(listOf("one"), model.titles()) + assertEquals(2, model.view().unreadTotal) + model.select(Selection.Starred) + model.select(Selection.All) + assertEquals(listOf("Story later", "one"), model.titles()) + } + + @Test + fun `an empty list takes in what arrives, since no row can move`() = runTest { + val model = model() + model.addWithItems("https://a.example/feed", "one") + val feed = model.state.value.feeds.single() + model.select(Selection.Starred) + model.settle() + model.syncHost.apply(RemoteChange(entries = listOf(article("star", feed.id, now).copy(starred = true)))) + assertEquals(listOf("Story star"), model.titles()) + } + + @Test + fun `an article read elsewhere stays listed until the view changes`() = runTest { + val model = model() + model.addWithItems("https://a.example/feed", "one") + model.select(Selection.All) + model.settle() + val entry = model.state.value.entries.single() + model.syncHost.apply(RemoteChange(entries = listOf(entry.copy(read = true, updatedAt = now)))) + assertEquals(listOf("one"), model.titles()) + model.select(Selection.Starred) + model.select(Selection.All) + assertEquals(emptyList(), model.titles()) + } + + @Test + fun `a feed with nothing unread stays out of the sidebar when articles arrive`() = runTest { + val model = model() + model.addWithItems("https://a.example/feed", "one") + model.addWithItems("https://b.example/feed", "two") + val (first, second) = model.state.value.feeds + model.select(Selection.All) + model.toggleReadFor(model.state.value.entries.first { entry -> entry.feedId == second.id }.id) + model.settle() + fun listedIds() = sidebarRows(model.state.value, model.view()).mapNotNull { row -> row.feed?.id } + assertEquals(listOf(first.id), listedIds()) + model.syncHost.apply(RemoteChange(entries = listOf(article("later", second.id, now)))) + assertEquals(listOf(first.id), listedIds()) + model.settle() + assertEquals(setOf(first.id, second.id), listedIds().toSet()) + } + + @Test + fun `an import holds the loading screen until its feeds' first check`() = runTest { + val model = model() + val gate = CompletableDeferred() + fetcher.answers["https://x.example/rss"] = FetchOutcome(status = 200, text = rss("X", "one")) + fetcher.gates["https://x.example/rss"] = gate + model.importOpml("""""") + assertEquals(1, model.state.value.importing) + assertTrue(loadingBusy(model.state.value, SyncReport(SyncStatus.Off), awaited = true)) + assertEquals(0, model.state.value.refreshCount) + gate.complete(Unit) + model.awaitChecks() + runCurrent() + assertEquals(0, model.state.value.importing) + assertFalse(loadingBusy(model.state.value, SyncReport(SyncStatus.Off), awaited = true)) + } + @Test fun `a refresh cancelled during its shortest showing still ends its mark`() = runTest { val model = ReaderModel(store, preferences, fetcher, backgroundScope, clock = { now }, minRefreshMillis = 700) @@ -503,6 +582,40 @@ class ReaderModelTest { assertEquals(listOf("https://a.example/feed"), fetcher.requests) } + @Test + fun `opening checks only due feeds in the background without showing a refresh`() = runTest { + val first = model() + first.addWithItems("https://a.example/feed", "one") + now += MAX_INTERVAL_MS + first.addWithItems("https://b.example/feed", "two") + first.awaitWrites() + fetcher.requests.clear() + val gate = CompletableDeferred() + fetcher.gates["https://a.example/feed"] = gate + var backgroundCalls = 0 + val model = ReaderModel( + store, + preferences, + fetcher, + backgroundScope, + clock = { now }, + workDispatcher = StandardTestDispatcher(testScheduler), + minRefreshMillis = 0, + onBackgroundWork = { backgroundCalls += 1 }, + ) + model.openChecks() + runCurrent() + assertTrue(model.state.value.loaded) + assertFalse(model.state.value.refreshing) + assertEquals(1, backgroundCalls) + assertEquals(listOf("https://a.example/feed"), fetcher.requests) + val rank = model.state.value.frozenRank + gate.complete(Unit) + model.awaitChecks() + assertEquals(listOf("https://a.example/feed"), fetcher.requests) + assertTrue(rank === model.state.value.frozenRank) + } + @Test fun `the sidebar order holds until the next refresh`() = runTest { val model = model() @@ -566,16 +679,198 @@ class ReaderModelTest { } @Test - fun `only web addresses can be added, and http is fetched as https`() = runTest { + fun `only https addresses can be added, and a typed http one is refused without a fetch`() = runTest { val model = model() val refused = assertFailsWith { model.addFeed("ftp://files.example/feed") } assertEquals(FeedProblem.NotWebAddress, refused.problem) fetcher.answers["https://plain.example/feed"] = FetchOutcome(status = 200, text = rss("P", "one")) - model.addFeed("http://plain.example/feed") - assertEquals("https://plain.example/feed", model.state.value.feeds.single().url) + val plain = assertFailsWith { model.addFeed("http://plain.example/feed") } + assertEquals(FeedProblem.HttpRefused, plain.problem) + assertEquals(emptyList(), model.state.value.feeds) + assertEquals(emptyList(), fetcher.requests) + } + + @Test + fun `an import moves http feeds to https when it serves them, counts the rest, and uses the chosen group`() = runTest { + val model = model() + fetcher.answers["https://good.example/rss"] = FetchOutcome(status = 200, text = rss("Good", "one")) + val result = model.importOpml( + """ + + + """, + group = "News", + ) + assertEquals(ImportResult(found = 3, added = 2, skipped = 1), result) + assertEquals( + listOf("https://good.example/rss" to "News", "https://safe.example/rss" to "News"), + model.state.value.feeds.map { feed -> feed.url to feed.folder }, + ) + val loose = model.importOpml("""""", group = "") + assertEquals(1, loose.added) + assertEquals("", model.state.value.feeds.last().folder) + } + + @Test + fun `an import leaves alone an http feed already followed`() = runTest { + val model = model() + val old = Feed(feedId("http://blog.example/rss"), "http://blog.example/rss", "Blog", "", "", false, "", "") + model.syncHost.apply(RemoteChange(feeds = listOf(old))) + val result = model.importOpml("""""") + assertEquals(ImportResult(found = 1, added = 0, skipped = 0), result) + assertTrue(fetcher.requests.none { url -> url.contains("blog.example") }) + } + + @Test + fun `search results on http show at https when it serves the same feed, else are dropped`() = runTest { + val model = model() + fetcher.answers[feedSearchAddress("good")] = FetchOutcome( + status = 200, + text = """{"results":[{"feedId":"feed/http://good.example/rss","title":"Good"}, + {"feedId":"feed/http://parked.example/rss","title":"Parked"}, + {"feedId":"feed/http://gone.example/rss","title":"Gone"}]}""", + ) + fetcher.answers["https://good.example/rss"] = FetchOutcome(status = 200, text = rss("Good", "one")) + fetcher.answers["https://parked.example/rss"] = + FetchOutcome(status = 200, text = "Welcomehttps://hosting.example/") + assertEquals(listOf("https://good.example/rss"), model.searchFeeds("good").map { hit -> hit.url }) + } + + @Test + fun `a followed http feed moves to https once, keeping its id, articles and group, and is checked from the answer`() = runTest { + val model = model() + val oldId = feedId("http://blog.example/rss") + val old = Feed(oldId, "http://blog.example/rss", "Renamed", "", "", true, "News", "", updatedAt = 1) + val dead = Feed(feedId("http://dead.example/rss"), "http://dead.example/rss", "Dead", "", "", false, "", "") + val starred = Entry( + entryId(oldId, "one"), oldId, "one", "one", "", 0, true, "", "", "", "", emptyList(), + read = true, starred = true, addedAt = 1, updatedAt = 1, + ) + model.syncHost.apply(RemoteChange(feeds = listOf(old, dead), entries = listOf(starred))) + assertEquals(FeedProblem.HttpFeed.code, model.state.value.feeds.first { feed -> feed.id == oldId }.error) + fetcher.answers["https://blog.example/rss"] = FetchOutcome(status = 200, text = rss("Blog", "one", "two")) + fetcher.answers["https://dead.example/rss"] = FetchOutcome(status = 404) + model.refresh() + runCurrent() + model.awaitChecks() + model.awaitWrites() + val moved = model.state.value.feeds.first { feed -> feed.id == oldId } + assertEquals("https://blog.example/rss", moved.url) + assertEquals("News", moved.folder) + assertEquals("", moved.error) + assertTrue(moved.updatedAt > 1) + assertEquals( + listOf("one" to true, "two" to false), + model.state.value.entries.filter { entry -> entry.feedId == oldId }.map { entry -> entry.guid to entry.starred }, + ) + assertEquals(FeedProblem.HttpFeed.code, model.state.value.feeds.first { feed -> feed.id == dead.id }.error) + model.refresh() + runCurrent() + assertEquals(1, fetcher.requests.count { url -> url == "https://dead.example/rss" }) assertTrue(fetcher.requests.none { url -> url.startsWith("http://") }) } + /** Follow [feeds] as if they came from the account, then refresh and let the https tries finish. */ + private suspend fun TestScope.followAndRefresh(model: ReaderModel, vararg feeds: Feed) { + model.syncHost.apply(RemoteChange(feeds = feeds.toList())) + model.refresh() + runCurrent() + model.awaitChecks() + model.awaitWrites() + } + + private fun plainFeed(url: String, title: String = "Blog", renamed: Boolean = false): Feed = + Feed(feedId(url), url, title, "", "", renamed, "", "") + + @Test + fun `an http feed whose https address is already followed stays as it is`() = runTest { + val model = model() + fetcher.answers["https://blog.example/rss"] = FetchOutcome(status = 200, text = rss("Blog", "one")) + followAndRefresh(model, plainFeed("http://blog.example/rss"), plainFeed("https://blog.example/rss")) + assertEquals( + listOf("http://blog.example/rss", "https://blog.example/rss"), + model.state.value.feeds.map { feed -> feed.url }, + ) + } + + @Test + fun `an http feed that got no definite answer is tried again on the next refresh`() = runTest { + val model = model() + fetcher.answers["https://busy.example/rss"] = FetchOutcome(status = 503) + followAndRefresh(model, plainFeed("http://busy.example/rss"), plainFeed("http://offline.example/rss")) + model.refresh() + runCurrent() + model.awaitChecks() + assertEquals(2, fetcher.requests.count { url -> url == "https://busy.example/rss" }) + assertEquals(2, fetcher.requests.count { url -> url == "https://offline.example/rss" }) + assertTrue(model.state.value.feeds.all { feed -> isPlainHttp(feed.url) }) + } + + @Test + fun `a feed's https address is matched by its own name, not one the person gave it`() = runTest { + val model = model() + fetcher.answers["https://feeds.host.example/a"] = + FetchOutcome(status = 200, text = "Parkedhttps://parking.example/") + followAndRefresh(model, plainFeed("http://feeds.host.example/a", title = "Parked", renamed = true)) + assertEquals("http://feeds.host.example/a", model.state.value.feeds.single().url) + } + + @Test + fun `adding the https address of a feed followed over http moves that feed`() = runTest { + val model = model() + val old = plainFeed("http://blog.example/rss") + model.syncHost.apply(RemoteChange(feeds = listOf(old))) + fetcher.answers["https://blog.example/rss"] = FetchOutcome(status = 200, text = rss("Blog", "one")) + model.addFeed("https://blog.example/rss") + model.awaitWrites() + val moved = model.state.value.feeds.single() + assertEquals(old.id to "https://blog.example/rss", moved.id to moved.url) + assertEquals(now, moved.schedule.lastChecked) + assertEquals(Selection.FeedView(old.id), model.state.value.selection) + } + + @Test + fun `adding the https address of a different feed followed over http adds it beside the one followed`() = runTest { + val model = model() + val old = plainFeed("http://blog.example/rss") + model.syncHost.apply(RemoteChange(feeds = listOf(old))) + fetcher.answers["https://blog.example/rss"] = + FetchOutcome(status = 200, text = "Parkedhttps://parking.example/") + val id = feedId("https://blog.example/rss") + model.addFeed("https://blog.example/rss") + assertEquals( + listOf(old.id to "http://blog.example/rss", id to "https://blog.example/rss"), + model.state.value.feeds.map { feed -> feed.id to feed.url }, + ) + assertEquals(Selection.FeedView(id), model.state.value.selection) + model.addFeed("https://blog.example/rss") + assertEquals(2, model.state.value.feeds.size) + assertEquals(Selection.FeedView(id), model.state.value.selection) + model.awaitWrites() + } + + @Test + fun `an http feed with no definite answer is tried a few times a run, then left`() = runTest { + val model = model() + followAndRefresh(model, plainFeed("http://offline.example/rss")) + repeat(UNSETTLED_TRIES + 1) { + model.refresh() + runCurrent() + model.awaitChecks() + } + assertEquals(UNSETTLED_TRIES, fetcher.requests.count { url -> url == "https://offline.example/rss" }) + } + + @Test + fun `an http feed on a private host is never tried over https`() = runTest { + val model = model() + followAndRefresh(model, plainFeed("http://192.168.1.1/rss"), plainFeed("http://nas.local/rss")) + model.refresh() + runCurrent() + model.awaitChecks() + assertTrue(fetcher.requests.none { url -> "192.168.1.1" in url || "nas.local" in url }) + } + @Test fun `a small refresh waits for every feed with the short time`() = runTest { val timeouts = mutableListOf() @@ -701,7 +996,7 @@ class ReaderModelTest { val items = (1..30).joinToString("") { index -> "t$index$indextopic $index" } fetcher.answers["https://many.example/feed"] = FetchOutcome(status = 200, text = "M$items") model.addFeed("https://many.example/feed") - assertEquals(30, model.view().topics.size) + assertEquals(30, model.view().topicOrder.counts.size) } @Test diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/ScheduleTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/ScheduleTest.kt index a54c5e7..7f6b42f 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/ScheduleTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/ScheduleTest.kt @@ -327,4 +327,29 @@ class ScheduleTest { assertEquals(listOf("flat", "monday"), ids(monday + 7 * day - hour)) assertEquals(listOf("monday", "flat"), ids(monday + 7 * day + 11 * hour)) } + + @Test + fun `feeds become overdue a while after their earliest next check`() { + assertEquals(monday + OVERDUE_MS, overdueAt(listOf(monday + day, monday, monday + 2 * day))) + assertEquals(OVERDUE_MS, overdueAt(listOf(0L))) + assertEquals(Long.MAX_VALUE, overdueAt(emptyList())) + assertEquals(2 * MIN_INTERVAL_MS, OVERDUE_MS) + } + + @Test + fun `a refresh is suggested only while nothing is checking feeds`() { + val feeds = listOf( + Feed("late", "https://late.example/feed", "Late", "", "", renamed = false, folder = "", error = "", schedule = FeedSchedule(nextFetch = monday)), + ) + assertEquals(monday + OVERDUE_MS, refreshSuggestedAt(ReaderState(feeds = feeds))) + assertEquals(Long.MAX_VALUE, refreshSuggestedAt(ReaderState(feeds = feeds, checking = true))) + assertEquals(Long.MAX_VALUE, refreshSuggestedAt(ReaderState(feeds = feeds, refreshCount = 1))) + assertEquals(Long.MAX_VALUE, refreshSuggestedAt(ReaderState())) + } + + @Test + fun `a plain http feed, never checked, is never overdue`() { + val plain = Feed("plain", "http://plain.example/feed", "Plain", "", "", renamed = false, folder = "", error = "", schedule = FeedSchedule(nextFetch = 0)) + assertEquals(Long.MAX_VALUE, refreshSuggestedAt(ReaderState(feeds = listOf(plain)))) + } } diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/TestDoubles.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/TestDoubles.kt index d2dc80e..6d707fe 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/TestDoubles.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/TestDoubles.kt @@ -87,6 +87,7 @@ internal class MemoryStore : ReaderStore { internal class MemoryPreferences : ReaderPreferences { override var unreadOnly = true override var lastView = "all" + override var readingFont = ReadingFont.Literata } /** Answers by address; anything unknown does not answer. */ diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/TopicRowsTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/TopicRowsTest.kt new file mode 100644 index 0000000..e50a6cd --- /dev/null +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/TopicRowsTest.kt @@ -0,0 +1,30 @@ +package cc.hafa.reader.core + +import kotlin.test.Test +import kotlin.test.assertEquals + +class TopicRowsTest { + @Test + fun `items wrap when the next one would pass the available width`() { + assertEquals(0, rowCount(wrappedRows(emptyList(), 100, 8))) + assertEquals(1, rowCount(wrappedRows(listOf(46, 46), 100, 8))) + assertEquals(2, rowCount(wrappedRows(listOf(46, 47), 100, 8))) + assertEquals(3, rowCount(wrappedRows(listOf(40, 40, 40, 40, 40), 100, 8))) + } + + @Test + fun `positions give each item's row and left edge`() { + assertEquals( + listOf(RowPosition(0, 0), RowPosition(0, 48), RowPosition(1, 0)), + wrappedRows(listOf(40, 40, 40), 100, 8), + ) + } + + @Test + fun `an item wider than the space takes a row of its own`() { + assertEquals( + listOf(RowPosition(0, 0), RowPosition(1, 0), RowPosition(1, 28)), + wrappedRows(listOf(150, 20, 20), 100, 8), + ) + } +} diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/sync/DocumentsTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/sync/DocumentsTest.kt index 1203ff8..63a5784 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/sync/DocumentsTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/sync/DocumentsTest.kt @@ -198,13 +198,13 @@ class DocumentsTest { } @Test - fun `account feeds and entries have plain http upgraded`() { + fun `account feeds keep a plain http address, and their other addresses and entries are upgraded`() { val feed = parseSubscription( subscriptionDocument( sampleFeed().copy(url = "http://old.example/rss", siteUrl = "http://old.example/", icon = "http://old.example/icon.png"), ).toFields(), ) - assertEquals("https://old.example/rss", feed?.url) + assertEquals("http://old.example/rss", feed?.url) assertEquals("https://old.example/", feed?.siteUrl) assertEquals("https://old.example/icon.png", feed?.icon) val entry = parseEntry(entryDocument(sampleEntry().copy(url = "http://old.example/1", imageUrl = "http://old.example/1.png")).toFields()) diff --git a/android/core/src/test/kotlin/cc/hafa/reader/core/sync/SyncEngineTest.kt b/android/core/src/test/kotlin/cc/hafa/reader/core/sync/SyncEngineTest.kt index 9b664a5..4833cdb 100644 --- a/android/core/src/test/kotlin/cc/hafa/reader/core/sync/SyncEngineTest.kt +++ b/android/core/src/test/kotlin/cc/hafa/reader/core/sync/SyncEngineTest.kt @@ -68,9 +68,7 @@ private class FakeAccount : AccountStore { val listener = sinceMs to onChanges entryListeners.add(listener) val changes = entries.filter { (_, value) -> value.second > sinceMs }.map { (id, value) -> EntryChange(id, value.first, value.second) } - if (changes.isNotEmpty()) { - onChanges(changes) - } + onChanges(changes) return Stop { entryListeners.remove(listener) } } diff --git a/android/scripts/cut-fonts.sh b/android/scripts/cut-fonts.sh new file mode 100755 index 0000000..3adad15 --- /dev/null +++ b/android/scripts/cut-fonts.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# Cut the bundled fonts in app/src/main/res/font from Google Fonts' variable files. +# Needs python3 and network access; run from anywhere. +set -eu + +fonttools_version=4.67.0 +literata_commit=4e5f06dbb274a27ebe71ed54ea706b3ee40eabd9 +public_sans_commit=8b0a1d0f5983c89bc2b93f1b5fb55f9e252744b5 + +out=$(cd "$(dirname "$0")/../app/src/main/res/font" && pwd) +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT + +python3 -m venv "$work/venv" +"$work/venv/bin/pip" install --quiet "fonttools==$fonttools_version" + +fetch() { + curl -sSfL -o "$work/$3" "https://raw.githubusercontent.com/google/fonts/$1/ofl/$2" +} +fetch "$literata_commit" "literata/Literata%5Bopsz,wght%5D.ttf" literata.ttf +fetch "$literata_commit" "literata/Literata-Italic%5Bopsz,wght%5D.ttf" literata_italic.ttf +fetch "$public_sans_commit" "publicsans/PublicSans%5Bwght%5D.ttf" public_sans.ttf +fetch "$public_sans_commit" "publicsans/PublicSans-Italic%5Bwght%5D.ttf" public_sans_italic.ttf + +# Latin, Latin-1, Latin Extended-A and B, IPA modifiers, combining marks, Vietnamese, punctuation, currency, arrows. +latin="U+0000-024F,U+02B0-02FF,U+0300-036F,U+1EA0-1EF9,U+2000-206F,U+20A0-20C0,U+2116,U+2122,U+2190-2193,U+2212,U+2215" +# Modern Greek and the Cyrillic of Russian, Ukrainian, Belarusian, Bulgarian, Serbian and Macedonian, as fontsource's +# greek and cyrillic files; polytonic Greek and extended Cyrillic would add about 70 KB more and fall back instead. +greek="U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF" +cyrillic="U+0400-045F,U+0490-0491,U+04B0-04B1" + +for name in literata literata_italic; do + "$work/venv/bin/fonttools" varLib.instancer "$work/$name.ttf" opsz=12 wght=400:800 -q -o "$work/$name-instanced.ttf" + "$work/venv/bin/pyftsubset" "$work/$name-instanced.ttf" \ + --unicodes="$latin,$greek,$cyrillic" \ + --layout-features='*' --name-IDs='*' --name-languages='*' --notdef-outline \ + --output-file="$out/$name.ttf" +done + +# Public Sans covers Latin only, so it keeps every glyph and only drops the weights the app never uses. +for name in public_sans public_sans_italic; do + "$work/venv/bin/fonttools" varLib.instancer "$work/$name.ttf" wght=400:800 -q -o "$out/$name.ttf" +done + +ls -l "$out" diff --git a/extension/README.md b/extension/README.md index 289f97c..8d755d7 100644 --- a/extension/README.md +++ b/extension/README.md @@ -17,6 +17,14 @@ bun pack # reader-extension.zip for the Web Store bun icons # icons/ from ../design/icons/logo.svg; needs rsvg-convert ``` +## https only + +The manifest's `content_security_policy` adds `upgrade-insecure-requests` to +the service worker, so when a feed redirects to `http://` Chrome asks for the +`https://` address instead and never sends the plain request. It covers only +the extension's own requests, needs no permission, and the final-address +check in `outcomeOf` stays as a backstop. + ## Load unpacked 1. Open `chrome://extensions` and turn on **Developer mode**. diff --git a/extension/manifest.json b/extension/manifest.json index 33a057e..91987ec 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -6,6 +6,9 @@ "minimum_chrome_version": "119", "permissions": ["alarms", "storage", "unlimitedStorage"], "host_permissions": ["https://*/*"], + "content_security_policy": { + "extension_pages": "script-src 'self'; object-src 'self'; upgrade-insecure-requests" + }, "background": { "service_worker": "background.js", "type": "module" diff --git a/extension/package.json b/extension/package.json index 4f4f5bf..012ca7e 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,6 +14,7 @@ "scripts": { "export": "rm -rf dist && bun build src/background.ts --outdir dist --target browser --format esm --minify && cp manifest.json dist/manifest.json && cp -r icons dist/icons", "pack": "rm -rf store reader-extension.zip && bun build src/background.ts --outdir store --target browser --format esm --minify && cp manifest.json store/manifest.json && cp -r icons store/icons && bun scripts/store-manifest.ts store && (cd store && zip -r -X ../reader-extension.zip .) && rm -rf store", + "test": "bun test", "lint": "tsc -p . && biome check --error-on-warnings", "fmt": "biome check --write", "icons": "rm -rf icons && mkdir icons && for size in 16 32 48 128; do rsvg-convert -w $size -h $size ../design/icons/logo.svg -o icons/icon-$size.png; done" diff --git a/extension/src/background.test.ts b/extension/src/background.test.ts new file mode 100644 index 0000000..da45396 --- /dev/null +++ b/extension/src/background.test.ts @@ -0,0 +1,246 @@ +import { beforeEach, expect, test } from "bun:test"; +import type { + ExtensionRequest, + ExtensionResponse, +} from "../../shared/src/protocol.ts"; + +type Listener = ( + request: ExtensionRequest, + sender: { origin: string }, + sendResponse: (response: ExtensionResponse) => void, +) => boolean; + +const stored = new Map(); +const listeners: Listener[] = []; + +function storedCopies( + keys: string[] | Record, +): Record { + const wanted: [string, unknown][] = Array.isArray(keys) + ? keys.filter((key) => stored.has(key)).map((key) => [key, undefined]) + : Object.entries(keys); + return Object.fromEntries( + wanted.map(([key, fallback]) => [ + key, + stored.has(key) ? structuredClone(stored.get(key)) : fallback, + ]), + ); +} + +function ignore(): void { + // a listener the tests never call +} + +Object.assign(globalThis, { + chrome: { + storage: { + local: { + get: (keys: string[] | Record) => + Promise.resolve(storedCopies(keys)), + set: (items: Record) => { + for (const [key, value] of Object.entries(items)) { + stored.set(key, structuredClone(value)); + } + return Promise.resolve(); + }, + remove: (keys: string[]) => { + for (const key of keys) { + stored.delete(key); + } + return Promise.resolve(); + }, + }, + }, + runtime: { + getManifest: () => ({ + version: "0.0.0", + // biome-ignore lint/style/useNamingConvention: the manifest's own key + externally_connectable: { matches: ["https://reader.hafa.cc/*"] }, + }), + getPlatformInfo: () => Promise.resolve({}), + onMessageExternal: { + addListener: (listener: Listener) => { + listeners.push(listener); + }, + }, + onInstalled: { addListener: ignore }, + onStartup: { addListener: ignore }, + }, + alarms: { + get: () => Promise.resolve({ name: "due" }), + create: () => Promise.resolve(), + onAlarm: { addListener: ignore }, + }, + }, +}); + +const FEED_URL = "https://feed.example/rss"; +const RSS = `Feedhttps://feed.example/ + aa`; + +/** Answers the fake fetch gives; each test sets its own. */ +let respond: (init: RequestInit | undefined) => Promise = () => + Promise.reject(new TypeError("Failed to fetch")); +/** Addresses fetched, in order. */ +const fetched: string[] = []; + +Object.assign(globalThis, { + fetch: (input: string | URL | Request, init?: RequestInit) => { + fetched.push(String(input)); + return respond(init); + }, +}); + +await import("./background.ts"); + +function ask(request: ExtensionRequest): Promise { + const [listener] = listeners; + return new Promise((resolve, reject) => { + if (listener === undefined) { + reject(new Error("The background script added no listener.")); + } else { + listener(request, { origin: "https://reader.hafa.cc" }, resolve); + } + }); +} + +async function drained(): Promise< + Extract +> { + const response = await ask({ type: "drain" }); + if (response.type !== "drained") { + throw new Error(`Expected a drain, got ${response.type}.`); + } + return response; +} + +async function settle(): Promise { + // let the queue finish and save; nothing here waits on a real timer + for (let round = 0; round < 50; round += 1) { + // biome-ignore lint/performance/noAwaitInLoops: each turn lets the next step run + await new Promise((resolve) => setTimeout(resolve, 1)); + } +} + +beforeEach(() => { + stored.clear(); + fetched.length = 0; +}); + +test("checkDue answers once the checks are queued, and the drain says they are under way", async () => { + let answer: (response: Response) => void = ignore; + respond = (): Promise => + new Promise((resolve) => { + answer = resolve; + }); + expect( + await ask({ + type: "track", + feeds: [{ id: "feed", url: FEED_URL, empty: true }], + }), + ).toEqual({ type: "tracked" }); + const before = Date.now(); + expect(await ask({ type: "checkDue" })).toEqual({ type: "queued" }); + expect(fetched).toEqual([FEED_URL]); + + const during = await drained(); + expect(during.checking).toBe(true); + expect(during.pulled).toEqual([]); + expect(during.status).toEqual([ + { feedId: "feed", lastChecked: 0, error: "", nextCheck: 0 }, + ]); + + answer(new Response(RSS, { status: 200 })); + await settle(); + const after = await drained(); + expect(after.checking).toBe(false); + expect(after.pulled.map((pulled) => pulled.feedId)).toEqual(["feed"]); + expect(after.status[0]?.lastChecked).toBeGreaterThanOrEqual(before); + expect(after.status[0]?.nextCheck).toBeGreaterThan(before); +}); + +test("checkDue queues nothing for a feed that is not due", async () => { + respond = (): Promise => + Promise.resolve(new Response(RSS, { status: 200 })); + await ask({ + type: "track", + feeds: [ + { + id: "feed", + url: FEED_URL, + empty: true, + first: { + status: 200, + url: FEED_URL, + text: RSS, + etag: "", + lastModified: "", + hint: 0, + insecure: false, + }, + }, + ], + }); + expect(await ask({ type: "checkDue" })).toEqual({ type: "queued" }); + expect(fetched).toEqual([]); + const page = await drained(); + expect(page.checking).toBe(false); + expect(page.status[0]?.nextCheck).toBeGreaterThan(Date.now()); +}); + +test("a malformed first answer leaves the feed due instead of failing the track", async () => { + expect( + await ask({ + type: "track", + feeds: [ + { + id: "feed", + url: FEED_URL, + empty: true, + first: JSON.parse('{"status":200}'), + }, + ], + }), + ).toEqual({ type: "tracked" }); + const page = await drained(); + expect(page.status).toEqual([ + { feedId: "feed", lastChecked: 0, error: "", nextCheck: 0 }, + ]); +}); + +test("an address whose redirects never settle on https is reported as not on https", async () => { + const redirect = new Response(null); + Object.defineProperty(redirect, "type", { value: "opaqueredirect" }); + // following the redirects fails; asking without following shows a redirect + respond = (init): Promise => + init?.redirect === "manual" + ? Promise.resolve(redirect) + : Promise.reject(new TypeError("Failed to fetch")); + const response = await ask({ + type: "fetch", + url: FEED_URL, + etag: "", + lastModified: "", + }); + expect(response).toMatchObject({ + type: "fetched", + status: 0, + insecure: true, + }); +}); + +test("an address that does not answer at all is no answer", async () => { + respond = (): Promise => + Promise.reject(new TypeError("Failed to fetch")); + const response = await ask({ + type: "fetch", + url: FEED_URL, + etag: "", + lastModified: "", + }); + expect(response).toMatchObject({ + type: "fetched", + status: 0, + insecure: false, + }); +}); diff --git a/extension/src/background.ts b/extension/src/background.ts index 9c5e224..2552beb 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -4,6 +4,7 @@ import { judge, retrack, type ScheduledFeed, + takeFirstChecks, } from "../../shared/src/check.ts"; import { decodeBody, readCapped } from "../../shared/src/decode.ts"; import { @@ -141,7 +142,12 @@ const NO_ANSWER: FetchOutcome = { const NOT_HTTPS: FetchOutcome = { ...NO_ANSWER, insecure: true }; -/** Read an answer; one whose redirects left https is refused unread. */ +/** + * Read an answer; one whose redirects left https is refused unread. The + * manifest's `upgrade-insecure-requests` already sends every redirect hop as + * https, so this is only a backstop; a site that sends https back to http + * loops instead, which `failedFetch` reports. + */ async function outcomeOf( response: Response, url: string, @@ -200,10 +206,37 @@ async function fetchOutcome( }); outcome = await outcomeOf(response, url); } catch (error) { - outcome = - error instanceof DOMException && error.name === "TimeoutError" - ? undefined - : NO_ANSWER; + outcome = await failedFetch(url, error, timeoutMs); + } + } + return outcome; +} + +/** + * What a fetch that threw says: undefined when it timed out, `NOT_HTTPS` when + * the address answers with a redirect (so following it failed: a loop, as the + * browser turns a hop back to http into https again, or a target with nothing + * on https), and `NO_ANSWER` otherwise. + */ +async function failedFetch( + url: string, + error: unknown, + timeoutMs: number, +): Promise { + let outcome: FetchOutcome | undefined; + if (error instanceof DOMException && error.name === "TimeoutError") { + outcome = undefined; + } else { + try { + const response = await fetch(url, { + redirect: "manual", + cache: "no-store", + signal: AbortSignal.timeout(timeoutMs), + }); + await response.body?.cancel(); + outcome = response.type === "opaqueredirect" ? NOT_HTTPS : NO_ANSWER; + } catch { + outcome = NO_ANSWER; } } return outcome; @@ -328,8 +361,9 @@ function enqueue( }); } -async function checkDue(): Promise { - const checks = await enqueue((tracked, now) => +/** Queue background checks of the feeds whose schedule says they are due. */ +function queueDue(): Promise<{ check: CheckHandle; request: CheckRequest }[]> { + return enqueue((tracked, now) => tracked .filter((feed) => feed.nextFetch <= now) .map((feed) => ({ @@ -339,6 +373,11 @@ async function checkDue(): Promise { timeoutMs: FETCH_TIMEOUT_MS, })), ); +} + +/** Check the feeds that are due and resolve once they are saved. */ +async function checkDue(): Promise { + const checks = await queueDue(); await Promise.all(checks.map(({ check }) => check.stored)); } @@ -387,12 +426,14 @@ function track(feeds: TrackedFeed[]): Promise { retired: state.retired, }; const waiting = new Set(Object.keys(state.inboxSeqs)); - const next = retrack(feeds, previous, waiting, Date.now()); - const kept = new Set(next.tracked.map((feed) => feed.id)); + const now = Date.now(); + const next = retrack(feeds, previous, waiting, now); + const tracked = await takeFirstChecks(next.tracked, feeds, now); + const kept = new Set(tracked.map((feed) => feed.id)); await chrome.storage.local.set({ - trackedIds: next.tracked.map((feed) => feed.id), + trackedIds: tracked.map((feed) => feed.id), retired: next.retired, - ...feedEntries(next.tracked), + ...feedEntries(tracked), }); await chrome.storage.local.remove( state.trackedIds.filter((feedId) => !kept.has(feedId)).map(feedKey), @@ -418,9 +459,11 @@ function drain(): Promise { feedId: feed.id, lastChecked: feed.lastChecked, error: feed.failures >= 2 ? feed.error : "", + nextCheck: feed.nextFetch, }), ), more: page.more, + checking: queue.busy(), }; }); } @@ -456,6 +499,9 @@ async function handle(request: ExtensionRequest): Promise { } else if (request.type === "refresh") { await refresh(request.feedIds); response = { type: "refreshed" }; + } else if (request.type === "checkDue") { + await queueDue(); + response = { type: "queued" }; } else if (request.type === "drain") { response = await drain(); } else if (request.type === "ack" && Number.isFinite(request.upTo)) { diff --git a/shared/fixtures/https.json b/shared/fixtures/https.json new file mode 100644 index 0000000..734b13f --- /dev/null +++ b/shared/fixtures/https.json @@ -0,0 +1,111 @@ +{ + "plainHttp": [ + { "input": "http://example.com/rss", "output": true }, + { "input": " HTTP://Example.com/rss ", "output": true }, + { "input": "https://example.com/rss", "output": false }, + { "input": "ftp://example.com/rss", "output": false }, + { "input": "example.com/rss", "output": false }, + { "input": "", "output": false } + ], + "plainAddress": [ + { "input": "https://example.com/rss", "output": "http://example.com/rss" }, + { "input": " HTTPS://Example.com:8443/rss?a=1 ", "output": "http://example.com:8443/rss?a=1" }, + { "input": "http://example.com/rss", "output": "" }, + { "input": "ftp://example.com/rss", "output": "" }, + { "input": "", "output": "" } + ], + "webAddress": [ + { "name": "plain http kept", "input": " HTTP://Example.com/rss ", "output": "http://example.com/rss" }, + { "name": "https with a path added", "input": "https://example.com", "output": "https://example.com/" }, + { "name": "http's own port left out", "input": "http://example.com:80/rss", "output": "http://example.com/rss" }, + { "name": "https's port kept on http", "input": "http://example.com:443/rss", "output": "http://example.com:443/rss" }, + { "name": "https's own port left out", "input": "https://example.com:443/rss", "output": "https://example.com/rss" }, + { "name": "http's port kept on https", "input": "https://example.com:80/rss", "output": "https://example.com:80/rss" }, + { "name": "scheme and host in lower case, path kept", "input": "HTTPS://EXAMPLE.COM/Feed", "output": "https://example.com/Feed" }, + { "name": "trailing dot kept", "input": "http://example.com./rss", "output": "http://example.com./rss" }, + { "name": "fragment kept", "input": "http://example.com/rss#top", "output": "http://example.com/rss#top" }, + { "name": "international name", "input": "http://bücher.example/rss", "output": "http://xn--bcher-kva.example/rss" }, + { "name": "space escaped", "input": "http://example.com/a b", "output": "http://example.com/a%20b" }, + { "name": "user and password refused", "input": "http://user:secret@example.com/rss", "output": "" }, + { "name": "user refused", "input": "https://user@example.com/rss", "output": "" }, + { "name": "another scheme", "input": "ftp://example.com/rss", "output": "" }, + { "name": "empty", "input": "", "output": "" } + ], + "probeAllowed": [ + { "input": "http://blog.example.com/rss", "output": true }, + { "input": "http://bücher.example/rss", "output": true }, + { "input": "http://localhost/rss", "output": false }, + { "input": "http://LOCALHOST./rss", "output": false }, + { "input": "http://app.localhost/rss", "output": false }, + { "input": "http://printer.local/rss", "output": false }, + { "input": "http://wiki.corp.internal/rss", "output": false }, + { "input": "http://nas.home.arpa/rss", "output": false }, + { "input": "http://router.lan/rss", "output": false }, + { "input": "http://intranet/rss", "output": false }, + { "input": "http://127.0.0.1/rss", "output": false }, + { "input": "http://192.168.1.1:8080/rss", "output": false }, + { "input": "http://10.0.0.5/rss", "output": false }, + { "input": "http://169.254.169.254/latest", "output": false }, + { "input": "http://8.8.8.8/rss", "output": false }, + { "input": "http://2130706433/rss", "output": false }, + { "input": "http://0x7f.1/rss", "output": false }, + { "input": "http://[::1]/rss", "output": false }, + { "input": "http://[fe80::1]/rss", "output": false }, + { "input": "http://user:secret@blog.example.com/rss", "output": false }, + { "input": "not an address", "output": false } + ], + "settledAnswer": [ + { "name": "a feed", "status": 200, "insecure": false, "settled": true }, + { "name": "not found", "status": 404, "insecure": false, "settled": true }, + { "name": "refused", "status": 403, "insecure": false, "settled": true }, + { "name": "a redirect off https", "status": 0, "insecure": true, "settled": true }, + { "name": "no answer, offline or timed out", "status": 0, "insecure": false, "settled": false }, + { "name": "request timeout", "status": 408, "insecure": false, "settled": false }, + { "name": "too many requests", "status": 429, "insecure": false, "settled": false }, + { "name": "server error", "status": 503, "insecure": false, "settled": false } + ], + "sameFeed": [ + { + "name": "same title, ignoring capitals and spacing", + "known": { "url": "http://feeds.example/a", "title": "The Daily Post", "siteUrl": "", "guids": [], "links": [] }, + "found": { "title": "the daily post", "siteUrl": "https://elsewhere.example/", "guids": [], "links": [] }, + "same": true + }, + { + "name": "an article in common by guid", + "known": { "url": "http://feeds.example/a", "title": "Old name", "siteUrl": "", "guids": ["tag:post-1", "tag:post-2"], "links": [] }, + "found": { "title": "New name", "siteUrl": "", "guids": ["tag:post-2", "tag:post-3"], "links": [] }, + "same": true + }, + { + "name": "an article in common by link, ignoring the scheme", + "known": { "url": "http://feeds.example/a", "title": "Old name", "siteUrl": "", "guids": [], "links": ["http://blog.example/post-1"] }, + "found": { "title": "New name", "siteUrl": "", "guids": ["x"], "links": ["https://blog.example/post-1"] }, + "same": true + }, + { + "name": "site on the feed's own host, ignoring www", + "known": { "url": "http://www.blog.example/rss", "title": "My renamed feed", "siteUrl": "", "guids": [], "links": [] }, + "found": { "title": "Blog", "siteUrl": "https://blog.example/", "guids": [], "links": [] }, + "same": true + }, + { + "name": "site on the known site's host", + "known": { "url": "http://feeds.host.example/blog", "title": "Renamed", "siteUrl": "http://blog.example/", "guids": [], "links": [] }, + "found": { "title": "Blog", "siteUrl": "https://www.blog.example/home", "guids": [], "links": [] }, + "same": true + }, + { + "name": "a different feed", + "known": { "url": "http://blog.example/rss", "title": "Blog", "siteUrl": "", "guids": ["a"], "links": ["https://blog.example/a"] }, + "found": { "title": "Welcome to nginx", "siteUrl": "https://hosting.example/", "guids": ["b"], "links": ["https://hosting.example/b"] }, + "same": false + }, + { + "name": "nothing to compare", + "known": { "url": "http://feeds.host.example/blog", "title": "", "siteUrl": "", "guids": [], "links": [] }, + "found": { "title": "", "siteUrl": "", "guids": ["a"], "links": [""] }, + "same": false + } + ] +} diff --git a/shared/fixtures/ids.json b/shared/fixtures/ids.json index bce1d3e..8b9295f 100644 --- a/shared/fixtures/ids.json +++ b/shared/fixtures/ids.json @@ -13,6 +13,18 @@ "url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCexampleChannel01" }, "output": "2020c506a61097ba06cf773aec62bfbe318cb4224fb9b26cc821dd010221e914" + }, + { + "input": { "url": "http://example.com/rss" }, + "output": "027efd3619b74e8e26de89e62e4b651f5ca1122f2cc397f4d0d4a86e536a1b4c" + }, + { + "input": { "url": " http://example.com/rss\t" }, + "output": "027efd3619b74e8e26de89e62e4b651f5ca1122f2cc397f4d0d4a86e536a1b4c" + }, + { + "input": { "url": "http://example.com:443/rss" }, + "output": "679704ea1a991916a22329655f8d47796b464950e1884faecafe848e18bfb6fd" } ], "entries": [ diff --git a/shared/src/check.test.ts b/shared/src/check.test.ts index 98eb477..ceac203 100644 --- a/shared/src/check.test.ts +++ b/shared/src/check.test.ts @@ -6,6 +6,7 @@ import { type ScheduledFeed, type Schedules, statusProblem, + takeFirstChecks, } from "./check.ts"; import { sha256Hex } from "./id.ts"; import type { FetchOutcome } from "./protocol.ts"; @@ -182,6 +183,81 @@ test("tracking a new address resets the feed but keeps what it learned", () => { }); }); +test("an answer already taken in counts as the first check of a feed starting over", async () => { + const first = answer(rss(["a", "b"]), { etag: '"1"' }); + const fresh = scheduled({ id: "new" }); + const known = scheduled({ + id: "known", + hash: "h", + lastChecked: NOW - HOUR, + nextFetch: NOW + HOUR, + }); + const [taken, kept, untouched] = await takeFirstChecks( + [fresh, known, scheduled({ id: "other" })], + [ + { id: "new", url: fresh.url, empty: false, first }, + { id: "known", url: known.url, empty: false, first }, + { id: "other", url: fresh.url, empty: false }, + ], + NOW, + ); + expect(taken).toEqual((await judge(fresh, first, NOW)).feed); + expect(taken?.lastChecked).toBe(NOW); + expect(taken?.nextFetch).toBeGreaterThan(NOW); + expect(taken?.etag).toBe('"1"'); + expect(kept).toEqual(known); + expect(untouched).toEqual(scheduled({ id: "other" })); +}); + +test("a malformed answer is skipped and leaves its feed due, without spoiling the rest", async () => { + const first = answer(rss(["a"])); + const { text: _text, ...withoutText } = first; + const malformed: unknown[] = [ + null, + "first", + 42, + withoutText, + { ...first, status: "200" }, + { ...first, insecure: 0 }, + ]; + const feeds = malformed.map((value, index) => ({ + id: `bad-${index}`, + url: "https://feed.example/rss", + empty: false, + // what a web app with a bug, or a newer one, might send + first: JSON.parse(JSON.stringify(value)), + })); + const tracked = [ + ...feeds.map((feed) => scheduled({ id: feed.id })), + scheduled({ id: "good" }), + ]; + const result = await takeFirstChecks( + tracked, + [...feeds, { id: "good", url: tracked[0]?.url ?? "", empty: false, first }], + NOW, + ); + expect(result.slice(0, -1)).toEqual(tracked.slice(0, -1)); + expect(result.at(-1)?.lastChecked).toBe(NOW); +}); + +test("an answer for a feed not tracked is ignored", async () => { + const tracked = [scheduled()]; + expect( + await takeFirstChecks( + tracked, + [ + { + id: "elsewhere", + url: "https://feed.example/rss", + empty: false, + first: answer(rss(["a"])), + }, + ], + NOW, + ), + ).toEqual(tracked); +}); + test("tracking starts a new feed due now and retires untracked ones", () => { const old = scheduled({ lastChecked: NOW, guids: ["a"] }); const next = retrack( diff --git a/shared/src/check.ts b/shared/src/check.ts index 2b95541..15e8363 100644 --- a/shared/src/check.ts +++ b/shared/src/check.ts @@ -28,7 +28,7 @@ export function statusProblem(status: number): string { } /** A tracked feed with its schedule and what its last check saw. */ -export interface ScheduledFeed extends Omit { +export interface ScheduledFeed extends Omit { /** `ETag` of the last body seen, sent back as `If-None-Match`. */ etag: string; /** `Last-Modified` of the last body seen, sent back as `If-Modified-Since`. */ @@ -339,3 +339,60 @@ export function retrack( ]; return { tracked, retired }; } + +/** Whether a value sent as `first` has every field of a fetch's answer, with its type. */ +function isFetchOutcome(value: unknown): value is FetchOutcome { + return ( + typeof value === "object" && + value !== null && + "status" in value && + typeof value.status === "number" && + "url" in value && + typeof value.url === "string" && + "text" in value && + typeof value.text === "string" && + "etag" in value && + typeof value.etag === "string" && + "lastModified" in value && + typeof value.lastModified === "string" && + "hint" in value && + typeof value.hint === "number" && + "insecure" in value && + typeof value.insecure === "boolean" + ); +} + +/** + * Count each answer the web app already took in (`first`) as the check of a + * feed whose schedule starts over (new, or reset by a new address), so it is + * not fetched again at once. Other feeds keep their schedules; what the answer + * held is not handed on again. A `first` that is not a fetch's answer, or + * that cannot be judged, is skipped, leaving that feed due. + */ +export async function takeFirstChecks( + tracked: ScheduledFeed[], + feeds: TrackedFeed[], + nowMs: number, +): Promise { + const firstById = new Map(); + for (const feed of feeds) { + const first: unknown = feed.first; + if (isFetchOutcome(first)) { + firstById.set(feed.id, first); + } + } + return await Promise.all( + tracked.map(async (feed) => { + const first = firstById.get(feed.id); + let scheduled = feed; + if (first !== undefined && feed.nextFetch === 0 && feed.hash === "") { + try { + scheduled = (await judge(feed, first, nowMs)).feed; + } catch { + scheduled = feed; + } + } + return scheduled; + }), + ); +} diff --git a/shared/src/filter.test.ts b/shared/src/filter.test.ts index 2141b97..4b401ae 100644 --- a/shared/src/filter.test.ts +++ b/shared/src/filter.test.ts @@ -1,11 +1,14 @@ import { expect, test } from "bun:test"; import { + articleTopics, + byCount, DEFAULT_SETTINGS, type FilterEntry, hasWord, keeper, passes, topicCounts, + topicRanks, type ViewSettings, } from "./filter.ts"; @@ -83,6 +86,42 @@ test("topics are counted, commonest first", () => { ]); }); +test("a topic an article lists twice counts once, and ties go by name", () => { + const twice = { ...story, categories: ["Zoo", "zoo ", "Apple"] }; + expect(topicCounts([twice])).toEqual([ + { topic: "Apple", count: 1 }, + { topic: "Zoo", count: 1 }, + ]); +}); + +test("names go most counted first, then by name", () => { + const counts = new Map([ + ["budget", 2], + ["senate", 5], + ["night", 2], + ]); + expect( + byCount( + ["budget", "night", "senate", "zoo"], + (name) => counts.get(name) ?? 0, + ), + ).toEqual(["senate", "budget", "night", "zoo"]); +}); + +test("an article's topics follow the view's counts, each once", () => { + const counts = [ + { topic: "Politics", count: 3 }, + { topic: "Business", count: 2 }, + { topic: "U.S.", count: 2 }, + ]; + const ranks = topicRanks(counts); + expect( + articleTopics(["U.S.", "Zoo", "politics ", "Business", "US"], ranks), + ).toEqual(["politics ", "Business", "U.S.", "US", "Zoo"]); + expect(articleTopics(["U.S.", "u.s."], ranks)).toEqual(["U.S."]); + expect(ranks.get("u.s.")).toBe(2); +}); + test("a list of words is compiled once and reused", () => { const OriginalRegExp = RegExp; let built = 0; diff --git a/shared/src/filter.ts b/shared/src/filter.ts index b36f998..7ca365d 100644 --- a/shared/src/filter.ts +++ b/shared/src/filter.ts @@ -126,24 +126,95 @@ function matchesEntry(matcher: Matcher, entry: FilterEntry): boolean { return matcher(entry.title) || matcher(entry.summary); } -/** The topics the articles carry, commonest first, with how many have each. */ +/** + * The topics the articles carry, with how many articles carry each, + * commonest first and then by name. + */ export function topicCounts( - entries: FilterEntry[], + entries: readonly FilterEntry[], ): { topic: string; count: number }[] { const counts = new Map(); for (const entry of entries) { + const seen = new Set(); for (const topic of entry.categories) { const key = topic.trim().toLowerCase(); - const known = counts.get(key); - counts.set(key, { topic, count: (known?.count ?? 0) + 1 }); + if (!seen.has(key)) { + seen.add(key); + const known = counts.get(key); + counts.set(key, { topic, count: (known?.count ?? 0) + 1 }); + } } } - return [...counts.values()].sort( - (first, second) => - second.count - first.count || first.topic.localeCompare(second.topic), + return [...counts.values()].sort((first, second) => + compareCounted(first.count, first.topic, second.count, second.topic), ); } +function compareCounted( + firstCount: number, + firstName: string, + secondCount: number, + secondName: string, +): number { + return secondCount - firstCount || firstName.localeCompare(secondName); +} + +/** + * The names with the highest counts first and then by name, the order every + * list of topics or words is shown in. + */ +export function byCount( + names: string[], + count: (name: string) => number, +): string[] { + return names + .map((name) => ({ name, count: count(name) })) + .sort((first, second) => + compareCounted(first.count, first.name, second.count, second.name), + ) + .map(({ name }) => name); +} + +/** + * Each topic's place in the view's order, by its trimmed lower-case form, + * from `topicCounts`; built once per view so each article looks its topics up. + */ +export function topicRanks( + counts: readonly { topic: string; count: number }[], +): Map { + const ranks = new Map(); + for (const [index, { topic }] of counts.entries()) { + ranks.set(topic.trim().toLowerCase(), index); + } + return ranks; +} + +/** + * An article's topics, each once, in the view's order (`topicRanks`): most + * articles in the view first, then by name; topics the view does not count go + * last, by name. + */ +export function articleTopics( + categories: string[], + ranks: ReadonlyMap, +): string[] { + const seen = new Set(); + const unique: { topic: string; rank: number }[] = []; + for (const topic of categories) { + const key = topic.trim().toLowerCase(); + if (!seen.has(key)) { + seen.add(key); + unique.push({ topic, rank: ranks.get(key) ?? Number.POSITIVE_INFINITY }); + } + } + return unique + .sort( + (first, second) => + first.rank - second.rank || first.topic.localeCompare(second.topic), + ) + .map(({ topic }) => topic); +} + /** * A test of whether an article stays after the settings' filters are * applied, built once for testing many articles. diff --git a/shared/src/https.test.ts b/shared/src/https.test.ts new file mode 100644 index 0000000..4b7d854 --- /dev/null +++ b/shared/src/https.test.ts @@ -0,0 +1,202 @@ +import { expect, test } from "bun:test"; +import type { ParsedFeed } from "./feed.ts"; +import { + isPlainHttp, + type KnownFeed, + mapConcurrently, + type ProbeOutcome, + plainAddress, + probeAllowed, + probeHttps, + sameFeed, + settledAnswer, + webAddress, +} from "./https.ts"; + +/** `fixtures/https.json`: which addresses are plain http, their http and written-out forms, which may be tried over https, which answers settle a probe, and which feeds count as the same. */ +interface HttpsFixture { + plainHttp: { input: string; output: boolean }[]; + plainAddress: { input: string; output: string }[]; + webAddress: { name: string; input: string; output: string }[]; + probeAllowed: { input: string; output: boolean }[]; + settledAnswer: { + name: string; + status: number; + insecure: boolean; + settled: boolean; + }[]; + sameFeed: { + name: string; + known: KnownFeed; + found: { title: string; siteUrl: string; guids: string[]; links: string[] }; + same: boolean; + }[]; +} + +const fixture: HttpsFixture = await Bun.file( + new URL("../fixtures/https.json", import.meta.url), +).json(); + +function parsedOf( + found: HttpsFixture["sameFeed"][number]["found"], +): ParsedFeed { + return { + title: found.title, + siteUrl: found.siteUrl, + iconUrl: "", + entries: found.guids.map((guid, index) => ({ + guid, + title: "", + url: found.links[index] ?? "", + published: 0, + author: "", + imageUrl: "", + summary: "", + categories: [], + html: "", + })), + }; +} + +test.each(fixture.plainHttp.map((item) => [item.input, item.output] as const))( + "isPlainHttp(%p) is %p", + (input, output) => { + expect(isPlainHttp(input)).toBe(output); + }, +); + +test.each( + fixture.plainAddress.map((item) => [item.input, item.output] as const), +)("plainAddress(%p) is %p", (input, output) => { + expect(plainAddress(input)).toBe(output); +}); + +test.each(fixture.settledAnswer.map((item) => [item.name, item] as const))( + "settledAnswer: %s", + (_name, item) => { + const outcome = { + status: item.status, + url: "", + text: "", + insecure: item.insecure, + }; + expect(settledAnswer(outcome)).toBe(item.settled); + }, +); + +test("settledAnswer: no answer from the extension settles nothing", () => { + expect(settledAnswer(undefined)).toBe(false); +}); + +test.each(fixture.sameFeed.map((item) => [item.name, item] as const))( + "sameFeed: %s", + (_name, item) => { + expect(sameFeed(item.known, parsedOf(item.found))).toBe(item.same); + }, +); + +test.each(fixture.webAddress.map((item) => [item.name, item] as const))( + "webAddress: %s", + (_name, item) => { + expect(webAddress(item.input)).toBe(item.output); + }, +); + +test.each( + fixture.probeAllowed.map((item) => [item.input, item.output] as const), +)("probeAllowed(%p) is %p", (input, output) => { + expect(probeAllowed(input)).toBe(output); +}); + +const KNOWN: KnownFeed = { + url: "http://blog.example/rss", + title: "Blog", + siteUrl: "", + guids: [], + links: [], +}; + +const FEED = `Bloghttps://blog.example/ + aa`; + +function answer(extra: Partial = {}): ProbeOutcome { + return { + status: 200, + url: "https://blog.example/rss", + text: FEED, + insecure: false, + ...extra, + }; +} + +test("probeHttps fetches the https address and takes a matching feed", async () => { + const asked: string[] = []; + const match = await probeHttps(KNOWN, (url) => { + asked.push(url); + return Promise.resolve(answer()); + }); + expect(asked).toEqual(["https://blog.example/rss"]); + expect(match?.url).toBe("https://blog.example/rss"); + expect(match?.feed.title).toBe("Blog"); +}); + +test("probeHttps refuses failures, redirects off https, non-feeds and other feeds", async () => { + const outcomes: (ProbeOutcome | undefined)[] = [ + undefined, + answer({ status: 0 }), + answer({ status: 404, text: "" }), + answer({ status: 0, insecure: true }), + answer({ text: "Hello" }), + answer({ + text: "Parkedhttps://parking.example/", + }), + ]; + for (const outcome of outcomes) { + // biome-ignore lint/performance/noAwaitInLoops: one fake answer at a time + const match = await probeHttps(KNOWN, () => Promise.resolve(outcome)); + expect(match).toBeUndefined(); + } +}); + +test("probeHttps tries nothing for an address that is not plain http or may not be tried", async () => { + let asked = 0; + function fetchAddress(): Promise { + asked += 1; + return Promise.resolve(answer()); + } + expect( + await probeHttps( + { ...KNOWN, url: "https://blog.example/rss" }, + fetchAddress, + ), + ).toBeUndefined(); + expect( + await probeHttps({ ...KNOWN, url: "ftp://blog.example/rss" }, fetchAddress), + ).toBeUndefined(); + expect( + await probeHttps({ ...KNOWN, url: "http://192.168.1.1/rss" }, fetchAddress), + ).toBeUndefined(); + expect( + await probeHttps({ ...KNOWN, url: "http://nas.local/rss" }, fetchAddress), + ).toBeUndefined(); + expect(asked).toBe(0); +}); + +test("mapConcurrently keeps order and limits how many run at once", async () => { + let running = 0; + let most = 0; + const results = await mapConcurrently( + [1, 2, 3, 4, 5, 6, 7], + 3, + async (item) => { + running += 1; + most = Math.max(most, running); + await new Promise((resolve) => setTimeout(resolve, 8 - item)); + running -= 1; + return item * 10; + }, + ); + expect(results).toEqual([10, 20, 30, 40, 50, 60, 70]); + expect(most).toBe(3); + expect(await mapConcurrently([], 3, () => Promise.resolve(1))).toEqual([]); +}); diff --git a/shared/src/https.ts b/shared/src/https.ts new file mode 100644 index 0000000..69ba122 --- /dev/null +++ b/shared/src/https.ts @@ -0,0 +1,230 @@ +import { upgradedAddress } from "./address.ts"; +import { type ParsedFeed, parseFeed } from "./feed.ts"; +import type { FetchOutcome } from "./protocol.ts"; + +/** Most https addresses tried at once. */ +export const PROBE_CONCURRENCY = 6; + +/** + * Most tries of a plain http feed's https address in one session that get no + * definite answer; after that it waits for the app to start again. + */ +export const UNSETTLED_TRIES = 3; + +const SPACES_PATTERN = /\s+/u; +const SCHEME_PATTERN = /^https?:\/\//iu; +const WWW_PATTERN = /^www\./u; +const TRAILING_DOT = /\.$/u; +// A last label that is a number, as in an IPv4 address or the forms browsers read as one. +const NUMBER_LABEL = /^(?:0x[0-9a-f]*|[0-9]+)$/iu; +// Names that only mean something on the local network. +const LOCAL_NAMES = ["localhost", "local", "internal", "home.arpa", "lan"]; + +function parsed(address: string): URL | undefined { + let url: URL | undefined; + try { + url = new URL(address); + } catch { + url = undefined; + } + return url; +} + +/** Whether an address is plain `http`. */ +export function isPlainHttp(address: string): boolean { + return parsed(address.trim())?.protocol === "http:"; +} + +/** + * An `https` address written as plain `http`, to find a feed followed at its + * http address; empty for anything else. + */ +export function plainAddress(address: string): string { + const url = parsed(address.trim()); + let result = ""; + if (url?.protocol === "https:") { + url.protocol = "http:"; + result = url.href; + } + return result; +} + +/** + * An `http` or `https` address written out the way browsers write it (the + * scheme and host in lower case, the scheme's own default port left out, an + * international name in its `xn--` form, the fragment kept); empty for + * anything else, and for an address with a user name or password, which + * browsers refuse to fetch. Plain http is kept as it is, so it can be shown + * as http and tried over https before it is used. + */ +export function webAddress(address: string): string { + const url = parsed(address.trim()); + return (url?.protocol === "http:" || url?.protocol === "https:") && + url.username === "" && + url.password === "" + ? url.href + : ""; +} + +/** + * Whether a plain http address may be tried at its https address: its host + * is a public name, not an IP address (nor a number browsers read as one), a + * name of one label, `localhost`, or a name under `.local`, `.internal`, + * `.home.arpa` or `.lan`, and it has no user name or password. Addresses + * from a feed list or a search come from others, and trying them must not + * reach this device or its network. + */ +export function probeAllowed(address: string): boolean { + const url = parsed(address.trim()); + const host = (url?.hostname ?? "").replace(TRAILING_DOT, ""); + const labels = host.split("."); + return ( + url !== undefined && + url.username === "" && + url.password === "" && + labels.length > 1 && + !host.startsWith("[") && + !NUMBER_LABEL.test(labels.at(-1) ?? "") && + !LOCAL_NAMES.some((name) => host === name || host.endsWith(`.${name}`)) + ); +} + +/** What is known of a plain http feed before its https address is tried. */ +export interface KnownFeed { + /** Its plain http address. */ + url: string; + /** Its name; empty when unknown. */ + title: string; + /** Its site's address; empty when unknown. */ + siteUrl: string; + /** Guids of its articles already held. */ + guids: string[]; + /** Links of its articles already held. */ + links: string[]; +} + +/** The parts of a fetch the probe reads. */ +export type ProbeOutcome = Pick< + FetchOutcome, + "status" | "url" | "text" | "insecure" +>; + +/** A plain http feed's https address, found to serve the same feed. */ +export interface HttpsMatch { + /** The https address. */ + url: string; + /** What it served. */ + feed: ParsedFeed; + /** The answer it came in. */ + outcome: Outcome; +} + +// Statuses that ask to try again later rather than say anything of the address. +const LATER_STATUSES = new Set([408, 425, 429]); + +/** + * Whether a probe's answer settles if a feed has an https address: any answer + * from the site, except one asking to try again later (a timeout, too many + * requests, or a server error). A redirect off https settles it too: Android + * sees one as it follows redirects itself, and the extension reports one when + * the https address redirects but following it never reaches an answer over + * https, as when the site sends https back to http and the browser's upgrade + * of that hop loops. No answer at all, as when offline or the fetch timed + * out, settles nothing. + */ +export function settledAnswer(outcome: ProbeOutcome | undefined): boolean { + return ( + outcome !== undefined && + (outcome.insecure || + (outcome.status !== 0 && + outcome.status < 500 && + !LATER_STATUSES.has(outcome.status))) + ); +} + +function normalTitle(title: string): string { + return title.toLowerCase().split(SPACES_PATTERN).filter(Boolean).join(" "); +} + +function withoutScheme(address: string): string { + return address.replace(SCHEME_PATTERN, ""); +} + +function siteHost(address: string): string { + return (parsed(address)?.hostname ?? "").replace(WWW_PATTERN, ""); +} + +/** + * Whether a feed read over https looks like the plain http one it stands in + * for: the same name (ignoring capitals and spacing), an article in common (by + * guid or link, ignoring the scheme), or a site on the same host as the known + * site or, failing that, as the http address itself (ignoring `www.`). + */ +export function sameFeed(known: KnownFeed, found: ParsedFeed): boolean { + const title = normalTitle(known.title); + const guids = new Set(known.guids.map(withoutScheme)); + const links = new Set(known.links.filter(Boolean).map(withoutScheme)); + const shared = found.entries.some( + (entry) => + guids.has(withoutScheme(entry.guid)) || + (entry.url !== "" && links.has(withoutScheme(entry.url))), + ); + const knownHost = siteHost(known.siteUrl) || siteHost(known.url); + const foundHost = siteHost(found.siteUrl); + return ( + (title !== "" && title === normalTitle(found.title)) || + shared || + (foundHost !== "" && foundHost === knownHost) + ); +} + +/** + * Try a plain http feed at its https address. It counts only when the answer + * is a 200 that stays on https, parses as a feed and passes `sameFeed`; + * otherwise, or when `known` is not plain http or not `probeAllowed`, there + * is no match, and then nothing is fetched. + */ +export async function probeHttps( + known: KnownFeed, + fetchAddress: (url: string) => Promise, +): Promise | undefined> { + const url = + isPlainHttp(known.url) && probeAllowed(known.url) + ? upgradedAddress(known.url) + : ""; + const outcome = url === "" ? undefined : await fetchAddress(url); + let match: HttpsMatch | undefined; + if (outcome?.status === 200 && !outcome.insecure) { + let feed: ParsedFeed | undefined; + try { + feed = parseFeed(outcome.text, outcome.url || url); + } catch { + feed = undefined; + } + if (feed !== undefined && sameFeed(known, feed)) { + match = { url, feed, outcome }; + } + } + return match; +} + +/** Run `work` on every item, at most `limit` at once, keeping the order. */ +export async function mapConcurrently( + items: readonly Item[], + limit: number, + work: (item: Item) => Promise, +): Promise { + const results = new Array(items.length); + // one iterator shared by every worker, so each item is taken once + const pending = items.entries(); + async function worker(): Promise { + for (const [index, item] of pending) { + // biome-ignore lint/performance/noAwaitInLoops: each worker takes one item at a time + results[index] = await work(item); + } + } + await Promise.all( + Array.from({ length: Math.min(limit, items.length) }, worker), + ); + return results; +} diff --git a/shared/src/protocol.ts b/shared/src/protocol.ts index 62d0212..d351fe4 100644 --- a/shared/src/protocol.ts +++ b/shared/src/protocol.ts @@ -8,6 +8,8 @@ export interface TrackedFeed { url: string; /** The web app holds no articles for this feed, so it needs them all again. */ empty: boolean; + /** An answer from the address the web app already took in, to count as the first check of a schedule that starts over; absent when none. */ + first?: FetchOutcome; } /** What the extension pulled from one feed since the web app last asked. */ @@ -29,6 +31,8 @@ export interface FeedStatus { lastChecked: number; /** Why the last check failed; empty when it did not. */ error: string; + /** Milliseconds since the epoch of the next scheduled check; absent from older extensions. */ + nextCheck?: number; } /** A message the web app sends to the extension. */ @@ -42,6 +46,7 @@ export type ExtensionRequest = } | { type: "track"; feeds: TrackedFeed[] } | { type: "refresh"; feedIds: string[] } + | { type: "checkDue" } | { type: "drain" } | { type: "ack"; upTo: number }; @@ -59,7 +64,13 @@ export interface FetchOutcome { lastModified: string; /** Milliseconds the site asked us to wait before checking again. */ hint: number; - /** Refused because the address, or where it redirected, is not https; status is then zero. */ + /** + * Refused because the address, or where it redirected, is not https; status + * is then zero. The extension also sets it when the address redirects but + * following the redirects never reaches an answer, since its content policy + * turns each hop to http into https, and a site that sends https back to + * http then loops. + */ insecure: boolean; } @@ -69,6 +80,7 @@ export type ExtensionResponse = | ({ type: "fetched" } & FetchOutcome) | { type: "tracked" } | { type: "refreshed" } + | { type: "queued" } | { type: "drained"; /** Acknowledge up to this to remove what was drained; zero when nothing was. */ @@ -77,6 +89,8 @@ export type ExtensionResponse = status: FeedStatus[]; /** More is waiting than fit in this reply; drain again after acknowledging. */ more: boolean; + /** Feeds are being checked or saved; absent from older extensions. */ + checking?: boolean; } | { type: "acked" } | { type: "error"; message: string }; diff --git a/shared/src/schedule.test.ts b/shared/src/schedule.test.ts index 82e2b7d..cb504a4 100644 --- a/shared/src/schedule.test.ts +++ b/shared/src/schedule.test.ts @@ -15,8 +15,10 @@ import { MISS_PROBABILITY, missProbability, newProbability, + OVERDUE_MS, observe, observeWindow, + overdueAt, type PlannableFeed, PRIOR, patternFactors, @@ -421,3 +423,12 @@ test("Retry-After is whole seconds or an HTTP date, and nothing else", () => { expect(hint("Mon, 05 Jan 2026 13:00:00 GMT")).toBe(3_600_000); expect(hint("2026-01-05T13:00:00Z")).toBe(0); }); + +test("feeds become overdue a while after their earliest next check", () => { + expect(overdueAt([MONDAY + DAY, MONDAY, MONDAY + 2 * DAY])).toBe( + MONDAY + OVERDUE_MS, + ); + expect(overdueAt([0])).toBe(OVERDUE_MS); + expect(overdueAt([])).toBe(Number.POSITIVE_INFINITY); + expect(OVERDUE_MS).toBe(2 * MIN_INTERVAL_MS); +}); diff --git a/shared/src/schedule.ts b/shared/src/schedule.ts index f1d55bc..f4b38e3 100644 --- a/shared/src/schedule.ts +++ b/shared/src/schedule.ts @@ -492,6 +492,27 @@ export function planRefresh( }; } +/** + * How late a feed's scheduled check may run before a refresh is suggested, in + * milliseconds. The background timers (every 5 minutes in the extension, about + * every 15 on Android) normally reach a due feed well within it, so only a + * feed they missed, as when the browser or phone slept, counts. + */ +export const OVERDUE_MS = 2 * MIN_INTERVAL_MS; + +/** + * When the first of these feeds becomes overdue: the earliest next check plus + * `OVERDUE_MS`; `Infinity` when there are none. One pass over the next checks, + * so the caller can recompute it on every change and set one timer for it. + */ +export function overdueAt(nextChecks: Iterable): number { + let earliest = Number.POSITIVE_INFINITY; + for (const nextCheck of nextChecks) { + earliest = Math.min(earliest, nextCheck); + } + return earliest + OVERDUE_MS; +} + /** Wait after the given number of failures in a row, doubling each time. */ export function retryInterval(failures: number): number { return Math.min(MAX_RETRY_MS, MIN_INTERVAL_MS * 2 ** failures); diff --git a/web/bun.lock b/web/bun.lock index 2680333..7284a7b 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -6,7 +6,7 @@ "name": "hafa-reader-web", "devDependencies": { "@biomejs/biome": "^2.5.15", - "@fontsource-variable/fraunces": "^5.3.0", + "@fontsource-variable/literata": "^5.3.0", "@fontsource-variable/public-sans": "^5.3.0", "@happy-dom/global-registrator": "^21.0.1", "@lucide/svelte": "^1.55.0", @@ -135,7 +135,7 @@ "@firebase/webchannel-wrapper": ["@firebase/webchannel-wrapper@1.0.7", "", {}, "sha512-phBFwieDLvkZGYN9CE9ZFNEIoBVksprzsnCzQejCmCHtgwCXReeuRpoEGN9C4EbhONztv8NRV1tau6Rb9pONwQ=="], - "@fontsource-variable/fraunces": ["@fontsource-variable/fraunces@5.3.0", "", {}, "sha512-9BYGySn4AHEJdgp9Z28tQ3X+laJMEOITXkQarZXeloWQZDq5oOvXJ3kDA8c7MGIfpogIaZfjrQBqmda8POOCKA=="], + "@fontsource-variable/literata": ["@fontsource-variable/literata@5.3.0", "", {}, "sha512-1Jw7xvOcoGyB83lxB2nG4bfNbqtX2/TTbdh9sHAOmU064SvmSdulDtA5RBu5JYWf64fdaKX7xU+z3GO1T2bCHA=="], "@fontsource-variable/public-sans": ["@fontsource-variable/public-sans@5.3.0", "", {}, "sha512-AVfkmAt50BMXWpOO21FAntiJFKGX6xTc2dSL8dxtDteONe9IuRXJWGbs0EbG955vAMCq23ENeuopuW87cGWDSQ=="], diff --git a/web/package.json b/web/package.json index b8e48f0..dee6b22 100644 --- a/web/package.json +++ b/web/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@biomejs/biome": "^2.5.15", - "@fontsource-variable/fraunces": "^5.3.0", + "@fontsource-variable/literata": "^5.3.0", "@fontsource-variable/public-sans": "^5.3.0", "@happy-dom/global-registrator": "^21.0.1", "@lucide/svelte": "^1.55.0", diff --git a/web/src/app.css b/web/src/app.css index 2c58f62..6b937c0 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -16,6 +16,8 @@ --ok: #2f9a5c; /* Material's error color, as on Android */ --danger: #b3261e; + /* article text and titles, unless Public Sans is chosen */ + --reading-font: "Literata Variable", Georgia, serif; } @media (prefers-color-scheme: dark) { @@ -52,7 +54,11 @@ --animate-dot: dot-pulse 1.4s ease-in-out infinite; --color-faded: var(--read); --font-sans: "Public Sans Variable", ui-sans-serif, system-ui, sans-serif; - --font-serif: "Fraunces Variable", Georgia, serif; + --font-reading: var(--reading-font); +} + +:root[data-reading-font="public-sans"] { + --reading-font: "Public Sans Variable", ui-sans-serif, system-ui, sans-serif; } html, diff --git a/web/src/lib/components/add-feed.svelte b/web/src/lib/components/add-feed.svelte index c7ceee2..fcf0c48 100644 --- a/web/src/lib/components/add-feed.svelte +++ b/web/src/lib/components/add-feed.svelte @@ -7,6 +7,7 @@ import { buildOpml } from "#lib/opml.ts"; import { type FeedHit, faviconFor, type Reader } from "#lib/reader.svelte.ts"; import FeedIcon from "./feed-icon.svelte"; + import TextField from "./text-field.svelte"; const { reader, @@ -25,6 +26,15 @@ let dragging = $state(false); // a topic search, as opposed to adding an address or a file let searching = $state(false); + // the group imported feeds go into; empty keeps the file's folders + let importGroup = $state(""); + + function editImportGroup(event: Event): void { + const { currentTarget } = event; + if (currentTarget instanceof HTMLInputElement) { + importGroup = currentTarget.value; + } + } function clearField(): void { fieldError = ""; @@ -105,12 +115,18 @@ async function importText(source: string): Promise { try { - const result = await reader.importOpml(source); + const result = await reader.importOpml( + source, + importGroup.trim() || undefined, + ); if (result.found === 0) { reader.notify(copy.importNone); + } else if (result.skipped > 0) { + reader.notify(copy.importSkippedHttp(result.skipped)); } else if (result.added === 0) { reader.notify(copy.importNothingNew); - } else { + } + if (result.added > 0) { ondone(); } } catch { @@ -137,6 +153,7 @@ url: feed.url, title: feed.title, folder: feed.folder, + siteUrl: feed.siteUrl, })), ); try { @@ -179,7 +196,7 @@

{:else} diff --git a/web/src/lib/components/chip-rows.svelte b/web/src/lib/components/chip-rows.svelte new file mode 100644 index 0000000..6203022 --- /dev/null +++ b/web/src/lib/components/chip-rows.svelte @@ -0,0 +1,62 @@ + + + +
{ + boxWidth = width; + })} +> +
    + {#each items as item, index (key(item))} +
  • { + chipWidths[index] = width; + })} + > + {@render chip(item)} +
  • + {/each} +
+
diff --git a/web/src/lib/components/confirm-button.svelte b/web/src/lib/components/confirm-button.svelte new file mode 100644 index 0000000..85f6ba9 --- /dev/null +++ b/web/src/lib/components/confirm-button.svelte @@ -0,0 +1,51 @@ + + + diff --git a/web/src/lib/components/due-dot.svelte b/web/src/lib/components/due-dot.svelte new file mode 100644 index 0000000..ed4efb3 --- /dev/null +++ b/web/src/lib/components/due-dot.svelte @@ -0,0 +1,7 @@ + + diff --git a/web/src/lib/components/empty-list.svelte b/web/src/lib/components/empty-list.svelte deleted file mode 100644 index d7cf250..0000000 --- a/web/src/lib/components/empty-list.svelte +++ /dev/null @@ -1,30 +0,0 @@ - - - - diff --git a/web/src/lib/components/entry-card.svelte b/web/src/lib/components/entry-card.svelte index ead1d6e..87867fc 100644 --- a/web/src/lib/components/entry-card.svelte +++ b/web/src/lib/components/entry-card.svelte @@ -9,6 +9,7 @@ const { entry, source, + topics, active, onopen, ontoggle, @@ -16,6 +17,8 @@ }: { entry: Entry; source: string; + /** The article's topics in the view's order. */ + topics: string[]; active: boolean; onopen: () => void; ontoggle: () => void; @@ -151,9 +154,9 @@ : "line-clamp-3 pr-[4.5rem]"}" >{entry.excerpt} - {#if entry.categories.length > 0} + {#if topics.length > 0} {entry.categories.join(" · ")}{topics.join(" · ")} {/if} diff --git a/web/src/lib/components/entry-list.svelte b/web/src/lib/components/entry-list.svelte index ee5c8f3..71b76e0 100644 --- a/web/src/lib/components/entry-list.svelte +++ b/web/src/lib/components/entry-list.svelte @@ -10,7 +10,8 @@ import { type Axis, touchAxis } from "#lib/gestures.ts"; import { showsListEnd } from "#lib/list-end.ts"; import { logFailure, type Reader, viewKey } from "#lib/reader.svelte.ts"; - import EmptyList from "./empty-list.svelte"; + import { articleTopics } from "$shared/filter.ts"; + import DueDot from "./due-dot.svelte"; import EntryCard from "./entry-card.svelte"; const { @@ -162,14 +163,25 @@ - {reader.viewTitle} + {/if} -
- {#if shownFeed?.error} -

-

- {/if} - {#each rows as entry (entry.id)} - { - logFailure(reader.open(entry.id)); - onopen(); - }} - ontoggle={() => logFailure(reader.toggleReadFor(entry.id))} - onstar={() => logFailure(reader.toggleStarFor(entry.id))} - /> - {:else} -
- -

{copy.noEntries}

-
- {/each} - {#if showsListEnd(rows.length, reader.visible.length)} -
+
- - {/if} -
- +
{#if first}
-

{copy.emptyTitle}

+

{copy.emptyTitle}

{copy.emptyBody}

{/if} @@ -267,8 +284,16 @@ {/if}
-

{copy.importTitle}

+

{copy.importTitle}

{copy.importBody}

+
-

- {#if entry.url} - {entry.title} - {:else} - {entry.title} - {/if} -

{#if showImage} {/if} -
+
{@html reader.body}
@@ -342,34 +350,22 @@ {/if}
- {#if entry.categories.length > 0} -
    - - {#each entry.categories as category, index (index)} -
  • - {#if reader.filtersApply} - - {:else} - {category} - {/if} -
  • - {/each} -
+ {#if topics.length > 0} + topic.trim().toLowerCase()}> + {#snippet chip( + topic: string, + )} + {#if reader.filtersApply} + logFailure(reader.toggleTopic(topic, true))} + /> + {:else} + + {/if} + {/snippet} + {/if}