diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/BrowseGridFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/BrowseGridFragment.java index 4b0b459dac..e4d5d44bac 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/BrowseGridFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/BrowseGridFragment.java @@ -62,7 +62,6 @@ import org.jellyfin.androidtv.util.KeyProcessor; import org.jellyfin.androidtv.util.Utils; import org.jellyfin.apiclient.interaction.EmptyResponse; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.querying.ArtistsQuery; import org.jellyfin.apiclient.model.querying.ItemFields; import org.jellyfin.sdk.model.api.BaseItemDto; @@ -950,8 +949,8 @@ private void refreshCurrentItem() { mediaManager.getValue().setCurrentMediaPosition(-1); // re-set so it doesn't mess with parent views } - if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemType.Photo && mCurrentItem.getBaseItemType() != BaseItemType.PhotoAlbum - && mCurrentItem.getBaseItemType() != BaseItemType.MusicArtist && mCurrentItem.getBaseItemType() != BaseItemType.MusicAlbum) { + if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemKind.PHOTO && mCurrentItem.getBaseItemType() != BaseItemKind.PHOTO_ALBUM + && mCurrentItem.getBaseItemType() != BaseItemKind.MUSIC_ARTIST && mCurrentItem.getBaseItemType() != BaseItemKind.MUSIC_ALBUM) { Timber.d("Refresh item \"%s\"", mCurrentItem.getFullName(requireContext())); mCurrentItem.refresh(new EmptyResponse() { @Override diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/EnhancedBrowseFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/EnhancedBrowseFragment.java index ef78662805..88e673ed22 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/EnhancedBrowseFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/EnhancedBrowseFragment.java @@ -57,6 +57,7 @@ import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.serialization.GsonJsonSerializer; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.constant.CollectionType; import org.koin.java.KoinJavaComponent; @@ -351,15 +352,15 @@ public void onMessageReceived(CustomMessage message) { private void refreshCurrentItem() { if (mCurrentItem != null && - mCurrentItem.getBaseItemType() != BaseItemType.Photo && - mCurrentItem.getBaseItemType() != BaseItemType.MusicArtist && - mCurrentItem.getBaseItemType() != BaseItemType.MusicAlbum && - mCurrentItem.getBaseItemType() != BaseItemType.Playlist + mCurrentItem.getBaseItemType() != BaseItemKind.PHOTO && + mCurrentItem.getBaseItemType() != BaseItemKind.MUSIC_ARTIST && + mCurrentItem.getBaseItemType() != BaseItemKind.MUSIC_ALBUM && + mCurrentItem.getBaseItemType() != BaseItemKind.PLAYLIST ) { mCurrentItem.refresh(new EmptyResponse() { @Override public void onResponse() { - ItemRowAdapter adapter = (ItemRowAdapter) ((ListRow) mCurrentRow).getAdapter(); + ItemRowAdapter adapter = (ItemRowAdapter) mCurrentRow.getAdapter(); adapter.notifyArrayItemRangeChanged(adapter.indexOf(mCurrentItem), 1); } }); diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/GenericFolderFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/GenericFolderFragment.java index aef9ee1dc4..23151de9d1 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/GenericFolderFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/GenericFolderFragment.java @@ -5,9 +5,11 @@ import org.jellyfin.androidtv.R; import org.jellyfin.androidtv.data.querying.StdItemQuery; import org.jellyfin.androidtv.util.Utils; -import org.jellyfin.apiclient.model.dto.BaseItemType; +import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.model.entities.SortOrder; import org.jellyfin.apiclient.model.querying.ItemFilter; +import org.jellyfin.sdk.model.api.BaseItemDto; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.constant.ItemSortBy; import java.util.Arrays; @@ -18,21 +20,28 @@ public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } - private static BaseItemType[] showSpecialViewTypes = new BaseItemType[]{BaseItemType.CollectionFolder, BaseItemType.Folder, BaseItemType.UserView, BaseItemType.ChannelFolderItem}; + private static BaseItemKind[] showSpecialViewTypes = new BaseItemKind[]{ + BaseItemKind.COLLECTION_FOLDER, + BaseItemKind.FOLDER, + BaseItemKind.USER_VIEW, + BaseItemKind.CHANNEL_FOLDER_ITEM + }; @Override protected void setupQueries(RowLoader rowLoader) { - if (Utils.getSafeValue(mFolder.getChildCount(), 0) > 0 || - mFolder.getBaseItemType() == BaseItemType.Channel || - mFolder.getBaseItemType() == BaseItemType.ChannelFolderItem || - mFolder.getBaseItemType() == BaseItemType.UserView || - mFolder.getBaseItemType() == BaseItemType.CollectionFolder) { - boolean showSpecialViews = Arrays.asList(showSpecialViewTypes).contains(mFolder.getBaseItemType()) && !"channels".equals(mFolder.getCollectionType()); + BaseItemDto folder = ModelCompat.asSdk(mFolder); + + if (Utils.getSafeValue(folder.getChildCount(), 0) > 0 || + folder.getType() == BaseItemKind.CHANNEL || + folder.getType() == BaseItemKind.CHANNEL_FOLDER_ITEM || + folder.getType() == BaseItemKind.USER_VIEW || + folder.getType() == BaseItemKind.COLLECTION_FOLDER) { + boolean showSpecialViews = Arrays.asList(showSpecialViewTypes).contains(folder.getType()); if (showSpecialViews) { - if (mFolder.getBaseItemType() != BaseItemType.ChannelFolderItem) { + if (folder.getType() != BaseItemKind.CHANNEL_FOLDER_ITEM) { StdItemQuery resume = new StdItemQuery(); - resume.setParentId(mFolder.getId()); + resume.setParentId(folder.getId().toString()); resume.setLimit(50); resume.setFilters(new ItemFilter[]{ItemFilter.IsResumable}); resume.setSortBy(new String[]{ItemSortBy.DatePlayed}); @@ -41,7 +50,7 @@ protected void setupQueries(RowLoader rowLoader) { } StdItemQuery latest = new StdItemQuery(); - latest.setParentId(mFolder.getId()); + latest.setParentId(folder.getId().toString()); latest.setLimit(50); latest.setFilters(new ItemFilter[]{ItemFilter.IsUnplayed}); latest.setSortBy(new String[]{ItemSortBy.DateCreated}); @@ -51,8 +60,8 @@ protected void setupQueries(RowLoader rowLoader) { } StdItemQuery byName = new StdItemQuery(); - byName.setParentId(mFolder.getId()); - String header = (mFolder.getBaseItemType() == BaseItemType.Season) ? mFolder.getName() : getString(R.string.lbl_by_name); + byName.setParentId(folder.getId().toString()); + String header = (folder.getType() == BaseItemKind.SEASON) ? folder.getName() : getString(R.string.lbl_by_name); mRows.add(new BrowseRowDef(header, byName, 100)); rowLoader.loadRows(mRows); diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdBrowseFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdBrowseFragment.java index 015ec5877a..c391509fae 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdBrowseFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdBrowseFragment.java @@ -37,7 +37,7 @@ import org.jellyfin.androidtv.ui.presentation.PositionableListRowPresenter; import org.jellyfin.androidtv.util.Utils; import org.jellyfin.apiclient.interaction.EmptyResponse; -import org.jellyfin.apiclient.model.dto.BaseItemType; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.util.ArrayList; @@ -219,7 +219,7 @@ protected void setupEventListeners() { } private void refreshCurrentItem() { - if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemType.UserView && mCurrentItem.getBaseItemType() != BaseItemType.CollectionFolder) { + if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemKind.USER_VIEW && mCurrentItem.getBaseItemType() != BaseItemKind.COLLECTION_FOLDER) { Timber.d("Refresh item \"%s\"", mCurrentItem.getFullName(requireContext())); mCurrentItem.refresh(new EmptyResponse() { @Override diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdRowsFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdRowsFragment.java index 56078267fe..0e6d185b61 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdRowsFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/browsing/StdRowsFragment.java @@ -31,7 +31,7 @@ import org.jellyfin.androidtv.ui.shared.MessageListener; import org.jellyfin.androidtv.util.KeyProcessor; import org.jellyfin.apiclient.interaction.EmptyResponse; -import org.jellyfin.apiclient.model.dto.BaseItemType; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.util.ArrayList; @@ -208,7 +208,7 @@ public void onMessageReceived(CustomMessage message) { } private void refreshCurrentItem() { - if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemType.UserView && mCurrentItem.getBaseItemType() != BaseItemType.CollectionFolder) { + if (mCurrentItem != null && mCurrentItem.getBaseItemType() != BaseItemKind.USER_VIEW && mCurrentItem.getBaseItemType() != BaseItemKind.COLLECTION_FOLDER) { Timber.d("Refresh item \"%s\"", mCurrentItem.getFullName(requireContext())); mCurrentItem.refresh(new EmptyResponse() { @Override diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/card/LegacyImageCardView.java b/app/src/main/java/org/jellyfin/androidtv/ui/card/LegacyImageCardView.java index e230f99603..cfda536d43 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/card/LegacyImageCardView.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/card/LegacyImageCardView.java @@ -116,21 +116,21 @@ public void setOverlayInfo(BaseRowItem item) { if (getCardType() == BaseCardView.CARD_TYPE_MAIN_ONLY && item.showCardInfoOverlay()) { switch (item.getBaseItemType()) { - case Photo: + case PHOTO: binding.overlayText.setText(item.getBaseItem().getPremiereDate() != null ? android.text.format.DateFormat.getDateFormat(getContext()).format(TimeUtils.convertToLocalDate(item.getBaseItem().getPremiereDate())) : item.getFullName(getContext())); binding.icon.setImageResource(R.drawable.ic_camera); break; - case PhotoAlbum: + case PHOTO_ALBUM: binding.overlayText.setText(item.getFullName(getContext())); binding.icon.setImageResource(R.drawable.ic_photos); break; - case Video: + case VIDEO: binding.overlayText.setText(item.getFullName(getContext())); binding.icon.setImageResource(R.drawable.ic_movie); break; - case Playlist: - case MusicArtist: - case Person: + case PLAYLIST: + case MUSIC_ARTIST: + case PERSON: binding.overlayText.setText(item.getFullName(getContext())); hideIcon(); break; diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsActivity.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsActivity.java index 5a7197d24c..0afd7b4ead 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsActivity.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/FullDetailsActivity.java @@ -2,7 +2,6 @@ import static org.koin.java.KoinJavaComponent.inject; -import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.DialogInterface; @@ -256,9 +255,9 @@ public void run() { // if last playback event exists, and event time is greater than last sync or within 2 seconds of current time // the third condition accounts for a situation where a sync (dataRefresh) coincides with the end of playback - if (lastPlaybackTime > 0 && (lastPlaybackTime > mLastUpdated.getTimeInMillis() || System.currentTimeMillis() - lastPlaybackTime < 2000) && mBaseItem.getBaseItemType() != BaseItemType.MusicArtist) { + if (lastPlaybackTime > 0 && (lastPlaybackTime > mLastUpdated.getTimeInMillis() || System.currentTimeMillis() - lastPlaybackTime < 2000) && ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.MUSIC_ARTIST) { org.jellyfin.sdk.model.api.BaseItemDto lastPlayedItem = dataRefreshService.getValue().getLastPlayedItem(); - if (mBaseItem.getBaseItemType() == BaseItemType.Episode && lastPlayedItem != null && !mBaseItem.getId().equals(lastPlayedItem.getId().toString()) && lastPlayedItem.getType() == BaseItemKind.EPISODE) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.EPISODE && lastPlayedItem != null && !mBaseItem.getId().equals(lastPlayedItem.getId().toString()) && lastPlayedItem.getType() == BaseItemKind.EPISODE) { Timber.i("Re-loading after new episode playback"); loadItem(lastPlayedItem.getId().toString()); dataRefreshService.getValue().setLastPlayedItem(null); //blank this out so a detail screen we back up to doesn't also do this @@ -270,7 +269,7 @@ public void onResponse(BaseItemDto response) { if (!isFinishing()) { mBaseItem = response; if (mResumeButton != null) { - boolean resumeVisible = (mBaseItem.getBaseItemType() == BaseItemType.Series && !mBaseItem.getUserData().getPlayed()) || response.getCanResume(); + boolean resumeVisible = (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.SERIES && !mBaseItem.getUserData().getPlayed()) || response.getCanResume(); mResumeButton.setVisibility(resumeVisible ? View.VISIBLE : View.GONE); if (response.getCanResume()) { mResumeButton.setLabel(getString(R.string.lbl_resume_from, TimeUtils.formatMillis((response.getUserData().getPlaybackPositionTicks()/10000) - getResumePreroll()))); @@ -428,7 +427,7 @@ protected MyDetailsOverviewRow doInBackground(BaseItemDto... params) { // Figure image size Double aspect = ImageUtils.getImageAspectRatio(item, false); - posterHeight = aspect > 1 ? Utils.convertDpToPixel(mActivity, 160) : Utils.convertDpToPixel(mActivity, item.getBaseItemType() == BaseItemType.Person || item.getBaseItemType() == BaseItemType.MusicArtist ? 300 : 200); + posterHeight = aspect > 1 ? Utils.convertDpToPixel(mActivity, 160) : Utils.convertDpToPixel(mActivity, ModelCompat.asSdk(item).getType() == BaseItemKind.PERSON || ModelCompat.asSdk(item).getType() == BaseItemKind.MUSIC_ARTIST ? 300 : 200); posterWidth = (int)((aspect) * posterHeight); if (posterHeight < 10) posterWidth = Utils.convertDpToPixel(mActivity, 150); //Guard against zero size images causing picasso to barf @@ -436,7 +435,7 @@ protected MyDetailsOverviewRow doInBackground(BaseItemDto... params) { String primaryImageUrl = ImageUtils.getLogoImageUrl(mBaseItem, 600, true); if (primaryImageUrl == null) { - primaryImageUrl = ImageUtils.getPrimaryImageUrl(mActivity, mBaseItem, false, posterHeight); + primaryImageUrl = ImageUtils.getPrimaryImageUrl(mBaseItem, false, posterHeight); if (item.getRunTimeTicks() != null && item.getRunTimeTicks() > 0 && item.getUserData() != null && item.getUserData().getPlaybackPositionTicks() > 0) mDetailsOverviewRow.setProgress(((int) (item.getUserData().getPlaybackPositionTicks() * 100.0 / item.getRunTimeTicks()))); } @@ -451,7 +450,7 @@ protected MyDetailsOverviewRow doInBackground(BaseItemDto... params) { BaseItemPerson director = BaseItemExtensionsKt.getFirstPerson(ModelCompat.asSdk(item), PersonType.Director); InfoItem firstRow; - if (item.getBaseItemType() == BaseItemType.Series) { + if (ModelCompat.asSdk(item).getType() == BaseItemKind.SERIES) { firstRow = new InfoItem( getString(R.string.lbl_seasons), String.format("%d", Utils.getSafeValue(item.getChildCount(), 0))); @@ -822,10 +821,10 @@ private String getRunTime() { } private String getEndTime() { - if (mBaseItem != null && mBaseItem.getBaseItemType() != BaseItemType.MusicArtist && mBaseItem.getBaseItemType() != BaseItemType.Person) { + if (mBaseItem != null && ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.MUSIC_ARTIST && ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.PERSON) { Long runtime = Utils.getSafeValue(mBaseItem.getRunTimeTicks(), mBaseItem.getOriginalRunTimeTicks()); if (runtime != null && runtime > 0) { - long endTimeTicks = mBaseItem.getBaseItemType() == BaseItemType.Program && mBaseItem.getEndDate() != null ? TimeUtils.convertToLocalDate(mBaseItem.getEndDate()).getTime() : System.currentTimeMillis() + runtime / 10000; + long endTimeTicks = ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.PROGRAM && mBaseItem.getEndDate() != null ? TimeUtils.convertToLocalDate(mBaseItem.getEndDate()).getTime() : System.currentTimeMillis() + runtime / 10000; if (mBaseItem.getCanResume()) { endTimeTicks = System.currentTimeMillis() + ((runtime - mBaseItem.getUserData().getPlaybackPositionTicks()) / 10000); } @@ -837,8 +836,9 @@ private String getEndTime() { } private void addItemToQueue() { - if (mBaseItem.getBaseItemType() == BaseItemType.Audio || mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum || mBaseItem.getBaseItemType() == BaseItemType.MusicArtist) { - if (mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum || mBaseItem.getBaseItemType() == BaseItemType.MusicArtist) { + org.jellyfin.sdk.model.api.BaseItemDto baseItem = ModelCompat.asSdk(mBaseItem); + if (baseItem.getType() == BaseItemKind.AUDIO || baseItem.getType() == BaseItemKind.MUSIC_ALBUM || baseItem.getType() == BaseItemKind.MUSIC_ARTIST) { + if (baseItem.getType() == BaseItemKind.MUSIC_ALBUM || baseItem.getType() == BaseItemKind.MUSIC_ARTIST) { PlaybackHelper.getItemsToPlay(mBaseItem, false, false, new Response>() { @Override public void onResponse(List response) { @@ -880,8 +880,9 @@ private void gotoSeries() { private TextUnderButton trailerButton = null; private void addButtons(int buttonSize) { + org.jellyfin.sdk.model.api.BaseItemDto baseItem = ModelCompat.asSdk(mBaseItem); String buttonLabel; - if (mBaseItem.getBaseItemType() == BaseItemType.Series || mBaseItem.getBaseItemType() == BaseItemType.SeriesTimer) { + if (baseItem.getType() == BaseItemKind.SERIES) { buttonLabel = getString(R.string.lbl_play_next_up); } else { long startPos = 0; @@ -893,7 +894,7 @@ private void addButtons(int buttonSize) { mResumeButton = TextUnderButton.create(this, R.drawable.ic_resume, buttonSize, 2, buttonLabel, new View.OnClickListener() { @Override public void onClick(View v) { - if (mBaseItem.getBaseItemType() == BaseItemType.Series) { + if (baseItem.getType() == BaseItemKind.SERIES) { //play next up NextUpQuery nextUpQuery = new NextUpQuery(); nextUpQuery.setUserId(KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString()); @@ -924,7 +925,7 @@ public void onError(Exception exception) { }); //playButton becomes playWith button - if (userPreferences.getValue().get(UserPreferences.Companion.getVideoPlayer()) == PreferredVideoPlayer.CHOOSE && (mBaseItem.getBaseItemType() == BaseItemType.Series || mBaseItem.getBaseItemType() == BaseItemType.Movie || mBaseItem.getBaseItemType() == BaseItemType.Video || mBaseItem.getBaseItemType() == BaseItemType.Episode)) { + if (userPreferences.getValue().get(UserPreferences.Companion.getVideoPlayer()) == PreferredVideoPlayer.CHOOSE && (baseItem.getType() == BaseItemKind.SERIES || baseItem.getType() == BaseItemKind.MOVIE || baseItem.getType() == BaseItemKind.VIDEO || baseItem.getType() == BaseItemKind.EPISODE)) { playButton = TextUnderButton.create(this, R.drawable.ic_play, buttonSize, 3, getString(R.string.play_with), new View.OnClickListener() { @Override public void onClick(View view) { @@ -936,9 +937,9 @@ public void onClick(View view) { }); mDetailsOverviewRow.addAction(playButton); } else { //here playButton is only a play button - if (BaseItemExtensionsKt.canPlay(ModelCompat.asSdk(mBaseItem))) { + if (BaseItemExtensionsKt.canPlay(baseItem)) { mDetailsOverviewRow.addAction(mResumeButton); - boolean resumeButtonVisible = (mBaseItem.getBaseItemType() == BaseItemType.Series && !mBaseItem.getUserData().getPlayed()) || (mBaseItem.getCanResume()); + boolean resumeButtonVisible = (baseItem.getType() == BaseItemKind.SERIES && !mBaseItem.getUserData().getPlayed()) || (mBaseItem.getCanResume()); mResumeButton.setVisibility(resumeButtonVisible ? View.VISIBLE : View.GONE); playButton = TextUnderButton.create(this, R.drawable.ic_play, buttonSize, 2, getString(BaseItemExtensionsKt.isLiveTv(ModelCompat.asSdk(mBaseItem)) ? R.string.lbl_tune_to_channel : mBaseItem.getIsFolderItem() ? R.string.lbl_play_all : R.string.lbl_play), new View.OnClickListener() { @@ -956,10 +957,10 @@ public void onClick(View v) { playButton.requestFocus(); } - boolean isMusic = mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum - || mBaseItem.getBaseItemType() == BaseItemType.MusicArtist - || mBaseItem.getBaseItemType() == BaseItemType.Audio - || (mBaseItem.getBaseItemType() == BaseItemType.Playlist && MediaType.Audio.equals(mBaseItem.getMediaType())); + boolean isMusic = baseItem.getType() == BaseItemKind.MUSIC_ALBUM + || baseItem.getType() == BaseItemKind.MUSIC_ARTIST + || baseItem.getType() == BaseItemKind.AUDIO + || (baseItem.getType() == BaseItemKind.PLAYLIST && MediaType.Audio.equals(mBaseItem.getMediaType())); if (isMusic) { queueButton = TextUnderButton.create(this, R.drawable.ic_add, buttonSize, 2, getString(R.string.lbl_add_to_queue), new View.OnClickListener() { @@ -971,7 +972,7 @@ public void onClick(View v) { mDetailsOverviewRow.addAction(queueButton); } - if (mBaseItem.getIsFolderItem() || mBaseItem.getBaseItemType() == BaseItemType.MusicArtist) { + if (mBaseItem.getIsFolderItem() || baseItem.getType() == BaseItemKind.MUSIC_ARTIST) { shuffleButton = TextUnderButton.create(this, R.drawable.ic_shuffle, buttonSize, 2, getString(R.string.lbl_shuffle_all), new View.OnClickListener() { @Override public void onClick(View v) { @@ -981,7 +982,7 @@ public void onClick(View v) { mDetailsOverviewRow.addAction(shuffleButton); } - if (mBaseItem.getBaseItemType() == BaseItemType.MusicArtist) { + if (baseItem.getType() == BaseItemKind.MUSIC_ARTIST) { TextUnderButton imix = TextUnderButton.create(this, R.drawable.ic_mix, buttonSize, 0, getString(R.string.lbl_instant_mix), new View.OnClickListener() { @Override public void onClick(View v) { @@ -1170,7 +1171,7 @@ public void onClick(View v) { UserItemDataDto userData = mBaseItem.getUserData(); if (userData != null && mProgramInfo == null) { - if (mBaseItem.getBaseItemType() != BaseItemType.MusicArtist && mBaseItem.getBaseItemType() != BaseItemType.Person) { + if (ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.MUSIC_ARTIST && ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.PERSON) { mWatchedToggleButton = TextUnderButton.create(this, R.drawable.ic_watch, buttonSize, 0, getString(R.string.lbl_watched), markWatchedListener); mWatchedToggleButton.setActivated(userData.getPlayed()); mDetailsOverviewRow.addAction(mWatchedToggleButton); @@ -1187,7 +1188,7 @@ public void onClick(final View v) { mDetailsOverviewRow.addAction(favButton); } - if (mBaseItem.getBaseItemType() == BaseItemType.Episode && mBaseItem.getSeriesId() != null) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.EPISODE && mBaseItem.getSeriesId() != null) { //add the prev button first so it will be there in proper position - we'll show it later if needed mPrevButton = TextUnderButton.create(this, R.drawable.ic_previous_episode, buttonSize, 3, getString(R.string.lbl_previous_episode), new View.OnClickListener() { @Override @@ -1243,11 +1244,10 @@ public void onClick(View v) { })); //Delete - final Activity activity = this; TextUnderButton del = TextUnderButton.create(this, R.drawable.ic_trash, buttonSize, 0, getString(R.string.lbl_cancel_series), new View.OnClickListener() { @Override public void onClick(View v) { - new AlertDialog.Builder(activity) + new AlertDialog.Builder(FullDetailsActivity.this) .setTitle(R.string.lbl_delete) .setMessage(getString(R.string.msg_cancel_entire_series)) .setPositiveButton(R.string.lbl_cancel_series, new DialogInterface.OnClickListener() { @@ -1255,14 +1255,14 @@ public void onClick(DialogInterface dialog, int whichButton) { apiClient.getValue().CancelLiveTvSeriesTimerAsync(mSeriesTimerInfo.getId(), new EmptyResponse() { @Override public void onResponse() { - Utils.showToast(activity, mSeriesTimerInfo.getName() + " Canceled"); + Utils.showToast(FullDetailsActivity.this, mSeriesTimerInfo.getName() + " Canceled"); dataRefreshService.getValue().setLastDeletedItemId(mSeriesTimerInfo.getId()); finish(); } @Override public void onError(Exception ex) { - Utils.showToast(activity, ex.getLocalizedMessage()); + Utils.showToast(FullDetailsActivity.this, ex.getLocalizedMessage()); } }); } @@ -1328,8 +1328,7 @@ public void onClick(View v) { moreButton.setVisibility(View.GONE); mDetailsOverviewRow.addAction(moreButton); - if (mBaseItem.getBaseItemType() != BaseItemType.Episode) showMoreButtonIfNeeded(); //Episodes check for previous and then call this above - + if (ModelCompat.asSdk(mBaseItem).getType() != BaseItemKind.EPISODE) showMoreButtonIfNeeded(); //Episodes check for previous and then call this above } private void addVersionsMenu(View v) { @@ -1434,7 +1433,7 @@ public boolean onMenuItemClick(MenuItem item) { PlaybackHelper.getItemsToPlay(mBaseItem, false , false, new Response>() { @Override public void onResponse(List response) { - if (mBaseItem.getBaseItemType() == BaseItemType.MusicArtist) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.MUSIC_ARTIST) { mediaManager.getValue().playNow(FullDetailsActivity.this, response, false); } else { Intent intent = new Intent(FullDetailsActivity.this, ExternalPlayerActivity.class); @@ -1586,16 +1585,16 @@ public void onResponse(UserItemDataDto response) { } protected void play(final BaseItemDto item, final int pos, final boolean shuffle) { - PlaybackHelper.getItemsToPlay(item, pos == 0 && item.getBaseItemType() == BaseItemType.Movie, shuffle, new Response>() { + PlaybackHelper.getItemsToPlay(item, pos == 0 && ModelCompat.asSdk(item).getType() == BaseItemKind.MOVIE, shuffle, new Response>() { @Override public void onResponse(List response) { PlaybackLauncher playbackLauncher = KoinJavaComponent.get(PlaybackLauncher.class); if (playbackLauncher.interceptPlayRequest(FullDetailsActivity.this, item)) return; - if (item.getBaseItemType() == BaseItemType.MusicArtist) { + if (ModelCompat.asSdk(item).getType() == BaseItemKind.MUSIC_ARTIST) { mediaManager.getValue().playNow(FullDetailsActivity.this, response, shuffle); } else { - Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(item.getBaseItemType()); + Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(item).getType()); Intent intent = new Intent(FullDetailsActivity.this, activity); mediaManager.getValue().setCurrentVideoQueue(response); intent.putExtra("Position", pos); @@ -1608,7 +1607,7 @@ public void onResponse(List response) { protected void play(final BaseItemDto[] items, final int pos, final boolean shuffle) { List itemsToPlay = Arrays.asList(items); - Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(items[0].getBaseItemType()); + Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(items[0]).getType()); Intent intent = new Intent(this, activity); if (shuffle) Collections.shuffle(itemsToPlay); mediaManager.getValue().setCurrentVideoQueue(itemsToPlay); diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java index 60c9a53800..4cad7733ef 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemdetail/ItemListActivity.java @@ -55,6 +55,7 @@ import org.jellyfin.apiclient.model.querying.ItemFields; import org.jellyfin.apiclient.model.querying.ItemFilter; import org.jellyfin.apiclient.model.querying.ItemsResult; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.constant.ItemSortBy; import org.jellyfin.sdk.model.constant.MediaType; import org.koin.java.KoinJavaComponent; @@ -149,7 +150,7 @@ public void onRowSelected(ItemRowView row) { mItemList.setRowClickedListener(new ItemRowView.RowClickedListener() { @Override public void onRowClicked(ItemRowView row) { - showMenu(row, row.getItem().getBaseItemType() != BaseItemType.Audio); + showMenu(row, ModelCompat.asSdk(row.getItem()).getType() != BaseItemKind.AUDIO); } }); @@ -294,7 +295,7 @@ public boolean onMenuItemClick(MenuItem item) { return true; } }); - if (row.getItem().getBaseItemType() == BaseItemType.Audio) { + if (ModelCompat.asSdk(row.getItem()).getType() == BaseItemKind.AUDIO) { MenuItem mix = menu.getMenu().add(0, 1, order++, R.string.lbl_instant_mix); mix.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override @@ -347,7 +348,7 @@ public void setBaseItem(BaseItemDto item) { updatePoster(mBaseItem); //get items - if (mBaseItem.getBaseItemType() == BaseItemType.Playlist) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.PLAYLIST) { // Have to use different query here switch (mItemId) { case FAV_SONGS: @@ -460,7 +461,7 @@ private void play(List items, int ndx, boolean shuffle) { if (shuffle) { Collections.shuffle(items); } - Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(mBaseItem.getBaseItemType()); + Class activity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(mBaseItem).getType()); Intent intent = new Intent(mActivity, activity); //Resume item if needed BaseItemDto item = items.size() > 0 ? items.get(ndx) : null; @@ -497,7 +498,7 @@ public void onClick(View v) { boolean hidePlayButton = false; TextUnderButton queueButton = null; // add to queue if a queue exists and mBaseItem is a MusicAlbum - if (mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum && mediaManager.getValue().hasAudioQueueItems()) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.MUSIC_ALBUM && mediaManager.getValue().hasAudioQueueItems()) { queueButton = TextUnderButton.create(this, R.drawable.ic_add, buttonSize, 2, getString(R.string.lbl_add_to_queue), new View.OnClickListener() { @Override public void onClick(View v) { @@ -538,7 +539,7 @@ public void onClick(View v) { } } - if (mBaseItem.getBaseItemType() == BaseItemType.MusicAlbum) { + if (ModelCompat.asSdk(mBaseItem).getType() == BaseItemKind.MUSIC_ALBUM) { TextUnderButton mix = TextUnderButton.create(this, R.drawable.ic_mix, buttonSize, 2, getString(R.string.lbl_instant_mix), new View.OnClickListener() { @Override public void onClick(final View v) { diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/BaseRowItem.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/BaseRowItem.java index 03f3aec209..890ae12269 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/BaseRowItem.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/BaseRowItem.java @@ -21,10 +21,10 @@ import org.jellyfin.apiclient.interaction.EmptyResponse; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.entities.ImageType; import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; import org.jellyfin.apiclient.model.livetv.SeriesTimerInfoDto; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.api.BaseItemPerson; import org.jellyfin.sdk.model.api.SearchHint; import org.jellyfin.sdk.model.api.UserDto; @@ -64,7 +64,7 @@ public BaseRowItem(int index, BaseItemDto item, boolean preferParentThumb, boole public BaseRowItem(int index, BaseItemDto item, boolean preferParentThumb, boolean staticHeight, SelectAction selectAction) { this.index = index; this.baseItem = item; - this.type = item.getBaseItemType() == BaseItemType.Program ? ItemType.LiveTvProgram : item.getBaseItemType() == BaseItemType.Recording ? ItemType.LiveTvRecording : ItemType.BaseItem; + this.type = ModelCompat.asSdk(item).getType() == BaseItemKind.PROGRAM ? ItemType.LiveTvProgram : ModelCompat.asSdk(item).getType() == BaseItemKind.RECORDING ? ItemType.LiveTvRecording : ItemType.BaseItem; this.preferParentThumb = preferParentThumb; this.staticHeight = staticHeight; this.selectAction = selectAction; @@ -182,10 +182,10 @@ public boolean isFolder() { public boolean showCardInfoOverlay() { return type == ItemType.BaseItem && baseItem != null - && Arrays.asList(BaseItemType.Folder, BaseItemType.PhotoAlbum, - BaseItemType.UserView, BaseItemType.CollectionFolder, BaseItemType.Photo, - BaseItemType.Video, BaseItemType.Person, BaseItemType.Playlist, - BaseItemType.MusicArtist).contains(baseItem.getBaseItemType()); + && Arrays.asList(BaseItemKind.FOLDER, BaseItemKind.PHOTO_ALBUM, + BaseItemKind.USER_VIEW, BaseItemKind.COLLECTION_FOLDER, BaseItemKind.PHOTO, + BaseItemKind.VIDEO, BaseItemKind.PERSON, BaseItemKind.PLAYLIST, + BaseItemKind.MUSIC_ARTIST).contains(ModelCompat.asSdk(baseItem).getType()); } public boolean isValid() { @@ -211,9 +211,9 @@ public String getImageUrl(Context context, org.jellyfin.androidtv.constant.Image case LiveTvRecording: switch (imageType) { case BANNER: - return ImageUtils.getBannerImageUrl(context, baseItem, apiClient.getValue(), maxHeight); + return ImageUtils.getBannerImageUrl(baseItem, apiClient.getValue(), maxHeight); case THUMB: - return ImageUtils.getThumbImageUrl(context, baseItem, apiClient.getValue(), maxHeight); + return ImageUtils.getThumbImageUrl(baseItem, apiClient.getValue(), maxHeight); default: return getPrimaryImageUrl(context, maxHeight); } @@ -227,7 +227,7 @@ public String getPrimaryImageUrl(Context context, int maxHeight) { case BaseItem: case LiveTvProgram: case LiveTvRecording: - return ImageUtils.getPrimaryImageUrl(context, baseItem, preferParentThumb, maxHeight); + return ImageUtils.getPrimaryImageUrl(baseItem, preferParentThumb, maxHeight); case Person: return ImageUtils.getPrimaryImageUrl(person, maxHeight); case Chapter: @@ -285,7 +285,7 @@ public boolean isPlayed() { public String getCardName(Context context) { switch (type) { case BaseItem: - if (baseItem.getBaseItemType() == BaseItemType.Audio) { + if (ModelCompat.asSdk(baseItem).getType() == BaseItemKind.AUDIO) { return baseItem.getAlbumArtist() != null ? baseItem.getAlbumArtist() : baseItem.getAlbum() != null ? baseItem.getAlbum() : ""; } default: @@ -321,7 +321,7 @@ public String getName(Context context) { case BaseItem: case LiveTvRecording: case LiveTvProgram: - return baseItem.getBaseItemType() == BaseItemType.Audio ? getFullName(context) : baseItem.getName(); + return ModelCompat.asSdk(baseItem).getType() == BaseItemKind.AUDIO ? getFullName(context) : baseItem.getName(); case Person: return person.getName(); case Chapter: @@ -389,9 +389,9 @@ public String getSubText(Context context) { return ""; } - public BaseItemType getBaseItemType() { + public BaseItemKind getBaseItemType() { if (baseItem != null) - return baseItem.getBaseItemType(); + return ModelCompat.asSdk(baseItem).getType(); else return null; } @@ -436,7 +436,7 @@ public long getRuntimeTicks() { public int getChildCount() { switch (type) { case BaseItem: - return isFolder() && baseItem.getBaseItemType() != BaseItemType.MusicArtist && baseItem.getChildCount() != null ? baseItem.getChildCount() : -1; + return isFolder() && ModelCompat.asSdk(baseItem).getType() != BaseItemKind.MUSIC_ARTIST && baseItem.getChildCount() != null ? baseItem.getChildCount() : -1; case Person: case Chapter: case SearchHint: @@ -451,7 +451,7 @@ public int getChildCount() { } public String getChildCountStr() { - if (baseItem != null && baseItem.getBaseItemType() == BaseItemType.Playlist && baseItem.getCumulativeRunTimeTicks() != null) { + if (baseItem != null && ModelCompat.asSdk(baseItem).getType() == BaseItemKind.PLAYLIST && baseItem.getCumulativeRunTimeTicks() != null) { return TimeUtils.formatMillis(baseItem.getCumulativeRunTimeTicks() / 10000); } else { Integer count = getChildCount(); @@ -463,9 +463,9 @@ public Drawable getBadgeImage(Context context) { if (baseItem != null) { switch (type) { case BaseItem: - if (baseItem.getBaseItemType() == BaseItemType.Movie && baseItem.getCriticRating() != null) { + if (ModelCompat.asSdk(baseItem).getType() == BaseItemKind.MOVIE && baseItem.getCriticRating() != null) { return baseItem.getCriticRating() > 59 ? ContextCompat.getDrawable(context, R.drawable.ic_rt_fresh) : ContextCompat.getDrawable(context, R.drawable.ic_rt_rotten); - } else if (baseItem.getBaseItemType() == BaseItemType.Program && baseItem.getTimerId() != null) { + } else if (ModelCompat.asSdk(baseItem).getType() == BaseItemKind.PROGRAM && baseItem.getTimerId() != null) { return baseItem.getSeriesTimerId() != null ? ContextCompat.getDrawable(context, R.drawable.ic_record_series_red) : ContextCompat.getDrawable(context, R.drawable.ic_record_red); } break; diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java index c78adc769e..a61979388c 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/itemhandling/ItemLauncher.java @@ -32,9 +32,9 @@ import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.library.PlayAccess; import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.api.SearchHint; import org.jellyfin.sdk.model.constant.CollectionType; import org.koin.java.KoinJavaComponent; @@ -230,10 +230,10 @@ public static void launch(final BaseRowItem rowItem, ItemRowAdapter adapter, int case Play: if (baseItem.getPlayAccess() == PlayAccess.Full) { //Just play it directly - PlaybackHelper.getItemsToPlay(baseItem, baseItem.getBaseItemType() == BaseItemType.Movie, false, new Response>() { + PlaybackHelper.getItemsToPlay(baseItem, ModelCompat.asSdk(baseItem).getType() == BaseItemKind.MOVIE, false, new Response>() { @Override public void onResponse(List response) { - Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(baseItem.getBaseItemType()); + Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(baseItem).getType()); Intent intent = new Intent(activity, newActivity); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(response); intent.putExtra("Position", 0); @@ -267,7 +267,7 @@ public void onResponse(BaseItemDto response) { List items = new ArrayList<>(); items.add(response); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(items); - Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(response.getBaseItemType()); + Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(response).getType()); Intent intent = new Intent(activity, newActivity); Long start = chapter.getStartPositionTicks() / 10000; intent.putExtra("Position", start.intValue()); @@ -283,14 +283,14 @@ public void onResponse(BaseItemDto response) { KoinJavaComponent.get(ApiClient.class).GetItemAsync(hint.getItemId().toString(), KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response() { @Override public void onResponse(BaseItemDto response) { - if (response.getIsFolderItem() && response.getBaseItemType() != BaseItemType.Series) { + if (response.getIsFolderItem() && ModelCompat.asSdk(response).getType() != BaseItemKind.SERIES) { // open generic folder browsing Intent intent = new Intent(activity, GenericGridActivity.class); intent.putExtra(Extras.Folder, Json.Default.encodeToString(org.jellyfin.sdk.model.api.BaseItemDto.Companion.serializer(), ModelCompat.asSdk(response))); activity.startActivity(intent); - } else if (response.getBaseItemType() == BaseItemType.Audio) { + } else if (ModelCompat.asSdk(response).getType() == BaseItemKind.AUDIO) { PlaybackHelper.retrieveAndPlay(response.getId(), false, activity); //produce item menu // KeyProcessor.HandleKey(KeyEvent.KEYCODE_MENU, rowItem, (BaseActivity) activity); @@ -299,7 +299,7 @@ public void onResponse(BaseItemDto response) { } else { Intent intent = new Intent(activity, FullDetailsActivity.class); intent.putExtra("ItemId", response.getId()); - if (response.getBaseItemType() == BaseItemType.Program) { + if (ModelCompat.asSdk(response).getType() == BaseItemKind.PROGRAM) { // TODO: Seems like this is never used... intent.putExtra("ItemType", response.getBaseItemType().name()); @@ -342,7 +342,7 @@ public void onError(Exception exception) { public void onResponse(BaseItemDto response) { List items = new ArrayList<>(); items.add(response); - Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(response.getBaseItemType()); + Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(ModelCompat.asSdk(response).getType()); Intent intent = new Intent(activity, newActivity); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(items); intent.putExtra("Position", 0); @@ -366,7 +366,7 @@ public void onResponse(BaseItemDto response) { @Override public void onResponse(List response) { // TODO Check whether this usage of BaseItemType.valueOf is okay. - Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(BaseItemType.valueOf(channel.getType())); + Class newActivity = KoinJavaComponent.get(PlaybackLauncher.class).getPlaybackActivityClass(BaseItemKind.valueOf(channel.getType())); Intent intent = new Intent(activity, newActivity); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(response); intent.putExtra("Position", 0); diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/AudioNowPlayingActivity.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/AudioNowPlayingActivity.java index 100b075813..397b7f6394 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/AudioNowPlayingActivity.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/AudioNowPlayingActivity.java @@ -420,7 +420,7 @@ private void updatePoster() { Double aspect = ImageUtils.getImageAspectRatio(mBaseItem, false); int posterHeight = aspect > 1 ? Utils.convertDpToPixel(mActivity, 150) : Utils.convertDpToPixel(mActivity, 250); - String primaryImageUrl = ImageUtils.getPrimaryImageUrl(this, mBaseItem, false, posterHeight); + String primaryImageUrl = ImageUtils.getPrimaryImageUrl(mBaseItem, false, posterHeight); Timber.d("Audio Poster url: %s", primaryImageUrl); mPoster.load(primaryImageUrl, null, ContextCompat.getDrawable(this, R.drawable.ic_album), aspect, 0); } diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/CustomPlaybackOverlayFragment.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/CustomPlaybackOverlayFragment.java index 18ce398ec1..253a33f562 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/CustomPlaybackOverlayFragment.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/CustomPlaybackOverlayFragment.java @@ -74,13 +74,13 @@ import org.jellyfin.apiclient.interaction.EmptyResponse; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.dto.ChapterInfoDto; import org.jellyfin.apiclient.model.dto.UserItemDataDto; import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; import org.jellyfin.apiclient.model.livetv.SeriesTimerInfoDto; import org.jellyfin.apiclient.model.mediainfo.SubtitleTrackEvent; import org.jellyfin.apiclient.model.mediainfo.SubtitleTrackInfo; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.util.ArrayList; @@ -1288,7 +1288,7 @@ public void updateDisplay() { tvGuideBinding.guideCurrentTitle.setText(current.getName()); // Update the title and subtitle - if (current.getBaseItemType() == BaseItemType.Episode) { + if (ModelCompat.asSdk(current).getType() == BaseItemKind.EPISODE) { binding.itemTitle.setText(current.getSeriesName()); binding.itemSubtitle.setText(BaseItemExtensionsKt.getDisplayName(ModelCompat.asSdk(current), requireContext())); } else { diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/ExternalPlayerActivity.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/ExternalPlayerActivity.java index ae72100ad9..733a6fcd94 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/ExternalPlayerActivity.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/ExternalPlayerActivity.java @@ -32,9 +32,9 @@ import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.dto.UserItemDataDto; import org.jellyfin.apiclient.model.session.PlayMethod; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.io.File; @@ -289,7 +289,7 @@ protected void launchExternalPlayer(int ndx) { //Get playback info for current item mCurrentNdx = ndx; BaseItemDto item = mItemsToPlay.get(mCurrentNdx); - isLiveTv = item.getBaseItemType() == BaseItemType.TvChannel; + isLiveTv = ModelCompat.asSdk(item).getType() == BaseItemKind.TV_CHANNEL; if (!isLiveTv && userPreferences.getValue().get(UserPreferences.Companion.getExternalVideoPlayerSendPath())) { // Just pass the path directly diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/MediaManager.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/MediaManager.java index a464d140dc..e5b63f8dd0 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/MediaManager.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/MediaManager.java @@ -37,14 +37,15 @@ import org.jellyfin.androidtv.util.apiclient.ReportingHelper; import org.jellyfin.androidtv.util.profile.ExoPlayerProfile; import org.jellyfin.androidtv.util.profile.LibVlcProfile; +import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dlna.DeviceProfile; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.playlists.PlaylistCreationRequest; import org.jellyfin.apiclient.model.playlists.PlaylistCreationResult; import org.jellyfin.sdk.model.DeviceInfo; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.constant.MediaType; import org.koin.java.KoinJavaComponent; import org.videolan.libvlc.LibVLC; @@ -619,7 +620,7 @@ public void playNow(Context context, final List items, int position List list = new ArrayList(); for (int i = 0; i < items.size(); i++){ - if (items.get(i).getBaseItemType() == BaseItemType.Audio) { + if (ModelCompat.asSdk(items.get(i)).getType() == BaseItemKind.AUDIO) { list.add(items.get(i)); } else if (i < position) { position--; diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java index d2ba09cea5..96fae6f6cc 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java @@ -41,7 +41,6 @@ import org.jellyfin.apiclient.model.dlna.DeviceProfile; import org.jellyfin.apiclient.model.dlna.SubtitleDeliveryMethod; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.dto.MediaSourceInfo; import org.jellyfin.apiclient.model.entities.LocationType; import org.jellyfin.apiclient.model.entities.MediaStream; @@ -50,6 +49,7 @@ import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; import org.jellyfin.apiclient.model.mediainfo.SubtitleTrackInfo; import org.jellyfin.apiclient.model.session.PlayMethod; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.util.ArrayList; @@ -540,7 +540,7 @@ public void onClick(DialogInterface dialog, int which) { return; } - isLiveTv = item.getBaseItemType() == BaseItemType.TvChannel; + isLiveTv = ModelCompat.asSdk(item).getType() == BaseItemKind.TV_CHANNEL; startSpinner(); // undo setting mSeekPosition for liveTV @@ -1307,7 +1307,7 @@ public void skip(int msec) { public void updateTvProgramInfo() { // Get the current program info when playing a live TV channel final BaseItemDto channel = getCurrentlyPlayingItem(); - if (channel.getBaseItemType() == BaseItemType.TvChannel) { + if (ModelCompat.asSdk(channel).getType() == BaseItemKind.TV_CHANNEL) { apiClient.getValue().GetLiveTvChannelAsync(channel.getId(), KoinJavaComponent.get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response() { @Override public void onResponse(ChannelInfoDto response) { @@ -1427,7 +1427,7 @@ private void itemComplete() { Timber.d("Moving to next queue item. Index: %s", (mCurrentIndex + 1)); if (userPreferences.getValue().get(UserPreferences.Companion.getNextUpBehavior()) != NextUpBehavior.DISABLED - && curItem.getBaseItemType() != BaseItemType.Trailer) { + && ModelCompat.asSdk(curItem).getType() != BaseItemKind.TRAILER) { mCurrentIndex++; mediaManager.getValue().setCurrentMediaPosition(mCurrentIndex); spinnerOff = false; diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackLauncher.kt b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackLauncher.kt index dfd091abda..55fc8b714c 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackLauncher.kt +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackLauncher.kt @@ -7,31 +7,31 @@ import org.jellyfin.androidtv.preference.UserPreferences import org.jellyfin.androidtv.preference.constant.PreferredVideoPlayer import org.jellyfin.androidtv.ui.playback.rewrite.PlaybackForwardingActivity import org.jellyfin.apiclient.model.dto.BaseItemDto -import org.jellyfin.apiclient.model.dto.BaseItemType +import org.jellyfin.sdk.model.api.BaseItemKind interface PlaybackLauncher { - fun useExternalPlayer(itemType: BaseItemType?): Boolean - fun getPlaybackActivityClass(itemType: BaseItemType?): Class + fun useExternalPlayer(itemType: BaseItemKind?): Boolean + fun getPlaybackActivityClass(itemType: BaseItemKind?): Class fun interceptPlayRequest(context: Context, item: BaseItemDto?): Boolean } class GarbagePlaybackLauncher( - private val userPreferences: UserPreferences + private val userPreferences: UserPreferences ) : PlaybackLauncher { - override fun useExternalPlayer(itemType: BaseItemType?) = when (itemType) { - BaseItemType.Movie, - BaseItemType.Episode, - BaseItemType.Video, - BaseItemType.Series, - BaseItemType.Recording, + override fun useExternalPlayer(itemType: BaseItemKind?) = when (itemType) { + BaseItemKind.MOVIE, + BaseItemKind.EPISODE, + BaseItemKind.VIDEO, + BaseItemKind.SERIES, + BaseItemKind.RECORDING, -> userPreferences[UserPreferences.videoPlayer] === PreferredVideoPlayer.EXTERNAL - BaseItemType.TvChannel, - BaseItemType.Program, + BaseItemKind.TV_CHANNEL, + BaseItemKind.PROGRAM, -> userPreferences[UserPreferences.liveTvVideoPlayer] === PreferredVideoPlayer.EXTERNAL else -> false } - override fun getPlaybackActivityClass(itemType: BaseItemType?) = when { + override fun getPlaybackActivityClass(itemType: BaseItemKind?) = when { useExternalPlayer(itemType) -> ExternalPlayerActivity::class.java else -> PlaybackOverlayActivity::class.java } @@ -40,8 +40,8 @@ class GarbagePlaybackLauncher( } class RewritePlaybackLauncher : PlaybackLauncher { - override fun useExternalPlayer(itemType: BaseItemType?) = false - override fun getPlaybackActivityClass(itemType: BaseItemType?) = PlaybackForwardingActivity::class.java + override fun useExternalPlayer(itemType: BaseItemKind?) = false + override fun getPlaybackActivityClass(itemType: BaseItemKind?) = PlaybackForwardingActivity::class.java override fun interceptPlayRequest(context: Context, item: BaseItemDto?): Boolean { if (item == null) return false diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/presentation/CardPresenter.java b/app/src/main/java/org/jellyfin/androidtv/ui/presentation/CardPresenter.java index 554feb5ba4..6b6e77c23c 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/presentation/CardPresenter.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/presentation/CardPresenter.java @@ -25,11 +25,12 @@ import org.jellyfin.androidtv.util.ImageUtils; import org.jellyfin.androidtv.util.TimeUtils; import org.jellyfin.androidtv.util.Utils; +import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.dto.UserItemDataDto; import org.jellyfin.apiclient.model.entities.LocationType; import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.koin.java.KoinJavaComponent; import java.util.Date; @@ -207,7 +208,7 @@ public void setItem(BaseRowItem m, ImageType imageType, int lHeight, int pHeight if (showWatched && userData != null) { WatchedIndicatorBehavior showIndicator = KoinJavaComponent.get(UserPreferences.class).get(UserPreferences.Companion.getWatchedIndicatorBehavior()); if (userData.getPlayed()) { - if (showIndicator != WatchedIndicatorBehavior.NEVER && (showIndicator != WatchedIndicatorBehavior.EPISODES_ONLY || itemDto.getBaseItemType() == BaseItemType.Episode)) + if (showIndicator != WatchedIndicatorBehavior.NEVER && (showIndicator != WatchedIndicatorBehavior.EPISODES_ONLY || ModelCompat.asSdk(itemDto).getType() == BaseItemKind.EPISODE)) mCardView.setUnwatchedCount(0); else mCardView.setUnwatchedCount(-1); @@ -389,7 +390,7 @@ public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { } else { holder.mCardView.setPlayingIndicator(false); - if (rowItem.getBaseItem() != null && rowItem.getBaseItemType() != BaseItemType.UserView) { + if (rowItem.getBaseItem() != null && rowItem.getBaseItemType() != BaseItemKind.USER_VIEW) { RatingType ratingType = KoinJavaComponent.get(UserPreferences.class).get(UserPreferences.Companion.getDefaultRatingType()); if (ratingType == RatingType.RATING_TOMATOES) { Drawable badge = rowItem.getBadgeImage(holder.view.getContext()); @@ -412,7 +413,7 @@ public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { if (aspect == ASPECT_RATIO_BANNER) { blurHashMap = rowItem.getBaseItem().getImageBlurHashes().get(org.jellyfin.apiclient.model.entities.ImageType.Banner); imageTag = rowItem.getBaseItem().getImageTags().get(org.jellyfin.apiclient.model.entities.ImageType.Banner); - } else if (aspect == ImageUtils.ASPECT_RATIO_16_9 && !isUserView && (rowItem.getBaseItemType() != BaseItemType.Episode || !rowItem.getBaseItem().getHasPrimaryImage() || (rowItem.getPreferParentThumb() && rowItem.getBaseItem().getParentThumbImageTag() != null))) { + } else if (aspect == ImageUtils.ASPECT_RATIO_16_9 && !isUserView && (rowItem.getBaseItemType() != BaseItemKind.EPISODE || !rowItem.getBaseItem().getHasPrimaryImage() || (rowItem.getPreferParentThumb() && rowItem.getBaseItem().getParentThumbImageTag() != null))) { blurHashMap = rowItem.getBaseItem().getImageBlurHashes().get(org.jellyfin.apiclient.model.entities.ImageType.Thumb); imageTag = (rowItem.getPreferParentThumb() || !rowItem.getBaseItem().getHasPrimaryImage()) ? rowItem.getBaseItem().getParentThumbImageTag() : rowItem.getBaseItem().getImageTags().get(org.jellyfin.apiclient.model.entities.ImageType.Thumb); } else { diff --git a/app/src/main/java/org/jellyfin/androidtv/util/ImageUtils.java b/app/src/main/java/org/jellyfin/androidtv/util/ImageUtils.java index ccf70f8f03..540a8c6368 100644 --- a/app/src/main/java/org/jellyfin/androidtv/util/ImageUtils.java +++ b/app/src/main/java/org/jellyfin/androidtv/util/ImageUtils.java @@ -8,15 +8,14 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.jellyfin.androidtv.R; import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.model.dto.BaseItemDto; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.dto.ImageOptions; import org.jellyfin.apiclient.model.dto.UserItemDataDto; import org.jellyfin.apiclient.model.entities.ImageType; import org.jellyfin.apiclient.model.livetv.ChannelInfoDto; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.api.BaseItemPerson; import org.jellyfin.sdk.model.api.UserDto; import org.koin.java.KoinJavaComponent; @@ -32,8 +31,8 @@ public class ImageUtils { public static final int MAX_PRIMARY_IMAGE_HEIGHT = 370; - private static final List THUMB_FALLBACK_TYPES = Collections.singletonList(BaseItemType.Episode); - private static final List PROGRESS_INDICATOR_TYPES = Arrays.asList(BaseItemType.Episode, BaseItemType.Movie, BaseItemType.MusicVideo, BaseItemType.Video); + private static final List THUMB_FALLBACK_TYPES = Collections.singletonList(BaseItemKind.EPISODE); + private static final List PROGRESS_INDICATOR_TYPES = Arrays.asList(BaseItemKind.EPISODE, BaseItemKind.MOVIE, BaseItemKind.MUSIC_VIDEO, BaseItemKind.VIDEO); public static Double getImageAspectRatio(BaseItemDto item, boolean preferParentThumb) { if (preferParentThumb && @@ -50,7 +49,7 @@ public static Double getImageAspectRatio(BaseItemDto item, boolean preferParentT } } - if (item.getBaseItemType() == BaseItemType.UserView && item.getHasPrimaryImage()) + if (ModelCompat.asSdk(item).getType() == BaseItemKind.USER_VIEW && item.getHasPrimaryImage()) return ImageUtils.ASPECT_RATIO_16_9; return item.getPrimaryImageAspectRatio() != null ? item.getPrimaryImageAspectRatio() : ASPECT_RATIO_7_9; @@ -83,9 +82,9 @@ public static String getImageUrl(@NonNull String itemId, @NonNull ImageType imag return KoinJavaComponent.get(ImageHelper.class).getImageUrl(itemId, ModelCompat.asSdk(imageType), imageTag); } - public static String getBannerImageUrl(Context context, BaseItemDto item, ApiClient apiClient, int maxHeight) { + public static String getBannerImageUrl(BaseItemDto item, ApiClient apiClient, int maxHeight) { if (!item.getHasBanner()) { - return getPrimaryImageUrl(context, item, false, maxHeight); + return getPrimaryImageUrl(item, false, maxHeight); } ImageOptions options = new ImageOptions(); @@ -93,7 +92,7 @@ public static String getBannerImageUrl(Context context, BaseItemDto item, ApiCli options.setImageType(ImageType.Banner); UserItemDataDto userData = item.getUserData(); - if (userData != null && item.getBaseItemType() != BaseItemType.MusicArtist && item.getBaseItemType() != BaseItemType.MusicAlbum) { + if (userData != null && ModelCompat.asSdk(item).getType() != BaseItemKind.MUSIC_ARTIST && ModelCompat.asSdk(item).getType() != BaseItemKind.MUSIC_ALBUM) { if (PROGRESS_INDICATOR_TYPES.contains(item.getBaseItemType()) && userData.getPlayedPercentage() != null && userData.getPlayedPercentage() > 0 && @@ -106,9 +105,9 @@ public static String getBannerImageUrl(Context context, BaseItemDto item, ApiCli return apiClient.GetImageUrl(item.getId(), options); } - public static String getThumbImageUrl(Context context, BaseItemDto item, ApiClient apiClient, int maxHeight) { + public static String getThumbImageUrl(BaseItemDto item, ApiClient apiClient, int maxHeight) { if (!item.getHasThumb()) { - return getPrimaryImageUrl(context, item, true, maxHeight); + return getPrimaryImageUrl(item, true, maxHeight); } ImageOptions options = new ImageOptions(); @@ -117,11 +116,7 @@ public static String getThumbImageUrl(Context context, BaseItemDto item, ApiClie return apiClient.GetImageUrl(item.getId(), options); } - public static String getPrimaryImageUrl(@NonNull Context context, @NonNull BaseItemDto item, @NonNull boolean preferParentThumb, @NonNull int maxHeight) { - if (item.getBaseItemType() == BaseItemType.SeriesTimer) { - return getResourceUrl(context, R.drawable.tile_land_series_timer); - } - + public static String getPrimaryImageUrl(@NonNull BaseItemDto item, @NonNull boolean preferParentThumb, @NonNull int maxHeight) { return KoinJavaComponent.get(ImageHelper.class).getPrimaryImageUrl(ModelCompat.asSdk(item), preferParentThumb, maxHeight); } diff --git a/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java b/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java index e0cf845eea..15db12a0e5 100644 --- a/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java +++ b/app/src/main/java/org/jellyfin/androidtv/util/KeyProcessor.java @@ -24,7 +24,6 @@ import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.interaction.Response; -import org.jellyfin.apiclient.model.dto.BaseItemType; import org.jellyfin.apiclient.model.entities.SortOrder; import org.jellyfin.apiclient.model.querying.ItemFilter; import org.jellyfin.apiclient.model.querying.ItemsResult; @@ -66,7 +65,7 @@ public static boolean HandleKey(int key, BaseRowItem rowItem, Activity activity) switch (key) { case KeyEvent.KEYCODE_MEDIA_PLAY: case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: - if (KoinJavaComponent.get(MediaManager.class).isPlayingAudio() && (!rowItem.isBaseItem() || rowItem.getBaseItemType() != BaseItemType.Photo)) { + if (KoinJavaComponent.get(MediaManager.class).isPlayingAudio() && (!rowItem.isBaseItem() || rowItem.getBaseItemType() != BaseItemKind.PHOTO)) { KoinJavaComponent.get(MediaManager.class).pauseAudio(); return true; } @@ -296,7 +295,7 @@ public static PopupMenu createItemMenu(BaseRowItem rowItem, UserItemDataDto user private static void createPlayMenu(org.jellyfin.apiclient.model.dto.BaseItemDto item, boolean isFolder, boolean isMusic, Activity activity) { PopupMenu menu = new PopupMenu(activity, activity.getCurrentFocus(), Gravity.END); int order = 0; - if (!isMusic && item.getBaseItemType() != BaseItemType.Playlist) { + if (!isMusic && ModelCompat.asSdk(item).getType() != BaseItemKind.PLAYLIST) { menu.getMenu().add(0, MENU_PLAY_FIRST_UNWATCHED, order++, R.string.lbl_play_first_unwatched); } menu.getMenu().add(0, MENU_PLAY, order++, R.string.lbl_play_all); diff --git a/app/src/main/java/org/jellyfin/androidtv/util/apiclient/PlaybackHelper.java b/app/src/main/java/org/jellyfin/androidtv/util/apiclient/PlaybackHelper.java index b3be1c7fec..c2bdc7197d 100644 --- a/app/src/main/java/org/jellyfin/androidtv/util/apiclient/PlaybackHelper.java +++ b/app/src/main/java/org/jellyfin/androidtv/util/apiclient/PlaybackHelper.java @@ -11,6 +11,7 @@ import org.jellyfin.androidtv.ui.playback.MediaManager; import org.jellyfin.androidtv.ui.playback.PlaybackLauncher; import org.jellyfin.androidtv.util.Utils; +import org.jellyfin.androidtv.util.sdk.compat.ModelCompat; import org.jellyfin.apiclient.interaction.ApiClient; import org.jellyfin.apiclient.interaction.Response; import org.jellyfin.apiclient.model.dto.BaseItemDto; @@ -23,6 +24,7 @@ import org.jellyfin.apiclient.model.querying.ItemQuery; import org.jellyfin.apiclient.model.querying.ItemsResult; import org.jellyfin.apiclient.model.querying.SimilarItemsQuery; +import org.jellyfin.sdk.model.api.BaseItemKind; import org.jellyfin.sdk.model.constant.ItemSortBy; import org.jellyfin.sdk.model.constant.MediaType; import org.koin.java.KoinJavaComponent; @@ -135,7 +137,7 @@ public void onResponse(ItemsResult response) { query.setIsMissing(false); query.setIsVirtualUnaired(false); query.setMediaTypes(new String[]{MediaType.Audio}); - query.setSortBy(mainItem.getBaseItemType() == BaseItemType.MusicArtist ? + query.setSortBy(ModelCompat.asSdk(mainItem).getType() == BaseItemKind.MUSIC_ARTIST ? new String[] {ItemSortBy.Album,ItemSortBy.SortName} : new String[] {ItemSortBy.SortName}); query.setRecursive(true); @@ -227,7 +229,7 @@ public void onResponse(ChannelInfoDto response) { break; default: - if (allowIntros && !KoinJavaComponent.get(PlaybackLauncher.class).useExternalPlayer(mainItem.getBaseItemType()) && KoinJavaComponent.get(UserPreferences.class).get(UserPreferences.Companion.getCinemaModeEnabled())) { + if (allowIntros && !KoinJavaComponent.get(PlaybackLauncher.class).useExternalPlayer(ModelCompat.asSdk(mainItem).getType()) && KoinJavaComponent.get(UserPreferences.class).get(UserPreferences.Companion.getCinemaModeEnabled())) { //Intros KoinJavaComponent.get(ApiClient.class).GetIntrosAsync(mainItem.getId(), userId.toString(), new Response() { @Override @@ -262,7 +264,7 @@ public static void play(final BaseItemDto item, final int pos, final boolean shu PlaybackLauncher playbackLauncher = KoinJavaComponent.get(PlaybackLauncher.class); if (playbackLauncher.interceptPlayRequest(activity, item)) return; - getItemsToPlay(item, pos == 0 && item.getBaseItemType() == BaseItemType.Movie, shuffle, new Response>() { + getItemsToPlay(item, pos == 0 && ModelCompat.asSdk(item).getType() == BaseItemKind.MOVIE, shuffle, new Response>() { @Override public void onResponse(List response) { switch (item.getBaseItemType()) { @@ -274,7 +276,7 @@ public void onResponse(List response) { if (MediaType.Audio.equals(item.getMediaType())) { KoinJavaComponent.get(MediaManager.class).playNow(activity, response, shuffle); } else { - BaseItemType itemType = response.size() > 0 ? response.get(0).getBaseItemType() : null; + BaseItemKind itemType = response.size() > 0 ? ModelCompat.asSdk(response.get(0)).getType() : null; Class newActivity = playbackLauncher.getPlaybackActivityClass(itemType); Intent intent = new Intent(activity, newActivity); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(response); @@ -291,7 +293,7 @@ public void onResponse(List response) { break; default: - Class newActivity = playbackLauncher.getPlaybackActivityClass(item.getBaseItemType()); + Class newActivity = playbackLauncher.getPlaybackActivityClass(ModelCompat.asSdk(item).getType()); Intent intent = new Intent(activity, newActivity); KoinJavaComponent.get(MediaManager.class).setCurrentVideoQueue(response); intent.putExtra("Position", pos);