From 2401f9031f7256442954896cf76025294e1d58fb Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Wed, 1 Jan 2025 13:55:07 -0700 Subject: [PATCH] music: connect update tracker to service --- .../org/oxycblt/auxio/music/MusicModule.kt | 17 ------- .../auxio/music/service/IndexingHolder.kt | 20 ++++++--- .../auxio/music/shim/MusikrShimModule.kt | 45 +++++++++++++++++++ .../auxio/music/shim/UpdateTrackerFactory.kt | 30 +++++++++++++ 4 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 app/src/main/java/org/oxycblt/auxio/music/shim/MusikrShimModule.kt create mode 100644 app/src/main/java/org/oxycblt/auxio/music/shim/UpdateTrackerFactory.kt diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt index 621bec0c4..b7e9d3b0d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt @@ -18,16 +18,11 @@ package org.oxycblt.auxio.music -import android.content.Context import dagger.Binds import dagger.Module -import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import javax.inject.Singleton -import org.oxycblt.musikr.cache.StoredCache -import org.oxycblt.musikr.playlist.db.StoredPlaylists @Module @InstallIn(SingletonComponent::class) @@ -36,15 +31,3 @@ interface MusicModule { @Binds fun settings(musicSettingsImpl: MusicSettingsImpl): MusicSettings } - -@Module -@InstallIn(SingletonComponent::class) -class MusikrShimModule { - @Singleton - @Provides - fun storedCache(@ApplicationContext context: Context) = StoredCache.from(context) - - @Singleton - @Provides - fun storedPlaylists(@ApplicationContext context: Context) = StoredPlaylists.from(context) -} diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/IndexingHolder.kt b/app/src/main/java/org/oxycblt/auxio/music/service/IndexingHolder.kt index 52d88c391..638d05039 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/IndexingHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/IndexingHolder.kt @@ -32,26 +32,29 @@ import org.oxycblt.auxio.ForegroundServiceNotification import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicRepository import org.oxycblt.auxio.music.MusicSettings +import org.oxycblt.auxio.music.shim.UpdateTrackerFactory import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.util.getSystemServiceCompat import org.oxycblt.musikr.MusicParent +import org.oxycblt.musikr.fs.MusicLocation import org.oxycblt.musikr.track.UpdateTracker import timber.log.Timber as L class IndexingHolder private constructor( - private val workerContext: Context, + workerContext: Context, private val foregroundListener: ForegroundListener, private val playbackManager: PlaybackStateManager, private val musicRepository: MusicRepository, private val musicSettings: MusicSettings, private val imageLoader: ImageLoader, - private val updateTracker: UpdateTracker + updateTrackerFactory: UpdateTrackerFactory ) : MusicRepository.IndexingWorker, MusicRepository.IndexingListener, MusicRepository.UpdateListener, - MusicSettings.Listener { + MusicSettings.Listener, + UpdateTracker.Callback { class Factory @Inject constructor( @@ -59,7 +62,7 @@ private constructor( private val musicRepository: MusicRepository, private val musicSettings: MusicSettings, private val imageLoader: ImageLoader, - private val updateTracker: UpdateTracker + private val updateTrackerFactory: UpdateTrackerFactory ) { fun create(context: Context, listener: ForegroundListener) = IndexingHolder( @@ -69,7 +72,7 @@ private constructor( musicRepository, musicSettings, imageLoader, - updateTracker) + updateTrackerFactory) } private val indexJob = Job() @@ -82,6 +85,7 @@ private constructor( .getSystemServiceCompat(PowerManager::class) .newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":IndexingComponent") + private val updateTracker = updateTrackerFactory.create(this) fun attach() { musicSettings.registerListener(this) @@ -164,6 +168,12 @@ private constructor( } } + override fun onUpdate(location: MusicLocation) { + if (musicSettings.shouldBeObserving) { + musicRepository.requestIndex(true) + } + } + override fun onMusicLocationsChanged() { super.onMusicLocationsChanged() updateTracker.track(musicSettings.musicLocations) diff --git a/app/src/main/java/org/oxycblt/auxio/music/shim/MusikrShimModule.kt b/app/src/main/java/org/oxycblt/auxio/music/shim/MusikrShimModule.kt new file mode 100644 index 000000000..977936cd5 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/music/shim/MusikrShimModule.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025 Auxio Project + * MusikrShimModule.kt is part of Auxio. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.oxycblt.auxio.music.shim + +import android.content.Context +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton +import org.oxycblt.musikr.cache.StoredCache +import org.oxycblt.musikr.playlist.db.StoredPlaylists + +@Module +@InstallIn(SingletonComponent::class) +class MusikrShimModule { + @Singleton + @Provides + fun storedCache(@ApplicationContext context: Context) = StoredCache.from(context) + + @Singleton + @Provides + fun storedPlaylists(@ApplicationContext context: Context) = StoredPlaylists.from(context) + + @Provides + fun updateTrackerFactory(@ApplicationContext context: Context): UpdateTrackerFactory = + UpdateTrackerFactoryImpl(context) +} diff --git a/app/src/main/java/org/oxycblt/auxio/music/shim/UpdateTrackerFactory.kt b/app/src/main/java/org/oxycblt/auxio/music/shim/UpdateTrackerFactory.kt new file mode 100644 index 000000000..fa320f888 --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/music/shim/UpdateTrackerFactory.kt @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Auxio Project + * UpdateTrackerFactory.kt is part of Auxio. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.oxycblt.auxio.music.shim + +import android.content.Context +import org.oxycblt.musikr.track.UpdateTracker + +interface UpdateTrackerFactory { + fun create(callback: UpdateTracker.Callback): UpdateTracker +} + +class UpdateTrackerFactoryImpl(private val context: Context) : UpdateTrackerFactory { + override fun create(callback: UpdateTracker.Callback) = UpdateTracker.from(context, callback) +}