Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timeline improvements #2788

Closed
connyduck opened this issue Nov 8, 2022 · 26 comments
Closed

Timeline improvements #2788

connyduck opened this issue Nov 8, 2022 · 26 comments
Assignees

Comments

@connyduck
Copy link
Collaborator

This issue is for collecting the various wishes users have about timelines. This way we can think about them together. Patching single issues will lead us nowhere.

  • For some users the current timeline behavior works
  • Some users would like to read the timeline from oldest to newest without "load more" breaks
  • Some users would like to read from newest to oldest without "load more" breaks
  • Some users would like to decide if "load more" loads newer or older posts first (Fedilab has this feature afaik)
  • Some users would like to customize how many posts are loaded per page.

Anything else?

A solution should ideally address all these needs without adding more than one additional setting.

@yoshimo
Copy link

yoshimo commented Nov 8, 2022

Make it two options :

  • radio button for the sort order, newest or oldest first
  • slider how many messages are loaded per refresh with a sane default. Between say 50,100,200,infinite. Infinite being a gapless automatic refresh. If it is a finite number have a load more button shown.

Depending on the sort order tusky could fill the gap in the same way. If you want newest on top, fill the gap backwards. If you want oldest on top have it get the next in line and work your way up to the newest toots.

No matter how many toots you load on refresh, keep the old position and last read toot focussed.

@l17r
Copy link

l17r commented Nov 9, 2022

My desired user experience is:

  • I read all toots on my timeline or a selected list, at irregular intervals. Ideally, there's an unread counter that shows how much I am catching up to, maybe that could be hidden in the wellness options and warned against if other people strongly dislike it? For me, it would be very helpful.
  • Either way, ideally, the app would “anchor” my position in the timeline/list at the last point I had read to and would silently load new toots on top of it, without jumping around while doing that.
  • The anchor point should (ideally) be saved even between app restarts/Android reboots.

EDIT: So, I think pretty much exactly what yoshimo wrote :) (plus »n unread toots« ;)).

@johseg
Copy link

johseg commented Nov 9, 2022

+1 for @Vilinthril

@iGEL
Copy link
Contributor

iGEL commented Nov 9, 2022

If you add a counter of unread toots, it could jump to the newest toot if you tab it.

@Ganneff
Copy link

Ganneff commented Nov 13, 2022

This issue is for collecting the various wishes users have about timelines. This way we can think about them together. Patching single issues will lead us nowhere.

I would like to add one wish, if I may:
When I click on "load more", I do want them to get loaded in a way, that does NOT change my relative position.
Currently, when i scroll up to read newer things, and a load more button appears, clicking it means they are added below my current position (into the area I already read), so I have to scroll back down, hopefully remembering the last toot i read, then continue reading there. That is less than useful IMO. It is double worse, as I then have some unread below and above my current place..

@l17r
Copy link

l17r commented Nov 13, 2022

I would like to add one wish, if I may: When I click on "load more", I do want them to get loaded in a way, that does NOT change my relative position.

Yes, precisely! That was (part of) what I meant by “Either way, ideally, the app would “anchor” my position in the timeline/list at the last point I had read to and would silently load new toots on top of it, without jumping around while doing that.”, but thank you for clarifying if I had not made my point adequately. :)

@nikclayton
Copy link
Contributor

  • Some users would like to read the timeline from oldest to newest without "load more" breaks

Related to that; without needing to tap "show more" of a long post either.

@jankatins
Copy link

Fun workaround if you read from bottom to top: move the "load more" button to the top, press it and immediately scroll down so that the load indicator is not visible anymore because it's hidden at the top -> tusky will add the items above it but keep the current position -> scroll back up the few lines to the next "load more" button and repeat until no more "load more" button...

@politas
Copy link

politas commented Nov 22, 2022

Just including the reasoning for a forward chronological order from my issue that has been merged into this one. I'm not entirely happy with having all the different timeline issues merged into one mega-issue, as it makes it more likely that one request will be left out of a PR that closes this issue, and also makes the effort required to address this issue a big hurdle to jump over:

