Skip to content

Commit

Permalink
Remove GsonJsonSerializer
Browse files Browse the repository at this point in the history
Also migrates a bunch of stuff to the SDK so we can use kotlinx.serialization
  • Loading branch information
nielsvanvelzen committed Oct 7, 2022
1 parent 0a372fe commit efd9ed0
Show file tree
Hide file tree
Showing 15 changed files with 169 additions and 178 deletions.
3 changes: 0 additions & 3 deletions app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import org.jellyfin.androidtv.util.sdk.legacy
import org.jellyfin.apiclient.AppInfo
import org.jellyfin.apiclient.android
import org.jellyfin.apiclient.logging.AndroidLogger
import org.jellyfin.apiclient.serialization.GsonJsonSerializer
import org.jellyfin.sdk.android.androidDevice
import org.jellyfin.sdk.api.client.ApiClient
import org.jellyfin.sdk.createJellyfin
Expand Down Expand Up @@ -72,8 +71,6 @@ val appModule = module {
single { SocketHandler(get(), get(), get(), get(), get(), get(), get()) }

// Old apiclient
single { GsonJsonSerializer() }

single {
JellyfinApiClient {
appInfo = AppInfo("Android TV", BuildConfig.VERSION_NAME)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ public void showRecordingOptions(final boolean recordSeries) {
apiClient.getValue().GetLiveTvSeriesTimerAsync(mProgram.getSeriesTimerId(), new Response<SeriesTimerInfoDto>() {
@Override
public void onResponse(SeriesTimerInfoDto response) {
mRecordPopup.setContent(mActivity, mProgram, response, mSelectedProgramView, recordSeries);
mRecordPopup.setContent(mActivity, ModelCompat.asSdk(mProgram), response, mSelectedProgramView, recordSeries);
mRecordPopup.show();
}
});
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/org/jellyfin/androidtv/ui/RecordPopup.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
import org.jellyfin.apiclient.interaction.ApiClient;
import org.jellyfin.apiclient.interaction.EmptyResponse;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.livetv.SeriesTimerInfoDto;
import org.jellyfin.apiclient.model.livetv.TimerInfoDto;
import org.jellyfin.sdk.model.api.BaseItemDto;
import org.koin.java.KoinJavaComponent;

import java.util.ArrayList;
Expand Down Expand Up @@ -167,9 +167,9 @@ public void onResponse() {
mPopup.dismiss();
customMessageRepository.getValue().pushMessage(CustomMessage.ActionComplete.INSTANCE);
// we have to re-retrieve the program to get the timer id
apiClient.getValue().GetLiveTvProgramAsync(mProgramId, KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response<BaseItemDto>() {
apiClient.getValue().GetLiveTvProgramAsync(mProgramId, KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString(), new Response<org.jellyfin.apiclient.model.dto.BaseItemDto>() {
@Override
public void onResponse(BaseItemDto response) {
public void onResponse(org.jellyfin.apiclient.model.dto.BaseItemDto response) {
mSelectedView.setRecTimer(response.getTimerId());
mSelectedView.setRecSeriesTimer(response.getSeriesTimerId());
}
Expand Down Expand Up @@ -202,7 +202,7 @@ public boolean isShowing() {
}

public void setContent(Context context, BaseItemDto program, SeriesTimerInfoDto current, RecordingIndicatorView selectedView, boolean recordSeries) {
mProgramId = program.getId();
mProgramId = program.getId().toString();
mCurrentOptions = current;
mRecordSeries = recordSeries;
mSelectedView = selectedView;
Expand Down Expand Up @@ -254,7 +254,7 @@ private void setTimelineRow(Context context, LinearLayout timelineRow, BaseItemD
timelineRow.removeAllViews();
if (program.getStartDate() == null) return;

Date local = TimeUtils.convertToLocalDate(program.getStartDate());
Date local = TimeUtils.convertToLocalDate(TimeUtils.getDate(program.getStartDate()));
TextView on = new TextView(mActivity);
on.setText(mActivity.getString(R.string.lbl_on));
timelineRow.addView(on);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ protected void setupQueries(final RowLoader rowLoader) {
});
resumeMovies.setIncludeItemTypes(new String[]{"Movie"});
resumeMovies.setRecursive(true);
resumeMovies.setParentId(mFolder.getId());
resumeMovies.setParentId(mFolder.getId().toString());
resumeMovies.setImageTypeLimit(1);
resumeMovies.setLimit(50);
resumeMovies.setCollapseBoxSetItems(false);
Expand All @@ -93,7 +93,7 @@ protected void setupQueries(final RowLoader rowLoader) {
ItemFields.MediaSources,
ItemFields.MediaStreams
});
latestMovies.setParentId(mFolder.getId());
latestMovies.setParentId(mFolder.getId().toString());
latestMovies.setLimit(50);
latestMovies.setImageTypeLimit(1);
mRows.add(new BrowseRowDef(getString(R.string.lbl_latest), latestMovies, new ChangeTriggerType[]{ChangeTriggerType.MoviePlayback, ChangeTriggerType.LibraryUpdated}));
Expand All @@ -110,7 +110,7 @@ protected void setupQueries(final RowLoader rowLoader) {
});
favorites.setIncludeItemTypes(new String[]{"Movie"});
favorites.setRecursive(true);
favorites.setParentId(mFolder.getId());
favorites.setParentId(mFolder.getId().toString());
favorites.setImageTypeLimit(1);
favorites.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
favorites.setSortBy(new String[]{ItemSortBy.SortName});
Expand All @@ -137,7 +137,7 @@ protected void setupQueries(final RowLoader rowLoader) {
NextUpQuery nextUpQuery = new NextUpQuery();
nextUpQuery.setUserId(KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString());
nextUpQuery.setLimit(50);
nextUpQuery.setParentId(mFolder.getId());
nextUpQuery.setParentId(mFolder.getId().toString());
nextUpQuery.setImageTypeLimit(1);
nextUpQuery.setFields(new ItemFields[]{
ItemFields.PrimaryImageAspectRatio,
Expand All @@ -158,7 +158,7 @@ protected void setupQueries(final RowLoader rowLoader) {
});
newQuery.setUserId(KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId().toString());
newQuery.setIncludeItemTypes(new String[]{"Episode"});
newQuery.setParentId(mFolder.getId());
newQuery.setParentId(mFolder.getId().toString());
newQuery.setRecursive(true);
newQuery.setIsVirtualUnaired(false);
newQuery.setIsMissing(false);
Expand All @@ -182,7 +182,7 @@ protected void setupQueries(final RowLoader rowLoader) {
});
latestSeries.setIncludeItemTypes(new String[]{"Episode"});
latestSeries.setGroupItems(true);
latestSeries.setParentId(mFolder.getId());
latestSeries.setParentId(mFolder.getId().toString());
latestSeries.setLimit(50);
latestSeries.setImageTypeLimit(1);
mRows.add(new BrowseRowDef(getString(R.string.lbl_latest), latestSeries, new ChangeTriggerType[]{ChangeTriggerType.LibraryUpdated}));
Expand All @@ -191,7 +191,7 @@ protected void setupQueries(final RowLoader rowLoader) {
StdItemQuery tvFavorites = new StdItemQuery();
tvFavorites.setIncludeItemTypes(new String[]{"Series"});
tvFavorites.setRecursive(true);
tvFavorites.setParentId(mFolder.getId());
tvFavorites.setParentId(mFolder.getId().toString());
tvFavorites.setImageTypeLimit(1);
tvFavorites.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
tvFavorites.setSortBy(new String[]{ItemSortBy.SortName});
Expand All @@ -210,15 +210,15 @@ protected void setupQueries(final RowLoader rowLoader) {
latestAlbums.setIncludeItemTypes(new String[]{"Audio"});
latestAlbums.setGroupItems(true);
latestAlbums.setImageTypeLimit(1);
latestAlbums.setParentId(mFolder.getId());
latestAlbums.setParentId(mFolder.getId().toString());
latestAlbums.setLimit(50);
mRows.add(new BrowseRowDef(getString(R.string.lbl_latest), latestAlbums, new ChangeTriggerType[]{ChangeTriggerType.LibraryUpdated}));

//Last Played
StdItemQuery lastPlayed = new StdItemQuery();
lastPlayed.setIncludeItemTypes(new String[]{"Audio"});
lastPlayed.setRecursive(true);
lastPlayed.setParentId(mFolder.getId());
lastPlayed.setParentId(mFolder.getId().toString());
lastPlayed.setImageTypeLimit(1);
lastPlayed.setFilters(new ItemFilter[]{ItemFilter.IsPlayed});
lastPlayed.setSortBy(new String[]{ItemSortBy.DatePlayed});
Expand All @@ -231,7 +231,7 @@ protected void setupQueries(final RowLoader rowLoader) {
StdItemQuery favAlbums = new StdItemQuery();
favAlbums.setIncludeItemTypes(new String[]{"MusicAlbum", "MusicArtist"});
favAlbums.setRecursive(true);
favAlbums.setParentId(mFolder.getId());
favAlbums.setParentId(mFolder.getId().toString());
favAlbums.setImageTypeLimit(1);
favAlbums.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
favAlbums.setSortBy(new String[]{ItemSortBy.SortName});
Expand Down Expand Up @@ -430,7 +430,7 @@ public void onError(Exception exception) {
final UUID userId = KoinJavaComponent.<UserRepository>get(UserRepository.class).getCurrentUser().getValue().getId();

ItemQuery query = new ItemQuery();
query.setParentId(mFolder.getId());
query.setParentId(mFolder.getId().toString());
query.setUserId(userId.toString());
query.setImageTypeLimit(1);
query.setSortBy(new String[]{ItemSortBy.SortName});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,17 @@ protected void setupQueries(RowLoader rowLoader) {
ItemFields.MediaStreams,
ItemFields.MediaSources
});
movies.setParentId(mFolder.getId());
movies.setParentId(mFolder.getId().toString());
movies.setIncludeItemTypes(new String[]{"Movie"});
mRows.add(new BrowseRowDef(getString(R.string.lbl_movies), movies, 100));

StdItemQuery series = new StdItemQuery();
series.setParentId(mFolder.getId());
series.setParentId(mFolder.getId().toString());
series.setIncludeItemTypes(new String[]{"Series"});
mRows.add(new BrowseRowDef(getString(R.string.lbl_tv_series), series, 100));

StdItemQuery others = new StdItemQuery();
others.setParentId(mFolder.getId());
others.setParentId(mFolder.getId().toString());
others.setExcludeItemTypes(new String[]{"Movie", "Series"});
mRows.add(new BrowseRowDef(getString(R.string.lbl_other), others, 100));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import org.jellyfin.androidtv.data.service.BackgroundService;
import org.jellyfin.androidtv.databinding.EnhancedDetailBrowseBinding;
import org.jellyfin.androidtv.ui.GridButton;
import org.jellyfin.androidtv.ui.itemdetail.ItemListFragment;
import org.jellyfin.androidtv.ui.itemhandling.BaseRowItem;
import org.jellyfin.androidtv.ui.itemhandling.ItemLauncher;
import org.jellyfin.androidtv.ui.itemhandling.ItemRowAdapter;
Expand All @@ -52,21 +51,19 @@
import org.jellyfin.androidtv.util.InfoLayoutHelper;
import org.jellyfin.androidtv.util.KeyProcessor;
import org.jellyfin.androidtv.util.MarkdownRenderer;
import org.jellyfin.androidtv.util.sdk.compat.ModelCompat;
import org.jellyfin.androidtv.util.sdk.compat.FakeBaseItem;
import org.jellyfin.androidtv.util.sdk.compat.JavaCompat;
import org.jellyfin.apiclient.interaction.EmptyResponse;
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.BaseItemDto;
import org.jellyfin.sdk.model.api.BaseItemKind;
import org.jellyfin.sdk.model.constant.CollectionType;
import org.jellyfin.sdk.model.serializer.UUIDSerializerKt;
import org.koin.java.KoinJavaComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import kotlin.Lazy;
import kotlinx.serialization.json.Json;

public class EnhancedBrowseFragment extends Fragment implements RowLoader, View.OnKeyListener {
protected FragmentActivity mActivity;
Expand Down Expand Up @@ -100,7 +97,6 @@ public class EnhancedBrowseFragment extends Fragment implements RowLoader, View.
protected BaseRowItem mCurrentItem;
protected ListRow mCurrentRow;

private Lazy<GsonJsonSerializer> serializer = inject(GsonJsonSerializer.class);
private Lazy<BackgroundService> backgroundService = inject(BackgroundService.class);
private Lazy<MediaManager> mediaManager = inject(MediaManager.class);
private Lazy<MarkdownRenderer> markdownRenderer = inject(MarkdownRenderer.class);
Expand All @@ -110,12 +106,7 @@ public class EnhancedBrowseFragment extends Fragment implements RowLoader, View.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BaseItemDto item = new BaseItemDto();
item.setId(ItemListFragment.FAV_SONGS);
item.setBaseItemType(BaseItemType.Playlist);
item.setIsFolder(true);

favSongsRowItem = new BaseRowItem(0, item);
favSongsRowItem = new BaseRowItem(FakeBaseItem.INSTANCE.getFAV_SONGS());
}

@Nullable
Expand Down Expand Up @@ -162,7 +153,7 @@ protected void setupQueries(RowLoader rowLoader) {
}

protected void setupViews() {
mFolder = serializer.getValue().DeserializeFromString(getArguments().getString(Extras.Folder), BaseItemDto.class);
mFolder = Json.Default.decodeFromString(BaseItemDto.Companion.serializer(), getArguments().getString(Extras.Folder));
if (mFolder == null) return;

if (mFolder.getCollectionType() != null) {
Expand Down Expand Up @@ -367,44 +358,40 @@ public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowP
if (item instanceof GridButton) {
switch (((GridButton) item).getId()) {
case GRID:
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(ModelCompat.asSdk(mFolder)));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(mFolder));
break;

case ALBUMS:
mFolder.setDisplayPreferencesId(mFolder.getId() + "AL");
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(ModelCompat.asSdk(mFolder), "MusicAlbum"));
mFolder = JavaCompat.copyWithDisplayPreferencesId(mFolder, mFolder.getId() + "AL");

navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(mFolder, "MusicAlbum"));
break;

case ARTISTS:
mFolder.setDisplayPreferencesId(mFolder.getId() + "AR");
mFolder = JavaCompat.copyWithDisplayPreferencesId(mFolder, mFolder.getId() + "AR");

navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(ModelCompat.asSdk(mFolder), "AlbumArtist"));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(mFolder, "AlbumArtist"));
break;

case BY_LETTER:
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryByLetter(ModelCompat.asSdk(mFolder), itemTypeString));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryByLetter(mFolder, itemTypeString));
break;

case GENRES:
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryByGenres(ModelCompat.asSdk(mFolder), itemTypeString));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryByGenres(mFolder, itemTypeString));
break;

case SUGGESTED:
navigationRepository.getValue().navigate(Destinations.INSTANCE.librarySuggestions(ModelCompat.asSdk(mFolder)));
navigationRepository.getValue().navigate(Destinations.INSTANCE.librarySuggestions(mFolder));
break;

case FAVSONGS:
navigationRepository.getValue().navigate(Destinations.INSTANCE.itemList(UUIDSerializerKt.toUUID(ItemListFragment.FAV_SONGS), UUIDSerializerKt.toUUID(mFolder.getId())));
navigationRepository.getValue().navigate(Destinations.INSTANCE.itemList(FakeBaseItem.INSTANCE.getFAV_SONGS_ID(), mFolder.getId()));
break;

case SERIES:
case LiveTvOption.LIVE_TV_SERIES_OPTION_ID:
BaseItemDto seriesTimers = new BaseItemDto();
seriesTimers.setId(UUID.randomUUID().toString());
seriesTimers.setBaseItemType(BaseItemType.Folder);
seriesTimers.setCollectionType("SeriesTimers");
seriesTimers.setName(requireContext().getString(R.string.lbl_series_recordings));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(ModelCompat.asSdk(seriesTimers)));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(FakeBaseItem.INSTANCE.getSERIES_TIMERS()));
break;

case SCHEDULE:
Expand All @@ -413,11 +400,7 @@ public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowP
break;

case LiveTvOption.LIVE_TV_RECORDINGS_OPTION_ID:
BaseItemDto folder = new BaseItemDto();
folder.setId(UUID.randomUUID().toString());
folder.setBaseItemType(BaseItemType.Folder);
folder.setName(requireContext().getString(R.string.lbl_recorded_tv));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(ModelCompat.asSdk(folder)));
navigationRepository.getValue().navigate(Destinations.INSTANCE.libraryBrowser(FakeBaseItem.INSTANCE.getTV_RECORDINGS()));
break;

case LiveTvOption.LIVE_TV_GUIDE_OPTION_ID:
Expand Down
Loading

0 comments on commit efd9ed0

Please sign in to comment.