mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-09 18:43:23 +02:00
Auto scroll up conversations
This commit is contained in:
@@ -151,6 +151,18 @@ public interface DaoMessage {
|
||||
", CASE WHEN folder.type = '" + EntityFolder.ARCHIVE + "' THEN 1 ELSE 0 END")
|
||||
DataSource.Factory<Integer, TupleMessageEx> pagedThread(long account, String thread, Long id, boolean debug);
|
||||
|
||||
@Query("SELECT account.name AS accountName" +
|
||||
", COUNT(message.id) AS count" +
|
||||
", SUM(message.ui_seen) AS seen" +
|
||||
" FROM message" +
|
||||
" JOIN account ON account.id = message.account" +
|
||||
" WHERE message.account = :account" +
|
||||
" AND message.thread = :thread" +
|
||||
" AND (:id IS NULL OR message.id = :id)" +
|
||||
" AND NOT message.ui_hide" +
|
||||
" GROUP BY account.id")
|
||||
LiveData<TupleThreadStats> liveThreadStats(long account, String thread, Long id);
|
||||
|
||||
@Query("SELECT message.id FROM folder" +
|
||||
" JOIN message ON message.folder = folder.id" +
|
||||
" WHERE CASE WHEN :folder IS NULL THEN folder.unified ELSE folder.id = :folder END" +
|
||||
|
||||
@@ -1772,10 +1772,22 @@ public class FragmentMessages extends FragmentBase {
|
||||
break;
|
||||
|
||||
case THREAD:
|
||||
db.account().liveAccount(account).observe(getViewLifecycleOwner(), new Observer<EntityAccount>() {
|
||||
db.message().liveThreadStats(account, thread, null).observe(getViewLifecycleOwner(), new Observer<TupleThreadStats>() {
|
||||
Integer lastUnseen = null;
|
||||
|
||||
@Override
|
||||
public void onChanged(EntityAccount account) {
|
||||
setSubtitle(getString(R.string.title_folder_thread, account == null ? "" : account.name));
|
||||
public void onChanged(TupleThreadStats stats) {
|
||||
setSubtitle(getString(R.string.title_folder_thread,
|
||||
stats == null || stats.accountName == null ? "" : stats.accountName));
|
||||
|
||||
if (stats != null && stats.count != null && stats.unseen != null) {
|
||||
int unseen = stats.count - stats.unseen;
|
||||
if (lastUnseen == null || lastUnseen != unseen) {
|
||||
if (autoscroll && lastUnseen != null && lastUnseen < unseen)
|
||||
loadMessages(true);
|
||||
lastUnseen = unseen;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
db.message().liveHidden(account, thread).observe(getViewLifecycleOwner(), new Observer<List<Long>>() {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package eu.faircode.email;
|
||||
|
||||
public class TupleThreadStats {
|
||||
String accountName;
|
||||
Integer count;
|
||||
Integer unseen;
|
||||
}
|
||||
Reference in New Issue
Block a user