Fix pinned tags changing positions when renamed
This commit is contained in:
parent
52bba7f5f2
commit
bbaba3aad9
@ -209,4 +209,13 @@ interface SearchableDao {
|
|||||||
|
|
||||||
@Query("SELECT pinPosition FROM Searchable WHERE `key` = :key UNION SELECT 0 as pinPosition ORDER BY pinPosition DESC LIMIT 1")
|
@Query("SELECT pinPosition FROM Searchable WHERE `key` = :key UNION SELECT 0 as pinPosition ORDER BY pinPosition DESC LIMIT 1")
|
||||||
fun isPinned(key: String): Flow<Boolean>
|
fun isPinned(key: String): Flow<Boolean>
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
suspend fun replace(key: String, item: SavedSearchableUpdateContentEntity) {
|
||||||
|
updateKey(key, item.key)
|
||||||
|
update(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Query("UPDATE Searchable SET `key` = :newKey WHERE `key` = :oldKey")
|
||||||
|
suspend fun updateKey(oldKey: String, newKey: String)
|
||||||
}
|
}
|
||||||
@ -6,6 +6,7 @@ import de.mm20.launcher2.backup.Backupable
|
|||||||
import de.mm20.launcher2.crashreporter.CrashReporter
|
import de.mm20.launcher2.crashreporter.CrashReporter
|
||||||
import de.mm20.launcher2.database.AppDatabase
|
import de.mm20.launcher2.database.AppDatabase
|
||||||
import de.mm20.launcher2.database.entities.SavedSearchableEntity
|
import de.mm20.launcher2.database.entities.SavedSearchableEntity
|
||||||
|
import de.mm20.launcher2.database.entities.SavedSearchableUpdateContentEntity
|
||||||
import de.mm20.launcher2.database.entities.SavedSearchableUpdatePinEntity
|
import de.mm20.launcher2.database.entities.SavedSearchableUpdatePinEntity
|
||||||
import de.mm20.launcher2.ktx.jsonObjectOf
|
import de.mm20.launcher2.ktx.jsonObjectOf
|
||||||
import de.mm20.launcher2.preferences.WeightFactor
|
import de.mm20.launcher2.preferences.WeightFactor
|
||||||
@ -53,6 +54,16 @@ interface SavableSearchableRepository : Backupable {
|
|||||||
weight: Double? = null,
|
weight: Double? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace a searchable in the database.
|
||||||
|
* The new entry will inherit the visibility, launch count, weight and pin position of the old entry,
|
||||||
|
* but it will have a different key and searchable.
|
||||||
|
*/
|
||||||
|
fun replace(
|
||||||
|
key: String,
|
||||||
|
newSearchable: SavableSearchable,
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Touch a searchable to update its weight and launch counter
|
* Touch a searchable to update its weight and launch counter
|
||||||
**/
|
**/
|
||||||
@ -328,6 +339,19 @@ internal class SavableSearchableRepositoryImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun replace(key: String, newSearchable: SavableSearchable) {
|
||||||
|
scope.launch {
|
||||||
|
database.searchableDao().replace(
|
||||||
|
key,
|
||||||
|
SavedSearchableUpdateContentEntity(
|
||||||
|
key = newSearchable.key,
|
||||||
|
type = newSearchable.domain,
|
||||||
|
serializedSearchable = newSearchable.serialize() ?: return@launch
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun updateFavorites(
|
override fun updateFavorites(
|
||||||
manuallySorted: List<SavableSearchable>,
|
manuallySorted: List<SavableSearchable>,
|
||||||
automaticallySorted: List<SavableSearchable>
|
automaticallySorted: List<SavableSearchable>
|
||||||
|
|||||||
@ -51,8 +51,7 @@ internal class TagsServiceImpl(
|
|||||||
).first()
|
).first()
|
||||||
val oldTag = Tag(tag)
|
val oldTag = Tag(tag)
|
||||||
if (pinnedTags.any { it.key == oldTag.key }) {
|
if (pinnedTags.any { it.key == oldTag.key }) {
|
||||||
searchableRepository.update(oldTag, pinned = false)
|
searchableRepository.replace(oldTag.key, Tag(newName))
|
||||||
searchableRepository.update(Tag(newName), pinned = true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user