diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java index 71a1adea2..2689deea3 100644 --- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java @@ -843,7 +843,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana } if (mediaCount > 0) { Data inputData = new Data.Builder() - .putString(Helper.ARG_STATUS_DRAFT, ComposeWorker.serialize(statusDraft)) + .putString(Helper.ARG_STATUS_DRAFT_ID, String.valueOf(statusDraft.id)) .putString(Helper.ARG_INSTANCE, instance) .putString(Helper.ARG_TOKEN, token) .putString(Helper.ARG_USER_ID, account.user_id) diff --git a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java index 09d6da1c7..33025b401 100644 --- a/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java +++ b/app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java @@ -66,15 +66,15 @@ public interface MastodonTimelinesService { Call> getHashTag( @Header("Authorization") String token, @Path("hashtag") String hashtag, - @Query("local") boolean local, - @Query("only_media") boolean only_media, + @Query("local") Boolean local, + @Query("only_media") Boolean only_media, @Query("all[]") List all, @Query("any[]") List any, @Query("none[]") List none, @Query("max_id") String max_id, @Query("since_id") String since_id, @Query("min_id") String min_id, - @Query("limit") int limit + @Query("limit") Integer limit ); //Home timeline @@ -84,8 +84,8 @@ public interface MastodonTimelinesService { @Query("max_id") String max_id, @Query("since_id") String since_id, @Query("min_id") String min_id, - @Query("limit") int limit, - @Query("local") boolean local + @Query("limit") Integer limit, + @Query("local") Boolean local ); //List timeline @@ -96,7 +96,7 @@ public interface MastodonTimelinesService { @Query("max_id") String max_id, @Query("since_id") String since_id, @Query("min_id") String min_id, - @Query("limit") int limit + @Query("limit") Integer limit ); //get conversations diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java b/app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java index 4f83bf3c7..134717a09 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java +++ b/app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java @@ -441,14 +441,13 @@ public class StatusCache { } /** - * @param slug String - slug for the timeline (it's a unique string value for a timeline) * @param instance String - instance * @param user_id String - us * @param search String search * @return - List * @throws DBException exception */ - public List searchStatus(String slug, String instance, String user_id, String search) throws DBException { + public List searchStatus(String instance, String user_id, String search) throws DBException { if (db == null) { throw new DBException("db is null. Wrong initialization."); } diff --git a/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java index 3236d83ae..1c86b72c4 100644 --- a/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java +++ b/app/src/main/java/app/fedilab/android/jobs/ComposeWorker.java @@ -363,7 +363,15 @@ public class ComposeWorker extends Worker { @Override public Result doWork() { Data inputData = getInputData(); - StatusDraft statusDraft = restore(inputData.getString(Helper.ARG_STATUS_DRAFT)); + String statusDraftId = inputData.getString(Helper.ARG_STATUS_DRAFT_ID); + StatusDraft statusDraft = null; + if (statusDraftId != null) { + try { + statusDraft = new StatusDraft(getApplicationContext()).geStatusDraft(statusDraftId); + } catch (DBException e) { + e.printStackTrace(); + } + } String token = inputData.getString(Helper.ARG_TOKEN); String instance = inputData.getString(Helper.ARG_INSTANCE); String userId = inputData.getString(Helper.ARG_USER_ID); diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java index f94d0373b..69f8838bd 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java @@ -581,7 +581,8 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } /** - * Router for timelines + * Router for common timelines that can have the same treatments + * - HOME / LOCAL / PUBLIC / LIST / TAG * * @param direction - DIRECTION null if first call, then is set to TOP or BOTTOM depending of scroll */ @@ -619,6 +620,58 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. timelineParams.hashtagTrim = tagTimeline.name; break; } + SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); + boolean useCache = sharedpreferences.getBoolean(getString(R.string.SET_USE_CACHE), true); + if (useCache) { + getCachedStatus(direction, fetchingMissing, timelineParams); + } else { + getLiveStatus(direction, fetchingMissing, timelineParams); + } + + } + + private void getCachedStatus(DIRECTION direction, boolean fetchingMissing, TimelinesVM.TimelineParams timelineParams) { + if (direction == null) { + timelinesVM.getTimelineCache(timelineParams) + .observe(getViewLifecycleOwner(), statusesCached -> { + if (statusesCached == null || statusesCached.statuses == null || statusesCached.statuses.size() == 0) { + getLiveStatus(null, fetchingMissing, timelineParams); + } else { + initializeStatusesCommonView(statusesCached); + } + }); + } else if (direction == DIRECTION.BOTTOM) { + timelinesVM.getTimelineCache(timelineParams) + .observe(getViewLifecycleOwner(), statusesCachedBottom -> { + if (statusesCachedBottom == null || statusesCachedBottom.statuses == null || statusesCachedBottom.statuses.size() == 0) { + getLiveStatus(DIRECTION.BOTTOM, fetchingMissing, timelineParams); + } else { + dealWithPagination(statusesCachedBottom, DIRECTION.BOTTOM, fetchingMissing); + } + }); + } else if (direction == DIRECTION.TOP) { + timelinesVM.getTimelineCache(timelineParams) + .observe(getViewLifecycleOwner(), statusesCachedTop -> { + if (statusesCachedTop == null || statusesCachedTop.statuses == null || statusesCachedTop.statuses.size() == 0) { + getLiveStatus(DIRECTION.TOP, fetchingMissing, timelineParams); + } else { + dealWithPagination(statusesCachedTop, DIRECTION.TOP, fetchingMissing); + } + + }); + } else if (direction == DIRECTION.REFRESH || direction == DIRECTION.SCROLL_TOP) { + timelinesVM.getTimelineCache(timelineParams) + .observe(getViewLifecycleOwner(), statusesRefresh -> { + if (statusAdapter != null) { + dealWithPagination(statusesRefresh, direction, true); + } else { + initializeStatusesCommonView(statusesRefresh); + } + }); + } + } + + private void getLiveStatus(DIRECTION direction, boolean fetchingMissing, TimelinesVM.TimelineParams timelineParams) { if (direction == null) { timelinesVM.getTimeline(timelineParams) .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/SearchVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/SearchVM.java index bbc928aa9..9025d5c52 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/SearchVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/SearchVM.java @@ -138,7 +138,7 @@ public class SearchVM extends AndroidViewModel { Results results = new Results(); try { results.statuses = new ArrayList<>(); - List statuses = new StatusCache(getApplication()).searchStatus(StatusCache.CacheEnum.HOME, instance, userId, q); + List statuses = new StatusCache(getApplication()).searchStatus(instance, userId, q); results.statuses.addAll(statuses); } catch (DBException e) { e.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java index a7ca3a7f6..65cd91fc4 100644 --- a/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java +++ b/app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java @@ -466,12 +466,14 @@ public class TimelinesVM extends AndroidViewModel { public int limit = 40; public Boolean local; - public TimelineParams(@NonNull Timeline.TimeLineEnum type, @Nullable FragmentMastodonTimeline.DIRECTION direction, @Nullable String ident) { + public TimelineParams(@NonNull Timeline.TimeLineEnum timeLineEnum, @Nullable FragmentMastodonTimeline.DIRECTION timelineDirection, @Nullable String ident) { if (type != Timeline.TimeLineEnum.REMOTE) { instance = MainActivity.currentInstance; token = MainActivity.currentToken; userId = MainActivity.currentUserID; } + type = timeLineEnum; + direction = timelineDirection; String key = type.getValue(); if (ident != null) { key += "|" + ident; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a959c9c39..0233c26d5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -932,6 +932,7 @@ SET_NITTER SET_NITTER_HOST nitter.net + SET_USE_CACHE SET_BIBLIOGRAM SET_BIBLIOGRAM_HOST