diff --git a/app/src/main/java/app/fedilab/fedilabtube/AccountActivity.java b/app/src/main/java/app/fedilab/fedilabtube/AccountActivity.java index a356dce..95f37cf 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/AccountActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/AccountActivity.java @@ -47,6 +47,7 @@ import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; import app.fedilab.fedilabtube.client.data.AccountData.Account; import app.fedilab.fedilabtube.drawer.OwnAccountsAdapter; import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment; +import app.fedilab.fedilabtube.fragment.DisplayChannelsFragment; import app.fedilab.fedilabtube.fragment.DisplayNotificationsFragment; import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.sqlite.AccountDAO; @@ -178,12 +179,17 @@ public class AccountActivity extends AppCompatActivity { } break; case 1: - case 2: if (fragment != null) { DisplayAccountsFragment displayAccountsFragment = ((DisplayAccountsFragment) fragment); displayAccountsFragment.scrollToTop(); } break; + case 2: + if (fragment != null) { + DisplayChannelsFragment displayChannelsFragment = ((DisplayChannelsFragment) fragment); + displayChannelsFragment.scrollToTop(); + } + break; } } }); @@ -267,27 +273,17 @@ public class AccountActivity extends AppCompatActivity { Bundle bundle = new Bundle(); switch (position) { case 1: - case 2: DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment(); - if (position == 1) { - bundle.putSerializable("accountFetch", RetrofitPeertubeAPI.DataType.MUTED); - } else { - SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - String instance = Helper.getLiveInstance(AccountActivity.this); - Account account = new AccountDAO(AccountActivity.this, db).getUniqAccount(userId, instance); - bundle.putString("name", account.getUsername() + "@" + account.getHost()); - bundle.putSerializable("accountFetch", RetrofitPeertubeAPI.DataType.CHANNEL); - } + bundle.putSerializable("accountFetch", RetrofitPeertubeAPI.DataType.MUTED); displayAccountsFragment.setArguments(bundle); return displayAccountsFragment; + case 2: + return new DisplayChannelsFragment(); default: return new DisplayNotificationsFragment(); } } - @Override public int getCount() { return 3; diff --git a/app/src/main/java/app/fedilab/fedilabtube/AllPlaylistsActivity.java b/app/src/main/java/app/fedilab/fedilabtube/AllPlaylistsActivity.java index 292542b..56a31e1 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/AllPlaylistsActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/AllPlaylistsActivity.java @@ -15,7 +15,6 @@ package app.fedilab.fedilabtube; * see . */ import android.content.Context; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -50,12 +49,11 @@ import java.util.Map; import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; -import app.fedilab.fedilabtube.client.data.AccountData.Account; +import app.fedilab.fedilabtube.client.data.ChannelData; import app.fedilab.fedilabtube.client.data.PlaylistData.Playlist; import app.fedilab.fedilabtube.client.entities.Item; import app.fedilab.fedilabtube.client.entities.PlaylistParams; import app.fedilab.fedilabtube.drawer.PlaylistAdapter; -import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.viewmodel.ChannelsVM; import app.fedilab.fedilabtube.viewmodel.PlaylistsVM; import es.dmoral.toasty.Toasty; @@ -75,6 +73,8 @@ public class AllPlaylistsActivity extends AppCompatActivity { private String idChannel; private List playlists; private Playlist playlistToEdit; + private List myChannels; + private ChannelData.Channel selectedChannel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -160,10 +160,8 @@ public class AllPlaylistsActivity extends AppCompatActivity { set_upload_channel = dialogView.findViewById(R.id.set_upload_channel); set_upload_privacy = dialogView.findViewById(R.id.set_upload_privacy); - SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); ChannelsVM viewModelC = new ViewModelProvider(AllPlaylistsActivity.this).get(ChannelsVM.class); - viewModelC.get(RetrofitPeertubeAPI.DataType.CHANNELS_FOR_ACCOUNT, userId).observe(AllPlaylistsActivity.this, this::manageVIewChannels); + viewModelC.get(RetrofitPeertubeAPI.DataType.MY_CHANNELS, null).observe(AllPlaylistsActivity.this, this::manageVIewChannels); display_name.setFilters(new InputFilter[]{new InputFilter.LengthFilter(120)}); description.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1000)}); @@ -217,8 +215,10 @@ public class AllPlaylistsActivity extends AppCompatActivity { playlist = playlistToEdit; } playlist.setId(playlistId); + playlist.setUuid(playlistId); playlist.setDescription(playlistElement.getDescription()); playlist.setDisplayName(playlistElement.getDisplayName()); + playlist.setVideoChannel(selectedChannel); playlist.setPrivacy(privacyItem); if (playlistToEdit == null) { playlists.add(playlist); @@ -253,7 +253,7 @@ public class AllPlaylistsActivity extends AppCompatActivity { public void manageVIewChannels(APIResponse apiResponse) { - if (apiResponse.getError() != null || apiResponse.getAccounts() == null || apiResponse.getAccounts().size() == 0) { + if (apiResponse.getError() != null || apiResponse.getChannels() == null || apiResponse.getChannels().size() == 0) { if (apiResponse.getError() != null && apiResponse.getError().getError() != null) Toasty.error(AllPlaylistsActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); else @@ -262,16 +262,16 @@ public class AllPlaylistsActivity extends AppCompatActivity { } //Populate channels - List channels = apiResponse.getAccounts(); - String[] channelName = new String[channels.size() + 1]; - String[] channelId = new String[channels.size() + 1]; + myChannels = apiResponse.getChannels(); + String[] channelName = new String[myChannels.size() + 1]; + String[] channelId = new String[myChannels.size() + 1]; int i = 1; channelName[0] = ""; channelId[0] = "null"; - for (Account account : channels) { - channelName[i] = account.getUsername(); - channelId[i] = account.getId(); + for (ChannelData.Channel channel : myChannels) { + channelName[i] = channel.getName(); + channelId[i] = channel.getId(); i++; } @@ -354,6 +354,7 @@ public class AllPlaylistsActivity extends AppCompatActivity { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { idChannel = channelId[position]; + selectedChannel = myChannels.get(position - 1); } @Override @@ -365,8 +366,8 @@ public class AllPlaylistsActivity extends AppCompatActivity { if (playlistToEdit != null) { int position = 0; int k = 1; - for (Account ac : channels) { - if (playlistToEdit.getId() != null && ac.getId().compareTo(playlistToEdit.getId()) == 0) { + for (ChannelData.Channel ac : myChannels) { + if (playlistToEdit.getVideoChannel() != null && playlistToEdit.getVideoChannel().getId() != null && ac.getId().compareTo(playlistToEdit.getVideoChannel().getId()) == 0) { position = k; break; } diff --git a/app/src/main/java/app/fedilab/fedilabtube/InstancePickerActivity.java b/app/src/main/java/app/fedilab/fedilabtube/InstancePickerActivity.java index e471e5b..477c26e 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/InstancePickerActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/InstancePickerActivity.java @@ -263,10 +263,8 @@ public class InstancePickerActivity extends AppCompatActivity { public void manageVIewInstance(APIResponse apiResponse) { mainLoader.setVisibility(View.GONE); - //Discards 404 - error which can often happen due to toots which have been deleted if (apiResponse.getError() != null) { - if (!apiResponse.getError().getError().startsWith("404 -") && !apiResponse.getError().getError().startsWith("501 -")) - Toasty.error(InstancePickerActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); + Toasty.error(InstancePickerActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); return; } List instances = apiResponse.getInstances(); diff --git a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java index 2a4f71a..dceb4d7 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java @@ -14,6 +14,7 @@ package app.fedilab.fedilabtube; * You should have received a copy of the GNU General Public License along with TubeLab; if not, * see . */ +import android.annotation.SuppressLint; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -35,8 +36,6 @@ import androidx.core.content.ContextCompat; import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; import java.util.Arrays; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; @@ -153,12 +152,10 @@ public class LoginActivity extends AppCompatActivity { } instance = host = login_instance.getText().toString().trim().toLowerCase(); } - - if (Arrays.asList(Helper.openid).contains(host) && !BuildConfig.full_instances) { new Thread(() -> { try { - Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE); + Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(null, null, null, null); if (oauth == null) { runOnUiThread(() -> { connectionButton.setEnabled(true); @@ -190,93 +187,42 @@ public class LoginActivity extends AppCompatActivity { }).start(); } else { new Thread(() -> { - try { - Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE); - if (oauth == null) { - runOnUiThread(() -> { - connectionButton.setEnabled(true); - Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show(); - }); - return; - } - - client_id = oauth.getClient_id(); - client_secret = oauth.getClient_secret(); - - SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - SharedPreferences.Editor editor = sharedpreferences.edit(); - editor.putString(Helper.CLIENT_ID, client_id); - editor.putString(Helper.CLIENT_SECRET, client_secret); - editor.apply(); - OauthParams oauthParams = new OauthParams(); - oauthParams.setClient_id(client_id); - oauthParams.setClient_secret(client_secret); - oauthParams.setGrant_type("password"); - oauthParams.setScope("user"); - try { - oauthParams.setUsername(URLEncoder.encode(login_uid.getText().toString().trim(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - oauthParams.setUsername(login_uid.getText().toString().trim()); - } - try { - oauthParams.setPassword(URLEncoder.encode(login_passwd.getText().toString(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - oauthParams.setPassword(login_passwd.getText().toString()); - } - - try { - Token token = null; - try { - token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); - } catch (Error error) { - Error.displayError(LoginActivity.this, error); - error.printStackTrace(); - } - proceedLogin(token, host); - } catch (final Exception e) { - - try { - oauthParams.setUsername(URLEncoder.encode(login_uid.getText().toString().toLowerCase().trim(), "UTF-8")); - } catch (UnsupportedEncodingException e2) { - oauthParams.setUsername(login_uid.getText().toString().toLowerCase().trim()); - } - try { - Token token = null; - try { - token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); - } catch (Error error) { - Error.displayError(LoginActivity.this, error); - error.printStackTrace(); - } - proceedLogin(token, host); - } catch (final Exception e2) { - e2.printStackTrace(); - runOnUiThread(() -> { - connectionButton.setEnabled(true); - String message; - if (e2.getLocalizedMessage() != null && e2.getLocalizedMessage().trim().length() > 0) - message = e2.getLocalizedMessage(); - else if (e2.getMessage() != null && e2.getMessage().trim().length() > 0) - message = e2.getMessage(); - else - message = getString(R.string.toast_error); - Toasty.error(LoginActivity.this, message, Toast.LENGTH_LONG).show(); - }); - } - } - } catch (final Exception e) { - e.printStackTrace(); + Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE); + if (oauth == null) { runOnUiThread(() -> { connectionButton.setEnabled(true); - String message = null; - if (e.getLocalizedMessage() != null) { - message = e.getMessage(); - } - if (message == null) { - message = getString(R.string.toast_error); - } - Toasty.error(LoginActivity.this, message, Toast.LENGTH_LONG).show(); + Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show(); }); + return; + } + + client_id = oauth.getClient_id(); + client_secret = oauth.getClient_secret(); + + SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.CLIENT_ID, client_id); + editor.putString(Helper.CLIENT_SECRET, client_secret); + editor.apply(); + OauthParams oauthParams = new OauthParams(); + oauthParams.setClient_id(client_id); + oauthParams.setClient_secret(client_secret); + oauthParams.setGrant_type("password"); + oauthParams.setScope("user"); + oauthParams.setUsername(login_uid.getText().toString().trim()); + oauthParams.setPassword(login_passwd.getText().toString()); + try { + Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); + proceedLogin(token, host); + } catch (final Exception | Error e) { + oauthParams.setUsername(login_uid.getText().toString().toLowerCase().trim()); + try { + Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams); + proceedLogin(token, host); + } catch (Error error) { + Error.displayError(LoginActivity.this, error); + error.printStackTrace(); + } } }).start(); } @@ -284,6 +230,7 @@ public class LoginActivity extends AppCompatActivity { }); } + @SuppressLint("ApplySharedPref") private void proceedLogin(Token token, String host) { runOnUiThread(() -> { if (token != null) { @@ -291,8 +238,7 @@ public class LoginActivity extends AppCompatActivity { SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token.getAccess_token()); editor.putString(Helper.PREF_INSTANCE, host); - - editor.apply(); + editor.commit(); //Update the account with the token; updateCredential(LoginActivity.this, token.getAccess_token(), client_id, client_secret, token.getRefresh_token(), host); } else { diff --git a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java index d3b5ad8..9bbb609 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java @@ -74,6 +74,27 @@ public class MainActivity extends AppCompatActivity { if (Helper.isLoggedIn(MainActivity.this)) { navView.inflateMenu(R.menu.bottom_nav_menu_connected); + final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); + String instance = Helper.getLiveInstance(MainActivity.this); + SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + Account account = new AccountDAO(MainActivity.this, db).getUniqAccount(userId, instance); + if (account != null) { + OauthParams oauthParams = new OauthParams(); + oauthParams.setGrant_type("refresh_token"); + oauthParams.setClient_id(account.getClient_id()); + oauthParams.setClient_secret(account.getClient_secret()); + oauthParams.setRefresh_token(account.getRefresh_token()); + oauthParams.setAccess_token(account.getToken()); + new Thread(() -> { + try { + new RetrofitPeertubeAPI(MainActivity.this).manageToken(oauthParams); + } catch (Error error) { + error.printStackTrace(); + } + }).start(); + } + } else { navView.inflateMenu(R.menu.bottom_nav_menu); } @@ -93,6 +114,7 @@ public class MainActivity extends AppCompatActivity { .build(); } + startInForeground(); NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); if (navHostFragment != null) { @@ -161,27 +183,6 @@ public class MainActivity extends AppCompatActivity { playslistItem.setVisible(true); historyItem.setVisible(true); settingsItem.setVisible(false); - final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - String instance = Helper.getLiveInstance(MainActivity.this); - SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - Account account = new AccountDAO(MainActivity.this, db).getUniqAccount(userId, instance); - if (account != null) { - OauthParams oauthParams = new OauthParams(); - oauthParams.setGrant_type("refresh_token"); - oauthParams.setClient_id(account.getClient_id()); - oauthParams.setClient_secret(account.getClient_secret()); - oauthParams.setRefresh_token(account.getRefresh_token()); - oauthParams.setAccess_token(account.getToken()); - new Thread(() -> { - try { - new RetrofitPeertubeAPI(MainActivity.this).manageToken(oauthParams); - } catch (Error error) { - - error.printStackTrace(); - } - }).start(); - } } else { instanceItem.setVisible(true); uploadItem.setVisible(false); @@ -302,7 +303,7 @@ public class MainActivity extends AppCompatActivity { (dialog, which) -> new Thread(() -> { try { String newInstance = input.getText().toString().trim(); - WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(MainActivity.this).getNodeInfo(newInstance); + WellKnownNodeinfo.NodeInfo instanceNodeInfo = new RetrofitPeertubeAPI(MainActivity.this, newInstance, null).getNodeInfo(); if (instanceNodeInfo.getSoftware() != null && instanceNodeInfo.getSoftware().getName().trim().toLowerCase().compareTo("peertube") == 0) { SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Helper.PREF_INSTANCE, newInstance); diff --git a/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java index 821d380..97cd3b2 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java @@ -789,7 +789,7 @@ public class PeertubeActivity extends AppCompatActivity { public void manageVIewComment(APIResponse apiResponse) { - if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 501)) { + if (apiResponse == null || (apiResponse.getError() != null)) { if (apiResponse == null) Toasty.error(PeertubeActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); else diff --git a/app/src/main/java/app/fedilab/fedilabtube/PeertubeEditUploadActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PeertubeEditUploadActivity.java index 4cbf330..ede089f 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PeertubeEditUploadActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PeertubeEditUploadActivity.java @@ -57,7 +57,6 @@ import java.util.UUID; import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; -import app.fedilab.fedilabtube.client.data.AccountData.Account; import app.fedilab.fedilabtube.client.data.ChannelData.Channel; import app.fedilab.fedilabtube.client.data.VideoData.Video; import app.fedilab.fedilabtube.client.entities.Item; @@ -224,12 +223,22 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { TimelineVM feedsViewModel = new ViewModelProvider(PeertubeEditUploadActivity.this).get(TimelineVM.class); - feedsViewModel.getVideo(videoId).observe(PeertubeEditUploadActivity.this, this::manageVIewVideo); + feedsViewModel.getMyVideo(videoId).observe(PeertubeEditUploadActivity.this, this::manageVIewVideo); channels = new LinkedHashMap<>(); setTitle(R.string.edit_video); } + public void manageUpdate(APIResponse apiResponse) { + set_upload_submit.setEnabled(true); + if (apiResponse.getError() != null) { + if (apiResponse.getError() != null && apiResponse.getError().getError() != null) + Toasty.error(PeertubeEditUploadActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); + else + Toasty.error(PeertubeEditUploadActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } + Toasty.info(PeertubeEditUploadActivity.this, getString(R.string.toast_peertube_video_updated), Toast.LENGTH_LONG).show(); + } public void manageVIewVideo(APIResponse apiResponse) { if (apiResponse.getError() != null || apiResponse.getPeertubes() == null || apiResponse.getPeertubes().size() == 0) { @@ -252,7 +261,9 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { privacyToSend = video.getPrivacy(); categoryToSend = video.getCategory(); - Helper.loadGiF(PeertubeEditUploadActivity.this, video.getThumbnailPath(), p_video_preview); + if (video.getThumbnailPath() != null) { + Helper.loadGiF(PeertubeEditUploadActivity.this, video.getThumbnailPath(), p_video_preview); + } set_preview.setOnClickListener(v -> { @@ -271,7 +282,6 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { startActivityForResult(intent, PICK_IMAGE); }); - if (languageToSend == null) { languageToSend = new ItemStr(); LinkedHashMap languages = new LinkedHashMap<>(peertubeInformation.getLanguages()); @@ -284,7 +294,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { licenseToSend = new Item(); LinkedHashMap licences = new LinkedHashMap<>(peertubeInformation.getLicences()); Map.Entry entryInt = licences.entrySet().iterator().next(); - licenseToSend.setId(Long.parseLong(String.valueOf(entryInt.getKey()))); + licenseToSend.setId(entryInt.getKey()); licenseToSend.setLabel(entryInt.getValue()); } @@ -292,21 +302,21 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { categoryToSend = new Item(); LinkedHashMap categories = new LinkedHashMap<>(peertubeInformation.getCategories()); Map.Entry entryInt = categories.entrySet().iterator().next(); - categoryToSend.setId(Long.parseLong(String.valueOf(entryInt.getKey()))); + categoryToSend.setId(entryInt.getKey()); categoryToSend.setLabel(entryInt.getValue()); } if (privacyToSend == null) { privacyToSend = new Item(); LinkedHashMap privacies = new LinkedHashMap<>(peertubeInformation.getPrivacies()); Map.Entry entryInt = privacies.entrySet().iterator().next(); - privacyToSend.setId(Long.parseLong(String.valueOf(entryInt.getKey()))); + privacyToSend.setId(entryInt.getKey()); privacyToSend.setLabel(entryInt.getValue()); } - String language = languageToSend.getLabel(); - String license = licenseToSend.getLabel(); - String privacy = privacyToSend.getLabel(); - String category = categoryToSend.getLabel(); + String language = languageToSend.getId(); + int license = licenseToSend.getId(); + int privacy = privacyToSend.getId(); + int category = categoryToSend.getId(); channel = video.getChannel(); String title = video.getName(); @@ -326,44 +336,45 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { int languagePosition = 0; - if (languages.containsValue(language)) { - Iterator> it = languages.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (pair.getValue().equals(language)) + + if (languages.containsKey(language)) { + Iterator> itstr = languages.entrySet().iterator(); + while (itstr.hasNext()) { + Map.Entry pair = itstr.next(); + if (pair.getKey().compareTo(language) == 0) break; - it.remove(); + itstr.remove(); languagePosition++; } } int privacyPosition = 0; - if (privacy != null && privacies.containsValue(privacy)) { + if (privacies.containsKey(privacy)) { Iterator> it = privacies.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - if (pair.getValue().compareTo(privacy) == 0) + if (pair.getKey() == privacy) break; it.remove(); privacyPosition++; } } int licensePosition = 0; - if (license != null && licences.containsValue(license)) { + if (licences.containsKey(license)) { Iterator> it = licences.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - if (pair.getValue().compareTo(license) == 0) + if (pair.getKey() == license) break; it.remove(); licensePosition++; } } int categoryPosition = 0; - if (category != null && categories.containsValue(category)) { + if (categories.containsKey(category)) { Iterator> it = categories.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - if (pair.getValue().compareTo(category) == 0) + if (pair.getKey() == category) break; it.remove(); categoryPosition++; @@ -373,19 +384,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { set_upload_privacy.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - LinkedHashMap privaciesCheck = new LinkedHashMap<>(peertubeInformation.getPrivacies()); - Iterator> it = privaciesCheck.entrySet().iterator(); - int i = 0; - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (i == position) { - privacyToSend.setId(pair.getKey()); - privacyToSend.setLabel(pair.getValue()); - break; - } - it.remove(); - i++; - } + updatePrivacyPosition(position); } @Override @@ -396,19 +395,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { set_upload_licenses.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - LinkedHashMap licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences()); - Iterator> it = licensesCheck.entrySet().iterator(); - int i = 0; - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (i == position) { - licenseToSend.setId(pair.getKey()); - licenseToSend.setLabel(pair.getValue()); - break; - } - it.remove(); - i++; - } + updateLicensePosition(position); } @Override @@ -420,19 +407,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { set_upload_categories.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - LinkedHashMap categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories()); - Iterator> it = categoriesCheck.entrySet().iterator(); - int i = 0; - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (i == position) { - categoryToSend.setId(pair.getKey()); - categoryToSend.setLabel(pair.getValue()); - break; - } - it.remove(); - i++; - } + updateCategoryPosition(position); } @Override @@ -445,19 +420,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { set_upload_languages.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - LinkedHashMap languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages()); - Iterator> it = languagesCheck.entrySet().iterator(); - int i = 0; - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (i == position) { - languageToSend.setId(pair.getKey()); - languageToSend.setLabel(pair.getValue()); - break; - } - it.remove(); - i++; - } + updateLanguagesPosition(position); } @Override @@ -469,18 +432,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { set_upload_channel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - LinkedHashMap channelsCheck = new LinkedHashMap<>(channels); - Iterator> it = channelsCheck.entrySet().iterator(); - int i = 0; - while (it.hasNext()) { - Map.Entry pair = it.next(); - if (i == position) { - channelToSendId = pair.getKey(); - break; - } - it.remove(); - i++; - } + } @Override @@ -507,27 +459,109 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { videoParams.setCategory((int) finalCategoryToSend.getId()); videoParams.setLicence(String.valueOf(finalLicenseToSend.getId())); videoParams.setLanguage(finalLanguageToSend.getId()); + videoParams.setChannelId(channelToSendId); videoParams.setPrivacy((int) finalPrivacyToSend.getId()); List tags = p_video_tags.getTags(); videoParams.setTags(tags); set_upload_submit.setEnabled(false); MyVideoVM myVideoVM = new ViewModelProvider(PeertubeEditUploadActivity.this).get(MyVideoVM.class); - myVideoVM.updateVideo(videoId, videoParams, null, null).observe(PeertubeEditUploadActivity.this, this::manageVIewVideo); + myVideoVM.updateVideo(videoId, videoParams, null, null).observe(PeertubeEditUploadActivity.this, this::manageUpdate); }); - set_upload_privacy.setSelection(privacyPosition); - set_upload_languages.setSelection(languagePosition); - set_upload_licenses.setSelection(licensePosition); - set_upload_categories.setSelection(categoryPosition); + set_upload_privacy.setSelection(privacyPosition, false); + updatePrivacyPosition(privacyPosition); + set_upload_languages.setSelection(languagePosition, false); + updateLanguagesPosition(languagePosition); + set_upload_licenses.setSelection(licensePosition, false); + updateLicensePosition(licensePosition); + set_upload_categories.setSelection(categoryPosition, false); + updateCategoryPosition(categoryPosition); List tags = video.getTags(); if (tags != null && tags.size() > 0) { p_video_tags.setTags(tags.toArray(new String[0])); } - } + private void updateUploadChannel(int position) { + LinkedHashMap channelsCheck = new LinkedHashMap<>(channels); + Iterator> it = channelsCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (i == position) { + channelToSendId = pair.getValue(); + break; + } + it.remove(); + i++; + } + } + + private void updateLanguagesPosition(int position) { + LinkedHashMap languagesCheck = new LinkedHashMap<>(peertubeInformation.getLanguages()); + Iterator> it = languagesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (i == position) { + languageToSend.setId(pair.getKey()); + languageToSend.setLabel(pair.getValue()); + break; + } + it.remove(); + i++; + } + } + + private void updateCategoryPosition(int position) { + LinkedHashMap categoriesCheck = new LinkedHashMap<>(peertubeInformation.getCategories()); + Iterator> it = categoriesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (i == position) { + categoryToSend.setId(pair.getKey()); + categoryToSend.setLabel(pair.getValue()); + break; + } + it.remove(); + i++; + } + } + + private void updateLicensePosition(int position) { + LinkedHashMap licensesCheck = new LinkedHashMap<>(peertubeInformation.getLicences()); + Iterator> it = licensesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (i == position) { + licenseToSend.setId(pair.getKey()); + licenseToSend.setLabel(pair.getValue()); + break; + } + it.remove(); + i++; + } + } + + private void updatePrivacyPosition(int position) { + LinkedHashMap privaciesCheck = new LinkedHashMap<>(peertubeInformation.getPrivacies()); + Iterator> it = privaciesCheck.entrySet().iterator(); + int i = 0; + while (it.hasNext()) { + Map.Entry pair = it.next(); + if (i == position) { + privacyToSend.setId(pair.getKey()); + privacyToSend.setLabel(pair.getValue()); + break; + } + it.remove(); + i++; + } + } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -546,7 +580,7 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { try { String uploadId = UUID.randomUUID().toString(); new MultipartUploadRequest(PeertubeEditUploadActivity.this, uploadId, "https://" + Helper.getLiveInstance(PeertubeEditUploadActivity.this) + "/api/v1/" + String.format("/videos/%s", video.getId())) - .addFileToUpload(uri.toString().replace("file://", ""), "previewfile") + .addFileToUpload(uri.toString().replace("file://", ""), "thumbnailfile") .setMethod("PUT") .addHeader("Authorization", "Bearer " + token) .setNotificationConfig(uploadConfig) @@ -598,20 +632,20 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { public void manageVIewChannels(APIResponse apiResponse) { - if (apiResponse.getError() != null || apiResponse.getAccounts() == null || apiResponse.getAccounts().size() == 0) { - if (apiResponse.getError().getError() != null) + if (apiResponse.getError() != null || apiResponse.getChannels() == null || apiResponse.getChannels().size() == 0) { + if (apiResponse.getError() != null && apiResponse.getError().getError() != null) Toasty.error(PeertubeEditUploadActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); else Toasty.error(PeertubeEditUploadActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); return; } //Populate channels - List accounts = apiResponse.getAccounts(); - String[] channelName = new String[accounts.size()]; + List channelsReply = apiResponse.getChannels(); + String[] channelName = new String[channelsReply.size()]; int i = 0; - for (Account account : accounts) { - channels.put(account.getUsername(), account.getId()); - channelName[i] = account.getUsername(); + for (Channel channel : channelsReply) { + channels.put(channel.getName(), channel.getId()); + channelName[i] = channel.getName(); i++; } ArrayAdapter adapterChannel = new ArrayAdapter<>(PeertubeEditUploadActivity.this, @@ -631,7 +665,8 @@ public class PeertubeEditUploadActivity extends AppCompatActivity { channelPosition++; } } - set_upload_channel.setSelection(channelPosition); + set_upload_channel.setSelection(channelPosition, false); + updateUploadChannel(channelPosition); set_upload_submit.setEnabled(true); } diff --git a/app/src/main/java/app/fedilab/fedilabtube/PlaylistsActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PlaylistsActivity.java index 72e7e8f..197a372 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PlaylistsActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PlaylistsActivity.java @@ -33,6 +33,7 @@ import java.util.List; import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.data.PlaylistData.Playlist; import app.fedilab.fedilabtube.client.data.VideoData.Video; +import app.fedilab.fedilabtube.client.data.VideoPlaylistData; import app.fedilab.fedilabtube.drawer.PeertubeAdapter; import app.fedilab.fedilabtube.viewmodel.PlaylistsVM; import es.dmoral.toasty.Toasty; @@ -93,7 +94,7 @@ public class PlaylistsActivity extends AppCompatActivity { if (b != null) { playlist = b.getParcelable("playlist"); } else { - Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error_search), Toast.LENGTH_LONG).show(); + Toasty.error(PlaylistsActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show(); return; } if (getSupportActionBar() != null) @@ -129,7 +130,6 @@ public class PlaylistsActivity extends AppCompatActivity { swiped = true; viewModel.manage(GET_LIST_VIDEOS, playlist, null).observe(PlaylistsActivity.this, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.GET_LIST_VIDEOS, apiResponse)); }); - viewModel.manage(GET_LIST_VIDEOS, playlist, null).observe(PlaylistsActivity.this, apiResponse -> manageVIewPlaylists(PlaylistsVM.action.GET_LIST_VIDEOS, apiResponse)); } @@ -147,10 +147,8 @@ public class PlaylistsActivity extends AppCompatActivity { public void manageVIewPlaylists(PlaylistsVM.action actionType, APIResponse apiResponse) { mainLoader.setVisibility(View.GONE); nextElementLoader.setVisibility(View.GONE); - //Discards 404 - error which can often happen due to toots which have been deleted if (apiResponse.getError() != null) { - if (!apiResponse.getError().getError().startsWith("404 -") && !apiResponse.getError().getError().startsWith("501 -")) - Toasty.error(PlaylistsActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); + Toasty.error(PlaylistsActivity.this, apiResponse.getError().getError(), Toast.LENGTH_LONG).show(); swipeRefreshLayout.setRefreshing(false); swiped = false; flag_loading = false; @@ -159,10 +157,14 @@ public class PlaylistsActivity extends AppCompatActivity { if (actionType == GET_LIST_VIDEOS) { int previousPosition = this.peertubes.size(); - List