Comment #477 - Display remote media timeline

This commit is contained in:
Thomas 2022-11-19 17:43:27 +01:00
parent 4263d6f842
commit 98c1a7e1b5
3 changed files with 51 additions and 9 deletions

View File

@ -30,15 +30,18 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import app.fedilab.android.BaseMainActivity; import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
import app.fedilab.android.client.entities.api.Account; import app.fedilab.android.client.entities.api.Account;
import app.fedilab.android.client.entities.api.Attachment; import app.fedilab.android.client.entities.api.Attachment;
import app.fedilab.android.client.entities.api.Status; import app.fedilab.android.client.entities.api.Status;
import app.fedilab.android.client.entities.api.Statuses; import app.fedilab.android.client.entities.api.Statuses;
import app.fedilab.android.databinding.FragmentPaginationBinding; import app.fedilab.android.databinding.FragmentPaginationBinding;
import app.fedilab.android.helper.CrossActionHelper;
import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper; import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.ui.drawer.ImageAdapter; import app.fedilab.android.ui.drawer.ImageAdapter;
import app.fedilab.android.viewmodel.mastodon.AccountsVM; import app.fedilab.android.viewmodel.mastodon.AccountsVM;
import es.dmoral.toasty.Toasty;
public class FragmentMediaProfile extends Fragment { public class FragmentMediaProfile extends Fragment {
@ -50,6 +53,10 @@ public class FragmentMediaProfile extends Fragment {
private List<Status> mediaStatuses; private List<Status> mediaStatuses;
private String max_id; private String max_id;
private ImageAdapter imageAdapter; private ImageAdapter imageAdapter;
String tempToken;
String tempInstance;
private boolean checkRemotely;
private String accountId;
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -58,6 +65,7 @@ public class FragmentMediaProfile extends Fragment {
Bundle bundle = this.getArguments(); Bundle bundle = this.getArguments();
if (bundle != null) { if (bundle != null) {
accountTimeline = (Account) getArguments().getSerializable(Helper.ARG_ACCOUNT); accountTimeline = (Account) getArguments().getSerializable(Helper.ARG_ACCOUNT);
checkRemotely = getArguments().getBoolean(Helper.ARG_CHECK_REMOTELY, false);
} }
return binding.getRoot(); return binding.getRoot();
} }
@ -68,10 +76,39 @@ public class FragmentMediaProfile extends Fragment {
flagLoading = false; flagLoading = false;
accountsVM = new ViewModelProvider(FragmentMediaProfile.this).get(AccountsVM.class); accountsVM = new ViewModelProvider(FragmentMediaProfile.this).get(AccountsVM.class);
mediaStatuses = new ArrayList<>(); mediaStatuses = new ArrayList<>();
if (checkRemotely) {
tempToken = null;
String[] acctArray = accountTimeline.acct.split("@");
if (acctArray.length > 1) {
tempInstance = acctArray[1];
}
CrossActionHelper.fetchAccountInRemoteInstance(requireActivity(), accountTimeline.acct, tempInstance, new CrossActionHelper.Callback() {
@Override
public void federatedStatus(Status status) {
}
@Override
public void federatedAccount(Account account) {
if (account != null) {
accountId = account.id;
accountsVM.getAccountStatuses(tempInstance, null, accountId, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
.observe(getViewLifecycleOwner(), statuses -> initializeStatusesCommonView(statuses));
} else {
Toasty.error(requireActivity(), getString(R.string.toast_fetch_error), Toasty.LENGTH_LONG).show();
}
}
});
} else {
tempToken = BaseMainActivity.currentToken;
tempInstance = BaseMainActivity.currentInstance;
accountId = accountTimeline.id;
accountsVM.getAccountStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, accountTimeline.id, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity())) accountsVM.getAccountStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, accountTimeline.id, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
.observe(getViewLifecycleOwner(), this::initializeStatusesCommonView); .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
} }
}
/** /**
* Intialize the common view for statuses on different timelines * Intialize the common view for statuses on different timelines
* *
@ -133,7 +170,7 @@ public class FragmentMediaProfile extends Fragment {
if (!flagLoading) { if (!flagLoading) {
flagLoading = true; flagLoading = true;
binding.loadingNextElements.setVisibility(View.VISIBLE); binding.loadingNextElements.setVisibility(View.VISIBLE);
accountsVM.getAccountStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, accountTimeline.id, max_id, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity())) accountsVM.getAccountStatuses(tempInstance, tempToken, accountId, max_id, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
.observe(getViewLifecycleOwner(), newStatuses -> dealWithPagination(newStatuses)); .observe(getViewLifecycleOwner(), newStatuses -> dealWithPagination(newStatuses));
} }
} else { } else {

View File

@ -930,7 +930,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
} else if (timelineType == Timeline.TimeLineEnum.ACCOUNT_TIMELINE) { //PROFILE TIMELINES } else if (timelineType == Timeline.TimeLineEnum.ACCOUNT_TIMELINE) { //PROFILE TIMELINES
String tempToken; String tempToken;
String tempInstance; String tempInstance;
String accountId = null; String accountId;
if (checkRemotely) { if (checkRemotely) {
tempToken = null; tempToken = null;
tempInstance = remoteInstance; tempInstance = remoteInstance;
@ -948,14 +948,18 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
accountsVM.getAccountStatuses(tempInstance, null, accountIDInRemoteInstance, null, null, null, null, null, false, true, MastodonHelper.statusesPerCall(requireActivity())) accountsVM.getAccountStatuses(tempInstance, null, accountIDInRemoteInstance, null, null, null, null, null, false, true, MastodonHelper.statusesPerCall(requireActivity()))
.observe(getViewLifecycleOwner(), pinnedStatuses -> accountsVM.getAccountStatuses(tempInstance, null, accountIDInRemoteInstance, null, null, null, exclude_replies, exclude_reblogs, media_only, false, MastodonHelper.statusesPerCall(requireActivity())) .observe(getViewLifecycleOwner(), pinnedStatuses -> accountsVM.getAccountStatuses(tempInstance, null, accountIDInRemoteInstance, null, null, null, exclude_replies, exclude_reblogs, media_only, false, MastodonHelper.statusesPerCall(requireActivity()))
.observe(getViewLifecycleOwner(), otherStatuses -> { .observe(getViewLifecycleOwner(), otherStatuses -> {
if (otherStatuses != null && otherStatuses.statuses != null && pinnedStatuses != null && pinnedStatuses.statuses != null) { if (otherStatuses != null && otherStatuses.statuses != null) {
if (pinnedStatuses != null && pinnedStatuses.statuses != null) {
for (Status status : pinnedStatuses.statuses) { for (Status status : pinnedStatuses.statuses) {
status.pinned = true; status.pinned = true;
} }
otherStatuses.statuses.addAll(0, pinnedStatuses.statuses); otherStatuses.statuses.addAll(0, pinnedStatuses.statuses);
initializeStatusesCommonView(otherStatuses);
} }
}
initializeStatusesCommonView(otherStatuses);
})); }));
} else {
Toasty.error(requireActivity(), getString(R.string.toast_fetch_error), Toasty.LENGTH_LONG).show();
} }
} }
}); });

View File

@ -1900,4 +1900,5 @@
<string name="filtered_by">Filtered: %1$s</string> <string name="filtered_by">Filtered: %1$s</string>
<string name="toast_error_add_to_list">The app failed to add the account into the list!</string> <string name="toast_error_add_to_list">The app failed to add the account into the list!</string>
<string name="display_remote_profile">Display remote profile</string> <string name="display_remote_profile">Display remote profile</string>
<string name="toast_fetch_error">The app cannot find remote data!</string>
</resources> </resources>