feat: 添加连载已读/完本已读分组,基于canUpdate字段自动分类
This commit is contained in:
@@ -16,6 +16,8 @@ import io.legado.app.data.dao.CacheDao
|
|||||||
import io.legado.app.data.dao.CookieDao
|
import io.legado.app.data.dao.CookieDao
|
||||||
import io.legado.app.data.dao.DictRuleDao
|
import io.legado.app.data.dao.DictRuleDao
|
||||||
import io.legado.app.data.dao.HighlightRuleDao
|
import io.legado.app.data.dao.HighlightRuleDao
|
||||||
|
import io.legado.app.data.dao.HighlightTagRuleDao
|
||||||
|
import io.legado.app.data.dao.TagGroupRuleDao
|
||||||
import io.legado.app.data.dao.HomepageCustomSetDao
|
import io.legado.app.data.dao.HomepageCustomSetDao
|
||||||
import io.legado.app.data.dao.HomepageModuleDao
|
import io.legado.app.data.dao.HomepageModuleDao
|
||||||
import io.legado.app.data.dao.HttpTTSDao
|
import io.legado.app.data.dao.HttpTTSDao
|
||||||
@@ -42,6 +44,8 @@ import io.legado.app.data.entities.Cache
|
|||||||
import io.legado.app.data.entities.Cookie
|
import io.legado.app.data.entities.Cookie
|
||||||
import io.legado.app.data.entities.DictRule
|
import io.legado.app.data.entities.DictRule
|
||||||
import io.legado.app.data.entities.HighlightRule
|
import io.legado.app.data.entities.HighlightRule
|
||||||
|
import io.legado.app.data.entities.HighlightTagRule
|
||||||
|
import io.legado.app.data.entities.TagGroupRule
|
||||||
import io.legado.app.data.entities.HomepageCustomSet
|
import io.legado.app.data.entities.HomepageCustomSet
|
||||||
import io.legado.app.data.entities.HomepageModule
|
import io.legado.app.data.entities.HomepageModule
|
||||||
import io.legado.app.data.entities.HttpTTS
|
import io.legado.app.data.entities.HttpTTS
|
||||||
@@ -75,7 +79,7 @@ val appDb by lazy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
version = 91,
|
version = 92,
|
||||||
exportSchema = true,
|
exportSchema = true,
|
||||||
entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class,
|
entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class,
|
||||||
ReplaceRule::class, SearchBook::class, SearchKeyword::class, Cookie::class,
|
ReplaceRule::class, SearchBook::class, SearchKeyword::class, Cookie::class,
|
||||||
@@ -84,7 +88,7 @@ val appDb by lazy {
|
|||||||
RssStar::class, TxtTocRule::class, ReadRecord::class, HttpTTS::class, Cache::class,
|
RssStar::class, TxtTocRule::class, ReadRecord::class, HttpTTS::class, Cache::class,
|
||||||
RuleSub::class, DictRule::class, KeyboardAssist::class, Server::class,
|
RuleSub::class, DictRule::class, KeyboardAssist::class, Server::class,
|
||||||
SearchContentHistory::class, HomepageModule::class, HomepageCustomSet::class,
|
SearchContentHistory::class, HomepageModule::class, HomepageCustomSet::class,
|
||||||
HighlightRule::class],
|
HighlightRule::class, HighlightTagRule::class, TagGroupRule::class],
|
||||||
views = [BookSourcePart::class],
|
views = [BookSourcePart::class],
|
||||||
autoMigrations = [
|
autoMigrations = [
|
||||||
AutoMigration(from = 43, to = 44),
|
AutoMigration(from = 43, to = 44),
|
||||||
@@ -134,7 +138,8 @@ val appDb by lazy {
|
|||||||
AutoMigration(from = 87, to = 88),
|
AutoMigration(from = 87, to = 88),
|
||||||
AutoMigration(from = 88, to = 89),
|
AutoMigration(from = 88, to = 89),
|
||||||
AutoMigration(from = 89, to = 90),
|
AutoMigration(from = 89, to = 90),
|
||||||
AutoMigration(from = 90, to = 91)
|
AutoMigration(from = 90, to = 91),
|
||||||
|
AutoMigration(from = 91, to = 92)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
@@ -164,6 +169,8 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
abstract val homepageModuleDao: HomepageModuleDao
|
abstract val homepageModuleDao: HomepageModuleDao
|
||||||
abstract val homepageCustomSetDao: HomepageCustomSetDao
|
abstract val homepageCustomSetDao: HomepageCustomSetDao
|
||||||
abstract val highlightRuleDao: HighlightRuleDao
|
abstract val highlightRuleDao: HighlightRuleDao
|
||||||
|
abstract val highlightTagRuleDao: HighlightTagRuleDao
|
||||||
|
abstract val tagGroupRuleDao: TagGroupRuleDao
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
@@ -237,6 +244,20 @@ abstract class AppDatabase : RoomDatabase() {
|
|||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
db.execSQL(insertGroupReadFinished)
|
db.execSQL(insertGroupReadFinished)
|
||||||
@Language("sql")
|
@Language("sql")
|
||||||
|
val insertGroupReadFinishedUpdate = """
|
||||||
|
insert into book_groups(groupId, groupName, 'order', show)
|
||||||
|
select ${BookGroup.IdReadFinishedUpdate}, '连载已读', -27, 1
|
||||||
|
where not exists (select * from book_groups where groupId = ${BookGroup.IdReadFinishedUpdate})
|
||||||
|
""".trimIndent()
|
||||||
|
db.execSQL(insertGroupReadFinishedUpdate)
|
||||||
|
@Language("sql")
|
||||||
|
val insertGroupReadFinishedComplete = """
|
||||||
|
insert into book_groups(groupId, groupName, 'order', show)
|
||||||
|
select ${BookGroup.IdReadFinishedComplete}, '完本已读', -26, 1
|
||||||
|
where not exists (select * from book_groups where groupId = ${BookGroup.IdReadFinishedComplete})
|
||||||
|
""".trimIndent()
|
||||||
|
db.execSQL(insertGroupReadFinishedComplete)
|
||||||
|
@Language("sql")
|
||||||
val insertBookGroupNetNoneGroupSql = """
|
val insertBookGroupNetNoneGroupSql = """
|
||||||
insert into book_groups(groupId, groupName, 'order', show)
|
insert into book_groups(groupId, groupName, 'order', show)
|
||||||
select ${BookGroup.IdNetNone}, '网络未分组', -7, 1
|
select ${BookGroup.IdNetNone}, '网络未分组', -7, 1
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ interface BookDao {
|
|||||||
BookGroup.IdUnread -> flowUnread()
|
BookGroup.IdUnread -> flowUnread()
|
||||||
BookGroup.IdReading -> flowReading()
|
BookGroup.IdReading -> flowReading()
|
||||||
BookGroup.IdReadFinished -> flowReadFinished()
|
BookGroup.IdReadFinished -> flowReadFinished()
|
||||||
|
BookGroup.IdReadFinishedUpdate -> flowReadFinishedUpdate()
|
||||||
|
BookGroup.IdReadFinishedComplete -> flowReadFinishedComplete()
|
||||||
else -> flowByUserGroup(groupId)
|
else -> flowByUserGroup(groupId)
|
||||||
}.map { list ->
|
}.map { list ->
|
||||||
list.filterNot { it.isNotShelf }
|
list.filterNot { it.isNotShelf }
|
||||||
@@ -68,6 +70,8 @@ interface BookDao {
|
|||||||
BookGroup.IdUnread -> flowBookShelfUnread()
|
BookGroup.IdUnread -> flowBookShelfUnread()
|
||||||
BookGroup.IdReading -> flowBookShelfReading()
|
BookGroup.IdReading -> flowBookShelfReading()
|
||||||
BookGroup.IdReadFinished -> flowBookShelfReadFinished()
|
BookGroup.IdReadFinished -> flowBookShelfReadFinished()
|
||||||
|
BookGroup.IdReadFinishedUpdate -> flowBookShelfReadFinishedUpdate()
|
||||||
|
BookGroup.IdReadFinishedComplete -> flowBookShelfReadFinishedComplete()
|
||||||
else -> flowBookShelfByUserGroup(groupId)
|
else -> flowBookShelfByUserGroup(groupId)
|
||||||
}.map { list ->
|
}.map { list ->
|
||||||
list.filterNot { it.isNotShelf }
|
list.filterNot { it.isNotShelf }
|
||||||
@@ -123,6 +127,9 @@ interface BookDao {
|
|||||||
@Query("SELECT * FROM books order by durChapterTime desc")
|
@Query("SELECT * FROM books order by durChapterTime desc")
|
||||||
fun flowAll(): Flow<List<Book>>
|
fun flowAll(): Flow<List<Book>>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM books")
|
||||||
|
suspend fun getAll(): List<Book>
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"""
|
"""
|
||||||
SELECT
|
SELECT
|
||||||
@@ -485,6 +492,80 @@ interface BookDao {
|
|||||||
)
|
)
|
||||||
fun flowBookShelfReadFinished(): Flow<List<BookShelfItem>>
|
fun flowBookShelfReadFinished(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""SELECT * FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 1"""
|
||||||
|
)
|
||||||
|
fun flowReadFinishedUpdate(): Flow<List<Book>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
SELECT
|
||||||
|
bookUrl,
|
||||||
|
name,
|
||||||
|
author,
|
||||||
|
origin,
|
||||||
|
originName,
|
||||||
|
coverUrl,
|
||||||
|
customCoverUrl,
|
||||||
|
durChapterTitle,
|
||||||
|
durChapterTime,
|
||||||
|
durChapterPos,
|
||||||
|
latestChapterTitle,
|
||||||
|
latestChapterTime,
|
||||||
|
lastCheckCount,
|
||||||
|
totalChapterNum,
|
||||||
|
durChapterIndex,
|
||||||
|
type,
|
||||||
|
`group`,
|
||||||
|
`order`,
|
||||||
|
canUpdate,
|
||||||
|
ifnull(customIntro, intro) as intro,
|
||||||
|
kind,
|
||||||
|
wordCount
|
||||||
|
FROM books
|
||||||
|
WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 1
|
||||||
|
AND $PUBLIC_BOOK_FILTER
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun flowBookShelfReadFinishedUpdate(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""SELECT * FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 0"""
|
||||||
|
)
|
||||||
|
fun flowReadFinishedComplete(): Flow<List<Book>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
SELECT
|
||||||
|
bookUrl,
|
||||||
|
name,
|
||||||
|
author,
|
||||||
|
origin,
|
||||||
|
originName,
|
||||||
|
coverUrl,
|
||||||
|
customCoverUrl,
|
||||||
|
durChapterTitle,
|
||||||
|
durChapterTime,
|
||||||
|
durChapterPos,
|
||||||
|
latestChapterTitle,
|
||||||
|
latestChapterTime,
|
||||||
|
lastCheckCount,
|
||||||
|
totalChapterNum,
|
||||||
|
durChapterIndex,
|
||||||
|
type,
|
||||||
|
`group`,
|
||||||
|
`order`,
|
||||||
|
canUpdate,
|
||||||
|
ifnull(customIntro, intro) as intro,
|
||||||
|
kind,
|
||||||
|
wordCount
|
||||||
|
FROM books
|
||||||
|
WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 0
|
||||||
|
AND $PUBLIC_BOOK_FILTER
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun flowBookShelfReadFinishedComplete(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
@Query("""SELECT * FROM books WHERE totalChapterNum > 0 AND durChapterIndex > 0 AND durChapterIndex < totalChapterNum - 1""")
|
@Query("""SELECT * FROM books WHERE totalChapterNum > 0 AND durChapterIndex > 0 AND durChapterIndex < totalChapterNum - 1""")
|
||||||
fun flowReading(): Flow<List<Book>>
|
fun flowReading(): Flow<List<Book>>
|
||||||
|
|
||||||
@@ -728,6 +809,8 @@ interface BookDao {
|
|||||||
UNION ALL SELECT ${BookGroup.IdUnread}, COUNT(*) FROM books WHERE durChapterIndex = 0 AND durChapterPos = 0 AND $PUBLIC_BOOK_FILTER
|
UNION ALL SELECT ${BookGroup.IdUnread}, COUNT(*) FROM books WHERE durChapterIndex = 0 AND durChapterPos = 0 AND $PUBLIC_BOOK_FILTER
|
||||||
UNION ALL SELECT ${BookGroup.IdReading}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex > 0 AND durChapterIndex < totalChapterNum - 1 AND $PUBLIC_BOOK_FILTER
|
UNION ALL SELECT ${BookGroup.IdReading}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex > 0 AND durChapterIndex < totalChapterNum - 1 AND $PUBLIC_BOOK_FILTER
|
||||||
UNION ALL SELECT ${BookGroup.IdReadFinished}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND $PUBLIC_BOOK_FILTER
|
UNION ALL SELECT ${BookGroup.IdReadFinished}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND $PUBLIC_BOOK_FILTER
|
||||||
|
UNION ALL SELECT ${BookGroup.IdReadFinishedUpdate}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 1 AND $PUBLIC_BOOK_FILTER
|
||||||
|
UNION ALL SELECT ${BookGroup.IdReadFinishedComplete}, COUNT(*) FROM books WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 0 AND $PUBLIC_BOOK_FILTER
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun flowSystemGroupCounts(): Flow<List<GroupBookCount>>
|
fun flowSystemGroupCounts(): Flow<List<GroupBookCount>>
|
||||||
@@ -755,6 +838,8 @@ interface BookDao {
|
|||||||
BookGroup.IdUnread -> flowBookShelfUnreadPreview()
|
BookGroup.IdUnread -> flowBookShelfUnreadPreview()
|
||||||
BookGroup.IdReading -> flowBookShelfReadingPreview()
|
BookGroup.IdReading -> flowBookShelfReadingPreview()
|
||||||
BookGroup.IdReadFinished -> flowBookShelfReadFinishedPreview()
|
BookGroup.IdReadFinished -> flowBookShelfReadFinishedPreview()
|
||||||
|
BookGroup.IdReadFinishedUpdate -> flowBookShelfReadFinishedUpdatePreview()
|
||||||
|
BookGroup.IdReadFinishedComplete -> flowBookShelfReadFinishedCompletePreview()
|
||||||
else -> flowBookShelfPreviewByUserGroup(groupId)
|
else -> flowBookShelfPreviewByUserGroup(groupId)
|
||||||
}.map { list ->
|
}.map { list ->
|
||||||
list.filterNot { it.isNotShelf }
|
list.filterNot { it.isNotShelf }
|
||||||
@@ -968,6 +1053,40 @@ interface BookDao {
|
|||||||
)
|
)
|
||||||
fun flowBookShelfReadFinishedPreview(): Flow<List<BookShelfItem>>
|
fun flowBookShelfReadFinishedPreview(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
SELECT bookUrl, name, author, origin, originName,
|
||||||
|
coverUrl, customCoverUrl, durChapterTitle, durChapterTime,
|
||||||
|
durChapterPos, latestChapterTitle, latestChapterTime,
|
||||||
|
lastCheckCount, totalChapterNum, durChapterIndex,
|
||||||
|
type, `group`, `order`, canUpdate,
|
||||||
|
ifnull(customIntro, intro) as intro, kind, wordCount
|
||||||
|
FROM books
|
||||||
|
WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 1
|
||||||
|
AND $PUBLIC_BOOK_FILTER
|
||||||
|
ORDER BY durChapterTime DESC
|
||||||
|
LIMIT 10
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun flowBookShelfReadFinishedUpdatePreview(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
|
@Query(
|
||||||
|
"""
|
||||||
|
SELECT bookUrl, name, author, origin, originName,
|
||||||
|
coverUrl, customCoverUrl, durChapterTitle, durChapterTime,
|
||||||
|
durChapterPos, latestChapterTitle, latestChapterTime,
|
||||||
|
lastCheckCount, totalChapterNum, durChapterIndex,
|
||||||
|
type, `group`, `order`, canUpdate,
|
||||||
|
ifnull(customIntro, intro) as intro, kind, wordCount
|
||||||
|
FROM books
|
||||||
|
WHERE totalChapterNum > 0 AND durChapterIndex >= totalChapterNum - 1 AND canUpdate = 0
|
||||||
|
AND $PUBLIC_BOOK_FILTER
|
||||||
|
ORDER BY durChapterTime DESC
|
||||||
|
LIMIT 10
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
fun flowBookShelfReadFinishedCompletePreview(): Flow<List<BookShelfItem>>
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"""
|
"""
|
||||||
SELECT bookUrl, name, author, origin, originName,
|
SELECT bookUrl, name, author, origin, originName,
|
||||||
|
|||||||
@@ -80,6 +80,20 @@ interface BookGroupDao {
|
|||||||
AND durChapterPos != 0
|
AND durChapterPos != 0
|
||||||
AND (`group` = 0 or (const.sumPrivateGroupId & `group`) = 0)
|
AND (`group` = 0 or (const.sumPrivateGroupId & `group`) = 0)
|
||||||
))
|
))
|
||||||
|
or (groupId = ${BookGroup.IdReadFinishedUpdate} and exists (
|
||||||
|
SELECT 1 FROM books
|
||||||
|
WHERE totalChapterNum > 0
|
||||||
|
AND durChapterIndex >= totalChapterNum - 1
|
||||||
|
AND canUpdate = 1
|
||||||
|
AND (`group` = 0 or (const.sumPrivateGroupId & `group`) = 0)
|
||||||
|
))
|
||||||
|
or (groupId = ${BookGroup.IdReadFinishedComplete} and exists (
|
||||||
|
SELECT 1 FROM books
|
||||||
|
WHERE totalChapterNum > 0
|
||||||
|
AND durChapterIndex >= totalChapterNum - 1
|
||||||
|
AND canUpdate = 0
|
||||||
|
AND (`group` = 0 or (const.sumPrivateGroupId & `group`) = 0)
|
||||||
|
))
|
||||||
|
|
||||||
or (groupId = ${BookGroup.IdError} and exists (
|
or (groupId = ${BookGroup.IdError} and exists (
|
||||||
select 1 from books
|
select 1 from books
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ data class BookGroup(
|
|||||||
const val IdReading = -20L
|
const val IdReading = -20L
|
||||||
const val IdUnread = -21L
|
const val IdUnread = -21L
|
||||||
const val IdReadFinished = -22L
|
const val IdReadFinished = -22L
|
||||||
|
const val IdReadFinishedUpdate = -23L
|
||||||
|
const val IdReadFinishedComplete = -24L
|
||||||
}
|
}
|
||||||
|
|
||||||
data class GroupNameInfo(
|
data class GroupNameInfo(
|
||||||
@@ -61,6 +63,8 @@ data class BookGroup(
|
|||||||
IdReading -> GroupNameInfo(groupName, context.getString(R.string.is_reading))
|
IdReading -> GroupNameInfo(groupName, context.getString(R.string.is_reading))
|
||||||
IdUnread -> GroupNameInfo(groupName, context.getString(R.string.is_unread))
|
IdUnread -> GroupNameInfo(groupName, context.getString(R.string.is_unread))
|
||||||
IdReadFinished -> GroupNameInfo(groupName, context.getString(R.string.is_read_finished))
|
IdReadFinished -> GroupNameInfo(groupName, context.getString(R.string.is_read_finished))
|
||||||
|
IdReadFinishedUpdate -> GroupNameInfo(groupName, context.getString(R.string.is_read_finished_update))
|
||||||
|
IdReadFinishedComplete -> GroupNameInfo(groupName, context.getString(R.string.is_read_finished_complete))
|
||||||
else -> GroupNameInfo(groupName)
|
else -> GroupNameInfo(groupName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -660,6 +660,7 @@
|
|||||||
<string name="footer_font_size">页脚字号</string>
|
<string name="footer_font_size">页脚字号</string>
|
||||||
<string name="select_image">选择图片</string>
|
<string name="select_image">选择图片</string>
|
||||||
<string name="group_manage">分组管理</string>
|
<string name="group_manage">分组管理</string>
|
||||||
|
<string name="group_add">新建分组</string>
|
||||||
<string name="group_select">分组选择</string>
|
<string name="group_select">分组选择</string>
|
||||||
<string name="group_edit">编辑分组</string>
|
<string name="group_edit">编辑分组</string>
|
||||||
<string name="move_to_group">移入分组</string>
|
<string name="move_to_group">移入分组</string>
|
||||||
@@ -1670,6 +1671,8 @@
|
|||||||
<string name="is_reading">在读</string>
|
<string name="is_reading">在读</string>
|
||||||
<string name="is_unread">未读</string>
|
<string name="is_unread">未读</string>
|
||||||
<string name="is_read_finished">已读</string>
|
<string name="is_read_finished">已读</string>
|
||||||
|
<string name="is_read_finished_update">连载已读</string>
|
||||||
|
<string name="is_read_finished_complete">完本已读</string>
|
||||||
<string name="manga">漫画</string>
|
<string name="manga">漫画</string>
|
||||||
<string name="noval">小说</string>
|
<string name="noval">小说</string>
|
||||||
<string name="cover_show_shadow">显示字体阴影</string>
|
<string name="cover_show_shadow">显示字体阴影</string>
|
||||||
@@ -1947,4 +1950,38 @@
|
|||||||
<string name="eye_protection_schedule_summary">仅在配置的时间段内生效</string>
|
<string name="eye_protection_schedule_summary">仅在配置的时间段内生效</string>
|
||||||
<string name="eye_protection_start_time">开始时间</string>
|
<string name="eye_protection_start_time">开始时间</string>
|
||||||
<string name="eye_protection_end_time">结束时间</string>
|
<string name="eye_protection_end_time">结束时间</string>
|
||||||
|
|
||||||
|
<!-- 标签规则 -->
|
||||||
|
<string name="highlight_tag_config">标签规则</string>
|
||||||
|
<string name="import_highlight_tag_rule">导入标签规则</string>
|
||||||
|
<string name="highlight_tag_title">标题</string>
|
||||||
|
<string name="highlight_tag_pattern">匹配规则</string>
|
||||||
|
<string name="highlight_tag_empty_hint">暂无醒目标签规则。添加规则可在书籍信息页面突出显示特定标签。</string>
|
||||||
|
<string name="highlight_tag_add_rule">添加规则</string>
|
||||||
|
<string name="highlight_tag_edit_rule">编辑规则</string>
|
||||||
|
<string name="highlight_tag_title_hint">标题(可选)</string>
|
||||||
|
<string name="highlight_tag_pattern_hint">正则表达式(如 (\\d+)字)</string>
|
||||||
|
<string name="highlight_tag_display_mode">显示模式</string>
|
||||||
|
<string name="highlight_tag_mode_horizontal">水平</string>
|
||||||
|
<string name="highlight_tag_mode_vertical">竖向</string>
|
||||||
|
<string name="highlight_tag_test_area">测试</string>
|
||||||
|
<string name="highlight_tag_test_input_hint">输入测试文本</string>
|
||||||
|
<string name="highlight_tag_test_button">测试匹配</string>
|
||||||
|
<string name="highlight_tag_test_match">匹配:%1$s</string>
|
||||||
|
<string name="highlight_tag_test_match_vertical">匹配:%1$s | %2$s</string>
|
||||||
|
<string name="highlight_tag_test_no_match">未匹配</string>
|
||||||
|
<string name="highlight_tag_test_error">错误:%1$s</string>
|
||||||
|
|
||||||
|
<!-- 标签分组规则 -->
|
||||||
|
<string name="tag_group_tab_highlight">醒目标签</string>
|
||||||
|
<string name="tag_group_tab_group">标签分组</string>
|
||||||
|
<string name="tag_group_add_rule">新建标签分组</string>
|
||||||
|
<string name="tag_group_edit_rule">编辑分组规则</string>
|
||||||
|
<string name="tag_group_name">分组名称</string>
|
||||||
|
<string name="tag_group_pattern">匹配规则(匹配书籍标签)</string>
|
||||||
|
<string name="tag_group_empty_hint">暂无标签分组规则。添加规则可根据书籍标签自动分组。</string>
|
||||||
|
<string name="tag_group_sync">同步标签分组</string>
|
||||||
|
<string name="tag_group_rules">标签分组规则</string>
|
||||||
|
<string name="tag_group_sync_complete">分组同步完成</string>
|
||||||
|
<string name="import_tag_group_rule">导入分组规则</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -686,6 +686,7 @@
|
|||||||
<string name="footer_font_size">Footer Font Size</string>
|
<string name="footer_font_size">Footer Font Size</string>
|
||||||
<string name="select_image">Select a picture</string>
|
<string name="select_image">Select a picture</string>
|
||||||
<string name="group_manage">Group Management</string>
|
<string name="group_manage">Group Management</string>
|
||||||
|
<string name="group_add">New Group</string>
|
||||||
<string name="group_select">Group selection</string>
|
<string name="group_select">Group selection</string>
|
||||||
<string name="group_edit">Group editing</string>
|
<string name="group_edit">Group editing</string>
|
||||||
<string name="move_to_group">Move to group</string>
|
<string name="move_to_group">Move to group</string>
|
||||||
@@ -1707,6 +1708,8 @@
|
|||||||
<string name="is_reading">Reading</string>
|
<string name="is_reading">Reading</string>
|
||||||
<string name="is_unread">Unread</string>
|
<string name="is_unread">Unread</string>
|
||||||
<string name="is_read_finished">Finished</string>
|
<string name="is_read_finished">Finished</string>
|
||||||
|
<string name="is_read_finished_update">Finished (Serial)</string>
|
||||||
|
<string name="is_read_finished_complete">Finished (Completed)</string>
|
||||||
<string name="manga">Manga</string>
|
<string name="manga">Manga</string>
|
||||||
<string name="noval">Novel</string>
|
<string name="noval">Novel</string>
|
||||||
<string name="cover_show_shadow">Show Font Shadow</string>
|
<string name="cover_show_shadow">Show Font Shadow</string>
|
||||||
@@ -1956,4 +1959,38 @@
|
|||||||
<string name="eye_protection_schedule_summary">Only apply during the configured time range</string>
|
<string name="eye_protection_schedule_summary">Only apply during the configured time range</string>
|
||||||
<string name="eye_protection_start_time">Start Time</string>
|
<string name="eye_protection_start_time">Start Time</string>
|
||||||
<string name="eye_protection_end_time">End Time</string>
|
<string name="eye_protection_end_time">End Time</string>
|
||||||
|
|
||||||
|
<!-- Tag Rules -->
|
||||||
|
<string name="highlight_tag_config">Tag Rules</string>
|
||||||
|
<string name="import_highlight_tag_rule">Import Tag Rules</string>
|
||||||
|
<string name="highlight_tag_title">Title</string>
|
||||||
|
<string name="highlight_tag_pattern">Pattern</string>
|
||||||
|
<string name="highlight_tag_empty_hint">No highlight tag rules configured. Add rules to highlight specific tags on the book info screen.</string>
|
||||||
|
<string name="highlight_tag_add_rule">Add Rule</string>
|
||||||
|
<string name="highlight_tag_edit_rule">Edit Rule</string>
|
||||||
|
<string name="highlight_tag_title_hint">Title (optional)</string>
|
||||||
|
<string name="highlight_tag_pattern_hint">Regex pattern (e.g. (\\d+)字)</string>
|
||||||
|
<string name="highlight_tag_display_mode">Display Mode</string>
|
||||||
|
<string name="highlight_tag_mode_horizontal">Horizontal</string>
|
||||||
|
<string name="highlight_tag_mode_vertical">Vertical</string>
|
||||||
|
<string name="highlight_tag_test_area">Test</string>
|
||||||
|
<string name="highlight_tag_test_input_hint">Enter test text</string>
|
||||||
|
<string name="highlight_tag_test_button">Test Match</string>
|
||||||
|
<string name="highlight_tag_test_match">Matched: %1$s</string>
|
||||||
|
<string name="highlight_tag_test_match_vertical">Matched: %1$s | %2$s</string>
|
||||||
|
<string name="highlight_tag_test_no_match">No match</string>
|
||||||
|
<string name="highlight_tag_test_error">Error: %1$s</string>
|
||||||
|
|
||||||
|
<!-- Tag Group Rules -->
|
||||||
|
<string name="tag_group_tab_highlight">Highlight</string>
|
||||||
|
<string name="tag_group_tab_group">Group</string>
|
||||||
|
<string name="tag_group_add_rule">New Tag Group</string>
|
||||||
|
<string name="tag_group_edit_rule">Edit Group Rule</string>
|
||||||
|
<string name="tag_group_name">Group Name</string>
|
||||||
|
<string name="tag_group_pattern">Pattern (matches kind tags)</string>
|
||||||
|
<string name="tag_group_empty_hint">No tag group rules configured. Add rules to auto-group books by their kind tags.</string>
|
||||||
|
<string name="tag_group_sync">Sync Tag Groups</string>
|
||||||
|
<string name="tag_group_rules">Tag Group Rules</string>
|
||||||
|
<string name="tag_group_sync_complete">Group sync complete</string>
|
||||||
|
<string name="import_tag_group_rule">Import Tag Group Rules</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user