diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceDao.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceDao.kt index f62a65ee..6a32b179 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceDao.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceDao.kt @@ -23,6 +23,9 @@ abstract class ConferenceDao : BaseDao() { @Query("SELECT * FROM conference WHERE conferenceGroupId = :id ORDER BY acronym DESC") abstract fun findConferenceByGroup(id: Long): LiveData> + @Query("DELETE FROM conference") + abstract fun delete() + override fun updateOrInsertInternal(item: PersistentConference) { if (item.id != 0L) { update(item) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceGroupDao.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceGroupDao.kt index 6175cb36..469b1f8e 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceGroupDao.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/ConferenceGroupDao.kt @@ -15,6 +15,9 @@ abstract class ConferenceGroupDao : BaseDao() { @Query("DELETE FROM conference_group WHERE id NOT IN (SELECT conference.conferenceGroupId FROM conference)") abstract fun deleteEmptyGroups() + @Query("DElETE FROM conference_group") + abstract fun delete() + override fun updateOrInsertInternal(item: ConferenceGroup) { if (item.id != 0L) { update(item) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/EventDao.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/EventDao.kt index 3824cfc8..ad62e85f 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/EventDao.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/EventDao.kt @@ -48,6 +48,9 @@ abstract class EventDao: BaseDao() { @Query("SELECT * FROM event WHERE frontendLink = :url ") abstract fun findEventsByFrontendurl(url: String):LiveData + @Query("DElETE FROM event") + abstract fun delete() + override fun updateOrInsertInternal(item: PersistentEvent) { if (item.id != 0L) { update(item) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RecordingDao.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RecordingDao.kt index dfb606ee..eb6a8d45 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RecordingDao.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RecordingDao.kt @@ -25,6 +25,9 @@ abstract class RecordingDao: BaseDao() { @Query("DELETE FROM recording WHERE eventId = :eventId") abstract fun deleteRecordingsForEvent(eventId: Long) + @Query("DElETE FROM recording") + abstract fun delete() + override fun updateOrInsertInternal(item: PersistentRecording) { if (item.id != 0L) { update(item) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RelatedEventDao.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RelatedEventDao.kt index ad784139..b9a4e968 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RelatedEventDao.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/entities/recording/persistence/RelatedEventDao.kt @@ -15,6 +15,9 @@ abstract class RelatedEventDao : BaseDao() { @Query("SELECT * FROM related WHERE parentEventId = :parentId AND relatedEventGuid = :related") abstract fun findSpecificRelatedEventSync(parentId: Long, related: String): PersistentRelatedEvent? + @Query("DElETE FROM related") + abstract fun delete() + override fun updateOrInsertInternal(item: PersistentRelatedEvent) { if (item.id != 0L) { update(item) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/Downloader.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/Downloader.kt index 62a3f318..e7946fe1 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/Downloader.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/Downloader.kt @@ -133,6 +133,17 @@ class Downloader(private val recordingApi: RecordingService, } } + fun deleteNonUserData(){ + with(database){ + conferenceGroupDao().delete() + conferenceDao().delete() + eventDao().delete() + recordingDao().delete() + relatedEventDao().delete() + } + + } + private fun saveConferences(conferencesWrapper: ConferencesWrapper): List { return conferencesWrapper.conferencesMap.map { entry -> val conferenceGroup: ConferenceGroup = getOrCreateConferenceGroup(entry.key) diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/DetailsViewModel.kt b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/DetailsViewModel.kt index 4f684e1c..ecfa77c5 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/DetailsViewModel.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/DetailsViewModel.kt @@ -21,13 +21,13 @@ class DetailsViewModel( val database: ChaosflixDatabase, recordingApi: RecordingService, val offlineItemManager: OfflineItemManager, - val preferencesManager: PreferencesManager + val preferencesManager: PreferencesManager, + val downloader: Downloader ) : ViewModel() { val state: SingleLiveEvent> = SingleLiveEvent() - val downloader = Downloader(recordingApi, database) var writeExternalStorageAllowed: Boolean = false private val handler = ThreadHandler() diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/PreferencesViewModel.kt b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/PreferencesViewModel.kt new file mode 100644 index 00000000..138db525 --- /dev/null +++ b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/PreferencesViewModel.kt @@ -0,0 +1,13 @@ +package de.nicidienase.chaosflix.common.viewmodel + +import android.arch.lifecycle.ViewModel +import de.nicidienase.chaosflix.common.mediadata.sync.Downloader +import de.nicidienase.chaosflix.common.util.ThreadHandler + +class PreferencesViewModel(val downloader: Downloader) : ViewModel() { + fun cleanNonUserData() { + ThreadHandler().runOnBackgroundThread { + downloader.deleteNonUserData() + } + } +} \ No newline at end of file diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt index a6098def..b8b79016 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt @@ -8,6 +8,7 @@ import de.nicidienase.chaosflix.common.DatabaseFactory import de.nicidienase.chaosflix.common.OfflineItemManager import de.nicidienase.chaosflix.common.PreferencesManager import de.nicidienase.chaosflix.common.mediadata.network.ApiFactory +import de.nicidienase.chaosflix.common.mediadata.sync.Downloader class ViewModelFactory(context: Context) : ViewModelProvider.Factory { @@ -20,18 +21,18 @@ class ViewModelFactory(context: Context) : ViewModelProvider.Factory { PreferencesManager(PreferenceManager.getDefaultSharedPreferences(context.applicationContext)) val offlineItemManager = OfflineItemManager(context.applicationContext, database.offlineEventDao(),preferencesManager) + val downloader by lazy { Downloader(recordingApi, database) } @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(BrowseViewModel::class.java)) { return BrowseViewModel(offlineItemManager, database, recordingApi, streamingApi, preferencesManager) as T - } else if (modelClass.isAssignableFrom(PlayerViewModel::class.java)) { return PlayerViewModel(database) as T - } else if (modelClass.isAssignableFrom(DetailsViewModel::class.java)) { - return DetailsViewModel(database, recordingApi, offlineItemManager, preferencesManager) as T - + return DetailsViewModel(database, recordingApi, offlineItemManager, preferencesManager, downloader) as T + } else if (modelClass.isAssignableFrom(PreferencesViewModel::class.java)){ + return PreferencesViewModel(downloader) as T } else { throw UnsupportedOperationException("The requested ViewModel is currently unsupported. " + "Please make sure to implement are correct creation of it. " + diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index e60067ae..577e4ff9 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -37,4 +37,9 @@ watchlist new-watchlist Return to Homescreen + Clean Cache + Download folder + Don\'t show selection dialog, just use HD-mp4 + Don\'t show selection dialog, just use DASH + Enable downloads over mobile or payed networks diff --git a/common/src/main/res/xml/preferences.xml b/common/src/main/res/xml/preferences.xml index 29aed095..2acc6f45 100644 --- a/common/src/main/res/xml/preferences.xml +++ b/common/src/main/res/xml/preferences.xml @@ -5,24 +5,28 @@ android:key="allow_metered_networks" android:defaultValue="false" android:title="Allow downloads over metered networks" - android:summary="Enable downloads over mobile or payed networks"/> + android:summary="@string/pref_mobile_downloads"/> + android:summary="@string/pref_autoselect_stream"/> + android:summary="@string/pref_autoselect_recording"/> + android:title="@string/download_folder"/> + + \ No newline at end of file diff --git a/touch/src/main/java/de/nicidienase/chaosflix/touch/settings/SettingsFragment.kt b/touch/src/main/java/de/nicidienase/chaosflix/touch/settings/SettingsFragment.kt index b4212ec2..0444f563 100644 --- a/touch/src/main/java/de/nicidienase/chaosflix/touch/settings/SettingsFragment.kt +++ b/touch/src/main/java/de/nicidienase/chaosflix/touch/settings/SettingsFragment.kt @@ -1,11 +1,14 @@ package de.nicidienase.chaosflix.touch.settings +import android.arch.lifecycle.ViewModelProviders +import android.content.Context import android.content.Intent import android.os.Bundle import android.preference.PreferenceManager import android.support.v7.preference.PreferenceFragmentCompat import de.nicidienase.chaosflix.R -import de.nicidienase.chaosflix.touch.ChaosflixApplication +import de.nicidienase.chaosflix.common.viewmodel.PreferencesViewModel +import de.nicidienase.chaosflix.common.viewmodel.ViewModelFactory import net.rdrei.android.dirchooser.DirectoryChooserActivity import net.rdrei.android.dirchooser.DirectoryChooserConfig @@ -13,6 +16,15 @@ import net.rdrei.android.dirchooser.DirectoryChooserConfig class SettingsFragment : PreferenceFragmentCompat() { private val REQUEST_DIRECTORY: Int = 0 + private lateinit var viewModel: PreferencesViewModel + + override fun onAttach(context: Context?) { + super.onAttach(context) + context?.let {context -> + viewModel = ViewModelProviders.of(this, ViewModelFactory(context)).get(PreferencesViewModel::class.java) + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) @@ -38,23 +50,28 @@ class SettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences,rootKey) updateSummary() - val pref = this.findPreference("download_folder") + val downloadFolderPref = this.findPreference("download_folder") + val cleanCachePref = this.findPreference("delete_data") - pref.setOnPreferenceClickListener({ - val chooserIntent = Intent(context, DirectoryChooserActivity::class.java) + downloadFolderPref?.setOnPreferenceClickListener { + val chooserIntent = Intent(context, DirectoryChooserActivity::class.java) - val config = DirectoryChooserConfig.builder() - .newDirectoryName("Download folder") - .allowReadOnlyDirectory(false) - .allowNewDirectoryNameModification(true) - .build() + val config = DirectoryChooserConfig.builder() + .newDirectoryName("Download folder") + .allowReadOnlyDirectory(false) + .allowNewDirectoryNameModification(true) + .build() - chooserIntent.putExtra(DirectoryChooserActivity.EXTRA_CONFIG, config) - startActivityForResult(chooserIntent, REQUEST_DIRECTORY) + chooserIntent.putExtra(DirectoryChooserActivity.EXTRA_CONFIG, config) + startActivityForResult(chooserIntent, REQUEST_DIRECTORY) - return@setOnPreferenceClickListener true + return@setOnPreferenceClickListener true + } - }) + cleanCachePref?.setOnPreferenceClickListener { + viewModel.cleanNonUserData() + return@setOnPreferenceClickListener true + } } companion object {