Corporate media has gotten us accustomed to algorithm-driven feeds where what's important is the latest trending things. We see the end of a conversation first, without the background, and tend to react, increasing drama and "engagement", rather than understanding and reasoned vision.

On the other hand, when reading a history book, we tend to start at the early points of a timeline and track the changing situation as it unfolds over time, so we have an understanding of how we got to where we are.

Some individual posts take up more than a screen, so to read the feed, we need to scroll up to the start of a post, then scroll down as we read it, then scroll all the way back up past it to get to the next post.

Please, can we have an option to put the timelines in forward chronological order, to enhance understanding, reduce unnecessary drama, and reduce annoying back and forth scrolling?

@nikclayton
Copy link
Contributor

A solution should ideally address all these needs without adding more than one additional setting.

Been thinking about that, I'm not sure it's possible. I've got it down to the following two preferences.

Note: I think these preferences can be implemented independently of one another.


New pref: Timeline order

Options are:

  • Chronological (scroll down to read)
  • Reverse chronological (scroll up to read)

The current behaviour is "Reverse chronological"

Note that SwipeRefreshLayout does not appear to support a "pull up to refresh" behaviour, so there will be some complexities introduced there.


New pref: "How to load statuses"

Options are:

  • Load oldest
  • Load newest
  • Load all
  • Background

