From 2de59b2206d04779928bfb21a964f70395813094 Mon Sep 17 00:00:00 2001 From: tzugen Date: Wed, 23 Mar 2022 20:13:04 +0100 Subject: [PATCH 1/4] Rename MusicDirectory.Entry to Track to make more clear what it is --- .../org/moire/ultrasonic/domain/Bookmark.kt | 4 +- .../moire/ultrasonic/domain/MusicDirectory.kt | 11 +++-- .../moire/ultrasonic/domain/SearchResult.kt | 4 +- .../org/moire/ultrasonic/domain/Share.kt | 12 +++--- .../provider/UltrasonicAppWidgetProvider.java | 4 +- .../receiver/A2dpIntentReceiver.java | 4 +- .../org/moire/ultrasonic/service/State.java | 2 +- .../moire/ultrasonic/util/ShareDetails.java | 2 +- .../ultrasonic/util/ShufflePlayBuffer.java | 6 +-- .../moire/ultrasonic/util/StreamProxy.java | 2 +- .../ultrasonic/adapters/TrackViewBinder.kt | 2 +- .../ultrasonic/adapters/TrackViewHolder.kt | 4 +- .../ultrasonic/domain/APIBookmarkConverter.kt | 2 +- .../domain/APIMusicDirectoryConverter.kt | 28 ++++++------- .../ultrasonic/domain/APIShareConverter.kt | 2 +- .../ultrasonic/fragment/BookmarksFragment.kt | 2 +- .../ultrasonic/fragment/PlayerFragment.kt | 42 +++++++++---------- .../ultrasonic/fragment/SearchFragment.kt | 12 +++--- .../fragment/TrackCollectionFragment.kt | 28 ++++++------- .../ultrasonic/imageloader/BitmapUtils.kt | 6 +-- .../ultrasonic/imageloader/ImageLoader.kt | 10 ++--- .../service/AutoMediaBrowserService.kt | 12 +++--- .../ultrasonic/service/CachedMusicService.kt | 6 +-- .../moire/ultrasonic/service/DownloadFile.kt | 2 +- .../moire/ultrasonic/service/Downloader.kt | 10 ++--- .../service/MediaPlayerController.kt | 12 +++--- .../ultrasonic/service/MediaPlayerService.kt | 4 +- .../moire/ultrasonic/service/MusicService.kt | 4 +- .../ultrasonic/service/OfflineMusicService.kt | 16 +++---- .../ultrasonic/service/RESTMusicService.kt | 8 ++-- .../ultrasonic/subsonic/DownloadHandler.kt | 14 +++---- .../moire/ultrasonic/subsonic/ShareHandler.kt | 4 +- .../moire/ultrasonic/subsonic/VideoPlayer.kt | 6 +-- .../util/EntryByDiscAndTrackComparator.kt | 4 +- .../org/moire/ultrasonic/util/FileUtil.kt | 2 +- .../kotlin/org/moire/ultrasonic/util/Util.kt | 16 +++---- .../domain/APIBookmarkConverterTest.kt | 2 +- 37 files changed, 155 insertions(+), 156 deletions(-) diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt index 515e0807..415f291e 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt @@ -2,7 +2,7 @@ package org.moire.ultrasonic.domain import java.io.Serializable import java.util.Date -import org.moire.ultrasonic.domain.MusicDirectory.Entry +import org.moire.ultrasonic.domain.MusicDirectory.Track data class Bookmark( val position: Int = 0, @@ -10,7 +10,7 @@ data class Bookmark( val comment: String, val created: Date? = null, val changed: Date? = null, - val entry: Entry + val track: Track ) : Serializable { companion object { private const val serialVersionUID = 8988990025189807803L diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt index cf28ccdd..fa372a31 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt @@ -20,9 +20,9 @@ class MusicDirectory : ArrayList() { return filter { it.isDirectory && includeDirs || !it.isDirectory && includeFiles } } - fun getTracks(): List { + fun getTracks(): List { return mapNotNull { - it as? Entry + it as? Track } } @@ -54,9 +54,8 @@ class MusicDirectory : ArrayList() { abstract var isVideo: Boolean } - // TODO: Rename to Track @Entity - data class Entry( + data class Track( @PrimaryKey override var id: String, override var parent: String? = null, override var isDirectory: Boolean = false, @@ -97,7 +96,7 @@ class MusicDirectory : ArrayList() { private const val serialVersionUID = -3339106650010798108L } - fun compareTo(other: Entry): Int { + fun compareTo(other: Track): Int { when { this.closeness == other.closeness -> { return 0 @@ -111,7 +110,7 @@ class MusicDirectory : ArrayList() { } } - override fun compareTo(other: Identifiable) = compareTo(other as Entry) + override fun compareTo(other: Identifiable) = compareTo(other as Track) } data class Album( diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt index ec576d8f..234738c3 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt @@ -1,7 +1,7 @@ package org.moire.ultrasonic.domain import org.moire.ultrasonic.domain.MusicDirectory.Album -import org.moire.ultrasonic.domain.MusicDirectory.Entry +import org.moire.ultrasonic.domain.MusicDirectory.Track /** * The result of a search. Contains matching artists, albums and songs. @@ -9,5 +9,5 @@ import org.moire.ultrasonic.domain.MusicDirectory.Entry data class SearchResult( val artists: List = listOf(), val albums: List = listOf(), - val songs: List = listOf() + val songs: List = listOf() ) diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt index f8d147b0..3d290b2b 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt @@ -1,7 +1,7 @@ package org.moire.ultrasonic.domain import java.io.Serializable -import org.moire.ultrasonic.domain.MusicDirectory.Entry +import org.moire.ultrasonic.domain.MusicDirectory.Track data class Share( override var id: String, @@ -12,7 +12,7 @@ data class Share( var lastVisited: String? = null, var expires: String? = null, var visitCount: Long? = null, - private val entries: MutableList = mutableListOf() + private val tracks: MutableList = mutableListOf() ) : Serializable, GenericEntry() { override val name: String? get() { @@ -22,12 +22,12 @@ data class Share( return null } - fun getEntries(): List { - return entries.toList() + fun getEntries(): List { + return tracks.toList() } - fun addEntry(entry: Entry) { - entries.add(entry) + fun addEntry(track: Track) { + tracks.add(track) } companion object { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java index cd88a66e..0282bc37 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java @@ -73,7 +73,7 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider /** * Handle a change notification coming over from {@link MediaPlayerController} */ - public void notifyChange(Context context, MusicDirectory.Entry currentSong, boolean playing, boolean setAlbum) + public void notifyChange(Context context, MusicDirectory.Track currentSong, boolean playing, boolean setAlbum) { if (hasInstances(context)) { @@ -100,7 +100,7 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider /** * Update all active widget instances by pushing changes */ - private void performUpdate(Context context, MusicDirectory.Entry currentSong, boolean playing, boolean setAlbum) + private void performUpdate(Context context, MusicDirectory.Track currentSong, boolean playing, boolean setAlbum) { final Resources res = context.getResources(); final RemoteViews views = new RemoteViews(context.getPackageName(), this.layoutId); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java index 1479f57b..314433c3 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java @@ -4,7 +4,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.moire.ultrasonic.domain.MusicDirectory.Entry; +import org.moire.ultrasonic.domain.MusicDirectory.Track; import org.moire.ultrasonic.service.MediaPlayerController; import kotlin.Lazy; @@ -21,7 +21,7 @@ public class A2dpIntentReceiver extends BroadcastReceiver { if (mediaPlayerControllerLazy.getValue().getCurrentPlaying() == null) return; - Entry song = mediaPlayerControllerLazy.getValue().getCurrentPlaying().getSong(); + Track song = mediaPlayerControllerLazy.getValue().getCurrentPlaying().getSong(); if (song == null) return; Intent avrcpIntent = new Intent(PLAYSTATUS_RESPONSE); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java index ae8014e4..6cc7cb0d 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java @@ -13,7 +13,7 @@ public class State implements Serializable { public static final long serialVersionUID = -6346438781062572270L; - public List songs = new ArrayList<>(); + public List songs = new ArrayList<>(); public int currentPlayingIndex; public int currentPlayingPosition; } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java index 0cffa6f8..2a41f67f 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java @@ -12,5 +12,5 @@ public class ShareDetails public String Description; public boolean ShareOnServer; public long Expiration; - public List Entries; + public List Entries; } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java index 156ea868..2786df23 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java @@ -40,7 +40,7 @@ public class ShufflePlayBuffer private static final int CAPACITY = 50; private static final int REFILL_THRESHOLD = 40; - private final List buffer = new ArrayList<>(); + private final List buffer = new ArrayList<>(); private ScheduledExecutorService executorService; private int currentServer; @@ -64,11 +64,11 @@ public class ShufflePlayBuffer Timber.i("ShufflePlayBuffer destroyed"); } - public List get(int size) + public List get(int size) { clearBufferIfNecessary(); - List result = new ArrayList<>(size); + List result = new ArrayList<>(size); synchronized (buffer) { while (!buffer.isEmpty() && result.size() < size) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java index 61145d0d..90cbba7a 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java @@ -180,7 +180,7 @@ public class StreamProxy implements Runnable { Timber.i("Streaming song in background"); DownloadFile downloadFile = currentPlaying == null? null : currentPlaying.get(); - MusicDirectory.Entry song = downloadFile.getSong(); + MusicDirectory.Track song = downloadFile.getSong(); long fileSize = downloadFile.getBitRate() * ((song.getDuration() != null) ? song.getDuration() : 0) * 1000 / 8; Timber.i("Streaming fileSize: %d", fileSize); diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt index 2ed77e52..7e881ef4 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt @@ -45,7 +45,7 @@ class TrackViewBinder( val diffAdapter = adapter as BaseAdapter<*> when (item) { - is MusicDirectory.Entry -> { + is MusicDirectory.Track -> { downloadFile = downloader.getDownloadFileForSong(item) } is DownloadFile -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt index 2ec56ddb..4ceb71bf 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt @@ -44,7 +44,7 @@ class TrackViewHolder(val view: View) : RecyclerView.ViewHolder(view), Checkable var duration: TextView = view.findViewById(R.id.song_duration) var progress: TextView = view.findViewById(R.id.song_status) - var entry: MusicDirectory.Entry? = null + var entry: MusicDirectory.Track? = null private set var downloadFile: DownloadFile? = null private set @@ -131,7 +131,7 @@ class TrackViewHolder(val view: View) : RecyclerView.ViewHolder(view), Checkable } } - private fun setupStarButtons(song: MusicDirectory.Entry, useFiveStarRating: Boolean) { + private fun setupStarButtons(song: MusicDirectory.Track, useFiveStarRating: Boolean) { if (useFiveStarRating) { // Hide single star star.isVisible = false diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverter.kt index 19f61f32..7759290e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverter.kt @@ -10,7 +10,7 @@ fun ApiBookmark.toDomainEntity(): Bookmark = Bookmark( comment = this@toDomainEntity.comment, created = this@toDomainEntity.created?.time, changed = this@toDomainEntity.changed?.time, - entry = this@toDomainEntity.entry.toTrackEntity() + track = this@toDomainEntity.entry.toTrackEntity() ) fun List.toDomainEntitiesList(): List = map { it.toDomainEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt index 4999751d..ebe1a3f1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt @@ -26,7 +26,7 @@ internal val dateFormat: DateFormat by lazy { SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()) } -fun MusicDirectoryChild.toTrackEntity(): MusicDirectory.Entry = MusicDirectory.Entry(id).apply { +fun MusicDirectoryChild.toTrackEntity(): MusicDirectory.Track = MusicDirectory.Track(id).apply { populateCommonProps(this, this@toTrackEntity) populateTrackProps(this, this@toTrackEntity) } @@ -64,20 +64,20 @@ private fun populateCommonProps( } private fun populateTrackProps( - entry: MusicDirectory.Entry, + track: MusicDirectory.Track, source: MusicDirectoryChild ) { - entry.size = source.size - entry.contentType = source.contentType - entry.suffix = source.suffix - entry.transcodedContentType = source.transcodedContentType - entry.transcodedSuffix = source.transcodedSuffix - entry.track = source.track - entry.albumId = source.albumId - entry.bitRate = source.bitRate - entry.type = source.type - entry.userRating = source.userRating - entry.averageRating = source.averageRating + track.size = source.size + track.contentType = source.contentType + track.suffix = source.suffix + track.transcodedContentType = source.transcodedContentType + track.transcodedSuffix = source.transcodedSuffix + track.track = source.track + track.albumId = source.albumId + track.bitRate = source.bitRate + track.type = source.type + track.userRating = source.userRating + track.averageRating = source.averageRating } fun List.toDomainEntityList(): List { @@ -93,7 +93,7 @@ fun List.toDomainEntityList(): List { return newList } -fun List.toTrackList(): List = this.map { +fun List.toTrackList(): List = this.map { it.toTrackEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIShareConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIShareConverter.kt index 39162de2..2a121ae3 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIShareConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIShareConverter.kt @@ -22,5 +22,5 @@ fun APIShare.toDomainEntity(): Share = Share( url = this@toDomainEntity.url, username = this@toDomainEntity.username, visitCount = this@toDomainEntity.visitCount.toLong(), - entries = this@toDomainEntity.items.toTrackList().toMutableList() + tracks = this@toDomainEntity.items.toTrackList().toMutableList() ) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt index c9c8b6b9..cb679c8a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt @@ -61,7 +61,7 @@ class BookmarksFragment : TrackCollectionFragment() { /** * Custom playback function which uses the restore functionality. A bit of a hack.. */ - private fun playNow(songs: List) { + private fun playNow(songs: List) { if (songs.isNotEmpty()) { val position = songs[0].bookmarkPosition diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt index 06a2684f..79016123 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt @@ -118,7 +118,7 @@ class PlayerFragment : private val imageLoaderProvider: ImageLoaderProvider by inject() private lateinit var executorService: ScheduledExecutorService private var currentPlaying: DownloadFile? = null - private var currentSong: MusicDirectory.Entry? = null + private var currentSong: MusicDirectory.Track? = null private lateinit var viewManager: LinearLayoutManager private var rxBusSubscription: Disposable? = null private var ioScope = CoroutineScope(Dispatchers.IO) @@ -544,7 +544,7 @@ class PlayerFragment : val downloadFile = viewAdapter.getCurrentList()[info!!.position] as DownloadFile val menuInflater = requireActivity().menuInflater menuInflater.inflate(R.menu.nowplaying_context, menu) - val song: MusicDirectory.Entry? + val song: MusicDirectory.Track? song = downloadFile.song @@ -571,21 +571,21 @@ class PlayerFragment : @Suppress("ComplexMethod", "LongMethod", "ReturnCount") private fun menuItemSelected(menuItemId: Int, song: DownloadFile?): Boolean { - var entry: MusicDirectory.Entry? = null + var track: MusicDirectory.Track? = null val bundle: Bundle if (song != null) { - entry = song.song + track = song.song } when (menuItemId) { R.id.menu_show_artist -> { - if (entry == null) return false + if (track == null) return false if (Settings.shouldUseId3Tags) { bundle = Bundle() - bundle.putString(Constants.INTENT_ID, entry.artistId) - bundle.putString(Constants.INTENT_NAME, entry.artist) - bundle.putString(Constants.INTENT_PARENT_ID, entry.artistId) + bundle.putString(Constants.INTENT_ID, track.artistId) + bundle.putString(Constants.INTENT_NAME, track.artist) + bundle.putString(Constants.INTENT_PARENT_ID, track.artistId) bundle.putBoolean(Constants.INTENT_ARTIST, true) Navigation.findNavController(requireView()) .navigate(R.id.playerToSelectAlbum, bundle) @@ -593,24 +593,24 @@ class PlayerFragment : return true } R.id.menu_show_album -> { - if (entry == null) return false + if (track == null) return false - val albumId = if (Settings.shouldUseId3Tags) entry.albumId else entry.parent + val albumId = if (Settings.shouldUseId3Tags) track.albumId else track.parent bundle = Bundle() bundle.putString(Constants.INTENT_ID, albumId) - bundle.putString(Constants.INTENT_NAME, entry.album) - bundle.putString(Constants.INTENT_PARENT_ID, entry.parent) + bundle.putString(Constants.INTENT_NAME, track.album) + bundle.putString(Constants.INTENT_PARENT_ID, track.parent) bundle.putBoolean(Constants.INTENT_IS_ALBUM, true) Navigation.findNavController(requireView()) .navigate(R.id.playerToSelectAlbum, bundle) return true } R.id.menu_lyrics -> { - if (entry == null) return false + if (track == null) return false bundle = Bundle() - bundle.putString(Constants.INTENT_ARTIST, entry.artist) - bundle.putString(Constants.INTENT_TITLE, entry.title) + bundle.putString(Constants.INTENT_ARTIST, track.artist) + bundle.putString(Constants.INTENT_TITLE, track.title) Navigation.findNavController(requireView()).navigate(R.id.playerToLyrics, bundle) return true } @@ -746,22 +746,22 @@ class PlayerFragment : } R.id.menu_item_share -> { val mediaPlayerController = mediaPlayerController - val entries: MutableList = ArrayList() + val tracks: MutableList = ArrayList() val downloadServiceSongs = mediaPlayerController.playList for (downloadFile in downloadServiceSongs) { val playlistEntry = downloadFile.song - entries.add(playlistEntry) + tracks.add(playlistEntry) } - shareHandler.createShare(this, entries, null, cancellationToken) + shareHandler.createShare(this, tracks, null, cancellationToken) return true } R.id.menu_item_share_song -> { if (currentSong == null) return true - val entries: MutableList = ArrayList() - entries.add(currentSong) + val tracks: MutableList = ArrayList() + tracks.add(currentSong) - shareHandler.createShare(this, entries, null, cancellationToken) + shareHandler.createShare(this, tracks, null, cancellationToken) return true } else -> return false diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt index 4be5be3f..b9bd8291 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt @@ -199,7 +199,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { super.onDestroyView() } - private fun downloadBackground(save: Boolean, songs: List) { + private fun downloadBackground(save: Boolean, songs: List) { val onValid = Runnable { networkAndStorageChecker.warnIfNetworkOrStorageUnavailable() mediaPlayerController.downloadBackground(songs, save) @@ -296,7 +296,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { Navigation.findNavController(requireView()).navigate(R.id.searchToTrackCollection, bundle) } - private fun onSongSelected(song: MusicDirectory.Entry, append: Boolean) { + private fun onSongSelected(song: MusicDirectory.Track, append: Boolean) { if (!append) { mediaPlayerController.clear() } @@ -312,8 +312,8 @@ class SearchFragment : MultiListFragment(), KoinComponent { toast(context, resources.getQuantityString(R.plurals.select_album_n_songs_added, 1, 1)) } - private fun onVideoSelected(entry: MusicDirectory.Entry) { - playVideo(requireContext(), entry) + private fun onVideoSelected(track: MusicDirectory.Track) { + playVideo(requireContext(), track) } private fun autoplay() { @@ -329,7 +329,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { is ArtistOrIndex -> { onArtistSelected(item) } - is MusicDirectory.Entry -> { + is MusicDirectory.Track -> { if (item.isVideo) { onVideoSelected(item) } else { @@ -356,7 +356,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { if (found || item !is DownloadFile) return true - val songs = mutableListOf() + val songs = mutableListOf() when (menuItem.itemId) { R.id.song_menu_play_now -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index bbc9a963..38f29a53 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -249,7 +249,7 @@ open class TrackCollectionFragment : MultiListFragment() { private fun playNow( append: Boolean, - selectedSongs: List = getSelectedSongs() + selectedSongs: List = getSelectedSongs() ) { if (selectedSongs.isNotEmpty()) { downloadHandler.download( @@ -314,10 +314,10 @@ open class TrackCollectionFragment : MultiListFragment() { } @Suppress("UNCHECKED_CAST") - private fun getAllSongs(): List { + private fun getAllSongs(): List { return viewAdapter.getCurrentList().filter { - it is MusicDirectory.Entry && !it.isDirectory - } as List + it is MusicDirectory.Track && !it.isDirectory + } as List } internal fun selectAllOrNone() { @@ -338,7 +338,7 @@ open class TrackCollectionFragment : MultiListFragment() { } } - internal open fun enableButtons(selection: List = getSelectedSongs()) { + internal open fun enableButtons(selection: List = getSelectedSongs()) { val enabled = selection.isNotEmpty() var unpinEnabled = false var deleteEnabled = false @@ -378,7 +378,7 @@ open class TrackCollectionFragment : MultiListFragment() { private fun downloadBackground( save: Boolean, - songs: List + songs: List ) { val onValid = Runnable { networkAndStorageChecker.warnIfNetworkOrStorageUnavailable() @@ -403,7 +403,7 @@ open class TrackCollectionFragment : MultiListFragment() { onValid.run() } - internal fun delete(songs: List = getSelectedSongs()) { + internal fun delete(songs: List = getSelectedSongs()) { Util.toast( context, resources.getQuantityString( @@ -414,7 +414,7 @@ open class TrackCollectionFragment : MultiListFragment() { mediaPlayerController.delete(songs) } - internal fun unpin(songs: List = getSelectedSongs()) { + internal fun unpin(songs: List = getSelectedSongs()) { Util.toast( context, resources.getQuantityString( @@ -533,10 +533,10 @@ open class TrackCollectionFragment : MultiListFragment() { } } - internal fun getSelectedSongs(): List { + internal fun getSelectedSongs(): List { // Walk through selected set and get the Entries based on the saved ids. return viewAdapter.getCurrentList().mapNotNull { - if (it is MusicDirectory.Entry && viewAdapter.isSelected(it.longId)) + if (it is MusicDirectory.Track && viewAdapter.isSelected(it.longId)) it else null @@ -655,7 +655,7 @@ open class TrackCollectionFragment : MultiListFragment() { playAll() } R.id.song_menu_share -> { - if (item is MusicDirectory.Entry) { + if (item is MusicDirectory.Track) { shareHandler.createShare( this, listOf(item), refreshListView, cancellationToken!! @@ -669,10 +669,10 @@ open class TrackCollectionFragment : MultiListFragment() { return true } - internal fun getClickedSong(item: MusicDirectory.Child): List { + internal fun getClickedSong(item: MusicDirectory.Child): List { // This can probably be done better return viewAdapter.getCurrentList().mapNotNull { - if (it is MusicDirectory.Entry && (it.id == item.id)) + if (it is MusicDirectory.Track && (it.id == item.id)) it else null @@ -692,7 +692,7 @@ open class TrackCollectionFragment : MultiListFragment() { bundle ) } - item is MusicDirectory.Entry && item.isVideo -> { + item is MusicDirectory.Track && item.isVideo -> { VideoPlayer.playVideo(requireContext(), item) } else -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt index 27f53635..f4ffa495 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt @@ -26,11 +26,11 @@ class BitmapUtils { } fun getAlbumArtBitmapFromDisk( - entry: MusicDirectory.Entry?, + track: MusicDirectory.Track?, size: Int ): Bitmap? { - if (entry == null) return null - val albumArtFile = FileUtil.getAlbumArtFile(entry) + if (track == null) return null + val albumArtFile = FileUtil.getAlbumArtFile(track) val bitmap: Bitmap? = null if (albumArtFile != null && File(albumArtFile).exists()) { return getBitmapFromDisk(albumArtFile, size, bitmap) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt index de3db8c4..335573be 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt @@ -148,28 +148,28 @@ class ImageLoader( * Download a cover art file and cache it on disk */ fun cacheCoverArt( - entry: MusicDirectory.Entry + track: MusicDirectory.Track ) { // Synchronize on the entry so that we don't download concurrently for // the same song. - synchronized(entry) { + synchronized(track) { // Always download the large size.. val size = config.largeSize // Check cache to avoid downloading existing files - val file = FileUtil.getAlbumArtFile(entry) + val file = FileUtil.getAlbumArtFile(track) // Return if have a cache hit if (file != null && File(file).exists()) return File(file!!).createNewFile() // Can't load empty string ids - val id = entry.coverArt + val id = track.coverArt if (TextUtils.isEmpty(id)) return // Query the API - Timber.d("Loading cover art for: %s", entry) + Timber.d("Loading cover art for: %s", track) val response = API.getCoverArt(id!!, size.toLong()).execute().toStreamResponse() response.throwOnFailure() diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt index 02f897fc..fea04dea 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt @@ -80,10 +80,10 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { private val serviceJob = Job() private val serviceScope = CoroutineScope(Dispatchers.IO + serviceJob) - private var playlistCache: List? = null - private var starredSongsCache: List? = null - private var randomSongsCache: List? = null - private var searchSongsCache: List? = null + private var playlistCache: List? = null + private var starredSongsCache: List? = null + private var randomSongsCache: List? = null + private var searchSongsCache: List? = null private val isOffline get() = ActiveServerProvider.isOffline() private val useId3Tags get() = Settings.shouldUseId3Tags @@ -1070,7 +1070,7 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { return section.toString() } - private fun playSongs(songs: List?) { + private fun playSongs(songs: List?) { mediaPlayerController.addToPlaylist( songs, save = false, @@ -1081,7 +1081,7 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { ) } - private fun playSong(song: MusicDirectory.Entry) { + private fun playSong(song: MusicDirectory.Track) { mediaPlayerController.addToPlaylist( listOf(song), save = false, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt index f6f34f7f..b8a74431 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt @@ -218,9 +218,9 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, } @Throws(Exception::class) - override fun createPlaylist(id: String?, name: String?, entries: List) { + override fun createPlaylist(id: String?, name: String?, tracks: List) { cachedPlaylists.clear() - musicService.createPlaylist(id, name, entries) + musicService.createPlaylist(id, name, tracks) } @Throws(Exception::class) @@ -276,7 +276,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, @Throws(Exception::class) override fun getDownloadInputStream( - song: MusicDirectory.Entry, + song: MusicDirectory.Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt index e6ca67ce..5be765c7 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt @@ -38,7 +38,7 @@ import timber.log.Timber * */ class DownloadFile( - val song: MusicDirectory.Entry, + val song: MusicDirectory.Track, save: Boolean ) : KoinComponent, Identifiable { val partialFile: String diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt index 601e5817..9fa6a69b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt @@ -45,7 +45,7 @@ class Downloader( private val jukeboxMediaPlayer: JukeboxMediaPlayer by inject() // This cache helps us to avoid creating duplicate DownloadFile instances when showing Entries - private val downloadFileCache = LRUCache(100) + private val downloadFileCache = LRUCache(100) private var executorService: ScheduledExecutorService? = null private var wifiLock: WifiManager.WifiLock? = null @@ -345,7 +345,7 @@ class Downloader( @Synchronized fun addToPlaylist( - songs: List, + songs: List, save: Boolean, autoPlay: Boolean, playNext: Boolean, @@ -407,7 +407,7 @@ class Downloader( } @Synchronized - fun downloadBackground(songs: List, save: Boolean) { + fun downloadBackground(songs: List, save: Boolean) { // By using the counter we ensure that the songs are added in the correct order for (song in songs) { @@ -435,7 +435,7 @@ class Downloader( @Synchronized @Suppress("ReturnCount") - fun getDownloadFileForSong(song: MusicDirectory.Entry): DownloadFile { + fun getDownloadFileForSong(song: MusicDirectory.Track): DownloadFile { for (downloadFile in playlist) { if (downloadFile.song == song) { return downloadFile @@ -513,7 +513,7 @@ class Downloader( * Extension function * Gathers the download file for a given song, and modifies shouldSave if provided. */ - fun MusicDirectory.Entry.getDownloadFile(save: Boolean? = null): DownloadFile { + fun MusicDirectory.Track.getDownloadFile(save: Boolean? = null): DownloadFile { return getDownloadFileForSong(this).apply { if (save != null) this.shouldSave = save } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt index 54f76a4c..4e9b6b0b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt @@ -65,7 +65,7 @@ class MediaPlayerController( @Synchronized fun restore( - songs: List?, + songs: List?, currentPlayingIndex: Int, currentPlayingPosition: Int, autoPlay: Boolean, @@ -165,7 +165,7 @@ class MediaPlayerController( @Synchronized @Suppress("LongParameterList") fun addToPlaylist( - songs: List?, + songs: List?, save: Boolean, autoPlay: Boolean, playNext: Boolean, @@ -202,7 +202,7 @@ class MediaPlayerController( } @Synchronized - fun downloadBackground(songs: List?, save: Boolean) { + fun downloadBackground(songs: List?, save: Boolean) { if (songs == null) return val filteredSongs = songs.filterNotNull() downloader.downloadBackground(filteredSongs, save) @@ -325,7 +325,7 @@ class MediaPlayerController( @Synchronized // TODO: Make it require not null - fun delete(songs: List) { + fun delete(songs: List) { for (song in songs.filterNotNull()) { downloader.getDownloadFileForSong(song).delete() } @@ -333,7 +333,7 @@ class MediaPlayerController( @Synchronized // TODO: Make it require not null - fun unpin(songs: List) { + fun unpin(songs: List) { for (song in songs.filterNotNull()) { downloader.getDownloadFileForSong(song).unpin() } @@ -509,7 +509,7 @@ class MediaPlayerController( val playListDuration: Long get() = downloader.downloadListDuration - fun getDownloadFileForSong(song: MusicDirectory.Entry): DownloadFile { + fun getDownloadFileForSong(song: MusicDirectory.Track): DownloadFile { return downloader.getDownloadFileForSong(song) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 24789e20..818d9a6e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -340,7 +340,7 @@ class MediaPlayerService : Service() { localMediaPlayer.setPlayerState(PlayerState.STARTED, localMediaPlayer.currentPlaying) } - private fun updateWidget(playerState: PlayerState, song: MusicDirectory.Entry?) { + private fun updateWidget(playerState: PlayerState, song: MusicDirectory.Track?) { val started = playerState === PlayerState.STARTED val context = this@MediaPlayerService @@ -589,7 +589,7 @@ class MediaPlayerService : Service() { context: Context, notificationBuilder: NotificationCompat.Builder, playerState: PlayerState, - song: MusicDirectory.Entry? + song: MusicDirectory.Track? ): IntArray { // Init val compactActionList = ArrayList() diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt index 410558b8..2559e9a8 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt @@ -75,7 +75,7 @@ interface MusicService { fun getPlaylists(refresh: Boolean): List @Throws(Exception::class) - fun createPlaylist(id: String?, name: String?, entries: List) + fun createPlaylist(id: String?, name: String?, tracks: List) @Throws(Exception::class) fun deletePlaylist(id: String) @@ -123,7 +123,7 @@ interface MusicService { */ @Throws(Exception::class) fun getDownloadInputStream( - song: MusicDirectory.Entry, + song: MusicDirectory.Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt index 52276ded..7c027d44 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt @@ -127,7 +127,7 @@ class OfflineMusicService : MusicService, KoinComponent { override fun search(criteria: SearchCriteria): SearchResult { val artists: MutableList = ArrayList() val albums: MutableList = ArrayList() - val songs: MutableList = ArrayList() + val songs: MutableList = ArrayList() val root = FileUtil.musicDirectory var closeness: Int for (artistFile in FileUtil.listFiles(root)) { @@ -227,14 +227,14 @@ class OfflineMusicService : MusicService, KoinComponent { @Suppress("TooGenericExceptionCaught") @Throws(Exception::class) - override fun createPlaylist(id: String?, name: String?, entries: List) { + override fun createPlaylist(id: String?, name: String?, tracks: List) { val playlistFile = FileUtil.getPlaylistFile(activeServerProvider.getActiveServer().name, name) val fw = FileWriter(playlistFile) val bw = BufferedWriter(fw) try { fw.write("#EXTM3U\n") - for (e in entries) { + for (e in tracks) { var filePath = FileUtil.getSongFile(e) if (!Storage.isPathExists(filePath)) { val ext = FileUtil.getExtension(filePath) @@ -471,7 +471,7 @@ class OfflineMusicService : MusicService, KoinComponent { @Throws(OfflineException::class) override fun getDownloadInputStream( - song: MusicDirectory.Entry, + song: MusicDirectory.Track, offset: Long, maxBitrate: Int, save: Boolean @@ -502,8 +502,8 @@ class OfflineMusicService : MusicService, KoinComponent { return FileUtil.getBaseName(name) } - private fun createEntry(file: AbstractFile, name: String?): MusicDirectory.Entry { - val entry = MusicDirectory.Entry(file.path) + private fun createEntry(file: AbstractFile, name: String?): MusicDirectory.Track { + val entry = MusicDirectory.Track(file.path) entry.populateWithDataFrom(file, name) return entry } @@ -536,7 +536,7 @@ class OfflineMusicService : MusicService, KoinComponent { * More extensive variant of Child.populateWithDataFrom(), which also parses the ID3 tags of * a given track file. */ - private fun MusicDirectory.Entry.populateWithDataFrom(file: AbstractFile, name: String?) { + private fun MusicDirectory.Track.populateWithDataFrom(file: AbstractFile, name: String?) { (this as MusicDirectory.Child).populateWithDataFrom(file, name) val meta = RawMetadata(null) @@ -610,7 +610,7 @@ class OfflineMusicService : MusicService, KoinComponent { file: AbstractFile, criteria: SearchCriteria, albums: MutableList, - songs: MutableList + songs: MutableList ) { var closeness: Int for (albumFile in FileUtil.listMediaFiles(file)) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt index 39492ddf..2bdc43e9 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt @@ -262,14 +262,14 @@ open class RESTMusicService( override fun createPlaylist( id: String?, name: String?, - entries: List + tracks: List ) { if (id == null && name == null) throw IllegalArgumentException("Either id or name is required.") - val pSongIds: MutableList = ArrayList(entries.size) + val pSongIds: MutableList = ArrayList(tracks.size) - for ((id1) in entries) { + for ((id1) in tracks) { pSongIds.add(id1) } @@ -418,7 +418,7 @@ open class RESTMusicService( @Throws(Exception::class) override fun getDownloadInputStream( - song: MusicDirectory.Entry, + song: MusicDirectory.Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index 807ae3b1..6048bf3f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -33,7 +33,7 @@ class DownloadHandler( autoPlay: Boolean, playNext: Boolean, shuffle: Boolean, - songs: List + songs: List ) { val onValid = Runnable { if (!append && !playNext) { @@ -195,15 +195,15 @@ class DownloadHandler( isArtist: Boolean ) { val activity = fragment.activity as Activity - val task = object : ModalBackgroundTask>( + val task = object : ModalBackgroundTask>( activity, false ) { @Throws(Throwable::class) - override fun doInBackground(): List { + override fun doInBackground(): List { val musicService = getMusicService() - val songs: MutableList = LinkedList() + val songs: MutableList = LinkedList() val root: MusicDirectory if (!isOffline() && isArtist && Settings.shouldUseId3Tags) { getSongsForArtist(id, songs) @@ -235,7 +235,7 @@ class DownloadHandler( @Throws(Exception::class) private fun getSongsRecursively( parent: MusicDirectory, - songs: MutableList + songs: MutableList ) { if (songs.size > maxSongs) { return @@ -259,7 +259,7 @@ class DownloadHandler( @Throws(Exception::class) private fun getSongsForArtist( id: String, - songs: MutableCollection + songs: MutableCollection ) { if (songs.size > maxSongs) { return @@ -280,7 +280,7 @@ class DownloadHandler( } } - override fun done(songs: List) { + override fun done(songs: List) { if (Settings.shouldSortByDisc) { Collections.sort(songs, EntryByDiscAndTrackComparator()) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt index 227b2b94..b3d78ce8 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt @@ -44,13 +44,13 @@ class ShareHandler(val context: Context) { fun createShare( fragment: Fragment, - entries: List?, + tracks: List?, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken ) { val askForDetails = Settings.shouldAskForShareDetails val shareDetails = ShareDetails() - shareDetails.Entries = entries + shareDetails.Entries = tracks if (askForDetails) { showDialog(fragment, shareDetails, swipe, cancellationToken) } else { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt index a310bd84..c018aab8 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt @@ -14,14 +14,14 @@ import org.moire.ultrasonic.util.Util @Suppress("UtilityClassWithPublicConstructor") class VideoPlayer { companion object { - fun playVideo(context: Context, entry: MusicDirectory.Entry?) { - if (!Util.isNetworkConnected() || entry == null) { + fun playVideo(context: Context, track: MusicDirectory.Track?) { + if (!Util.isNetworkConnected() || track == null) { Util.toast(context, R.string.select_album_no_network) return } try { val intent = Intent(Intent.ACTION_VIEW) - val url = MusicServiceFactory.getMusicService().getVideoUrl(entry.id) + val url = MusicServiceFactory.getMusicService().getVideoUrl(track.id) intent.setDataAndType( Uri.parse(url), "video/*" diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt index ec3ef5cd..4cb2711b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt @@ -7,8 +7,8 @@ class EntryByDiscAndTrackComparator : Comparator { override fun compare(x: MusicDirectory.Child, y: MusicDirectory.Child): Int { val discX = x.discNumber val discY = y.discNumber - val trackX = if (x is MusicDirectory.Entry) x.track else null - val trackY = if (y is MusicDirectory.Entry) y.track else null + val trackX = if (x is MusicDirectory.Track) x.track else null + val trackY = if (y is MusicDirectory.Track) y.track else null val albumX = x.album val albumY = y.album val pathX = x.path diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt index b301135e..41b50c46 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt @@ -49,7 +49,7 @@ object FileUtil { const val SUFFIX_SMALL = ".jpeg-small" private const val UNNAMED = "unnamed" - fun getSongFile(song: MusicDirectory.Entry): String { + fun getSongFile(song: MusicDirectory.Track): String { val dir = getAlbumDirectory(song) // Do not generate new name for offline files. Offline files will have their Path as their Id. diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index a57b41c6..3cec930f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -438,9 +438,9 @@ object Util { @JvmStatic fun getSongsFromBookmarks(bookmarks: Iterable): MusicDirectory { val musicDirectory = MusicDirectory() - var song: MusicDirectory.Entry + var song: MusicDirectory.Track for (bookmark in bookmarks) { - song = bookmark.entry + song = bookmark.track song.bookmarkPosition = bookmark.position musicDirectory.add(song) } @@ -450,7 +450,7 @@ object Util { /** * Broadcasts the given song info as the new song being played. */ - fun broadcastNewTrackInfo(context: Context, song: MusicDirectory.Entry?) { + fun broadcastNewTrackInfo(context: Context, song: MusicDirectory.Track?) { val intent = Intent(EVENT_META_CHANGED) if (song != null) { intent.putExtra("title", song.title) @@ -476,7 +476,7 @@ object Util { ) { if (!Settings.shouldSendBluetoothNotifications) return - var song: MusicDirectory.Entry? = null + var song: MusicDirectory.Track? = null val avrcpIntent = Intent(CM_AVRCP_METADATA_CHANGED) if (currentPlaying != null) song = currentPlaying.song @@ -489,7 +489,7 @@ object Util { fun broadcastA2dpPlayStatusChange( context: Context, state: PlayerState?, - newSong: MusicDirectory.Entry?, + newSong: MusicDirectory.Track?, listSize: Int, id: Int, playerPosition: Int @@ -520,7 +520,7 @@ object Util { private fun fillIntent( intent: Intent, - song: MusicDirectory.Entry?, + song: MusicDirectory.Track?, playerPosition: Int, id: Int, listSize: Int @@ -776,7 +776,7 @@ object Util { ) fun getMediaDescriptionForEntry( - song: MusicDirectory.Entry, + song: MusicDirectory.Track, mediaId: String? = null, groupNameId: Int? = null ): MediaDescriptionCompat { @@ -809,7 +809,7 @@ object Util { } @Suppress("ComplexMethod", "LongMethod") - fun readableEntryDescription(song: MusicDirectory.Entry): ReadableEntryDescription { + fun readableEntryDescription(song: MusicDirectory.Track): ReadableEntryDescription { val artist = StringBuilder(LINE_LENGTH) var bitRate: String? = null var trackText = "" diff --git a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverterTest.kt b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverterTest.kt index f20da140..2b2abecb 100644 --- a/ultrasonic/src/test/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverterTest.kt +++ b/ultrasonic/src/test/kotlin/org/moire/ultrasonic/domain/APIBookmarkConverterTest.kt @@ -27,7 +27,7 @@ class APIBookmarkConverterTest { comment `should be equal to` entity.comment created `should be equal to` entity.created?.time changed `should be equal to` entity.changed?.time - entry `should be equal to` entity.entry.toTrackEntity() + track `should be equal to` entity.entry.toTrackEntity() } } From e53da92dac9a8ddf04d97bebb7f3b1eeb11a888a Mon Sep 17 00:00:00 2001 From: tzugen Date: Sun, 27 Mar 2022 11:35:14 +0200 Subject: [PATCH 2/4] Unify terminology also by renaming DownloadFile.song -> DownloadFile.track --- .../receiver/A2dpIntentReceiver.java | 6 ++-- .../service/JukeboxMediaPlayer.java | 2 +- .../moire/ultrasonic/service/Scrobbler.java | 2 +- .../moire/ultrasonic/util/StreamProxy.java | 2 +- .../ultrasonic/adapters/TrackViewBinder.kt | 4 +-- .../ultrasonic/adapters/TrackViewHolder.kt | 2 +- .../ultrasonic/fragment/NowPlayingFragment.kt | 2 +- .../ultrasonic/fragment/PlayerFragment.kt | 14 ++++---- .../ultrasonic/fragment/SearchFragment.kt | 14 ++++---- .../fragment/TrackCollectionFragment.kt | 4 +-- .../moire/ultrasonic/service/DownloadFile.kt | 32 +++++++++---------- .../moire/ultrasonic/service/Downloader.kt | 8 ++--- .../ultrasonic/service/LocalMediaPlayer.kt | 8 ++--- .../service/MediaPlayerController.kt | 4 +-- .../ultrasonic/service/MediaPlayerService.kt | 8 ++--- .../service/PlaybackStateSerializer.kt | 2 +- .../ultrasonic/util/MediaSessionHandler.kt | 4 +-- .../kotlin/org/moire/ultrasonic/util/Util.kt | 2 +- 18 files changed, 60 insertions(+), 60 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java index 314433c3..9b0596b9 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java @@ -1,5 +1,7 @@ package org.moire.ultrasonic.receiver; +import static org.koin.java.KoinJavaComponent.inject; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -9,8 +11,6 @@ import org.moire.ultrasonic.service.MediaPlayerController; import kotlin.Lazy; -import static org.koin.java.KoinJavaComponent.inject; - public class A2dpIntentReceiver extends BroadcastReceiver { private static final String PLAYSTATUS_RESPONSE = "com.android.music.playstatusresponse"; @@ -21,7 +21,7 @@ public class A2dpIntentReceiver extends BroadcastReceiver { if (mediaPlayerControllerLazy.getValue().getCurrentPlaying() == null) return; - Track song = mediaPlayerControllerLazy.getValue().getCurrentPlaying().getSong(); + Track song = mediaPlayerControllerLazy.getValue().getCurrentPlaying().getTrack(); if (song == null) return; Intent avrcpIntent = new Intent(PLAYSTATUS_RESPONSE); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java index fc48490c..46e62147 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/JukeboxMediaPlayer.java @@ -234,7 +234,7 @@ public class JukeboxMediaPlayer List ids = new ArrayList<>(); for (DownloadFile file : downloader.getAll()) { - ids.add(file.getSong().getId()); + ids.add(file.getTrack().getId()); } tasks.add(new SetPlaylist(ids)); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Scrobbler.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/Scrobbler.java index 83627a08..59a428e7 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/Scrobbler.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/Scrobbler.java @@ -18,7 +18,7 @@ public class Scrobbler { if (song == null || !ActiveServerProvider.Companion.isScrobblingEnabled()) return; - final String id = song.getSong().getId(); + final String id = song.getTrack().getId(); if (id == null) return; // Avoid duplicate registrations. diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java index 90cbba7a..85234b6a 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java @@ -180,7 +180,7 @@ public class StreamProxy implements Runnable { Timber.i("Streaming song in background"); DownloadFile downloadFile = currentPlaying == null? null : currentPlaying.get(); - MusicDirectory.Track song = downloadFile.getSong(); + MusicDirectory.Track song = downloadFile.getTrack(); long fileSize = downloadFile.getBitRate() * ((song.getDuration() != null) ? song.getDuration() : 0) * 1000 / 8; Timber.i("Streaming fileSize: %d", fileSize); diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt index 7e881ef4..f36b3756 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt @@ -77,7 +77,7 @@ class TrackViewBinder( } } else { // Minimize or maximize the Text view (if song title is very long) - if (!downloadFile.song.isDirectory) { + if (!downloadFile.track.isDirectory) { holder.maximizeOrMinimize() } } @@ -86,7 +86,7 @@ class TrackViewBinder( } holder.itemView.setOnClickListener { - if (checkable && !downloadFile.song.isVideo) { + if (checkable && !downloadFile.track.isVideo) { val nowChecked = !holder.check.isChecked holder.isChecked = nowChecked } else { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt index 4ceb71bf..5aa5601c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt @@ -67,7 +67,7 @@ class TrackViewHolder(val view: View) : RecyclerView.ViewHolder(view), Checkable isSelected: Boolean = false ) { val useFiveStarRating = Settings.useFiveStarRating - val song = file.song + val song = file.track downloadFile = file entry = song diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/NowPlayingFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/NowPlayingFragment.kt index 4d700410..95724b59 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/NowPlayingFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/NowPlayingFragment.kt @@ -105,7 +105,7 @@ class NowPlayingFragment : Fragment() { val file = mediaPlayerController.currentPlaying if (file != null) { - val song = file.song + val song = file.track val title = song.title val artist = song.artist diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt index 79016123..5c78c213 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt @@ -507,7 +507,7 @@ class PlayerFragment : val downloadFile = mediaPlayerController.currentPlaying if (downloadFile != null) { - currentSong = downloadFile.song + currentSong = downloadFile.track } if (useFiveStarRating) starMenuItem.isVisible = false @@ -546,7 +546,7 @@ class PlayerFragment : menuInflater.inflate(R.menu.nowplaying_context, menu) val song: MusicDirectory.Track? - song = downloadFile.song + song = downloadFile.track if (song.parent == null) { val menuItem = menu.findItem(R.id.menu_show_album) @@ -574,7 +574,7 @@ class PlayerFragment : var track: MusicDirectory.Track? = null val bundle: Bundle if (song != null) { - track = song.song + track = song.track } when (menuItemId) { @@ -749,7 +749,7 @@ class PlayerFragment : val tracks: MutableList = ArrayList() val downloadServiceSongs = mediaPlayerController.playList for (downloadFile in downloadServiceSongs) { - val playlistEntry = downloadFile.song + val playlistEntry = downloadFile.track tracks.add(playlistEntry) } shareHandler.createShare(this, tracks, null, cancellationToken) @@ -785,7 +785,7 @@ class PlayerFragment : ioScope.launch { val entries = mediaPlayerController.playList.map { - it.song + it.track } val musicService = getMusicService() musicService.createPlaylist(null, playlistName, entries) @@ -903,7 +903,7 @@ class PlayerFragment : val songRemoved = String.format( resources.getString(R.string.download_song_removed), - file.song.title + file.track.title ) Util.toast(context, songRemoved) @@ -980,7 +980,7 @@ class PlayerFragment : val trackFormat = String.format(Locale.getDefault(), "%d / %d", currentSongIndex, totalSongs) if (currentPlaying != null) { - currentSong = currentPlaying!!.song + currentSong = currentPlaying!!.track songTitleTextView.text = currentSong!!.title artistTextView.text = currentSong!!.artist albumTextView.text = currentSong!!.album diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt index b9bd8291..b68d7abc 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt @@ -360,7 +360,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { when (menuItem.itemId) { R.id.song_menu_play_now -> { - songs.add(item.song) + songs.add(item.track) downloadHandler.download( fragment = this, append = false, @@ -372,7 +372,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { ) } R.id.song_menu_play_next -> { - songs.add(item.song) + songs.add(item.track) downloadHandler.download( fragment = this, append = true, @@ -384,7 +384,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { ) } R.id.song_menu_play_last -> { - songs.add(item.song) + songs.add(item.track) downloadHandler.download( fragment = this, append = true, @@ -396,7 +396,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { ) } R.id.song_menu_pin -> { - songs.add(item.song) + songs.add(item.track) toast( context, resources.getQuantityString( @@ -408,7 +408,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { downloadBackground(true, songs) } R.id.song_menu_download -> { - songs.add(item.song) + songs.add(item.track) toast( context, resources.getQuantityString( @@ -420,7 +420,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { downloadBackground(false, songs) } R.id.song_menu_unpin -> { - songs.add(item.song) + songs.add(item.track) toast( context, resources.getQuantityString( @@ -432,7 +432,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { mediaPlayerController.unpin(songs) } R.id.song_menu_share -> { - songs.add(item.song) + songs.add(item.track) shareHandler.createShare(this, songs, searchRefresh, cancellationToken!!) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index 38f29a53..c5330b0c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -122,8 +122,8 @@ open class TrackCollectionFragment : MultiListFragment() { viewAdapter.register( TrackViewBinder( - onItemClick = { onItemClick(it.song) }, - onContextMenuClick = { menu, id -> onContextMenuItemSelected(menu, id.song) }, + onItemClick = { onItemClick(it.track) }, + onContextMenuClick = { menu, id -> onContextMenuItemSelected(menu, id.track) }, checkable = true, draggable = false, context = requireContext(), diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt index 5be765c7..0093d76a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt @@ -38,12 +38,12 @@ import timber.log.Timber * */ class DownloadFile( - val song: MusicDirectory.Track, + val track: MusicDirectory.Track, save: Boolean ) : KoinComponent, Identifiable { val partialFile: String lateinit var completeFile: String - val saveFile: String = FileUtil.getSongFile(song) + val saveFile: String = FileUtil.getSongFile(track) var shouldSave = save private var downloadTask: CancellableTask? = null var isFailed = false @@ -104,7 +104,7 @@ class DownloadFile( * Returns the effective bit rate. */ fun getBitRate(): Int { - return if (song.bitRate == null) desiredBitRate else song.bitRate!! + return if (track.bitRate == null) desiredBitRate else track.bitRate!! } @Synchronized @@ -221,7 +221,7 @@ class DownloadFile( } override fun toString(): String { - return String.format("DownloadFile (%s)", song) + return String.format("DownloadFile (%s)", track) } private inner class DownloadTask : CancellableTask() { @@ -259,7 +259,7 @@ class DownloadFile( // Some devices seem to throw error on partial file which doesn't exist val needsDownloading: Boolean - val duration = song.duration + val duration = track.duration val fileLength = Storage.getFromPath(partialFile)?.length ?: 0 needsDownloading = ( @@ -269,7 +269,7 @@ class DownloadFile( if (needsDownloading) { // Attempt partial HTTP GET, appending to the file if it exists. val (inStream, isPartial) = musicService.getDownloadInputStream( - song, fileLength, desiredBitRate, shouldSave + track, fileLength, desiredBitRate, shouldSave ) inputStream = inStream @@ -293,11 +293,11 @@ class DownloadFile( if (isCancelled) { status.postValue(DownloadStatus.CANCELLED) - throw Exception(String.format("Download of '%s' was cancelled", song)) + throw Exception(String.format("Download of '%s' was cancelled", track)) } - if (song.artistId != null) { - cacheMetadata(song.artistId!!) + if (track.artistId != null) { + cacheMetadata(track.artistId!!) } downloadAndSaveCoverArt() @@ -328,7 +328,7 @@ class DownloadFile( status.postValue(DownloadStatus.FAILED) --retryCount } - Timber.w(all, "Failed to download '%s'.", song) + Timber.w(all, "Failed to download '%s'.", track) } } finally { inputStream.safeClose() @@ -339,7 +339,7 @@ class DownloadFile( } override fun toString(): String { - return String.format("DownloadTask (%s)", song) + return String.format("DownloadTask (%s)", track) } private fun cacheMetadata(artistId: String) { @@ -367,9 +367,9 @@ class DownloadFile( private fun downloadAndSaveCoverArt() { try { - if (!TextUtils.isEmpty(song.coverArt)) { + if (!TextUtils.isEmpty(track.coverArt)) { // Download the largest size that we can display in the UI - imageLoaderProvider.getImageLoader().cacheCoverArt(song) + imageLoaderProvider.getImageLoader().cacheCoverArt(track) } } catch (all: Exception) { Timber.e(all, "Failed to get cover art.") @@ -392,8 +392,8 @@ class DownloadFile( } private fun setProgress(totalBytesCopied: Long) { - if (song.size != null) { - progress.postValue((totalBytesCopied * 100 / song.size!!).toInt()) + if (track.size != null) { + progress.postValue((totalBytesCopied * 100 / track.size!!).toInt()) } } @@ -404,7 +404,7 @@ class DownloadFile( } override val id: String - get() = song.id + get() = track.id companion object { const val MAX_RETRIES = 5 diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt index 9fa6a69b..39e9bc42 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt @@ -234,7 +234,7 @@ class Downloader( get() { var totalDuration: Long = 0 for (downloadFile in playlist) { - val song = downloadFile.song + val song = downloadFile.track if (!song.isDirectory) { if (song.artist != null) { if (song.duration != null) { @@ -437,17 +437,17 @@ class Downloader( @Suppress("ReturnCount") fun getDownloadFileForSong(song: MusicDirectory.Track): DownloadFile { for (downloadFile in playlist) { - if (downloadFile.song == song) { + if (downloadFile.track == song) { return downloadFile } } for (downloadFile in activelyDownloading) { - if (downloadFile.song == song) { + if (downloadFile.track == song) { return downloadFile } } for (downloadFile in downloadQueue) { - if (downloadFile.song == song) { + if (downloadFile.track == song) { return downloadFile } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/LocalMediaPlayer.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/LocalMediaPlayer.kt index 6c0d96b2..0f69e247 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/LocalMediaPlayer.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/LocalMediaPlayer.kt @@ -303,7 +303,7 @@ class LocalMediaPlayer : KoinComponent { val playerDuration: Int get() { if (currentPlaying != null) { - val duration = currentPlaying!!.song.duration + val duration = currentPlaying!!.track.duration if (duration != null) { return duration * 1000 } @@ -391,7 +391,7 @@ class LocalMediaPlayer : KoinComponent { setPlayerState(PlayerState.PREPARING, downloadFile) mediaPlayer.setOnBufferingUpdateListener { mp, percent -> - val song = downloadFile.song + val song = downloadFile.track if (percent == 100) { mp.setOnBufferingUpdateListener(null) @@ -512,8 +512,8 @@ class LocalMediaPlayer : KoinComponent { } var duration = 0 - if (downloadFile.song.duration != null) { - duration = downloadFile.song.duration!! * 1000 + if (downloadFile.track.duration != null) { + duration = downloadFile.track.duration!! * 1000 } mediaPlayer.setOnCompletionListener(object : OnCompletionListener { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt index 4e9b6b0b..1aaa6936 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt @@ -453,7 +453,7 @@ class MediaPlayerController( fun toggleSongStarred() { if (localMediaPlayer.currentPlaying == null) return - val song = localMediaPlayer.currentPlaying!!.song + val song = localMediaPlayer.currentPlaying!!.track Thread { val musicService = getMusicService() @@ -477,7 +477,7 @@ class MediaPlayerController( fun setSongRating(rating: Int) { if (!Settings.useFiveStarRating) return if (localMediaPlayer.currentPlaying == null) return - val song = localMediaPlayer.currentPlaying!!.song + val song = localMediaPlayer.currentPlaying!!.track song.userRating = rating Thread { try { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 818d9a6e..17aec8fc 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -364,7 +364,7 @@ class MediaPlayerService : Service() { Settings.isNotificationAlwaysEnabled val show = playerState === PlayerState.STARTED || showWhenPaused - val song = currentPlaying?.song + val song = currentPlaying?.track if (isStateChanged) { when { @@ -396,7 +396,7 @@ class MediaPlayerService : Service() { } if (isTrackChanged) { - Util.broadcastNewTrackInfo(this@MediaPlayerService, currentPlaying?.song) + Util.broadcastNewTrackInfo(this@MediaPlayerService, currentPlaying?.track) } // Update widget @@ -424,7 +424,7 @@ class MediaPlayerService : Service() { val index = downloader.currentPlayingIndex if (currentPlaying != null) { - val song = currentPlaying.song + val song = currentPlaying.track if (song.bookmarkPosition > 0 && Settings.shouldClearBookmark) { val musicService = getMusicService() try { @@ -523,7 +523,7 @@ class MediaPlayerService : Service() { // Init val context = applicationContext - val song = currentPlaying?.song + val song = currentPlaying?.track val stopIntent = Util.getPendingIntentForMediaAction( context, KeyEvent.KEYCODE_MEDIA_STOP, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackStateSerializer.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackStateSerializer.kt index df9e4390..3b9b2aa0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackStateSerializer.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/PlaybackStateSerializer.kt @@ -61,7 +61,7 @@ class PlaybackStateSerializer : KoinComponent { val state = State() for (downloadFile in songs) { - state.songs.add(downloadFile.song) + state.songs.add(downloadFile.track) } state.currentPlayingIndex = currentPlayingIndex diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt index f7bdf220..ae3def28 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/MediaSessionHandler.kt @@ -188,7 +188,7 @@ class MediaSessionHandler : KoinComponent { val metadata = MediaMetadataCompat.Builder() if (currentPlaying != null) { try { - val song = currentPlaying.song + val song = currentPlaying.track val cover = BitmapUtils.getAlbumArtBitmapFromDisk( song, Util.getMinDisplayMetric() ) @@ -278,7 +278,7 @@ class MediaSessionHandler : KoinComponent { val queue = playlist.mapIndexed { id, file -> MediaSessionCompat.QueueItem( - Util.getMediaDescriptionForEntry(file.song), + Util.getMediaDescriptionForEntry(file.track), id.toLong() ) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index 3cec930f..9d4ef720 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -478,7 +478,7 @@ object Util { var song: MusicDirectory.Track? = null val avrcpIntent = Intent(CM_AVRCP_METADATA_CHANGED) - if (currentPlaying != null) song = currentPlaying.song + if (currentPlaying != null) song = currentPlaying.track fillIntent(avrcpIntent, song, playerPosition, id, listSize) From 892b441c0d602c282a3cbdf6830fa46fcc11f559 Mon Sep 17 00:00:00 2001 From: tzugen Date: Sun, 27 Mar 2022 14:57:07 +0200 Subject: [PATCH 3/4] Move Track and Album to their own files --- .../org/moire/ultrasonic/domain/Album.kt | 27 ++++++ .../org/moire/ultrasonic/domain/Bookmark.kt | 1 - .../moire/ultrasonic/domain/MusicDirectory.kt | 85 ------------------- .../moire/ultrasonic/domain/SearchResult.kt | 3 - .../org/moire/ultrasonic/domain/Share.kt | 1 - .../org/moire/ultrasonic/domain/Track.kt | 65 ++++++++++++++ .../provider/UltrasonicAppWidgetProvider.java | 6 +- .../receiver/A2dpIntentReceiver.java | 2 +- .../org/moire/ultrasonic/service/State.java | 4 +- .../moire/ultrasonic/util/ShareDetails.java | 4 +- .../ultrasonic/util/ShufflePlayBuffer.java | 7 +- .../moire/ultrasonic/util/StreamProxy.java | 4 +- .../ultrasonic/adapters/AlbumRowBinder.kt | 12 +-- .../ultrasonic/adapters/TrackViewBinder.kt | 4 +- .../ultrasonic/adapters/TrackViewHolder.kt | 6 +- .../ultrasonic/domain/APIAlbumConverter.kt | 5 +- .../ultrasonic/domain/APIArtistConverter.kt | 2 +- .../domain/APIMusicDirectoryConverter.kt | 8 +- .../ultrasonic/fragment/AlbumListFragment.kt | 8 +- .../ultrasonic/fragment/BookmarksFragment.kt | 3 +- .../ultrasonic/fragment/PlayerFragment.kt | 12 +-- .../ultrasonic/fragment/SearchFragment.kt | 17 ++-- .../fragment/TrackCollectionFragment.kt | 30 +++---- .../ultrasonic/imageloader/BitmapUtils.kt | 4 +- .../ultrasonic/imageloader/ImageLoader.kt | 3 +- .../moire/ultrasonic/model/AlbumListModel.kt | 10 +-- .../service/AutoMediaBrowserService.kt | 13 +-- .../ultrasonic/service/CachedMusicService.kt | 14 +-- .../moire/ultrasonic/service/DownloadFile.kt | 4 +- .../moire/ultrasonic/service/Downloader.kt | 12 +-- .../service/MediaPlayerController.kt | 14 +-- .../ultrasonic/service/MediaPlayerService.kt | 6 +- .../moire/ultrasonic/service/MusicService.kt | 12 +-- .../ultrasonic/service/OfflineMusicService.kt | 30 ++++--- .../ultrasonic/service/RESTMusicService.kt | 12 +-- .../ultrasonic/subsonic/DownloadHandler.kt | 15 ++-- .../moire/ultrasonic/subsonic/ShareHandler.kt | 4 +- .../moire/ultrasonic/subsonic/VideoPlayer.kt | 4 +- .../util/EntryByDiscAndTrackComparator.kt | 5 +- .../org/moire/ultrasonic/util/FileUtil.kt | 3 +- .../kotlin/org/moire/ultrasonic/util/Util.kt | 15 ++-- 41 files changed, 258 insertions(+), 238 deletions(-) create mode 100644 core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Album.kt create mode 100644 core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Track.kt diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Album.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Album.kt new file mode 100644 index 00000000..63611fb7 --- /dev/null +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Album.kt @@ -0,0 +1,27 @@ +package org.moire.ultrasonic.domain + +import androidx.room.PrimaryKey +import java.util.Date + +data class Album( + @PrimaryKey override var id: String, + override var parent: String? = null, + override var album: String? = null, + override var title: String? = null, + override val name: String? = null, + override var discNumber: Int? = 0, + override var coverArt: String? = null, + override var songCount: Long? = null, + override var created: Date? = null, + override var artist: String? = null, + override var artistId: String? = null, + override var duration: Int? = 0, + override var year: Int? = 0, + override var genre: String? = null, + override var starred: Boolean = false, + override var path: String? = null, + override var closeness: Int = 0, +) : MusicDirectory.Child() { + override var isDirectory = true + override var isVideo = false +} diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt index 415f291e..c4dbb046 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Bookmark.kt @@ -2,7 +2,6 @@ package org.moire.ultrasonic.domain import java.io.Serializable import java.util.Date -import org.moire.ultrasonic.domain.MusicDirectory.Track data class Bookmark( val position: Int = 0, diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt index fa372a31..1d937700 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/MusicDirectory.kt @@ -1,8 +1,5 @@ package org.moire.ultrasonic.domain -import androidx.room.Entity -import androidx.room.PrimaryKey -import java.io.Serializable import java.util.Date class MusicDirectory : ArrayList() { @@ -53,86 +50,4 @@ class MusicDirectory : ArrayList() { abstract var closeness: Int abstract var isVideo: Boolean } - - @Entity - data class Track( - @PrimaryKey override var id: String, - override var parent: String? = null, - override var isDirectory: Boolean = false, - override var title: String? = null, - override var album: String? = null, - var albumId: String? = null, - override var artist: String? = null, - override var artistId: String? = null, - var track: Int? = null, - override var year: Int? = null, - override var genre: String? = null, - var contentType: String? = null, - var suffix: String? = null, - var transcodedContentType: String? = null, - var transcodedSuffix: String? = null, - override var coverArt: String? = null, - var size: Long? = null, - override var songCount: Long? = null, - override var duration: Int? = null, - var bitRate: Int? = null, - override var path: String? = null, - override var isVideo: Boolean = false, - override var starred: Boolean = false, - override var discNumber: Int? = null, - var type: String? = null, - override var created: Date? = null, - override var closeness: Int = 0, - var bookmarkPosition: Int = 0, - var userRating: Int? = null, - var averageRating: Float? = null, - override var name: String? = null - ) : Serializable, Child() { - fun setDuration(duration: Long) { - this.duration = duration.toInt() - } - - companion object { - private const val serialVersionUID = -3339106650010798108L - } - - fun compareTo(other: Track): Int { - when { - this.closeness == other.closeness -> { - return 0 - } - this.closeness > other.closeness -> { - return -1 - } - else -> { - return 1 - } - } - } - - override fun compareTo(other: Identifiable) = compareTo(other as Track) - } - - data class Album( - @PrimaryKey override var id: String, - override var parent: String? = null, - override var album: String? = null, - override var title: String? = null, - override val name: String? = null, - override var discNumber: Int? = 0, - override var coverArt: String? = null, - override var songCount: Long? = null, - override var created: Date? = null, - override var artist: String? = null, - override var artistId: String? = null, - override var duration: Int? = 0, - override var year: Int? = 0, - override var genre: String? = null, - override var starred: Boolean = false, - override var path: String? = null, - override var closeness: Int = 0, - ) : Child() { - override var isDirectory = true - override var isVideo = false - } } diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt index 234738c3..06c6f1c4 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/SearchResult.kt @@ -1,8 +1,5 @@ package org.moire.ultrasonic.domain -import org.moire.ultrasonic.domain.MusicDirectory.Album -import org.moire.ultrasonic.domain.MusicDirectory.Track - /** * The result of a search. Contains matching artists, albums and songs. */ diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt index 3d290b2b..7a0fd00d 100644 --- a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Share.kt @@ -1,7 +1,6 @@ package org.moire.ultrasonic.domain import java.io.Serializable -import org.moire.ultrasonic.domain.MusicDirectory.Track data class Share( override var id: String, diff --git a/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Track.kt b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Track.kt new file mode 100644 index 00000000..3a57296f --- /dev/null +++ b/core/domain/src/main/kotlin/org/moire/ultrasonic/domain/Track.kt @@ -0,0 +1,65 @@ +package org.moire.ultrasonic.domain + +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.io.Serializable +import java.util.Date + +@Entity +data class Track( + @PrimaryKey override var id: String, + override var parent: String? = null, + override var isDirectory: Boolean = false, + override var title: String? = null, + override var album: String? = null, + var albumId: String? = null, + override var artist: String? = null, + override var artistId: String? = null, + var track: Int? = null, + override var year: Int? = null, + override var genre: String? = null, + var contentType: String? = null, + var suffix: String? = null, + var transcodedContentType: String? = null, + var transcodedSuffix: String? = null, + override var coverArt: String? = null, + var size: Long? = null, + override var songCount: Long? = null, + override var duration: Int? = null, + var bitRate: Int? = null, + override var path: String? = null, + override var isVideo: Boolean = false, + override var starred: Boolean = false, + override var discNumber: Int? = null, + var type: String? = null, + override var created: Date? = null, + override var closeness: Int = 0, + var bookmarkPosition: Int = 0, + var userRating: Int? = null, + var averageRating: Float? = null, + override var name: String? = null +) : Serializable, MusicDirectory.Child() { + fun setDuration(duration: Long) { + this.duration = duration.toInt() + } + + companion object { + private const val serialVersionUID = -3339106650010798108L + } + + fun compareTo(other: Track): Int { + when { + this.closeness == other.closeness -> { + return 0 + } + this.closeness > other.closeness -> { + return -1 + } + else -> { + return 1 + } + } + } + + override fun compareTo(other: Identifiable) = compareTo(other as Track) +} diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java index 0282bc37..29cd9bcc 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java @@ -14,7 +14,7 @@ import android.widget.RemoteViews; import org.moire.ultrasonic.R; import org.moire.ultrasonic.activity.NavigationActivity; -import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.domain.Track; import org.moire.ultrasonic.imageloader.BitmapUtils; import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver; import org.moire.ultrasonic.service.MediaPlayerController; @@ -73,7 +73,7 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider /** * Handle a change notification coming over from {@link MediaPlayerController} */ - public void notifyChange(Context context, MusicDirectory.Track currentSong, boolean playing, boolean setAlbum) + public void notifyChange(Context context, Track currentSong, boolean playing, boolean setAlbum) { if (hasInstances(context)) { @@ -100,7 +100,7 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider /** * Update all active widget instances by pushing changes */ - private void performUpdate(Context context, MusicDirectory.Track currentSong, boolean playing, boolean setAlbum) + private void performUpdate(Context context, Track currentSong, boolean playing, boolean setAlbum) { final Resources res = context.getResources(); final RemoteViews views = new RemoteViews(context.getPackageName(), this.layoutId); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java index 9b0596b9..e122ca31 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/A2dpIntentReceiver.java @@ -6,7 +6,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.moire.ultrasonic.domain.MusicDirectory.Track; +import org.moire.ultrasonic.domain.Track; import org.moire.ultrasonic.service.MediaPlayerController; import kotlin.Lazy; diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java index 6cc7cb0d..f3e50046 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/State.java @@ -1,6 +1,6 @@ package org.moire.ultrasonic.service; -import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.domain.Track; import java.io.Serializable; import java.util.ArrayList; @@ -13,7 +13,7 @@ public class State implements Serializable { public static final long serialVersionUID = -6346438781062572270L; - public List songs = new ArrayList<>(); + public List songs = new ArrayList<>(); public int currentPlayingIndex; public int currentPlayingPosition; } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java index 2a41f67f..005df384 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShareDetails.java @@ -1,6 +1,6 @@ package org.moire.ultrasonic.util; -import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.domain.Track; import java.util.List; @@ -12,5 +12,5 @@ public class ShareDetails public String Description; public boolean ShareOnServer; public long Expiration; - public List Entries; + public List Entries; } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java index 2786df23..23b013af 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ShufflePlayBuffer.java @@ -20,6 +20,7 @@ package org.moire.ultrasonic.util; import org.moire.ultrasonic.data.ActiveServerProvider; import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.domain.Track; import org.moire.ultrasonic.service.MusicService; import org.moire.ultrasonic.service.MusicServiceFactory; @@ -40,7 +41,7 @@ public class ShufflePlayBuffer private static final int CAPACITY = 50; private static final int REFILL_THRESHOLD = 40; - private final List buffer = new ArrayList<>(); + private final List buffer = new ArrayList<>(); private ScheduledExecutorService executorService; private int currentServer; @@ -64,11 +65,11 @@ public class ShufflePlayBuffer Timber.i("ShufflePlayBuffer destroyed"); } - public List get(int size) + public List get(int size) { clearBufferIfNecessary(); - List result = new ArrayList<>(size); + List result = new ArrayList<>(size); synchronized (buffer) { while (!buffer.isEmpty() && result.size() < size) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java index 85234b6a..227e3d2c 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/StreamProxy.java @@ -1,6 +1,6 @@ package org.moire.ultrasonic.util; -import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.domain.Track; import org.moire.ultrasonic.service.DownloadFile; import org.moire.ultrasonic.service.Supplier; @@ -180,7 +180,7 @@ public class StreamProxy implements Runnable { Timber.i("Streaming song in background"); DownloadFile downloadFile = currentPlaying == null? null : currentPlaying.get(); - MusicDirectory.Track song = downloadFile.getTrack(); + Track song = downloadFile.getTrack(); long fileSize = downloadFile.getBitRate() * ((song.getDuration() != null) ? song.getDuration() : 0) * 1000 / 8; Timber.i("Streaming fileSize: %d", fileSize); diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/AlbumRowBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/AlbumRowBinder.kt index 2368f8fe..517052eb 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/AlbumRowBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/AlbumRowBinder.kt @@ -20,7 +20,7 @@ import androidx.recyclerview.widget.RecyclerView import com.drakeet.multitype.ItemViewBinder import org.koin.core.component.KoinComponent import org.moire.ultrasonic.R -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.imageloader.ImageLoader import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService import org.moire.ultrasonic.util.Settings.shouldUseId3Tags @@ -31,11 +31,11 @@ import timber.log.Timber * Creates a Row in a RecyclerView which contains the details of an Album */ class AlbumRowBinder( - val onItemClick: (MusicDirectory.Album) -> Unit, - val onContextMenuClick: (MenuItem, MusicDirectory.Album) -> Boolean, + val onItemClick: (Album) -> Unit, + val onContextMenuClick: (MenuItem, Album) -> Boolean, private val imageLoader: ImageLoader, context: Context -) : ItemViewBinder(), KoinComponent { +) : ItemViewBinder(), KoinComponent { private val starDrawable: Drawable = Util.getDrawableFromAttribute(context, R.attr.star_full) @@ -46,7 +46,7 @@ class AlbumRowBinder( val layout = R.layout.list_item_album val contextMenuLayout = R.menu.context_menu_artist - override fun onBindViewHolder(holder: ViewHolder, item: MusicDirectory.Album) { + override fun onBindViewHolder(holder: ViewHolder, item: Album) { holder.album.text = item.title holder.artist.text = item.artist holder.details.setOnClickListener { onItemClick(item) } @@ -86,7 +86,7 @@ class AlbumRowBinder( /** * Handles the star / unstar action for an album */ - private fun onStarClick(entry: MusicDirectory.Album, star: ImageView) { + private fun onStarClick(entry: Album, star: ImageView) { entry.starred = !entry.starred star.setImageDrawable(if (entry.starred) starDrawable else starHollowDrawable) val musicService = getMusicService() diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt index f36b3756..0c9028f0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt @@ -12,7 +12,7 @@ import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.R import org.moire.ultrasonic.domain.Identifiable -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.DownloadFile import org.moire.ultrasonic.service.Downloader @@ -45,7 +45,7 @@ class TrackViewBinder( val diffAdapter = adapter as BaseAdapter<*> when (item) { - is MusicDirectory.Track -> { + is Track -> { downloadFile = downloader.getDownloadFileForSong(item) } is DownloadFile -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt index 5aa5601c..23a885d2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewHolder.kt @@ -15,7 +15,7 @@ import io.reactivex.rxjava3.disposables.Disposable import org.koin.core.component.KoinComponent import org.moire.ultrasonic.R import org.moire.ultrasonic.data.ActiveServerProvider -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.DownloadFile import org.moire.ultrasonic.service.DownloadStatus import org.moire.ultrasonic.service.MusicServiceFactory @@ -44,7 +44,7 @@ class TrackViewHolder(val view: View) : RecyclerView.ViewHolder(view), Checkable var duration: TextView = view.findViewById(R.id.song_duration) var progress: TextView = view.findViewById(R.id.song_status) - var entry: MusicDirectory.Track? = null + var entry: Track? = null private set var downloadFile: DownloadFile? = null private set @@ -131,7 +131,7 @@ class TrackViewHolder(val view: View) : RecyclerView.ViewHolder(view), Checkable } } - private fun setupStarButtons(song: MusicDirectory.Track, useFiveStarRating: Boolean) { + private fun setupStarButtons(song: Track, useFiveStarRating: Boolean) { if (useFiveStarRating) { // Hide single star star.isVisible = false diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIAlbumConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIAlbumConverter.kt index 5fd70782..1f614254 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIAlbumConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIAlbumConverter.kt @@ -4,8 +4,9 @@ package org.moire.ultrasonic.domain import org.moire.ultrasonic.api.subsonic.models.Album +typealias DomainAlbum = org.moire.ultrasonic.domain.Album -fun Album.toDomainEntity(): MusicDirectory.Album = MusicDirectory.Album( +fun Album.toDomainEntity(): DomainAlbum = Album( id = this@toDomainEntity.id, title = this@toDomainEntity.name ?: this@toDomainEntity.title, album = this@toDomainEntity.album, @@ -24,4 +25,4 @@ fun Album.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().appl addAll(this@toMusicDirectoryDomainEntity.songList.map { it.toTrackEntity() }) } -fun List.toDomainEntityList(): List = this.map { it.toDomainEntity() } +fun List.toDomainEntityList(): List = this.map { it.toDomainEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIArtistConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIArtistConverter.kt index 4c2294ba..7d31b6a1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIArtistConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIArtistConverter.kt @@ -24,6 +24,6 @@ fun APIArtist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory(). addAll(this@toMusicDirectoryDomainEntity.albumsList.map { it.toDomainEntity() }) } -fun APIArtist.toDomainEntityList(): List { +fun APIArtist.toDomainEntityList(): List { return this.albumsList.map { it.toDomainEntity() } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt index ebe1a3f1..260eab66 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/domain/APIMusicDirectoryConverter.kt @@ -26,12 +26,12 @@ internal val dateFormat: DateFormat by lazy { SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()) } -fun MusicDirectoryChild.toTrackEntity(): MusicDirectory.Track = MusicDirectory.Track(id).apply { +fun MusicDirectoryChild.toTrackEntity(): Track = Track(id).apply { populateCommonProps(this, this@toTrackEntity) populateTrackProps(this, this@toTrackEntity) } -fun MusicDirectoryChild.toAlbumEntity(): MusicDirectory.Album = MusicDirectory.Album(id).apply { +fun MusicDirectoryChild.toAlbumEntity(): Album = Album(id).apply { populateCommonProps(this, this@toAlbumEntity) } @@ -64,7 +64,7 @@ private fun populateCommonProps( } private fun populateTrackProps( - track: MusicDirectory.Track, + track: Track, source: MusicDirectoryChild ) { track.size = source.size @@ -93,7 +93,7 @@ fun List.toDomainEntityList(): List { return newList } -fun List.toTrackList(): List = this.map { +fun List.toTrackList(): List = this.map { it.toTrackEntity() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt index 93c7d1c7..b7de646d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt @@ -15,14 +15,14 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import org.moire.ultrasonic.R import org.moire.ultrasonic.adapters.AlbumRowBinder -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.model.AlbumListModel import org.moire.ultrasonic.util.Constants /** * Displays a list of Albums from the media library */ -class AlbumListFragment : EntryListFragment() { +class AlbumListFragment : EntryListFragment() { /** * The ViewModel to use to get the data @@ -45,7 +45,7 @@ class AlbumListFragment : EntryListFragment() { override fun getLiveData( args: Bundle?, refresh: Boolean - ): LiveData> { + ): LiveData> { if (args == null) throw IllegalArgumentException("Required arguments are missing") val refresh2 = args.getBoolean(Constants.INTENT_REFRESH) || refresh @@ -83,7 +83,7 @@ class AlbumListFragment : EntryListFragment() { emptyTextView.setText(R.string.select_album_empty) } - override fun onItemClick(item: MusicDirectory.Album) { + override fun onItemClick(item: Album) { val bundle = Bundle() bundle.putString(Constants.INTENT_ID, item.id) bundle.putBoolean(Constants.INTENT_IS_ALBUM, item.isDirectory) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt index cb679c8a..92fe2a52 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.launch import org.moire.ultrasonic.R import org.moire.ultrasonic.adapters.BaseAdapter import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.fragment.FragmentTitle.Companion.setTitle /** @@ -61,7 +62,7 @@ class BookmarksFragment : TrackCollectionFragment() { /** * Custom playback function which uses the restore functionality. A bit of a hack.. */ - private fun playNow(songs: List) { + private fun playNow(songs: List) { if (songs.isNotEmpty()) { val position = songs[0].bookmarkPosition diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt index 5c78c213..53913818 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt @@ -66,9 +66,9 @@ import org.moire.ultrasonic.audiofx.EqualizerController import org.moire.ultrasonic.audiofx.VisualizerController import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.Identifiable -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.domain.RepeatMode +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.fragment.FragmentTitle.Companion.setTitle import org.moire.ultrasonic.service.DownloadFile import org.moire.ultrasonic.service.LocalMediaPlayer @@ -118,7 +118,7 @@ class PlayerFragment : private val imageLoaderProvider: ImageLoaderProvider by inject() private lateinit var executorService: ScheduledExecutorService private var currentPlaying: DownloadFile? = null - private var currentSong: MusicDirectory.Track? = null + private var currentSong: Track? = null private lateinit var viewManager: LinearLayoutManager private var rxBusSubscription: Disposable? = null private var ioScope = CoroutineScope(Dispatchers.IO) @@ -544,7 +544,7 @@ class PlayerFragment : val downloadFile = viewAdapter.getCurrentList()[info!!.position] as DownloadFile val menuInflater = requireActivity().menuInflater menuInflater.inflate(R.menu.nowplaying_context, menu) - val song: MusicDirectory.Track? + val song: Track? song = downloadFile.track @@ -571,7 +571,7 @@ class PlayerFragment : @Suppress("ComplexMethod", "LongMethod", "ReturnCount") private fun menuItemSelected(menuItemId: Int, song: DownloadFile?): Boolean { - var track: MusicDirectory.Track? = null + var track: Track? = null val bundle: Bundle if (song != null) { track = song.track @@ -746,7 +746,7 @@ class PlayerFragment : } R.id.menu_item_share -> { val mediaPlayerController = mediaPlayerController - val tracks: MutableList = ArrayList() + val tracks: MutableList = ArrayList() val downloadServiceSongs = mediaPlayerController.playList for (downloadFile in downloadServiceSongs) { val playlistEntry = downloadFile.track @@ -758,7 +758,7 @@ class PlayerFragment : R.id.menu_item_share_song -> { if (currentSong == null) return true - val tracks: MutableList = ArrayList() + val tracks: MutableList = ArrayList() tracks.add(currentSong) shareHandler.createShare(this, tracks, null, cancellationToken) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt index b68d7abc..bfca7917 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt @@ -24,12 +24,13 @@ import org.moire.ultrasonic.adapters.DividerBinder import org.moire.ultrasonic.adapters.MoreButtonBinder import org.moire.ultrasonic.adapters.MoreButtonBinder.MoreButton import org.moire.ultrasonic.adapters.TrackViewBinder +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.ArtistOrIndex import org.moire.ultrasonic.domain.Identifiable import org.moire.ultrasonic.domain.Index -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.SearchResult +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.fragment.FragmentTitle.Companion.setTitle import org.moire.ultrasonic.model.SearchListModel import org.moire.ultrasonic.service.DownloadFile @@ -199,7 +200,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { super.onDestroyView() } - private fun downloadBackground(save: Boolean, songs: List) { + private fun downloadBackground(save: Boolean, songs: List) { val onValid = Runnable { networkAndStorageChecker.warnIfNetworkOrStorageUnavailable() mediaPlayerController.downloadBackground(songs, save) @@ -287,7 +288,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { } } - private fun onAlbumSelected(album: MusicDirectory.Album, autoplay: Boolean) { + private fun onAlbumSelected(album: Album, autoplay: Boolean) { val bundle = Bundle() bundle.putString(Constants.INTENT_ID, album.id) bundle.putString(Constants.INTENT_NAME, album.title) @@ -296,7 +297,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { Navigation.findNavController(requireView()).navigate(R.id.searchToTrackCollection, bundle) } - private fun onSongSelected(song: MusicDirectory.Track, append: Boolean) { + private fun onSongSelected(song: Track, append: Boolean) { if (!append) { mediaPlayerController.clear() } @@ -312,7 +313,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { toast(context, resources.getQuantityString(R.plurals.select_album_n_songs_added, 1, 1)) } - private fun onVideoSelected(track: MusicDirectory.Track) { + private fun onVideoSelected(track: Track) { playVideo(requireContext(), track) } @@ -329,14 +330,14 @@ class SearchFragment : MultiListFragment(), KoinComponent { is ArtistOrIndex -> { onArtistSelected(item) } - is MusicDirectory.Track -> { + is Track -> { if (item.isVideo) { onVideoSelected(item) } else { onSongSelected(item, true) } } - is MusicDirectory.Album -> { + is Album -> { onAlbumSelected(item, false) } } @@ -356,7 +357,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { if (found || item !is DownloadFile) return true - val songs = mutableListOf() + val songs = mutableListOf() when (menuItem.itemId) { R.id.song_menu_play_now -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index c5330b0c..e0e990a9 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -34,6 +34,7 @@ import org.moire.ultrasonic.adapters.TrackViewBinder import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.Identifiable import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.fragment.FragmentTitle.Companion.setTitle import org.moire.ultrasonic.model.TrackCollectionModel import org.moire.ultrasonic.service.MediaPlayerController @@ -46,7 +47,6 @@ import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.EntryByDiscAndTrackComparator import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Util -import org.moire.ultrasonic.util.Util.toast /** * Displays a group of tracks, eg. the songs of an album, of a playlist etc. @@ -249,7 +249,7 @@ open class TrackCollectionFragment : MultiListFragment() { private fun playNow( append: Boolean, - selectedSongs: List = getSelectedSongs() + selectedSongs: List = getSelectedSongs() ) { if (selectedSongs.isNotEmpty()) { downloadHandler.download( @@ -314,10 +314,10 @@ open class TrackCollectionFragment : MultiListFragment() { } @Suppress("UNCHECKED_CAST") - private fun getAllSongs(): List { + private fun getAllSongs(): List { return viewAdapter.getCurrentList().filter { - it is MusicDirectory.Track && !it.isDirectory - } as List + it is Track && !it.isDirectory + } as List } internal fun selectAllOrNone() { @@ -338,7 +338,7 @@ open class TrackCollectionFragment : MultiListFragment() { } } - internal open fun enableButtons(selection: List = getSelectedSongs()) { + internal open fun enableButtons(selection: List = getSelectedSongs()) { val enabled = selection.isNotEmpty() var unpinEnabled = false var deleteEnabled = false @@ -378,7 +378,7 @@ open class TrackCollectionFragment : MultiListFragment() { private fun downloadBackground( save: Boolean, - songs: List + songs: List ) { val onValid = Runnable { networkAndStorageChecker.warnIfNetworkOrStorageUnavailable() @@ -403,7 +403,7 @@ open class TrackCollectionFragment : MultiListFragment() { onValid.run() } - internal fun delete(songs: List = getSelectedSongs()) { + internal fun delete(songs: List = getSelectedSongs()) { Util.toast( context, resources.getQuantityString( @@ -414,7 +414,7 @@ open class TrackCollectionFragment : MultiListFragment() { mediaPlayerController.delete(songs) } - internal fun unpin(songs: List = getSelectedSongs()) { + internal fun unpin(songs: List = getSelectedSongs()) { Util.toast( context, resources.getQuantityString( @@ -533,10 +533,10 @@ open class TrackCollectionFragment : MultiListFragment() { } } - internal fun getSelectedSongs(): List { + internal fun getSelectedSongs(): List { // Walk through selected set and get the Entries based on the saved ids. return viewAdapter.getCurrentList().mapNotNull { - if (it is MusicDirectory.Track && viewAdapter.isSelected(it.longId)) + if (it is Track && viewAdapter.isSelected(it.longId)) it else null @@ -655,7 +655,7 @@ open class TrackCollectionFragment : MultiListFragment() { playAll() } R.id.song_menu_share -> { - if (item is MusicDirectory.Track) { + if (item is Track) { shareHandler.createShare( this, listOf(item), refreshListView, cancellationToken!! @@ -669,10 +669,10 @@ open class TrackCollectionFragment : MultiListFragment() { return true } - internal fun getClickedSong(item: MusicDirectory.Child): List { + internal fun getClickedSong(item: MusicDirectory.Child): List { // This can probably be done better return viewAdapter.getCurrentList().mapNotNull { - if (it is MusicDirectory.Track && (it.id == item.id)) + if (it is Track && (it.id == item.id)) it else null @@ -692,7 +692,7 @@ open class TrackCollectionFragment : MultiListFragment() { bundle ) } - item is MusicDirectory.Track && item.isVideo -> { + item is Track && item.isVideo -> { VideoPlayer.playVideo(requireContext(), item) } else -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt index f4ffa495..15f81c08 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/BitmapUtils.kt @@ -4,7 +4,7 @@ import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Build import java.io.File -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.util.FileUtil import org.moire.ultrasonic.util.Util import timber.log.Timber @@ -26,7 +26,7 @@ class BitmapUtils { } fun getAlbumArtBitmapFromDisk( - track: MusicDirectory.Track?, + track: Track?, size: Int ): Bitmap? { if (track == null) return null diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt index 335573be..cea51877 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/imageloader/ImageLoader.kt @@ -20,6 +20,7 @@ import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient import org.moire.ultrasonic.api.subsonic.throwOnFailure import org.moire.ultrasonic.api.subsonic.toStreamResponse import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.util.FileUtil import org.moire.ultrasonic.util.Util.safeClose import timber.log.Timber @@ -148,7 +149,7 @@ class ImageLoader( * Download a cover art file and cache it on disk */ fun cacheCoverArt( - track: MusicDirectory.Track + track: Track ) { // Synchronize on the entry so that we don't download concurrently for diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/model/AlbumListModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/model/AlbumListModel.kt index c5fd4d41..605973a2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/model/AlbumListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/model/AlbumListModel.kt @@ -6,14 +6,14 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import org.moire.ultrasonic.api.subsonic.models.AlbumListType -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.service.MusicService import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.Settings class AlbumListModel(application: Application) : GenericListModel(application) { - val list: MutableLiveData> = MutableLiveData() + val list: MutableLiveData> = MutableLiveData() var lastType: String? = null private var loadedUntil: Int = 0 @@ -21,7 +21,7 @@ class AlbumListModel(application: Application) : GenericListModel(application) { refresh: Boolean, swipe: SwipeRefreshLayout, args: Bundle - ): LiveData> { + ): LiveData> { // Don't reload the data if navigating back to the view that was active before. // This way, we keep the scroll position val albumListType = args.getString(Constants.INTENT_ALBUM_LIST_TYPE)!! @@ -56,7 +56,7 @@ class AlbumListModel(application: Application) : GenericListModel(application) { var offset = args.getInt(Constants.INTENT_ALBUM_LIST_OFFSET, 0) val append = args.getBoolean(Constants.INTENT_APPEND, false) - val musicDirectory: List + val musicDirectory: List val musicFolderId = if (showSelectFolderHeader(args)) { activeServerProvider.getActiveServer().musicFolderId } else { @@ -98,7 +98,7 @@ class AlbumListModel(application: Application) : GenericListModel(application) { currentListIsSortable = isCollectionSortable(albumListType) if (append && list.value != null) { - val newList = ArrayList() + val newList = ArrayList() newList.addAll(list.value!!) newList.addAll(musicDirectory) list.postValue(newList) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt index fea04dea..b0c5c6e1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/AutoMediaBrowserService.kt @@ -25,6 +25,7 @@ import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.SearchCriteria import org.moire.ultrasonic.domain.SearchResult +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.util.MediaSessionHandler import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Util @@ -80,10 +81,10 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { private val serviceJob = Job() private val serviceScope = CoroutineScope(Dispatchers.IO + serviceJob) - private var playlistCache: List? = null - private var starredSongsCache: List? = null - private var randomSongsCache: List? = null - private var searchSongsCache: List? = null + private var playlistCache: List? = null + private var starredSongsCache: List? = null + private var randomSongsCache: List? = null + private var searchSongsCache: List? = null private val isOffline get() = ActiveServerProvider.isOffline() private val useId3Tags get() = Settings.shouldUseId3Tags @@ -1070,7 +1071,7 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { return section.toString() } - private fun playSongs(songs: List?) { + private fun playSongs(songs: List?) { mediaPlayerController.addToPlaylist( songs, save = false, @@ -1081,7 +1082,7 @@ class AutoMediaBrowserService : MediaBrowserServiceCompat() { ) } - private fun playSong(song: MusicDirectory.Track) { + private fun playSong(song: Track) { mediaPlayerController.addToPlaylist( listOf(song), save = false, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt index b8a74431..13d2a2b2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/CachedMusicService.kt @@ -13,6 +13,7 @@ import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.MetaDatabase +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.ChatMessage @@ -27,6 +28,7 @@ import org.moire.ultrasonic.domain.PodcastsChannel import org.moire.ultrasonic.domain.SearchCriteria import org.moire.ultrasonic.domain.SearchResult import org.moire.ultrasonic.domain.Share +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.domain.UserInfo import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.LRUCache @@ -41,7 +43,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, // Old style TimeLimitedCache private val cachedMusicDirectories: LRUCache> - private val cachedArtist: LRUCache>> + private val cachedArtist: LRUCache>> private val cachedAlbum: LRUCache> private val cachedUserInfo: LRUCache> private val cachedLicenseValid = TimeLimitedCache(120, TimeUnit.SECONDS) @@ -149,7 +151,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, @Throws(Exception::class) override fun getArtist(id: String, name: String?, refresh: Boolean): - List { + List { checkSettingsChanged() var cache = if (refresh) null else cachedArtist[id] var dir = cache?.get() @@ -218,7 +220,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, } @Throws(Exception::class) - override fun createPlaylist(id: String?, name: String?, tracks: List) { + override fun createPlaylist(id: String?, name: String?, tracks: List) { cachedPlaylists.clear() musicService.createPlaylist(id, name, tracks) } @@ -249,7 +251,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { return musicService.getAlbumList(type, size, offset, musicFolderId) } @@ -259,7 +261,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { return musicService.getAlbumList2(type, size, offset, musicFolderId) } @@ -276,7 +278,7 @@ class CachedMusicService(private val musicService: MusicService) : MusicService, @Throws(Exception::class) override fun getDownloadInputStream( - song: MusicDirectory.Track, + song: Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt index 0093d76a..53679440 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt @@ -17,7 +17,7 @@ import org.koin.core.component.inject import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Identifiable -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService import org.moire.ultrasonic.subsonic.ImageLoaderProvider import org.moire.ultrasonic.util.CacheCleaner @@ -38,7 +38,7 @@ import timber.log.Timber * */ class DownloadFile( - val track: MusicDirectory.Track, + val track: Track, save: Boolean ) : KoinComponent, Identifiable { val partialFile: String diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt index 39e9bc42..a0a33c50 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/Downloader.kt @@ -10,8 +10,8 @@ import java.util.concurrent.ScheduledExecutorService import java.util.concurrent.TimeUnit import org.koin.core.component.KoinComponent import org.koin.core.component.inject -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.PlayerState +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.util.LRUCache import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.ShufflePlayBuffer @@ -45,7 +45,7 @@ class Downloader( private val jukeboxMediaPlayer: JukeboxMediaPlayer by inject() // This cache helps us to avoid creating duplicate DownloadFile instances when showing Entries - private val downloadFileCache = LRUCache(100) + private val downloadFileCache = LRUCache(100) private var executorService: ScheduledExecutorService? = null private var wifiLock: WifiManager.WifiLock? = null @@ -345,7 +345,7 @@ class Downloader( @Synchronized fun addToPlaylist( - songs: List, + songs: List, save: Boolean, autoPlay: Boolean, playNext: Boolean, @@ -407,7 +407,7 @@ class Downloader( } @Synchronized - fun downloadBackground(songs: List, save: Boolean) { + fun downloadBackground(songs: List, save: Boolean) { // By using the counter we ensure that the songs are added in the correct order for (song in songs) { @@ -435,7 +435,7 @@ class Downloader( @Synchronized @Suppress("ReturnCount") - fun getDownloadFileForSong(song: MusicDirectory.Track): DownloadFile { + fun getDownloadFileForSong(song: Track): DownloadFile { for (downloadFile in playlist) { if (downloadFile.track == song) { return downloadFile @@ -513,7 +513,7 @@ class Downloader( * Extension function * Gathers the download file for a given song, and modifies shouldSave if provided. */ - fun MusicDirectory.Track.getDownloadFile(save: Boolean? = null): DownloadFile { + fun Track.getDownloadFile(save: Boolean? = null): DownloadFile { return getDownloadFileForSong(this).apply { if (save != null) this.shouldSave = save } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt index 1aaa6936..9e17fde5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerController.kt @@ -11,9 +11,9 @@ import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.data.ActiveServerProvider -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.domain.RepeatMode +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.MediaPlayerService.Companion.executeOnStartedMediaPlayerService import org.moire.ultrasonic.service.MediaPlayerService.Companion.getInstance import org.moire.ultrasonic.service.MediaPlayerService.Companion.runningInstance @@ -65,7 +65,7 @@ class MediaPlayerController( @Synchronized fun restore( - songs: List?, + songs: List?, currentPlayingIndex: Int, currentPlayingPosition: Int, autoPlay: Boolean, @@ -165,7 +165,7 @@ class MediaPlayerController( @Synchronized @Suppress("LongParameterList") fun addToPlaylist( - songs: List?, + songs: List?, save: Boolean, autoPlay: Boolean, playNext: Boolean, @@ -202,7 +202,7 @@ class MediaPlayerController( } @Synchronized - fun downloadBackground(songs: List?, save: Boolean) { + fun downloadBackground(songs: List?, save: Boolean) { if (songs == null) return val filteredSongs = songs.filterNotNull() downloader.downloadBackground(filteredSongs, save) @@ -325,7 +325,7 @@ class MediaPlayerController( @Synchronized // TODO: Make it require not null - fun delete(songs: List) { + fun delete(songs: List) { for (song in songs.filterNotNull()) { downloader.getDownloadFileForSong(song).delete() } @@ -333,7 +333,7 @@ class MediaPlayerController( @Synchronized // TODO: Make it require not null - fun unpin(songs: List) { + fun unpin(songs: List) { for (song in songs.filterNotNull()) { downloader.getDownloadFileForSong(song).unpin() } @@ -509,7 +509,7 @@ class MediaPlayerController( val playListDuration: Long get() = downloader.downloadListDuration - fun getDownloadFileForSong(song: MusicDirectory.Track): DownloadFile { + fun getDownloadFileForSong(song: Track): DownloadFile { return downloader.getDownloadFileForSong(song) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 17aec8fc..55951d8e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -28,9 +28,9 @@ import org.koin.android.ext.android.inject import org.moire.ultrasonic.R import org.moire.ultrasonic.activity.NavigationActivity import org.moire.ultrasonic.app.UApp -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.domain.RepeatMode +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.imageloader.BitmapUtils import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X1 import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X2 @@ -340,7 +340,7 @@ class MediaPlayerService : Service() { localMediaPlayer.setPlayerState(PlayerState.STARTED, localMediaPlayer.currentPlaying) } - private fun updateWidget(playerState: PlayerState, song: MusicDirectory.Track?) { + private fun updateWidget(playerState: PlayerState, song: Track?) { val started = playerState === PlayerState.STARTED val context = this@MediaPlayerService @@ -589,7 +589,7 @@ class MediaPlayerService : Service() { context: Context, notificationBuilder: NotificationCompat.Builder, playerState: PlayerState, - song: MusicDirectory.Track? + song: Track? ): IntArray { // Init val compactActionList = ArrayList() diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt index 2559e9a8..02bf0fbb 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicService.kt @@ -7,6 +7,7 @@ package org.moire.ultrasonic.service import java.io.InputStream +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.ChatMessage @@ -21,6 +22,7 @@ import org.moire.ultrasonic.domain.PodcastsChannel import org.moire.ultrasonic.domain.SearchCriteria import org.moire.ultrasonic.domain.SearchResult import org.moire.ultrasonic.domain.Share +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.domain.UserInfo @Suppress("TooManyFunctions") @@ -57,7 +59,7 @@ interface MusicService { fun getMusicDirectory(id: String, name: String?, refresh: Boolean): MusicDirectory @Throws(Exception::class) - fun getArtist(id: String, name: String?, refresh: Boolean): List + fun getArtist(id: String, name: String?, refresh: Boolean): List @Throws(Exception::class) fun getAlbum(id: String, name: String?, refresh: Boolean): MusicDirectory @@ -75,7 +77,7 @@ interface MusicService { fun getPlaylists(refresh: Boolean): List @Throws(Exception::class) - fun createPlaylist(id: String?, name: String?, tracks: List) + fun createPlaylist(id: String?, name: String?, tracks: List) @Throws(Exception::class) fun deletePlaylist(id: String) @@ -95,7 +97,7 @@ interface MusicService { size: Int, offset: Int, musicFolderId: String? - ): List + ): List @Throws(Exception::class) fun getAlbumList2( @@ -103,7 +105,7 @@ interface MusicService { size: Int, offset: Int, musicFolderId: String? - ): List + ): List @Throws(Exception::class) fun getRandomSongs(size: Int): MusicDirectory @@ -123,7 +125,7 @@ interface MusicService { */ @Throws(Exception::class) fun getDownloadInputStream( - song: MusicDirectory.Track, + song: Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt index 7c027d44..0034db0b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/OfflineMusicService.kt @@ -23,6 +23,7 @@ import java.util.regex.Pattern import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.data.ActiveServerProvider +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.ArtistOrIndex import org.moire.ultrasonic.domain.Bookmark @@ -38,6 +39,7 @@ import org.moire.ultrasonic.domain.PodcastsChannel import org.moire.ultrasonic.domain.SearchCriteria import org.moire.ultrasonic.domain.SearchResult import org.moire.ultrasonic.domain.Share +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.domain.UserInfo import org.moire.ultrasonic.util.AbstractFile import org.moire.ultrasonic.util.Constants @@ -126,8 +128,8 @@ class OfflineMusicService : MusicService, KoinComponent { override fun search(criteria: SearchCriteria): SearchResult { val artists: MutableList = ArrayList() - val albums: MutableList = ArrayList() - val songs: MutableList = ArrayList() + val albums: MutableList = ArrayList() + val songs: MutableList = ArrayList() val root = FileUtil.musicDirectory var closeness: Int for (artistFile in FileUtil.listFiles(root)) { @@ -227,7 +229,7 @@ class OfflineMusicService : MusicService, KoinComponent { @Suppress("TooGenericExceptionCaught") @Throws(Exception::class) - override fun createPlaylist(id: String?, name: String?, tracks: List) { + override fun createPlaylist(id: String?, name: String?, tracks: List) { val playlistFile = FileUtil.getPlaylistFile(activeServerProvider.getActiveServer().name, name) val fw = FileWriter(playlistFile) @@ -299,7 +301,7 @@ class OfflineMusicService : MusicService, KoinComponent { size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { throw OfflineException("Album lists not available in offline mode") } @@ -309,7 +311,7 @@ class OfflineMusicService : MusicService, KoinComponent { size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { throw OfflineException("getAlbumList2 isn't available in offline mode") } @@ -455,7 +457,7 @@ class OfflineMusicService : MusicService, KoinComponent { @Throws(OfflineException::class) override fun getArtist(id: String, name: String?, refresh: Boolean): - List { + List { throw OfflineException("getArtist isn't available in offline mode") } @@ -471,7 +473,7 @@ class OfflineMusicService : MusicService, KoinComponent { @Throws(OfflineException::class) override fun getDownloadInputStream( - song: MusicDirectory.Track, + song: Track, offset: Long, maxBitrate: Int, save: Boolean @@ -502,14 +504,14 @@ class OfflineMusicService : MusicService, KoinComponent { return FileUtil.getBaseName(name) } - private fun createEntry(file: AbstractFile, name: String?): MusicDirectory.Track { - val entry = MusicDirectory.Track(file.path) + private fun createEntry(file: AbstractFile, name: String?): Track { + val entry = Track(file.path) entry.populateWithDataFrom(file, name) return entry } - private fun createAlbum(file: AbstractFile, name: String?): MusicDirectory.Album { - val album = MusicDirectory.Album(file.path) + private fun createAlbum(file: AbstractFile, name: String?): Album { + val album = Album(file.path) album.populateWithDataFrom(file, name) return album } @@ -536,7 +538,7 @@ class OfflineMusicService : MusicService, KoinComponent { * More extensive variant of Child.populateWithDataFrom(), which also parses the ID3 tags of * a given track file. */ - private fun MusicDirectory.Track.populateWithDataFrom(file: AbstractFile, name: String?) { + private fun Track.populateWithDataFrom(file: AbstractFile, name: String?) { (this as MusicDirectory.Child).populateWithDataFrom(file, name) val meta = RawMetadata(null) @@ -609,8 +611,8 @@ class OfflineMusicService : MusicService, KoinComponent { artistName: String, file: AbstractFile, criteria: SearchCriteria, - albums: MutableList, - songs: MutableList + albums: MutableList, + songs: MutableList ) { var closeness: Int for (albumFile in FileUtil.listMediaFiles(file)) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt index 2bdc43e9..7c313291 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/RESTMusicService.kt @@ -19,6 +19,7 @@ import org.moire.ultrasonic.api.subsonic.throwOnFailure import org.moire.ultrasonic.api.subsonic.toStreamResponse import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline +import org.moire.ultrasonic.domain.Album import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.ChatMessage @@ -33,6 +34,7 @@ import org.moire.ultrasonic.domain.PodcastsChannel import org.moire.ultrasonic.domain.SearchCriteria import org.moire.ultrasonic.domain.SearchResult import org.moire.ultrasonic.domain.Share +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.domain.UserInfo import org.moire.ultrasonic.domain.toArtistList import org.moire.ultrasonic.domain.toDomainEntitiesList @@ -143,7 +145,7 @@ open class RESTMusicService( id: String, name: String?, refresh: Boolean - ): List { + ): List { val response = API.getArtist(id).execute().throwOnFailure() return response.body()!!.artist.toDomainEntityList() @@ -262,7 +264,7 @@ open class RESTMusicService( override fun createPlaylist( id: String?, name: String?, - tracks: List + tracks: List ) { if (id == null && name == null) throw IllegalArgumentException("Either id or name is required.") @@ -350,7 +352,7 @@ open class RESTMusicService( size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { val response = API.getAlbumList( fromName(type), size, @@ -370,7 +372,7 @@ open class RESTMusicService( size: Int, offset: Int, musicFolderId: String? - ): List { + ): List { val response = API.getAlbumList2( fromName(type), size, @@ -418,7 +420,7 @@ open class RESTMusicService( @Throws(Exception::class) override fun getDownloadInputStream( - song: MusicDirectory.Track, + song: Track, offset: Long, maxBitrate: Int, save: Boolean diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index 6048bf3f..3dca314c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -8,6 +8,7 @@ import java.util.LinkedList import org.moire.ultrasonic.R import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.MediaPlayerController import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService import org.moire.ultrasonic.util.Constants @@ -33,7 +34,7 @@ class DownloadHandler( autoPlay: Boolean, playNext: Boolean, shuffle: Boolean, - songs: List + songs: List ) { val onValid = Runnable { if (!append && !playNext) { @@ -195,15 +196,15 @@ class DownloadHandler( isArtist: Boolean ) { val activity = fragment.activity as Activity - val task = object : ModalBackgroundTask>( + val task = object : ModalBackgroundTask>( activity, false ) { @Throws(Throwable::class) - override fun doInBackground(): List { + override fun doInBackground(): List { val musicService = getMusicService() - val songs: MutableList = LinkedList() + val songs: MutableList = LinkedList() val root: MusicDirectory if (!isOffline() && isArtist && Settings.shouldUseId3Tags) { getSongsForArtist(id, songs) @@ -235,7 +236,7 @@ class DownloadHandler( @Throws(Exception::class) private fun getSongsRecursively( parent: MusicDirectory, - songs: MutableList + songs: MutableList ) { if (songs.size > maxSongs) { return @@ -259,7 +260,7 @@ class DownloadHandler( @Throws(Exception::class) private fun getSongsForArtist( id: String, - songs: MutableCollection + songs: MutableCollection ) { if (songs.size > maxSongs) { return @@ -280,7 +281,7 @@ class DownloadHandler( } } - override fun done(songs: List) { + override fun done(songs: List) { if (Settings.shouldSortByDisc) { Collections.sort(songs, EntryByDiscAndTrackComparator()) } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt index b3d78ce8..d0f8f596 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/ShareHandler.kt @@ -15,8 +15,8 @@ import java.util.Locale import java.util.regex.Pattern import kotlin.collections.ArrayList import org.moire.ultrasonic.R -import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.Share +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.MusicServiceFactory.getMusicService import org.moire.ultrasonic.util.BackgroundTask import org.moire.ultrasonic.util.CancellationToken @@ -44,7 +44,7 @@ class ShareHandler(val context: Context) { fun createShare( fragment: Fragment, - tracks: List?, + tracks: List?, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken ) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt index c018aab8..efd77833 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/VideoPlayer.kt @@ -4,7 +4,7 @@ import android.content.Context import android.content.Intent import android.net.Uri import org.moire.ultrasonic.R -import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.MusicServiceFactory import org.moire.ultrasonic.util.Util @@ -14,7 +14,7 @@ import org.moire.ultrasonic.util.Util @Suppress("UtilityClassWithPublicConstructor") class VideoPlayer { companion object { - fun playVideo(context: Context, track: MusicDirectory.Track?) { + fun playVideo(context: Context, track: Track?) { if (!Util.isNetworkConnected() || track == null) { Util.toast(context, R.string.select_album_no_network) return diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt index 4cb2711b..099eeb66 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/EntryByDiscAndTrackComparator.kt @@ -2,13 +2,14 @@ package org.moire.ultrasonic.util import java.util.Comparator import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track class EntryByDiscAndTrackComparator : Comparator { override fun compare(x: MusicDirectory.Child, y: MusicDirectory.Child): Int { val discX = x.discNumber val discY = y.discNumber - val trackX = if (x is MusicDirectory.Track) x.track else null - val trackY = if (y is MusicDirectory.Track) y.track else null + val trackX = if (x is Track) x.track else null + val trackY = if (y is Track) y.track else null val albumX = x.album val albumY = y.album val pathX = x.path diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt index 41b50c46..8511d9c1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/FileUtil.kt @@ -27,6 +27,7 @@ import java.util.TreeSet import java.util.regex.Pattern import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.domain.MusicDirectory +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.util.Util.safeClose import timber.log.Timber @@ -49,7 +50,7 @@ object FileUtil { const val SUFFIX_SMALL = ".jpeg-small" private const val UNNAMED = "unnamed" - fun getSongFile(song: MusicDirectory.Track): String { + fun getSongFile(song: Track): String { val dir = getAlbumDirectory(song) // Do not generate new name for offline files. Offline files will have their Path as their Id. diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index 9d4ef720..febda154 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -55,6 +55,7 @@ import org.moire.ultrasonic.domain.Bookmark import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.domain.SearchResult +import org.moire.ultrasonic.domain.Track import org.moire.ultrasonic.service.DownloadFile import timber.log.Timber @@ -438,7 +439,7 @@ object Util { @JvmStatic fun getSongsFromBookmarks(bookmarks: Iterable): MusicDirectory { val musicDirectory = MusicDirectory() - var song: MusicDirectory.Track + var song: Track for (bookmark in bookmarks) { song = bookmark.track song.bookmarkPosition = bookmark.position @@ -450,7 +451,7 @@ object Util { /** * Broadcasts the given song info as the new song being played. */ - fun broadcastNewTrackInfo(context: Context, song: MusicDirectory.Track?) { + fun broadcastNewTrackInfo(context: Context, song: Track?) { val intent = Intent(EVENT_META_CHANGED) if (song != null) { intent.putExtra("title", song.title) @@ -476,7 +477,7 @@ object Util { ) { if (!Settings.shouldSendBluetoothNotifications) return - var song: MusicDirectory.Track? = null + var song: Track? = null val avrcpIntent = Intent(CM_AVRCP_METADATA_CHANGED) if (currentPlaying != null) song = currentPlaying.track @@ -489,7 +490,7 @@ object Util { fun broadcastA2dpPlayStatusChange( context: Context, state: PlayerState?, - newSong: MusicDirectory.Track?, + newSong: Track?, listSize: Int, id: Int, playerPosition: Int @@ -520,7 +521,7 @@ object Util { private fun fillIntent( intent: Intent, - song: MusicDirectory.Track?, + song: Track?, playerPosition: Int, id: Int, listSize: Int @@ -776,7 +777,7 @@ object Util { ) fun getMediaDescriptionForEntry( - song: MusicDirectory.Track, + song: Track, mediaId: String? = null, groupNameId: Int? = null ): MediaDescriptionCompat { @@ -809,7 +810,7 @@ object Util { } @Suppress("ComplexMethod", "LongMethod") - fun readableEntryDescription(song: MusicDirectory.Track): ReadableEntryDescription { + fun readableEntryDescription(song: Track): ReadableEntryDescription { val artist = StringBuilder(LINE_LENGTH) var bitRate: String? = null var trackText = "" From c2226ba202ef3d24790271e790b6a8f58d137613 Mon Sep 17 00:00:00 2001 From: tzugen Date: Sun, 27 Mar 2022 15:17:15 +0200 Subject: [PATCH 4/4] Fix older detekt issues in DownloadFile and regenerate Baselinefile --- detekt-baseline.xml | 39 ++++--------------- .../moire/ultrasonic/service/DownloadFile.kt | 9 +++-- 2 files changed, 13 insertions(+), 35 deletions(-) diff --git a/detekt-baseline.xml b/detekt-baseline.xml index d983b21f..bfcdeea0 100644 --- a/detekt-baseline.xml +++ b/detekt-baseline.xml @@ -1,41 +1,24 @@ - + - + - ComplexCondition:DownloadHandler.kt$DownloadHandler.<no name provided>$!append && !playNext && !unpin && !background - ComplexCondition:FilePickerAdapter.kt$FilePickerAdapter$currentDirectory.absolutePath == "/" || currentDirectory.absolutePath == "/storage" || currentDirectory.absolutePath == "/storage/emulated" || currentDirectory.absolutePath == "/mnt" + ComplexCondition:DownloadHandler.kt$DownloadHandler.<no name provided>$!append && !playNext && !unpin && !background ComplexMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute() - ComplexMethod:FilePickerAdapter.kt$FilePickerAdapter$private fun fileLister(currentDirectory: File) - ComplexMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean) - ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun enableButtons() - ComplexMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory) - ImplicitDefaultLocale:DownloadFile.kt$DownloadFile$String.format("DownloadFile (%s)", song) - ImplicitDefaultLocale:DownloadFile.kt$DownloadFile.DownloadTask$String.format("Download of '%s' was cancelled", song) - ImplicitDefaultLocale:DownloadFile.kt$DownloadFile.DownloadTask$String.format("DownloadTask (%s)", song) - ImplicitDefaultLocale:EditServerFragment.kt$EditServerFragment.<no name provided>$String.format( "%s %s", resources.getString(R.string.settings_connection_failure), getErrorMessage(error) ) + ImplicitDefaultLocale:EditServerFragment.kt$EditServerFragment.<no name provided>$String.format( "%s %s", resources.getString(R.string.settings_connection_failure), getErrorMessage(error) ) ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Failed to write log to %s", file) ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Log file rotated, logging into file %s", file?.name) ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Logging into file %s", file?.name) ImplicitDefaultLocale:LocalMediaPlayer.kt$LocalMediaPlayer.BufferTask$String.format("BufferTask (%s)", downloadFile) ImplicitDefaultLocale:LocalMediaPlayer.kt$LocalMediaPlayer.CheckCompletionTask$String.format("CheckCompletionTask (%s)", downloadFile) ImplicitDefaultLocale:ShareHandler.kt$ShareHandler$String.format("%d:%s", timeSpanAmount, timeSpanType) - ImplicitDefaultLocale:SongView.kt$SongView$String.format("%02d.", trackNumber) - ImplicitDefaultLocale:SongView.kt$SongView$String.format("%s ", bitRate) - ImplicitDefaultLocale:SongView.kt$SongView$String.format("%s > %s", suffix, transcodedSuffix) - LargeClass:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment LongMethod:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute() LongMethod:EditServerFragment.kt$EditServerFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?) LongMethod:LocalMediaPlayer.kt$LocalMediaPlayer$@Synchronized private fun doPlay(downloadFile: DownloadFile, position: Int, start: Boolean) LongMethod:NavigationActivity.kt$NavigationActivity$override fun onCreate(savedInstanceState: Bundle?) LongMethod:ShareHandler.kt$ShareHandler$private fun showDialog( fragment: Fragment, shareDetails: ShareDetails, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken ) - LongMethod:SongView.kt$SongView$fun setSong(song: MusicDirectory.Entry, checkable: Boolean, draggable: Boolean) - LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean - LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?) - LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateDisplay(refresh: Boolean) - LongMethod:TrackCollectionFragment.kt$TrackCollectionFragment$private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory) - LongParameterList:ServerRowAdapter.kt$ServerRowAdapter$( private var context: Context, private var data: Array<ServerSetting>, private val model: ServerSettingsModel, private val activeServerProvider: ActiveServerProvider, private val manageMode: Boolean, private val serverDeletedCallback: ((Int) -> Unit), private val serverEditRequestedCallback: ((Int) -> Unit) ) + LongParameterList:ServerRowAdapter.kt$ServerRowAdapter$( private var context: Context, private var data: Array<ServerSetting>, private val model: ServerSettingsModel, private val activeServerProvider: ActiveServerProvider, private val manageMode: Boolean, private val serverDeletedCallback: ((Int) -> Unit), private val serverEditRequestedCallback: ((Int) -> Unit) ) MagicNumber:ActiveServerProvider.kt$ActiveServerProvider$8192 - MagicNumber:LocalMediaPlayer.kt$LocalMediaPlayer.<no name provided>$60000 + MagicNumber:LocalMediaPlayer.kt$LocalMediaPlayer.<no name provided>$60000 MagicNumber:LocalMediaPlayer.kt$LocalMediaPlayer.BufferTask$100000 MagicNumber:LocalMediaPlayer.kt$LocalMediaPlayer.BufferTask$8 MagicNumber:LocalMediaPlayer.kt$LocalMediaPlayer.BufferTask$86400L @@ -44,25 +27,17 @@ MagicNumber:MediaPlayerService.kt$MediaPlayerService$3 MagicNumber:MediaPlayerService.kt$MediaPlayerService$4 MagicNumber:RESTMusicService.kt$RESTMusicService$206 - MagicNumber:SongView.kt$SongView$3 - MagicNumber:SongView.kt$SongView$4 - MagicNumber:SongView.kt$SongView$60 NestedBlockDepth:DownloadFile.kt$DownloadFile.DownloadTask$override fun execute() NestedBlockDepth:DownloadHandler.kt$DownloadHandler$private fun downloadRecursively( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean ) NestedBlockDepth:MediaPlayerService.kt$MediaPlayerService$private fun setupOnSongCompletedHandler() - ReturnCount:ServerRowAdapter.kt$ServerRowAdapter$ private fun popupMenuItemClick(menuItem: MenuItem, position: Int): Boolean - ReturnCount:TrackCollectionFragment.kt$TrackCollectionFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean - TooGenericExceptionCaught:DownloadFile.kt$DownloadFile$e: Exception TooGenericExceptionCaught:FileLoggerTree.kt$FileLoggerTree$x: Throwable TooGenericExceptionCaught:LocalMediaPlayer.kt$LocalMediaPlayer$ex: Exception TooGenericExceptionCaught:LocalMediaPlayer.kt$LocalMediaPlayer$exception: Throwable TooGenericExceptionCaught:LocalMediaPlayer.kt$LocalMediaPlayer$x: Exception TooGenericExceptionCaught:LocalMediaPlayer.kt$LocalMediaPlayer.PositionCache$e: Exception - TooGenericExceptionCaught:SongView.kt$SongView$e: Exception - TooGenericExceptionThrown:DownloadFile.kt$DownloadFile.DownloadTask$throw Exception(String.format("Download of '%s' was cancelled", song)) + TooGenericExceptionThrown:DownloadFile.kt$DownloadFile.DownloadTask$throw RuntimeException( String.format(Locale.ROOT, "Download of '%s' was cancelled", track) ) TooManyFunctions:MediaPlayerService.kt$MediaPlayerService : Service TooManyFunctions:RESTMusicService.kt$RESTMusicService : MusicService - TooManyFunctions:TrackCollectionFragment.kt$TrackCollectionFragment : Fragment UtilityClassWithPublicConstructor:FragmentTitle.kt$FragmentTitle diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt index 53679440..9b99eb9b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/DownloadFile.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.MutableLiveData import java.io.IOException import java.io.InputStream import java.io.OutputStream +import java.util.Locale import org.koin.core.component.KoinComponent import org.koin.core.component.inject import org.moire.ultrasonic.data.ActiveServerProvider @@ -221,7 +222,7 @@ class DownloadFile( } override fun toString(): String { - return String.format("DownloadFile (%s)", track) + return String.format(Locale.ROOT, "DownloadFile (%s)", track) } private inner class DownloadTask : CancellableTask() { @@ -293,7 +294,9 @@ class DownloadFile( if (isCancelled) { status.postValue(DownloadStatus.CANCELLED) - throw Exception(String.format("Download of '%s' was cancelled", track)) + throw RuntimeException( + String.format(Locale.ROOT, "Download of '%s' was cancelled", track) + ) } if (track.artistId != null) { @@ -339,7 +342,7 @@ class DownloadFile( } override fun toString(): String { - return String.format("DownloadTask (%s)", track) + return String.format(Locale.ROOT, "DownloadTask (%s)", track) } private fun cacheMetadata(artistId: String) {