From 8548777c50a248e1009e175f5ebe26feb8cc1166 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 3 Oct 2020 16:22:19 +0200 Subject: [PATCH] some checks --- app/src/acad/res/values/styles.xml | 6 ++ app/src/full/res/values/styles.xml | 6 ++ app/src/main/AndroidManifest.xml | 2 + .../app/fedilab/fedilabtube/MainActivity.java | 3 + .../fedilab/fedilabtube/PeertubeActivity.java | 46 ++++++----- .../fedilabtube/client/APIResponse.java | 10 +++ .../fedilabtube/client/PeertubeService.java | 5 +- .../client/RetrofitPeertubeAPI.java | 28 ++++++- .../client/entities/PlaylistExist.java | 73 +++++++++++------- .../fedilabtube/viewmodel/PlaylistsVM.java | 12 +-- app/src/main/res/layout/activity_main.xml | 77 ++++++++++++------- 11 files changed, 183 insertions(+), 85 deletions(-) diff --git a/app/src/acad/res/values/styles.xml b/app/src/acad/res/values/styles.xml index 8b1bcff..aceb64c 100644 --- a/app/src/acad/res/values/styles.xml +++ b/app/src/acad/res/values/styles.xml @@ -9,4 +9,10 @@ @color/colorAccent + \ No newline at end of file diff --git a/app/src/full/res/values/styles.xml b/app/src/full/res/values/styles.xml index 1fa7ae0..f4807f3 100644 --- a/app/src/full/res/values/styles.xml +++ b/app/src/full/res/values/styles.xml @@ -8,4 +8,10 @@ @color/colorAccent_full + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4edaeac..a9d98d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,8 +27,10 @@ tools:replace="android:allowBackup"> + diff --git a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java index 9914615..8665854 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/MainActivity.java @@ -31,6 +31,7 @@ import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; import androidx.navigation.NavController; import androidx.navigation.NavGraph; import androidx.navigation.NavInflater; @@ -75,6 +76,8 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); BottomNavigationView navView = findViewById(R.id.nav_view); if (Helper.isLoggedIn(MainActivity.this)) { diff --git a/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java index 00b0a9a..2045682 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PeertubeActivity.java @@ -98,15 +98,14 @@ import app.fedilab.fedilabtube.client.data.PlaylistData.Playlist; import app.fedilab.fedilabtube.client.data.VideoData; import app.fedilab.fedilabtube.client.entities.File; import app.fedilab.fedilabtube.client.entities.ItemStr; +import app.fedilab.fedilabtube.client.entities.PlaylistExist; import app.fedilab.fedilabtube.client.entities.Report; import app.fedilab.fedilabtube.drawer.CommentListAdapter; -import app.fedilab.fedilabtube.fragment.DisplayAccountsFragment; import app.fedilab.fedilabtube.helper.CacheDataSourceFactory; import app.fedilab.fedilabtube.helper.FullScreenMediaController; import app.fedilab.fedilabtube.helper.Helper; import app.fedilab.fedilabtube.sqlite.AccountDAO; import app.fedilab.fedilabtube.sqlite.Sqlite; -import app.fedilab.fedilabtube.viewmodel.AccountsVM; import app.fedilab.fedilabtube.viewmodel.CaptionsVM; import app.fedilab.fedilabtube.viewmodel.CommentVM; import app.fedilab.fedilabtube.viewmodel.PlaylistsVM; @@ -125,7 +124,6 @@ import static app.fedilab.fedilabtube.helper.Helper.getAttColor; import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance; import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn; import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLISTS; -import static app.fedilab.fedilabtube.viewmodel.PlaylistsVM.action.GET_PLAYLIST_FOR_VIDEO; public class PeertubeActivity extends AppCompatActivity implements CommentListAdapter.AllCommentRemoved { @@ -148,7 +146,7 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd private ImageView send; private TextView add_comment_read; private EditText add_comment_write; - private List playlistForVideo; + private List playlistForVideo; private List playlists; private PlaylistsVM playlistsViewModel; private boolean playInMinimized; @@ -365,7 +363,11 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd peertube_playlist.setVisibility(View.VISIBLE); peertube_bookmark.setVisibility(View.GONE); - + List videoIds = new ArrayList<>(); + videoIds.add(videoId); + if (Helper.isLoggedIn(PeertubeActivity.this)) { + playlistsViewModel.videoExists(videoIds).observe(PeertubeActivity.this, this::manageVIewVideosExist); + } TimelineVM feedsViewModel = new ViewModelProvider(PeertubeActivity.this).get(TimelineVM.class); feedsViewModel.getVideo(videoId).observe(PeertubeActivity.this, this::manageVIewVideo); CaptionsVM captionsViewModel = new ViewModelProvider(PeertubeActivity.this).get(CaptionsVM.class); @@ -509,8 +511,8 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd peertube = apiResponse.getPeertubes().get(0); - //TODO: currently streaming service gives the wrong values for duration - playlistsViewModel.manage(GET_PLAYLIST_FOR_VIDEO, null, peertube.getId()).observe(PeertubeActivity.this, apiResponse2 -> manageVIewPlaylists(GET_PLAYLIST_FOR_VIDEO, apiResponse2)); + + add_comment_read.setOnClickListener(v -> { if (isLoggedIn(PeertubeActivity.this)) { @@ -550,13 +552,11 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd String title = null; boolean isPresent = false; String elementId = null; - Playlist playlistElementFinal = null; - for (Playlist playlistElement : playlistForVideo) { - if (playlist.getId().equals(playlistElement.getId())) { + for (String playlistId : playlistForVideo) { + if (playlist.getId().compareTo(playlistId) == 0) { title = "✔ " + playlist.getDisplayName(); isPresent = true; - elementId = playlistElement.getId(); - playlistElementFinal = playlistElement; + elementId = playlistId; break; } } @@ -566,7 +566,6 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd MenuItem item = popup.getMenu().add(0, 0, Menu.NONE, title); boolean finalIsPresent = isPresent; String finalElementId = elementId; - Playlist finalPlaylistElementFinal = playlistElementFinal; item.setOnMenuItemClickListener(item1 -> { item1.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); item1.setActionView(new View(PeertubeActivity.this)); @@ -584,13 +583,11 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd if (finalIsPresent) { item1.setTitle(playlist.getDisplayName()); playlistsViewModel.manage(PlaylistsVM.action.DELETE_VIDEOS, playlist, finalElementId).observe(PeertubeActivity.this, apiResponse3 -> manageVIewPlaylists(PlaylistsVM.action.DELETE_VIDEOS, apiResponse3)); - playlistForVideo.remove(finalPlaylistElementFinal); + playlistForVideo.remove(playlist.getId()); } else { item1.setTitle("✔ " + playlist.getDisplayName()); playlistsViewModel.manage(PlaylistsVM.action.ADD_VIDEOS, playlist, peertube.getId()).observe(PeertubeActivity.this, apiResponse3 -> manageVIewPlaylists(PlaylistsVM.action.ADD_VIDEOS, apiResponse3)); - Playlist playlistElement = new Playlist(); - playlistElement.setId(playlist.getId()); - playlistForVideo.add(playlistElement); + playlistForVideo.add(playlist.getId()); } return false; }); @@ -1078,13 +1075,22 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd public void manageVIewPlaylists(PlaylistsVM.action actionType, APIResponse apiResponse) { - if (actionType == GET_PLAYLIST_FOR_VIDEO && apiResponse != null) { - playlistForVideo = apiResponse.getPlaylists(); - } else if (actionType == GET_PLAYLISTS && apiResponse != null) { + if (actionType == GET_PLAYLISTS && apiResponse != null) { playlists = apiResponse.getPlaylists(); } } + public void manageVIewVideosExist(APIResponse apiResponse) { + playlistForVideo = new ArrayList<>(); + if( apiResponse.getError() == null && apiResponse.getVideoExistPlaylist() != null) { + + List videoIds = apiResponse.getVideoExistPlaylist(); + for(PlaylistExist.VideoId videoId: videoIds) { + playlistForVideo.add(videoId.getPlaylistId()); + } + } + } + @Override public void onAllCommentRemoved() { no_action_text.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/APIResponse.java b/app/src/main/java/app/fedilab/fedilabtube/client/APIResponse.java index e8315fa..3899c18 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/APIResponse.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/APIResponse.java @@ -29,6 +29,7 @@ import app.fedilab.fedilabtube.client.data.VideoData; import app.fedilab.fedilabtube.client.data.VideoPlaylistData.VideoPlaylist; import app.fedilab.fedilabtube.client.entities.Error; import app.fedilab.fedilabtube.client.entities.OverviewVideo; +import app.fedilab.fedilabtube.client.entities.PlaylistExist.VideoId; import app.fedilab.fedilabtube.client.entities.Rating; @SuppressWarnings({"unused", "RedundantSuppression"}) @@ -40,6 +41,7 @@ public class APIResponse { private String actionReturn = null; private Rating rating; private OverviewVideo overviewVideo = null; + private List videoExistPlaylist = null; private List peertubes = null; private List comments = null; private List muted; @@ -237,4 +239,12 @@ public class APIResponse { public void setVideoPlaylist(List videoPlaylist) { this.videoPlaylist = videoPlaylist; } + + public List getVideoExistPlaylist() { + return videoExistPlaylist; + } + + public void setVideoExistPlaylist(List videoExistPlaylist) { + this.videoExistPlaylist = videoExistPlaylist; + } } diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java index d8e7401..c580543 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeService.java @@ -238,7 +238,7 @@ public interface PeertubeService { Call getVideosPlayList(@Header("Authorization") String credentials, @Path("id") String id); @GET("users/me/video-playlists/videos-exist") - Call> getVideoExistsInPlaylist(@Query("videoIds") List videoIds); + Call getVideoExistsInPlaylist(@Header("Authorization") String credentials, @Query("videoIds") List videoIds); @Multipart @POST("video-playlists") @@ -262,8 +262,9 @@ public interface PeertubeService { @Part MultipartBody.Part thumbnailfil); + @FormUrlEncoded @POST("video-playlists/{id}/videos") - Call addVideoInPlaylist(@Header("Authorization") String credentials, @Path("id") String id, @Query("videoId") String videoId); + Call addVideoInPlaylist(@Header("Authorization") String credentials, @Path("id") String id, @Field("videoId") String videoId); @DELETE("video-playlists/{id}") diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java index 15218a6..00188bf 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/RetrofitPeertubeAPI.java @@ -54,6 +54,7 @@ import app.fedilab.fedilabtube.client.entities.Oauth; import app.fedilab.fedilabtube.client.entities.OauthParams; import app.fedilab.fedilabtube.client.entities.OverviewVideo; import app.fedilab.fedilabtube.client.entities.PeertubeInformation; +import app.fedilab.fedilabtube.client.entities.PlaylistExist; import app.fedilab.fedilabtube.client.entities.PlaylistParams; import app.fedilab.fedilabtube.client.entities.Rating; import app.fedilab.fedilabtube.client.entities.Report; @@ -1052,6 +1053,31 @@ public class RetrofitPeertubeAPI { return apiResponse; } + + /** + * Retrieves playlists for a video *synchronously* + * + * @param videoIds List ids of videos + * @return APIResponse + */ + public APIResponse getVideosExist(List videoIds) { + PeertubeService peertubeService = init(); + APIResponse apiResponse = new APIResponse(); + try { + Call videoExistsInPlaylist = peertubeService.getVideoExistsInPlaylist(getToken(), videoIds); + Response response = videoExistsInPlaylist.execute(); + if (response.isSuccessful() && response.body() != null) { + apiResponse.setVideoExistPlaylist(response.body().getVideoId()); + } else { + setError(apiResponse, response.code(), response.errorBody()); + } + } catch (IOException e) { + e.printStackTrace(); + } + return apiResponse; + } + + /** * Retrieves playlist *synchronously* * @@ -1085,7 +1111,7 @@ public class RetrofitPeertubeAPI { } else { setError(apiResponse, response.code(), response.errorBody()); } - } else if (type == PlaylistsVM.action.GET_LIST_VIDEOS) { + } else if (type == PlaylistsVM.action.GET_LIST_VIDEOS) { Call videosPlayList = peertubeService.getVideosPlayList(getToken(), playlistId); Response response = videosPlayList.execute(); if (response.isSuccessful() && response.body() != null) { diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/entities/PlaylistExist.java b/app/src/main/java/app/fedilab/fedilabtube/client/entities/PlaylistExist.java index c33c2b4..43f3efd 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/entities/PlaylistExist.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/entities/PlaylistExist.java @@ -16,46 +16,61 @@ package app.fedilab.fedilabtube.client.entities; import com.google.gson.annotations.SerializedName; +import java.util.List; + public class PlaylistExist { - @SerializedName("playlistElementId") - private String playlistElementId; - @SerializedName("playlistId") - private String playlistId; - @SerializedName("startTimestamp") - private long startTimestamp; - @SerializedName("stopTimestamp") - private long stopTimestamp; + @SerializedName("videoId") + private List videoId; - public String getPlaylistElementId() { - return playlistElementId; + public List getVideoId() { + return videoId; } - public void setPlaylistElementId(String playlistElementId) { - this.playlistElementId = playlistElementId; + public void setVideoId(List videoId) { + this.videoId = videoId; } - public String getPlaylistId() { - return playlistId; - } + public static class VideoId { + @SerializedName("playlistElementId") + private String playlistElementId; + @SerializedName("playlistId") + private String playlistId; + @SerializedName("startTimestamp") + private long startTimestamp; + @SerializedName("stopTimestamp") + private long stopTimestamp; - public void setPlaylistId(String playlistId) { - this.playlistId = playlistId; - } + public String getPlaylistElementId() { + return playlistElementId; + } - public long getStartTimestamp() { - return startTimestamp; - } + public void setPlaylistElementId(String playlistElementId) { + this.playlistElementId = playlistElementId; + } - public void setStartTimestamp(long startTimestamp) { - this.startTimestamp = startTimestamp; - } + public String getPlaylistId() { + return playlistId; + } - public long getStopTimestamp() { - return stopTimestamp; - } + public void setPlaylistId(String playlistId) { + this.playlistId = playlistId; + } - public void setStopTimestamp(long stopTimestamp) { - this.stopTimestamp = stopTimestamp; + public long getStartTimestamp() { + return startTimestamp; + } + + public void setStartTimestamp(long startTimestamp) { + this.startTimestamp = startTimestamp; + } + + public long getStopTimestamp() { + return stopTimestamp; + } + + public void setStopTimestamp(long stopTimestamp) { + this.stopTimestamp = stopTimestamp; + } } } diff --git a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/PlaylistsVM.java b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/PlaylistsVM.java index 8dab662..34661b8 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/viewmodel/PlaylistsVM.java +++ b/app/src/main/java/app/fedilab/fedilabtube/viewmodel/PlaylistsVM.java @@ -28,6 +28,7 @@ import androidx.lifecycle.MutableLiveData; import java.io.File; import java.util.ArrayList; +import java.util.List; import app.fedilab.fedilabtube.client.APIResponse; import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; @@ -52,16 +53,16 @@ public class PlaylistsVM extends AndroidViewModel { return apiResponseMutableLiveData; } - public LiveData updateCreate(action apiAction, String playlistId, PlaylistParams playlistParams, File thumbnail) { + public LiveData videoExists(List videoIds) { apiResponseMutableLiveData = new MutableLiveData<>(); - createOrUpdate(apiAction, playlistId, playlistParams, thumbnail); + checkVideosExist(videoIds); return apiResponseMutableLiveData; } - private void createOrUpdate(action apiAction, String playlistId, PlaylistParams playlistParams, File thumbnail) { + private void checkVideosExist(List videoIds) { Context _mContext = getApplication().getApplicationContext(); new Thread(() -> { - APIResponse apiResponse = new RetrofitPeertubeAPI(_mContext).createOrUpdatePlaylist(apiAction, playlistId, playlistParams, thumbnail); + APIResponse apiResponse = new RetrofitPeertubeAPI(_mContext).getVideosExist(videoIds); Handler mainHandler = new Handler(Looper.getMainLooper()); Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse); mainHandler.post(myRunnable); @@ -106,7 +107,6 @@ public class PlaylistsVM extends AndroidViewModel { UPDATE_PLAYLIST, DELETE_PLAYLIST, ADD_VIDEOS, - DELETE_VIDEOS, - GET_PLAYLIST_FOR_VIDEO, + DELETE_VIDEOS } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c7573e9..15bd318 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -14,36 +14,59 @@ You should have received a copy of the GNU General Public License along with TubeLab; if not, see . --> - + android:layout_height="match_parent" + android:fitsSystemWindows="true" + tools:openDrawer="start"> - - - + android:layout_height="match_parent" + tools:context=".MainActivity"> + + + + - \ No newline at end of file + + + + + \ No newline at end of file