The current behaviour is "Load newest" (newest posts are loaded). To get a complete timeline the user has to click "Load more" repeatedly, and can then start reading. This is the "since_id" option to api/v1/timelines/home (https://docs.joinmastodon.org/methods/timelines/).

"Load oldest" would load the oldest missing statuses first. To get a complete timeline the user would click "Load more", read the next N statuses, see a new "Load more" indicator, click that, and so on. I think, but have not tested, that this is the "min_id" option to api/v1/timelines/home.

"Load all" would repeatedly load statuses until there are no more to fetch. The order doesn't matter. If the user refreshes the timeline (i.e,. has reached the end, and drags down to load more items) then all items are loaded. So in normal use the user would never see a "Load all" button.

"Background" is like "Load all", but would also schedule a periodic work request (https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work#schedule_periodic_work) to fetch new statuses. The minimum time between work is 15 minutes. Each one would behave like "Load all".


Is it worth providing an option for the user to specify how many statuses to load? The current limit is 20, the API maximum value is 40. Maybe, maybe not? Once a "Load All" option is implemented a "Load N" variant is trivial. But it would require a third preference to allow the user to specify N. Is the additional UI complexity worth it?


There's the separate issue of "Load more" positioning the timeline at the chronologically newest post. Irrespective of the user options that are set above, I think that's a bug. If the user has a gap in their timeline and they are loading more posts to fill it, they obviously want to start reading at the oldest post just loaded, not the newest.

@nikclayton
Copy link
Contributor

If no one else is working on it, I'll take a look at the "load more" bug next week. It keeps being reported, and I think fixing it is orthogonal to the other timeline issues reported here.

@intrnl
Copy link

intrnl commented Nov 27, 2022

how viable is it to keep track of where the user has been scrolling from, as the load more button is being shown on screen? are they coming from newer statuses, or older statuses?

that could get rid of the need to have the option to set if load more button should load newer or older posts

@nikclayton
Copy link
Contributor

I need an issue to keep track of the "load more" bug and notes on solving it, so I'll use #2938 for that, instead of cluttering up this one.

@zagor
Copy link

zagor commented Dec 19, 2022

I've been griping a little about this on my timeline (https://mastodon.social/@bjst/109539421996041213) and I have some further thoughs:

As a golden rule, the last-read-toot should only change when you view your last-read toot and scroll to the next newer toot. Not when viewing the top of your timeline, not when switching accounts, not when loading more toots.

Think of the last-read-toot as a physical bookmark in a physical book. You are able to go back and forth in your book without moving your bookmark. It's the same with toots. The timeline is my book and I want to read it sequentially. Never assume I want to skip reading fourteen chapters of my book because I pressed a button somewhere without knowing the details of the implementation. Software should be safe to explore.

Also, the concept of my last-read-toot or my-bookmark-in-the-timeline could be much more explicit. Why not show me the date? Show me the number of unread toots. It is currently very implicit, unspoken and ethereal. It doesn't necessarily have to be.

@politas
Copy link

politas commented Dec 20, 2022

The only reason this is a problem at all is this absurd reverse timeline inherited from corporate social media. If the default behaviour was to add new posts below the current position, and just scroll down to read things in order, no one would be confused.

@KS-HTK
Copy link

KS-HTK commented Dec 20, 2022

The only reason this is a problem at all is this absurd reverse timeline inherited from corporate social media. If the default behaviour was to add new posts below the current position, and just scroll down to read things in order, no one would be confused.

I disagree here. Newest first is better for new (or not logged in) visitors as with any news/activity page you want to present the most current Posts first.
It is a bit annoying for active users who do not want to skip posts.
But that is the downside with any news page or blog.

For the App however it would be great to have the option for any not loaded posts to be loaded from oldest missed to newest. As this makes scrolling up in the Timeline easier as apposed to having to scroll down then press show more and repeat until all posts have been loaded.

Why not show me the date?

This is a option "Preferences -> Show absolute Time". Then you will get a timestamp for any Toot.
If the toot is from the past day it shows with date.

@Lakoja
Copy link
Collaborator

Lakoja commented Jan 1, 2023

Additionally / maybe another issue: Get rid of "Load more" altogether?

Continuous scrolling?

The only thing still needed would be a way to show "Loading more..." when the network reply is slow.

@nikclayton
Copy link
Contributor

Additionally / maybe another issue: Get rid of "Load more" altogether?

Continuous scrolling?

The only thing still needed would be a way to show "Loading more..." when the network reply is slow.

Yes, I have that covered in #2788 (comment)

@codedmind
Copy link

Can be added an option to show how many unread toots?

@Lakoja
Copy link
Collaborator

Lakoja commented Mar 3, 2023

Regarding timeline position:

There is a very old issue but with 70 upvotes: #89
(keep position also during refresh; and I guess this also extends to "opending the app again").

And there seems to even be the possibility for syncing read position across different apps?
#1542
(maybe one could sync notification "position"?)

@nikclayton
Copy link
Contributor

@Lakoja -- for reading position please take at the proposal doc in #3271 (readable view: https://github.com/tuskyapp/Tusky/pull/3271/files?short_path=00bf4a9#diff-00bf4a9daa91c4a8e02c65bc5ed3fc84f92cab3e32f35bd8a9f277c778f12543).

And just because I've written it up doesn't mean I have to be the one to implement it. If there's consensus that this is the approach we should take and you want to write the code, please do so.

@JasXSL
Copy link

JasXSL commented Mar 13, 2023

There is a very old issue but with 70 upvotes: #89 (keep position also during refresh; and I guess this also extends to "opending the app again").

Just a simple option in settings for "keep position when loading new posts" would make me happy.

@nikclayton
Copy link
Contributor

Just a simple option in settings for "keep position when loading new posts" would make me happy.

Use "Preferences > Reading order" and set it to "Oldest first".

@foss-
Copy link

foss- commented Apr 11, 2023

It is tiring having to continuously tap Load More… to show posts when reading from old to new. Fedilab introduced a feature to Automatically fetch missing messages which loads posts in the background when scrolling and omits the Load More… banner. This feature turns out to be tremendously useful for users who want to read all posts. Maybe Tusky can do something similar.
(was #3499 got closed, so copied here)

@nikclayton
Copy link
Contributor

It is tiring having to continuously tap Load More… to show posts when reading from old to new. Fedilab introduced a feature to Automatically fetch missing messages which loads posts in the background when scrolling and omits the Load More… banner. This feature turns out to be tremendously useful for users who want to read all posts. Maybe Tusky can do something similar. (was #3499 got closed, so copied here)

Working on that as part of #3436

@politas
Copy link

politas commented Apr 26, 2024

Completed? We have an option to have the timeline in the correct order, now? So that you read from the oldest posts down to the newer posts, rather than having it all backwards and constantly scrolling up, down, up, down, up, down?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests