Skip to content

Commit

Permalink
[feature|fix] Support for naming RSS (#9); fix MediaMetadataRetriever…
Browse files Browse the repository at this point in the history
….getFrameAtTime invoked in main thread
  • Loading branch information
SkyD666 committed Apr 25, 2024
1 parent d6bafb6 commit 78d4fe1
Show file tree
Hide file tree
Showing 20 changed files with 253 additions and 104 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ android {
minSdk = 24
targetSdk = 34
versionCode = 14
versionName = "1.1-beta13"
versionName = "1.1-beta14"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
14 changes: 14 additions & 0 deletions app/src/main/java/com/skyd/anivu/model/bean/ArticleWithFeed.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.skyd.anivu.model.bean

import androidx.room.Embedded
import androidx.room.Relation

/**
* An [articleWithEnclosure] contains a [feed].
*/
data class ArticleWithFeed(
@Embedded
var articleWithEnclosure: ArticleWithEnclosureBean,
@Relation(parentColumn = ArticleBean.FEED_URL_COLUMN, entityColumn = FeedBean.URL_COLUMN)
var feed: FeedBean,
)
7 changes: 4 additions & 3 deletions app/src/main/java/com/skyd/anivu/model/db/dao/ArticleDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import com.skyd.anivu.appContext
import com.skyd.anivu.model.bean.ARTICLE_TABLE_NAME
import com.skyd.anivu.model.bean.ArticleBean
import com.skyd.anivu.model.bean.ArticleWithEnclosureBean
import com.skyd.anivu.model.bean.ArticleWithFeed
import com.skyd.anivu.model.bean.FEED_TABLE_NAME
import com.skyd.anivu.model.bean.FeedBean
import dagger.hilt.EntryPoint
Expand Down Expand Up @@ -101,15 +102,15 @@ interface ArticleDao {
ORDER BY ${ArticleBean.DATE_COLUMN} DESC
"""
)
fun getArticlePagingSource(feedUrl: String): PagingSource<Int, ArticleWithEnclosureBean>
fun getArticlePagingSource(feedUrl: String): PagingSource<Int, ArticleWithFeed>

@Transaction
@RawQuery(observedEntities = [ArticleBean::class])
fun getArticlePagingSource(sql: SupportSQLiteQuery): PagingSource<Int, ArticleWithEnclosureBean>
fun getArticlePagingSource(sql: SupportSQLiteQuery): PagingSource<Int, ArticleWithFeed>

@Transaction
@RawQuery(observedEntities = [ArticleBean::class])
fun getArticleList(sql: SupportSQLiteQuery): List<ArticleWithEnclosureBean>
fun getArticleList(sql: SupportSQLiteQuery): List<ArticleWithFeed>

@Transaction
@Query(
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/skyd/anivu/model/db/dao/FeedDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ interface FeedDao {
@Query(
"""
UPDATE $FEED_TABLE_NAME
SET ${FeedBean.GROUP_ID_COLUMN} = :groupId
SET ${FeedBean.NICKNAME_COLUMN} = :nickname, ${FeedBean.GROUP_ID_COLUMN} = :groupId
WHERE ${FeedBean.URL_COLUMN} = :feedUrl
"""
)
suspend fun updateFeedGroupId(feedUrl: String, groupId: String?): Int
suspend fun updateFeedGroupId(feedUrl: String, nickname: String?, groupId: String?): Int

@Transaction
@Query(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.paging.PagingConfig
import androidx.paging.PagingData
import com.skyd.anivu.base.BaseRepository
import com.skyd.anivu.model.bean.ArticleWithEnclosureBean
import com.skyd.anivu.model.bean.ArticleWithFeed
import com.skyd.anivu.model.db.dao.ArticleDao
import com.skyd.anivu.model.db.dao.FeedDao
import kotlinx.coroutines.Dispatchers
Expand All @@ -19,7 +20,7 @@ class ArticleRepository @Inject constructor(
private val rssHelper: RssHelper,
private val pagingConfig: PagingConfig,
) : BaseRepository() {
fun requestArticleList(feedUrl: String): Flow<PagingData<ArticleWithEnclosureBean>> {
fun requestArticleList(feedUrl: String): Flow<PagingData<ArticleWithFeed>> {
return Pager(pagingConfig) {
articleDao.getArticlePagingSource(feedUrl)
}.flow.flowOn(Dispatchers.IO)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,38 +56,49 @@ class FeedRepository @Inject constructor(

suspend fun setFeed(
url: String,
groupId: String? = null,
nickname: String? = null,
groupId: String?,
nickname: String?,
): Flow<Unit> {
return flow {
val realGroupId = if (groupId == GroupBean.DEFAULT_GROUP_ID) null else groupId
val realNickname = if (nickname.isNullOrBlank()) null else nickname
val realGroupId =
if (nickname.isNullOrBlank() || groupId == GroupBean.DEFAULT_GROUP_ID) null else groupId
val feedWithArticleBean = rssHelper.searchFeed(url = url).run {
copy(
feed = feed.copy(
groupId = realGroupId,
nickname = nickname,
nickname = realNickname,
)
)
}
emit(feedDao.setFeedWithArticle(feedWithArticleBean))
}.flowOn(Dispatchers.IO)
}

suspend fun editFeed(oldUrl: String, newUrl: String, groupId: String?): Flow<Unit> {
suspend fun editFeed(
oldUrl: String,
newUrl: String,
nickname: String?,
groupId: String?,
): Flow<Unit> {
return flow {
val realNickname = if (nickname.isNullOrBlank()) null else nickname
val realGroupId =
if (groupId.isNullOrBlank() || groupId == GroupBean.DEFAULT_GROUP_ID) null else groupId
if (oldUrl != newUrl) {
val feedWithArticleBean = rssHelper.searchFeed(url = newUrl).run {
copy(
feed = feed.copy(
groupId = groupId,
groupId = realGroupId,
nickname = realNickname,
)
)
}
feedDao.removeFeed(oldUrl)
feedDao.setFeedWithArticle(feedWithArticleBean)
emit(Unit)
} else {
feedDao.updateFeedGroupId(oldUrl, groupId)
feedDao.updateFeedGroupId(oldUrl, realNickname, realGroupId)
emit(Unit)
}
}.flowOn(Dispatchers.IO)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.skyd.anivu.ext.getOrDefault
import com.skyd.anivu.model.bean.ARTICLE_TABLE_NAME
import com.skyd.anivu.model.bean.ArticleBean
import com.skyd.anivu.model.bean.ArticleWithEnclosureBean
import com.skyd.anivu.model.bean.ArticleWithFeed
import com.skyd.anivu.model.bean.FEED_TABLE_NAME
import com.skyd.anivu.model.bean.FeedBean
import com.skyd.anivu.model.db.dao.ArticleDao
Expand Down Expand Up @@ -93,7 +94,7 @@ class SearchRepository @Inject constructor(
fun requestSearchArticle(
feedUrl: String? = null,
query: String,
): Flow<PagingData<ArticleWithEnclosureBean>> {
): Flow<PagingData<ArticleWithFeed>> {
return flow {
emit(
genSql(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ import com.skyd.anivu.R

@Composable
fun AniVuTextField(
modifier: Modifier = Modifier,
value: String,
label: String = "",
readOnly: Boolean = false,
maxLines: Int = Int.MAX_VALUE,
autoRequestFocus: Boolean = true,
onValueChange: (String) -> Unit,
visualTransformation: VisualTransformation = VisualTransformation.None,
isPassword: Boolean = false,
Expand All @@ -44,12 +46,12 @@ fun AniVuTextField(
val focusRequester = remember { FocusRequester() }
var showPassword by rememberSaveable { mutableStateOf(false) }

LaunchedEffect(Unit) {
focusRequester.requestFocus()
LaunchedEffect(autoRequestFocus) {
if (autoRequestFocus) focusRequester.requestFocus()
}

TextField(
modifier = Modifier.focusRequester(focusRequester),
modifier = modifier.run { if (autoRequestFocus) focusRequester(focusRequester) else this },
maxLines = maxLines,
enabled = !readOnly,
value = value,
Expand Down
35 changes: 23 additions & 12 deletions app/src/main/java/com/skyd/anivu/ui/component/ClipboardTextField.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package com.skyd.anivu.ui.component

import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardActionScope
Expand All @@ -25,50 +23,64 @@ fun ClipboardTextField(
value: String = "",
label: String = "",
maxLines: Int = Int.MAX_VALUE,
autoRequestFocus: Boolean = true,
onValueChange: (String) -> Unit = {},
placeholder: String = "",
isPassword: Boolean = false,
errorText: String = "",
imeAction: ImeAction = ImeAction.Done,
keyboardAction: ((focusManager: FocusManager?, value: String) -> (KeyboardActionScope.() -> Unit))? = null,
keyboardAction: (KeyboardActionScope.(focusManager: FocusManager?, value: String) -> Unit)? = null,
focusManager: FocusManager? = null,
onConfirm: (String) -> Unit = {},
) {
Column(modifier = modifier) {
Spacer(modifier = Modifier.height(10.dp))
Column {
AniVuTextField(
modifier = modifier,
readOnly = readOnly,
value = value,
label = label,
maxLines = maxLines,
autoRequestFocus = autoRequestFocus,
onValueChange = onValueChange,
placeholder = placeholder,
isPassword = isPassword,
errorMessage = errorText,
keyboardActions = KeyboardActions(
onDone = if (imeAction == ImeAction.Done) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
onGo = if (imeAction == ImeAction.Go) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
onNext = if (imeAction == ImeAction.Next) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
onPrevious = if (imeAction == ImeAction.Previous) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
onSearch = if (imeAction == ImeAction.Search) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
onSend = if (imeAction == ImeAction.Send) {
if (keyboardAction == null) action(focusManager, onConfirm, value)
else keyboardAction(focusManager, value)
else {
{ keyboardAction(focusManager, value) }
}
} else null,
),
keyboardOptions = KeyboardOptions(
Expand All @@ -88,7 +100,6 @@ fun ClipboardTextField(
)
}
}
Spacer(modifier = Modifier.height(10.dp))
}
}

Expand Down
Loading

0 comments on commit 78d4fe1

Please sign in to comment.