Releases · Faultless/textlog_flutter · GitHub
 https://github.com/Faultless/textlog_flutter/releasesSkip to content
Faultless
/textlog_flutterPublic Releases · Faultless/textlog_flutter Release list Jump to release -
v0.7.2 — what F-Droid review asked for
-
v0.7.1 — buildable by F-Droid
-
v0.7.0 — read by reading, and caught up with the server
-
v0.6.0 — opens as itself, and yours to arrange
-
v0.5.0 — clips that play, and dots that clear themselves
-
v0.4.0 — quizzes, three new markers, and a retry that reads as one
-
v0.3.1 — links that stay in the app, and taps that land
-
v0.3.0 — polls, previews, checklists and drafts
-
v0.2.1 — the reply link works, and threads stop hiding themselves
-
v0.2.0 — notifications, and a feed that stops repeating itself
v0.7.2 — what F-Droid review asked forPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
31 Aug 08:58
v0.7.2
69d0925
Two changes asked for by F-Droid review, and nothing else. If you are running v0.7.1 there is
nothing here for you. Per-ABI version codes on F-Droid's scheme. Flutter offsets a split build's code by
1000 for armeabi-v7a and 2000 for arm64-v8a. F-Droid asks for code * 10 + n, so
pubspec's +25 becomes 251 and 252 — adjacent and ordered, and the scheme
their other Flutter apps use. No dependency metadata in the signature. The Android Gradle Plugin writes a signed
blob listing the app's dependencies into the APK signing block for the Play Store to
read. F-Droid's scanner rejects an APK carrying a signing block it cannot account for,
which is the right call, and nothing here wanted Google reading a dependency list
either way. Their scanner now reports zero problems on both APKs. The reading changes people actually notice are in v0.7.0. The two per-ABI APKs are built inside F-Droid's own buildserver image at the path
their rebuild uses, by
fdroid/build-release.sh,
so F-Droid can publish these rather than rebuilding and signing with a key of its own —
which is what lets an install from here update in place from F-Droid later. Signing
certificate, unchanged since v0.1.0:
c9a6e70cea72c16c2f146789eb2a7919cecfb36baad3666972fd001423cfe6d6. Which file textlog-0.7.2-arm64-v8a.apk (21MB) — almost certainly this one.textlog-0.7.2-armeabi-v7a.apk (19MB) — older 32-bit devices.textlog-0.7.2.apk (57MB) — every architecture in one file.textlog-0.7.2-macos.dmg (23MB) — the desktop build, ad-hoc signed.
512 tests pass. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.7.1 — buildable by F-DroidPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
31 Aug 00:57
v0.7.1
a7410c3
A build fix, and nothing anyone can see. Everything in v0.7.0 still
stands; if you are already running it there is no reason to hurry. Why it exists F-Droid builds apps from source, and before it builds it strips signing configuration
out of build.gradle.kts with a line-based rule: ^[\t ]*signingConfig\s*[= ]\s*[^ ]*$
This app wrote that assignment across two lines. The rule matched the first, deleted
it, and left the ?: continuation stranded — so F-Droid's build of textlog could not
compile the file at all. It is one line now. The rule no longer matches it, the line
survives, and once the signingConfigs block above it has been removed the fallback
to the debug key happens by itself, which is exactly what an unsigned build should do. Found by running fdroid build against the recipe for the first time rather than by
reading the documentation — along with two invalid metadata categories, an
AntiFeatures field that changed shape in fdroidserver 2.x, and rm: globs pointing
at linux/ and windows/ directories this repo has never had. The APKs here are built differently The two per-ABI APKs were built inside F-Droid's own buildserver image, at the same
absolute path their rebuild uses, by
fdroid/build-release.sh.
That is what makes a reproducible build possible: F-Droid rebuilds from source,
compares against these, and — if they match — publishes these, signed with the same
key. An install from here can then be updated from F-Droid in place, rather than
having to be uninstalled first. Same signing certificate as every release since v0.1.0:
c9a6e70cea72c16c2f146789eb2a7919cecfb36baad3666972fd001423cfe6d6. Which file textlog-0.7.1-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
phone sold in the last several years is arm64.textlog-0.7.1-armeabi-v7a.apk (19MB) — older 32-bit devices.textlog-0.7.1.apk (57MB) — every architecture in one file. Only worth it if you
do not know what the target is.textlog-0.7.1-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
512 tests pass. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.7.0 — read by reading, and caught up with the serverPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
30 Aug 09:25
v0.7.0
2cfad9d
Reading a post is what marks it read Marking by scrolling shipped in v0.5.0 and the rule was too strict to do its job.
Three separate things left dots on screen that the reader had already earned the right
to be rid of, and all three are gone: - A post had to be fully on screen. The post filling your screen was never fully
on it. Neither was the one you had plainly started reading at the bottom edge. So
the posts you actually read were the ones that stayed unread — and a post taller
than the screen could never be marked at all. Now a slice showing is enough. The
only thing still excluded is the hairline of the next post always poking in at the
edge, which is the thing you are scrolling towards. - Nothing was marked until the scroll stopped. Now every scroll marks what has
come into view, and the ids are batched behind it — a fling through forty posts is
still one request, and the last few of a session go out when you leave the tab
rather than coming back next launch. - A reply grouped under a post was never marked at all. A feed page joins replies
to parents on the same page, and only the top of each block was measured, so the
replies inside it stayed unread forever. Passing a block now passes everything in
it.
A backlog you can actually finish all is everything anyone wrote, so a day away is hundreds of unread posts — and
"scroll past them to clear them" at that size is a joke, which is why everyone pressed
"mark all as read" instead. That button was supposed to be the fallback, not the way
out.
A fresh start now offers a catch-up set of a dozen posts: the newest ones, marked
unread, everything behind them shown as read. Read those twelve and the app marks
the whole feed read on the server, including pages it never loaded. Caught up is
caught up; you should not have to say so afterwards. The button is still there. Caught up with upstream The server has moved a long way since v0.6.0. Five of those changes are here: - Bookmarks. Keep a post from its menu, and
bookmarks in the account sheet lists
what you kept — server side, so it is the same collection as the website's. #exec. textlog runs the code fence once when the post is written and stores
what it printed. The output is drawn under the post, clipped to the same ten lines
and two hundred characters a line the site clips it to. Nothing executes on your
phone.#map. The server geocodes the place and renders the map tile itself, so the
card is a picture from textlog and a link to whichever maps app it picked. Your own
location is never involved.#pin. A profile's pinned note and pinned reply are drawn above the list under
a pinned label, rather than sitting somewhere in date order.- Coloured code fences for
js and python, in the same four colours the site
gives them. A hundred-line scanner rather than a highlighting library: it cannot
fail on code it does not understand, and the worst it does is leave a run plain.
The site's new names came with it: to me is @, for you is my feed,
latest is all, and @ goes first as it does on the web. Links to the old URLs
still open in the app. The API paths deliberately did not change — /feeds/latest and
/activities/for-you are documented aliases of the new spellings, so the old names
work against every server this app might meet. Still upstream-only: the conversations feeds — the app has grouped a page into
threads by itself since v0.2.0 — and moderation flags. Which file textlog-0.7.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
phone sold in the last several years is arm64.textlog-0.7.0-armeabi-v7a.apk (19MB) — older 32-bit devices.textlog-0.7.0.apk (57MB) — every architecture in one file. Only worth it if you
do not know what the target is.textlog-0.7.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
Android will ask once for permission to install apps from your browser or files app —
that is expected for anything not from the Play Store. Play Protect may also offer to
scan it; that prompt keys off the APK itself and there is no way for a developer
outside the Play Store to avoid it. 512 tests pass. The signed release build here was run against textlog.cc. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.6.0 — opens as itself, and yours to arrangePre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
27 Aug 14:12
v0.6.0
cfa0580
The app opens as itself A cold start used to render a signed-out app — sign in in the header, no account
tabs, an empty feed with a spinner — and then rearrange itself once a local read and a
network round trip had finished. Two separate causes, both fixed. Storage is opened before the first frame, so what the device already knows is there
immediately. The confirmation runs behind you, filling in the rest of the account, and
only a rejected token signs you out — being offline is not evidence that anyone did. And the last page of hot and latest is kept on the device, so there are posts on
screen straight away rather than a spinner over a feed you were shown yesterday. The
network replaces them when it lands. Yours to arrange - Tabs reorder and hide, and stay that way. A tab added by a later version still
appears, and hiding everything leaves one standing — a tab row with nothing in it is
an app with no way back to the setting that broke it. - Timestamps and reply counts each turn off. With both off the meta line
collapses rather than leaving an empty tap target. - Follow notices can be kept out of your
for you feed, if reading about who
followed whom is not what you came for. - Swipe a post leftwards to reply. Leftwards on purpose: a rightward drag from the
edge is the system back gesture, and competing with that would break something you
rely on to win something you did not know existed. A wide code block still scrolls
sideways inside the post.
Everything above persists, everything defaults to how the app shipped, and none of it
changes what the server sends. Read a post in English textlog detects the language and translates once per post, storing nothing when the
body is already English. So the translation is the server's: the app does not detect
anything and does not send anybody's post to a third-party translator. It only decides
whether to offer the swap — and it does not offer one when the translation says the
same thing as the body, which happens. Caught up with upstream A post can be moved back to drafts, now that there is an API route for it rather
than only a form on the website. Not the same as deleting: the words go to your drafts
list. The latest feed is read as you. That brings unread marks that clear as you scroll
past them, and a mark-all — but the part worth saying is what it fixed. Feed reads were
going out anonymously, which meant no viewer, which meant the accounts and hashtags you
had blocked still came back in your own feeds. They do not any more. Still upstream-only: moderation flags and a direct reply count, both on the website's
own post shape rather than the API's. Which file textlog-0.6.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
phone sold in the last several years is arm64.textlog-0.6.0-armeabi-v7a.apk (19MB) — older 32-bit devices.textlog-0.6.0.apk (57MB) — every architecture in one file. Only worth it if you
do not know what the target is.textlog-0.6.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
Android will ask once for permission to install apps from your browser or files app —
that is expected for anything not from the Play Store. Play Protect may also offer to
scan it; that prompt keys off the APK itself and there is no way for a developer
outside the Play Store to avoid it. 465 tests pass. Verified on an Android emulator with the signed release build attached
here. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.5.0 — clips that play, and dots that clear themselvesPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
24 Aug 16:47
v0.5.0
b94d5d4
Two things that were reported as broken or missing, and the groundwork for F-Droid. Voice clips play in the app They opened Vocaroo before. That was a deliberate call and the wrong one: the site plays
a clip inline, and so does this now — streamed through textlog's own
/media/vocaroo/{id}, which is a plain ranged mp3. Going through the proxy is the point,
the same reason link previews are fetched server side: listening tells Vocaroo nothing. One line, one control: play or pause, the elapsed time, and a bar that fills. One player
for the whole app, so two clips can never play over each other, and it is created only
when a clip is first pressed — a feed full of them costs nothing until you press one. The bug behind the first attempt is worth naming, because it looked like something else
entirely. The link identifies the clip on the page; the proxy is where the bytes are.
Handing the link to the player asks it to decode Vocaroo's web page, and the failure
surfaces as "none of the available extractors could read the stream" — which reads as an
unplayable clip rather than the mix-up it was. A test now pins the two apart. Activity marks itself read as you scroll past it Only a tap counted before. So you could read a whole tab and leave every dot exactly
where it was, and the only way to clear them was pressing "mark all as read" — a chore
you had already done by reading. A row counts once it has been fully on screen. Fully matters: half a row at the
bottom edge is the thing you were scrolling towards, not the thing you just read, and
marking it would quietly lose it. A row taller than the screen never counts at all, so a
wall of text is not declared read for having passed by. The sweep runs when scrolling
stops rather than per frame, because flinging through a feed is not reading it. Packaged for F-Droid Store metadata and screenshots under fastlane/, a pinned Flutter floor, and the build
recipe under fdroid/. Not submitted yet: the recipe still has to be validated by an
fdroid build, and there is one decision that cannot be taken back — F-Droid signs with
its own key by default, which means anyone already running the APK from here would have
to uninstall, losing their settings, to move across. fdroid/README.md lays out both
paths. The pleasant surprise: nothing to strip. The usual blocker for a Flutter app on F-Droid
is a plugin dragging Google Play Services in through its Android side, and there is none
here — notifications are a background poll rather than Firebase, and the new audio
player uses AndroidX media3. Verified on the shipped APK: zero Play Services or Firebase
classes. Which file textlog-0.5.0-arm64-v8a.apk (21MB) — almost certainly this one. Every Android
phone sold in the last several years is arm64.textlog-0.5.0-armeabi-v7a.apk (19MB) — older 32-bit devices.textlog-0.5.0.apk (57MB) — every architecture in one file. Only worth it if you
do not know what the target is.textlog-0.5.0-macos.dmg (23MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
Android will ask once for permission to install apps from your browser or files app —
that is expected for anything not from the Play Store. Play Protect may also offer to
scan it; that prompt keys off the APK itself and there is no way for a developer outside
the Play Store to avoid it. 425 tests pass. Verified on an Android emulator with the signed release build attached
here, including a clip played end to end. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.4.0 — quizzes, three new markers, and a retry that reads as onePre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
24 Aug 15:12
v0.4.0
845da70
Catching up with what textlog added upstream, plus one fix that was overdue. A quiz took down the page it was on Quizzes landed upstream as polls with a right answer — and a quiz has no deadline, so
expires_at comes back null where this app read a required string. Every feed page, search
result and thread carrying a quiz failed to decode whole: not a missing card, a blank
page. Quizzes work properly now. #quiz, the answer marked >, an optional explanation after a
blank line. The right answer and the explanation stay hidden until you commit to one — the
same rule the tally follows — and the verdict is a tick or a cross as well as a colour,
because green-versus-red says nothing to a reader who cannot tell those apart. No
countdown, since there is nothing to close. The meta line says created a quiz rather than
calling it a poll. Three new body markers /italics/ — the site had already spent * on bold and _ on underline.|redacted| — a bar you press to reveal, drawn ink-on-ink so revealing it does not
reflow the paragraph.> quoted lines — deliberately not behind the markdown setting, because the site
quotes unconditionally. Consecutive lines group into one quote, > > x nests, and both
fenced code and ASCII art are left alone: the first so a quiz-syntax example stays
literal, the second because a drawing's first column is often >.
Locked threads A #lock closes the thread under it, and the server answers a reply with 409 thread_locked. The app now says thread locked where the reply link would be — worked out
from the post's own tags and the parent the API inlines, and carried down a thread from its
subject. The server still has the last word; knowing early just saves writing a reply that
was never going to be accepted. Voice clips Vocaroo sends no preview metadata at all, so a clip and a blog post looked identical. One
is now named as a voice clip. Tapping it opens Vocaroo, which has a player — an audio
engine in here would bring a lock-screen entry, a focus policy and an interruption story
with it, which is not what a voice clip in a text feed is asking for. Retry did nothing you could see Riverpod keeps the previous error while a provider rebuilds, so the error branch drew the
same words and the same button with no spinner. Tapping retry was indistinguishable from
tapping nothing — which is why the only refresh that felt real was pulling down, where the
indicator has a spinner of its own. It says retrying… now and stops accepting taps until the request settles. That meant
every call site had to return a future that completes when the refetch does, rather than a
bare invalidate that returns before there is anything to wait for. The profile screen,
which stated the problem and offered nothing, has a retry too. Upstream also raised the read limit to 600 a minute when signed in, counted per account
rather than per IP. Nothing here encodes the number — it reacts to a 429 — but it is why
paging a long thread signed in no longer meets the gate. Left alone on purpose: playing a voice clip; the #pin badge, since the API returns
pinned posts in the right order but does not expose the flag; and unpublishing a post back
into a draft, which is a website form with no API route behind it. 411 tests pass. Verified on an Android emulator with the signed release build attached
here — including the quiz, all three new markers against live posts, and the retry with the
network actually cut. Which file textlog-0.4.0-arm64-v8a.apk (20MB) — almost certainly this one. Every Android phone
sold in the last several years is arm64.textlog-0.4.0-armeabi-v7a.apk (18MB) — older 32-bit devices.textlog-0.4.0.apk (57MB) — every architecture in one file. Only worth it if you do
not know what the target is.textlog-0.4.0-macos.dmg (22MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
Android will ask once for permission to install apps from your browser or files app — that
is expected for anything not from the Play Store. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.3.1 — links that stay in the app, and taps that landPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
23 Aug 15:21
v0.3.1
827d006
Three fixes, all reported from a phone rather than found in a test. A checklist could not be ticked. The card underneath every item opens the post it is
about, so on the post's own page a tick pushed another copy of the page already showing —
and a second tick another. There were two faults, so there are two fixes: nothing
navigates to the route it is already on, and a checkbox or a poll option absorbs its own
tap even when it cannot act on it, instead of leaving the card to catch it. The post a page
is about is no longer offered as tappable at all. A link back to textlog left the app./post/2201 written in a post used to open a
browser onto a page this app already has a screen for. Posts, profiles, hashtags and their
followers, every feed, search with its query, drafts and /enter now open in place.
Anything else still goes to the browser — another site, a lookalike host, /account/…
which deliberately has no screen here. A fenced code block blanked the page it was on. The tinted box asked for the whole of
an unbounded width inside its own sideways scroll view; it threw during layout and the
thread came up empty — post, replies and reply form with it. Every post upstream with a
code fence in it was an empty page. A short fence still fills the column and a long one
still scrolls. Also: the compose limit in the docs still said 280 where the app has allowed 500 for a
while. 367 tests pass. Verified on an Android emulator with the signed release build attached
here. Which file textlog-0.3.1-arm64-v8a.apk (20MB) — almost certainly this one. Every Android phone
sold in the last several years is arm64.textlog-0.3.1-armeabi-v7a.apk (18MB) — older 32-bit devices.textlog-0.3.1.apk (57MB) — every architecture in one file. Only worth it if you do
not know what the target is.textlog-0.3.1-macos.dmg (22MB) — the desktop build. Ad-hoc signed, so Gatekeeper
will ask you to allow it explicitly the first time.
Android will ask once for permission to install apps from your browser or files app — that
is expected for anything not from the Play Store. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.3.0 — polls, previews, checklists and draftsPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
23 Aug 14:37
v0.3.0
a3a9412
textlog put four things on the API at once, and every one of them was on this app's
"waiting on the server" list. They are all in. Polls you can vote in The options, the tally and whether you voted now come from the server instead of being
guessed at from the post body, and there is an endpoint to vote through — so a tap casts
a real vote rather than opening a browser. The tally is withheld by the server until the poll closes or you have voted, so a
running count cannot sway your choice. Voting shows the result immediately and corrects
itself against the server's answer. Link previews A thumbnail beside the title and description, or a compact text-only line when there is
no image. The images are textlog's own — it fetches and stores them itself — so showing
one reveals nothing to the linked site. That is exactly why this waited for the API
rather than being unfurled client side. Two things worth knowing: - The card is a thumbnail, not a banner. One preview on textlog is 1191×1684, which
at its own aspect is 475 pixels of a phone screen — it buried the post that linked it. - No thumbnails on the web build. textlog serves preview images from a host that sends
no CORS header at all, and Flutter's web renderer cannot draw an image it is not allowed
to fetch. Web gets the compact form, which is the honest rendering there.
#todo checklists
A #todo line and [ ] / [x] items, rendered as a list with a count of what is done. There is deliberately no endpoint for ticking one off, and that is not a gap: a checklist is the post body, so a tick is an edit — which means only its author can tick their own
list. The same rule the site has. Drafts, kept on the server save draft in the compose box, and a drafts screen behind your handle. Server-side, so a
draft started on the website is here and one started here is there. Posting a draft
publishes it rather than leaving a copy beside the post it became.
Explore, and hashtags you can follow A screen of people and hashtags worth following, and follow / block on any hashtag
page. Smaller, but wrong before - The character limit is 500, up from 280.
- The bio limit was wrong the other way: the app allowed 280 where the server caps at
160, so it accepted bios the server then refused. *x* is bold and _x_ is underline, rendered unconditionally. The app had them as
italics and behind the markdown setting — wrong on both counts, which meant showing
the reader something the author had not written.bot is a report reason.
Faster, and two crashes that only a phone would show - A body is parsed once now. Rendering one asks a dozen questions of the same string,
and build runs on every frame a tile scrolls through — about 300µs per body per build,
which on a debug build on a phone was enough to hang the app. It is a lookup now. - A link card could not lay out at all.
CrossAxisAlignment.stretch resolves against
the incoming maximum height, which inside a scrollable is unbounded — so it threw
"BoxConstraints forces an infinite height" and took the whole list with it. It only
happened on the branch with a thumbnail, which the web build never takes. - Notifications now take their baseline when you switch them on, instead of waiting up
to fifteen minutes and then announcing a backlog of things you had already read on the
website.
Still waiting on the server Instant notifications. They need an endpoint under /api/v1/ that takes an FCM or APNs
device token; textlog's push is Web Push under /account/, cookie-authenticated and
expecting a browser endpoint, which an app cannot use. Until then the app polls, and
Android will not run periodic work more often than every fifteen minutes — batching it
further while the phone is idle. The setting says so rather than implying a schedule
Android does not keep. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.2.1 — the reply link works, and threads stop hiding themselvesPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
23 Aug 02:25
v0.2.1
a555a39
Two reported problems, and a third found while reproducing the first. "+N more replies" did nothing Reproduced, and it was worse than it looked: the tap fired a request every time and
could never change anything. reply_count is a post's whole descendant count, not the number of direct replies.
Three things were treating it as the latter:
- The count was wrong.
+7 more replies on a node whose entire visible branch was
already on screen. It now counts descendants against everything drawn beneath the
node, so the number means what it says. - The link did the wrong thing. It always tried to load in place — including past
the nesting cap, where there is nowhere to draw a reply. So it spent a request and
left the tree exactly as it was, which is the "does nothing" that was reported. It
now opens the post, where those replies can actually be read, and only loads in place
when that will genuinely add something. Fewer requests, not more. - Cached replies were being thrown away. The same comparison drove change
detection, so nearly every node with a grandchild looked out of date and had its
replies discarded on every feed fetch — then refetched. It now compares against the
count seen when those replies were cached, and stays quiet when it never saw one.
That third one was quietly working against the caching the whole feature depends on. A thread with replies could render as empty Found while writing the reproduction. /replies returns the newest hundred of a
subtree, which is not the top hundred: a busy branch deep in a thread fills the page and
leaves its own ancestors off it, and those posts cannot be placed by parent_id alone.
Every one was dropped, so a thread with a hundred and twenty replies showed "No replies
yet." The server inlines each post's parent, so the missing level is rebuilt from data already
in the response — no extra request. Only when more than one level is missing does it
spend a single request on the root's direct children, which guarantees a thread with
replies is never blank. The reply header no longer wraps The row carrying the handle, the relation and the fold control is the header of an
accordion. When it reflowed, the -/+ control dropped onto a second line and the whole
thing read as broken. It stays on one line now. The stamp and the control keep their room; a handle too long to
fit is abbreviated with an ellipsis rather than wrapping. The quoted parent's line does
the same, so its top link stays put too. Feed tiles still wrap: nothing on those lines has to stay in place, so showing the whole
handle beats abbreviating it. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions v0.2.0 — notifications, and a feed that stops repeating itselfPre-release Pre-release Compare
Choose a tag to compare
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. No results found View all tags [@Faultless]Faultless
released this
23 Aug 01:53
v0.2.0
5b4e351
Two things: notifications, and a feed that stops repeating the same conversation at you. Upstream moved 54 commits since v0.1.1. Almost none of it touched the API — the only new
endpoint behaviour is bot as a report reason, which is in. Link previews and drafts both
shipped on the site and neither is on the API's post shape, so neither is implementable
here yet; there is a table at the bottom of what would need to change. Notifications for replies, mentions and follows Off by default. Turning it on is the only thing that asks for permission or schedules any
background work. - Reply straight from the notification. A text field in the shade, and the reply posts
without opening the app. - Mark read from the notification, which marks it read on the server too, so the web
and the app agree. - Tapping one opens the post it is about.
- They group into one stack rather than filling the shade, the body is shown in full
rather than one clipped line, and each kind can be turned off on its own.
How they arrive, honestly. textlog does have push, but it is Web Push: the subscription
routes are under /account/, authenticate with a session cookie rather than a bearer
token, and expect a browser push endpoint. None of that is reachable from an app. So this
polls /activities/to-me in the background — which is exactly replies, mentions and
follows of you — and raises the notifications itself. The cost is latency. Android will not run periodic work more often than every fifteen
minutes, and iOS decides for itself when a background refresh is worth the battery. The
setting says so rather than implying instant delivery. Instant would need an endpoint that
takes an FCM or APNs device token. Verified on an Android emulator end to end: the notification and its group summary
appear, Reply posts to /api/v1/posts with the right parent, Mark read posts to
/activities/to-me/read, and the periodic job registers with a network constraint. iOS is written but unverified — no iOS SDK on the machine this was built on. A feed that does not repeat itself The site now joins a reply to its parent when both are on the same feed page, instead of
rendering the reply on its own with the parent quoted underneath it. That is the change
somebody asked for on textlog itself — "conversations split into repeated blocks" — and it
is worth more on a phone, where the duplication cost the most scrolling. On a live page of twenty posts, six nest and six duplicated quotes disappear. It needs
nothing the feed did not already return. A node whose replies are not all on the page offers read more into the thread. Also bot is a report reason now, and the report sheet scrolls rather than clipping the
fifth one — which it had started doing.
What is still waiting on the server | Wanted | Needs |
|---|
| Instant notifications | an /api/v1/ endpoint taking an FCM or APNs device token | | Link previews | link_previews on the API's post shape | | Drafts | /api/v1/drafts | | Voting in a poll | a poll endpoint; the site votes by form POST |
Each is the same shape of gap the write endpoints were before stagas/textlog#3, and the same answer applies:
ask for the endpoint rather than scrape the HTML. Assets6 Loading Uh oh!
There was an error while loading. Please reload this page. All reactions You can’t perform that action at this time.
|