mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 18:03:33 +00:00
First reimplementation of download functionality
This commit is contained in:
parent
77a3b90b4e
commit
3e7d260d6a
16 changed files with 143 additions and 92 deletions
|
|
@ -18,6 +18,8 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -54,12 +56,11 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
||||||
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
||||||
holder.trackNumber.setText(String.valueOf(song.getTrack()));
|
holder.trackNumber.setText(String.valueOf(song.getTrack()));
|
||||||
|
|
||||||
// TODO
|
if (DownloadUtil.getDownloadTracker(context).isDownloaded(MappingUtil.mapMediaItem(context, song, false))) {
|
||||||
/* if (DownloadUtil.getDownloadTracker(context).isDownloaded(MappingUtil.mapMediaItem(context, song, false))) {
|
|
||||||
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
holder.downloadIndicator.setVisibility(View.GONE);
|
holder.downloadIndicator.setVisibility(View.GONE);
|
||||||
} */
|
}
|
||||||
|
|
||||||
if (isCoverVisible) CustomGlideRequest.Builder
|
if (isCoverVisible) CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import com.cappielloantonio.play.model.Server;
|
||||||
import com.cappielloantonio.play.subsonic.models.Playlist;
|
import com.cappielloantonio.play.subsonic.models.Playlist;
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
version = 52,
|
version = 53,
|
||||||
entities = {Queue.class, Server.class, RecentSearch.class, Download.class, Playlist.class, Chronology.class}
|
entities = {Queue.class, Server.class, RecentSearch.class, Download.class, Playlist.class, Chronology.class}
|
||||||
// autoMigrations = {@AutoMigration(from = 43, to = 44)}
|
// autoMigrations = {@AutoMigration(from = 43, to = 44)}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -12,32 +12,32 @@ import java.util.List;
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
public interface DownloadDao {
|
public interface DownloadDao {
|
||||||
@Query("SELECT * FROM download WHERE server=:server")
|
@Query("SELECT * FROM download")
|
||||||
LiveData<List<Download>> getAll(String server);
|
LiveData<List<Download>> getAll();
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND playlist_id IS NULL GROUP BY artist LIMIT :size")
|
@Query("SELECT * FROM download WHERE playlist_id IS NULL GROUP BY artist LIMIT :size")
|
||||||
LiveData<List<Download>> getSampleArtist(int size, String server);
|
LiveData<List<Download>> getSampleArtist(int size);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND playlist_id IS NULL GROUP BY album LIMIT :size")
|
@Query("SELECT * FROM download WHERE playlist_id IS NULL GROUP BY album LIMIT :size")
|
||||||
LiveData<List<Download>> getSampleAlbum(int size, String server);
|
LiveData<List<Download>> getSampleAlbum(int size);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND playlist_id IS NOT NULL GROUP BY playlist_id LIMIT :size")
|
@Query("SELECT * FROM download WHERE playlist_id IS NOT NULL GROUP BY playlist_id LIMIT :size")
|
||||||
LiveData<List<Download>> getSamplePlaylist(int size, String server);
|
LiveData<List<Download>> getSamplePlaylist(int size);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server LIMIT :size")
|
@Query("SELECT * FROM download LIMIT :size")
|
||||||
LiveData<List<Download>> getSample(int size, String server);
|
LiveData<List<Download>> getSample(int size);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND artist=:artistId")
|
@Query("SELECT * FROM download WHERE artist=:artistId")
|
||||||
LiveData<List<Download>> getAllFromArtist(String server, String artistId);
|
LiveData<List<Download>> getAllFromArtist(String artistId);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND album=:albumId ORDER BY track ASC")
|
@Query("SELECT * FROM download WHERE album=:albumId ORDER BY track ASC")
|
||||||
LiveData<List<Download>> getAllFromAlbum(String server, String albumId);
|
LiveData<List<Download>> getAllFromAlbum(String albumId);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND playlist_id=:playlistId")
|
@Query("SELECT * FROM download WHERE playlist_id=:playlistId")
|
||||||
LiveData<List<Download>> getAllFromPlaylist(String server, String playlistId);
|
LiveData<List<Download>> getAllFromPlaylist(String playlistId);
|
||||||
|
|
||||||
@Query("SELECT * FROM download WHERE server=:server AND playlist_id IS NOT NULL GROUP BY playlist_id")
|
@Query("SELECT * FROM download WHERE playlist_id IS NOT NULL GROUP BY playlist_id")
|
||||||
LiveData<List<Download>> getAllPlaylists(String server);
|
LiveData<List<Download>> getAllPlaylists();
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insert(Download download);
|
void insert(Download download);
|
||||||
|
|
@ -45,9 +45,9 @@ public interface DownloadDao {
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
void insertAll(List<Download> downloads);
|
void insertAll(List<Download> downloads);
|
||||||
|
|
||||||
@Query("DELETE FROM download WHERE media_id = :mediaId")
|
@Query("DELETE FROM download WHERE id = :id")
|
||||||
void delete(String mediaId);
|
void delete(String id);
|
||||||
|
|
||||||
@Query("DELETE FROM download WHERE server=:server")
|
@Query("DELETE FROM download")
|
||||||
void deleteAll(String server);
|
void deleteAll();
|
||||||
}
|
}
|
||||||
|
|
@ -11,12 +11,42 @@ import kotlinx.android.parcel.Parcelize
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@Entity(tableName = "download")
|
@Entity(tableName = "download")
|
||||||
class Download(@PrimaryKey override val id: String) : Child(id) {
|
class Download(@PrimaryKey override val id: String) : Child(id) {
|
||||||
@ColumnInfo(name = "media_id")
|
|
||||||
var mediaID: String? = null
|
|
||||||
|
|
||||||
@ColumnInfo
|
|
||||||
var server: String? = null
|
|
||||||
|
|
||||||
@ColumnInfo(name = "playlist_id")
|
@ColumnInfo(name = "playlist_id")
|
||||||
var playlistId: String? = null
|
var playlistId: String? = null
|
||||||
|
|
||||||
|
@ColumnInfo(name = "playlist_name")
|
||||||
|
var playlistName: String? = null
|
||||||
|
|
||||||
|
constructor(child: Child) : this(child.id) {
|
||||||
|
parentId = child.parentId
|
||||||
|
isDir = child.isDir
|
||||||
|
title = child.title
|
||||||
|
album = child.album
|
||||||
|
artist = child.artist
|
||||||
|
track = child.track
|
||||||
|
year = child.year
|
||||||
|
genre = child.genre
|
||||||
|
coverArtId = child.coverArtId
|
||||||
|
size = child.size
|
||||||
|
contentType = child.contentType
|
||||||
|
suffix = child.suffix
|
||||||
|
transcodedContentType = child.transcodedContentType
|
||||||
|
transcodedSuffix = child.transcodedSuffix
|
||||||
|
duration = child.duration
|
||||||
|
bitrate = child.bitrate
|
||||||
|
path = child.path
|
||||||
|
isVideo = child.isVideo
|
||||||
|
userRating = child.userRating
|
||||||
|
averageRating = child.averageRating
|
||||||
|
playCount = child.playCount
|
||||||
|
discNumber = child.discNumber
|
||||||
|
created = child.created
|
||||||
|
starred = child.starred
|
||||||
|
albumId = child.albumId
|
||||||
|
artistId = child.artistId
|
||||||
|
type = child.type
|
||||||
|
bookmarkPosition = child.bookmarkPosition
|
||||||
|
originalWidth = child.originalWidth
|
||||||
|
originalHeight = child.originalHeight
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -20,31 +20,31 @@ public class DownloadRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownload() {
|
public LiveData<List<Download>> getLiveDownload() {
|
||||||
return downloadDao.getAll(Preferences.getServerId());
|
return downloadDao.getAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownloadSample(int size, boolean isArtist, boolean isAlbum, boolean isTrack, boolean isPlaylist) {
|
public LiveData<List<Download>> getLiveDownloadSample(int size, boolean isArtist, boolean isAlbum, boolean isTrack, boolean isPlaylist) {
|
||||||
if (isArtist) return downloadDao.getSampleArtist(size, Preferences.getServerId());
|
if (isArtist) return downloadDao.getSampleArtist(size);
|
||||||
else if (isAlbum) return downloadDao.getSampleAlbum(size, Preferences.getServerId());
|
else if (isAlbum) return downloadDao.getSampleAlbum(size);
|
||||||
else if (isTrack) return downloadDao.getSample(size, Preferences.getServerId());
|
else if (isTrack) return downloadDao.getSample(size);
|
||||||
else if (isPlaylist) return downloadDao.getSamplePlaylist(size, Preferences.getServerId());
|
else if (isPlaylist) return downloadDao.getSamplePlaylist(size);
|
||||||
else return downloadDao.getSample(size, Preferences.getServerId());
|
else return downloadDao.getSample(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownloadFromArtist(String artistId) {
|
public LiveData<List<Download>> getLiveDownloadFromArtist(String artistId) {
|
||||||
return downloadDao.getAllFromArtist(Preferences.getServerId(), artistId);
|
return downloadDao.getAllFromArtist(artistId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownloadFromAlbum(String albumId) {
|
public LiveData<List<Download>> getLiveDownloadFromAlbum(String albumId) {
|
||||||
return downloadDao.getAllFromAlbum(Preferences.getServerId(), albumId);
|
return downloadDao.getAllFromAlbum(albumId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownloadFromPlaylist(String playlistId) {
|
public LiveData<List<Download>> getLiveDownloadFromPlaylist(String playlistId) {
|
||||||
return downloadDao.getAllFromPlaylist(Preferences.getServerId(), playlistId);
|
return downloadDao.getAllFromPlaylist(playlistId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Download>> getLivePlaylist() {
|
public LiveData<List<Download>> getLivePlaylist() {
|
||||||
return downloadDao.getAllPlaylists(Preferences.getServerId());
|
return downloadDao.getAllPlaylists();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insert(Download download) {
|
public void insert(Download download) {
|
||||||
|
|
@ -104,7 +104,7 @@ public class DownloadRepository {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
downloadDao.deleteAll(Preferences.getServerId());
|
downloadDao.deleteAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ public class DownloadRepository {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
downloadDao.delete(download.getMediaID());
|
downloadDao.delete(download.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,11 @@ open class AlbumID3 : Parcelable {
|
||||||
@SerializedName("coverArt")
|
@SerializedName("coverArt")
|
||||||
var coverArtId: String? = null
|
var coverArtId: String? = null
|
||||||
|
|
||||||
var songCount = 0
|
var songCount: Int? = 0
|
||||||
var duration = 0
|
var duration: Int? = 0
|
||||||
var playCount: Long? = null
|
var playCount: Long? = null
|
||||||
var created: Date? = null
|
var created: Date? = null
|
||||||
var starred: Date? = null
|
var starred: Date? = null
|
||||||
var year: Int? = null
|
var year: Int = 0
|
||||||
var genre: String? = null
|
var genre: String? = null
|
||||||
}
|
}
|
||||||
|
|
@ -12,12 +12,14 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.databinding.DialogConnectionAlertBinding;
|
import com.cappielloantonio.play.databinding.DialogConnectionAlertBinding;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
import com.cappielloantonio.play.util.MappingUtil;
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
import com.cappielloantonio.play.util.Preferences;
|
import com.cappielloantonio.play.util.Preferences;
|
||||||
import com.cappielloantonio.play.viewmodel.StarredSyncViewModel;
|
import com.cappielloantonio.play.viewmodel.StarredSyncViewModel;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class StarredSyncDialog extends DialogFragment {
|
public class StarredSyncDialog extends DialogFragment {
|
||||||
private static final String TAG = "ServerUnreachableDialog";
|
private static final String TAG = "ServerUnreachableDialog";
|
||||||
|
|
@ -62,7 +64,7 @@ public class StarredSyncDialog extends DialogFragment {
|
||||||
if (songs != null) {
|
if (songs != null) {
|
||||||
DownloadUtil.getDownloadTracker(context).download(
|
DownloadUtil.getDownloadTracker(context).download(
|
||||||
MappingUtil.mapMediaItems(context, songs, false),
|
MappingUtil.mapMediaItems(context, songs, false),
|
||||||
MappingUtil.mapDownload(songs, null, null)
|
songs.stream().map(Download::new).collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||||
import com.cappielloantonio.play.databinding.FragmentAlbumPageBinding;
|
import com.cappielloantonio.play.databinding.FragmentAlbumPageBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.service.MediaManager;
|
import com.cappielloantonio.play.service.MediaManager;
|
||||||
import com.cappielloantonio.play.service.MediaService;
|
import com.cappielloantonio.play.service.MediaService;
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
|
|
@ -38,6 +39,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class AlbumPageFragment extends Fragment implements ClickCallback {
|
public class AlbumPageFragment extends Fragment implements ClickCallback {
|
||||||
|
|
@ -105,7 +107,7 @@ public class AlbumPageFragment extends Fragment implements ClickCallback {
|
||||||
if (isVisible() && getActivity() != null) {
|
if (isVisible() && getActivity() != null) {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
||||||
MappingUtil.mapDownload(songs, null, null)
|
songs.stream().map(Download::new).collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -179,8 +179,7 @@ public class DownloadFragment extends Fragment implements ClickCallback {
|
||||||
if (bind != null)
|
if (bind != null)
|
||||||
bind.downloadedArtistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(artists.size(), 5), GridLayoutManager.HORIZONTAL, false));
|
bind.downloadedArtistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(artists.size(), 5), GridLayoutManager.HORIZONTAL, false));
|
||||||
|
|
||||||
// TODO
|
downloadedArtistAdapter.setItems(artists);
|
||||||
// downloadedArtistAdapter.setItems(artists);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -215,8 +214,7 @@ public class DownloadFragment extends Fragment implements ClickCallback {
|
||||||
if (bind != null)
|
if (bind != null)
|
||||||
bind.downloadedAlbumRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(albums.size(), 5), GridLayoutManager.HORIZONTAL, false));
|
bind.downloadedAlbumRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(albums.size(), 5), GridLayoutManager.HORIZONTAL, false));
|
||||||
|
|
||||||
// TODO
|
downloadedAlbumAdapter.setItems(albums);
|
||||||
//downloadedAlbumAdapter.setItems(albums);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.databinding.InnerFragmentPlayerCoverBinding;
|
import com.cappielloantonio.play.databinding.InnerFragmentPlayerCoverBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.service.MediaManager;
|
import com.cappielloantonio.play.service.MediaManager;
|
||||||
import com.cappielloantonio.play.service.MediaService;
|
import com.cappielloantonio.play.service.MediaService;
|
||||||
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
||||||
|
|
@ -90,7 +91,7 @@ public class PlayerCoverFragment extends Fragment {
|
||||||
bind.innerButtonTopLeft.setOnClickListener(view -> {
|
bind.innerButtonTopLeft.setOnClickListener(view -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(requireContext(), song, false),
|
||||||
MappingUtil.mapDownload(song, null, null)
|
new Download(song)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||||
import com.cappielloantonio.play.databinding.FragmentPlaylistPageBinding;
|
import com.cappielloantonio.play.databinding.FragmentPlaylistPageBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.service.MediaManager;
|
import com.cappielloantonio.play.service.MediaManager;
|
||||||
import com.cappielloantonio.play.service.MediaService;
|
import com.cappielloantonio.play.service.MediaService;
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
|
|
@ -37,6 +38,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class PlaylistPageFragment extends Fragment implements ClickCallback {
|
public class PlaylistPageFragment extends Fragment implements ClickCallback {
|
||||||
|
|
@ -104,7 +106,12 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback {
|
||||||
if (isVisible() && getActivity() != null) {
|
if (isVisible() && getActivity() != null) {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
||||||
MappingUtil.mapDownload(songs, playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName())
|
songs.stream().map(child -> {
|
||||||
|
Download toDownload = new Download(child);
|
||||||
|
toDownload.setPlaylistId(playlistPageViewModel.getPlaylist().getId());
|
||||||
|
toDownload.setPlaylistName(playlistPageViewModel.getPlaylist().getName());
|
||||||
|
return toDownload;
|
||||||
|
}).collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
||||||
|
|
@ -154,7 +155,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
||||||
List<MediaItem> mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false);
|
List<MediaItem> mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false);
|
||||||
List<Download> downloads = MappingUtil.mapDownload(songs, null, null);
|
List<Download> downloads = songs.stream().map(Download::new).collect(Collectors.toList());
|
||||||
|
|
||||||
downloadAll.setOnClickListener(v -> {
|
downloadAll.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems, downloads);
|
DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems, downloads);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.service.MediaManager;
|
import com.cappielloantonio.play.service.MediaManager;
|
||||||
import com.cappielloantonio.play.service.MediaService;
|
import com.cappielloantonio.play.service.MediaService;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
@ -155,7 +156,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
download.setOnClickListener(v -> {
|
download.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(requireContext(), song, false),
|
||||||
MappingUtil.mapDownload(song, null, null)
|
new Download(song)
|
||||||
);
|
);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
@ -164,7 +165,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
remove.setOnClickListener(v -> {
|
remove.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).remove(
|
DownloadUtil.getDownloadTracker(requireContext()).remove(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(requireContext(), song, false),
|
||||||
MappingUtil.mapDownload(song, null, null)
|
new Download(song)
|
||||||
);
|
);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -60,28 +60,6 @@ public class MappingUtil {
|
||||||
return playlists;
|
return playlists;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArrayList<Download> mapDownload(List<Child> media, String playlistId, String playlistName) {
|
|
||||||
ArrayList<Download> downloads = new ArrayList();
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
/* for (Child item : media) {
|
|
||||||
Download download = (Download) item;
|
|
||||||
download.setMediaID();
|
|
||||||
download.setServer();
|
|
||||||
download.setPlaylistId();
|
|
||||||
downloads.add(download);
|
|
||||||
} */
|
|
||||||
|
|
||||||
return downloads;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Download mapDownload(Child media, String playlistId, String playlistName) {
|
|
||||||
// TODO
|
|
||||||
//return new Download(media, playlistId, playlistName);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@OptIn(markerClass = UnstableApi.class)
|
@OptIn(markerClass = UnstableApi.class)
|
||||||
public static MediaItem mapMediaItem(Context context, Child media, boolean stream) {
|
public static MediaItem mapMediaItem(Context context, Child media, boolean stream) {
|
||||||
boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getDownloadUri(media.getId()));
|
boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getDownloadUri(media.getId()));
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,10 @@ import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.model.Album;
|
|
||||||
import com.cappielloantonio.play.model.Artist;
|
|
||||||
import com.cappielloantonio.play.model.Playlist;
|
import com.cappielloantonio.play.model.Playlist;
|
||||||
import com.cappielloantonio.play.repository.DownloadRepository;
|
import com.cappielloantonio.play.repository.DownloadRepository;
|
||||||
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.util.MappingUtil;
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
|
|
||||||
|
|
@ -23,8 +23,8 @@ public class DownloadViewModel extends AndroidViewModel {
|
||||||
|
|
||||||
private final DownloadRepository downloadRepository;
|
private final DownloadRepository downloadRepository;
|
||||||
|
|
||||||
private final MutableLiveData<List<Artist>> downloadedArtistSample = new MutableLiveData<>(null);
|
private final MutableLiveData<List<ArtistID3>> downloadedArtistSample = new MutableLiveData<>(null);
|
||||||
private final MutableLiveData<List<Album>> downloadedAlbumSample = new MutableLiveData<>(null);
|
private final MutableLiveData<List<AlbumID3>> downloadedAlbumSample = new MutableLiveData<>(null);
|
||||||
private final MutableLiveData<List<Child>> downloadedTrackSample = new MutableLiveData<>(null);
|
private final MutableLiveData<List<Child>> downloadedTrackSample = new MutableLiveData<>(null);
|
||||||
private final MutableLiveData<List<Playlist>> downloadedPlaylistSample = new MutableLiveData<>(null);
|
private final MutableLiveData<List<Playlist>> downloadedPlaylistSample = new MutableLiveData<>(null);
|
||||||
|
|
||||||
|
|
@ -34,13 +34,40 @@ public class DownloadViewModel extends AndroidViewModel {
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Artist>> getDownloadedArtists(LifecycleOwner owner, int size) {
|
public LiveData<List<ArtistID3>> getDownloadedArtists(LifecycleOwner owner, int size) {
|
||||||
downloadRepository.getLiveDownloadSample(size, true, false, false, false).observe(owner, downloads -> downloadedArtistSample.postValue(MappingUtil.mapDownloadToArtist(downloads)));
|
downloadRepository.getLiveDownloadSample(size, true, false, false, false)
|
||||||
|
.observe(owner, downloads -> downloadedArtistSample.postValue(downloads.stream().map(download -> {
|
||||||
|
ArtistID3 artist = new ArtistID3();
|
||||||
|
artist.setId(download.getArtistId());
|
||||||
|
artist.setName(download.getArtist());
|
||||||
|
artist.setCoverArtId(download.getCoverArtId());
|
||||||
|
// artist.setAlbumCount(0);
|
||||||
|
// artist.setStarred(null);
|
||||||
|
return artist;
|
||||||
|
}).collect(Collectors.toList())));
|
||||||
|
|
||||||
return downloadedArtistSample;
|
return downloadedArtistSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Album>> getDownloadedAlbums(LifecycleOwner owner, int size) {
|
public LiveData<List<AlbumID3>> getDownloadedAlbums(LifecycleOwner owner, int size) {
|
||||||
downloadRepository.getLiveDownloadSample(size, false, true, false, false).observe(owner, downloads -> downloadedAlbumSample.postValue(MappingUtil.mapDownloadToAlbum(downloads)));
|
downloadRepository.getLiveDownloadSample(size, false, true, false, false)
|
||||||
|
.observe(owner, downloads -> downloadedAlbumSample.postValue(downloads.stream().map(download -> {
|
||||||
|
AlbumID3 album = new AlbumID3();
|
||||||
|
album.setId(download.getAlbumId());
|
||||||
|
album.setName(download.getAlbum());
|
||||||
|
album.setArtist(album.getArtist());
|
||||||
|
album.setArtistId(album.getArtistId());
|
||||||
|
album.setCoverArtId(album.getCoverArtId());
|
||||||
|
// album.setSongCount(0);
|
||||||
|
// album.setDuration(0);
|
||||||
|
// album.setPlayCount(null);
|
||||||
|
// album.setCreated(null);
|
||||||
|
// album.setStarred(null);
|
||||||
|
album.setYear(album.getYear());
|
||||||
|
// album.setGenre(null);
|
||||||
|
return album;
|
||||||
|
}).collect(Collectors.toList())));
|
||||||
|
|
||||||
return downloadedAlbumSample;
|
return downloadedAlbumSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,16 @@ import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.repository.AlbumRepository;
|
import com.cappielloantonio.play.repository.AlbumRepository;
|
||||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||||
import com.cappielloantonio.play.repository.SongRepository;
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
|
import com.cappielloantonio.play.util.Preferences;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
@ -55,13 +59,12 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
|
||||||
songRepository.star(song.getId());
|
songRepository.star(song.getId());
|
||||||
song.setStarred(new Date());
|
song.setStarred(new Date());
|
||||||
|
|
||||||
// TODO
|
if (Preferences.isStarredSyncEnabled()) {
|
||||||
/* if (Preferences.isStarredSyncEnabled()) {
|
|
||||||
DownloadUtil.getDownloadTracker(context).download(
|
DownloadUtil.getDownloadTracker(context).download(
|
||||||
MappingUtil.mapMediaItem(context, song, false),
|
MappingUtil.mapMediaItem(context, song, false),
|
||||||
MappingUtil.mapDownload(song, null, null)
|
new Download(song)
|
||||||
);
|
);
|
||||||
} */
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue