From 0400385cf83cde15082e7460aa012460f993f4ef Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Mon, 8 Jun 2026 14:45:38 +0900 Subject: [PATCH] ... --- .../launcher/home/CompletedFilesFragment.kt | 5 +- .../lunatic/launcher/home/NeoRssActivity.kt | 2 +- .../home/tokiz/view/PagedTextLayout.kt | 38 +++++------ .../launcher/player/DocumentViewerActivity.kt | 53 +++++++++++----- .../lunatic/launcher/player/PageIndexer.kt | 63 ++++++++++++------- .../launcher/workers/TorrentManager.kt | 2 +- app/src/main/res/layout/rss_activity.xml | 9 ++- 7 files changed, 103 insertions(+), 69 deletions(-) diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt index ecf9884b..7d18bb1a 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt @@ -181,7 +181,6 @@ class CompletedFilesFragment : Fragment() { loadFiles() } else { val intentFlags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK - if (extVideos.contains(file.extension.lowercase())) { trackFileAccess(file.name) loadFiles() @@ -192,6 +191,8 @@ class CompletedFilesFragment : Fragment() { } startActivity(intent) } else if (extImages.contains(file.extension.lowercase())) { + trackFileAccess(file.name) + loadFiles() val intent = Intent(requireContext(), ImageViewerActivity::class.java).apply { putExtra("IMAGE_PATH", file.absolutePath) // ๐Ÿ’ก ์ด๋ฏธ์ง€ ๋ทฐ์–ด๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ @@ -199,6 +200,8 @@ class CompletedFilesFragment : Fragment() { } startActivity(intent) } else if (extDocs.contains(file.extension.lowercase())) { + trackFileAccess(file.name) + loadFiles() val intent = Intent(requireContext(), DocumentViewerActivity::class.java).apply { putExtra("FILE_PATH", file.absolutePath) // ๐Ÿ’ก ๋ฌธ์„œ ๋ทฐ์–ด๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt index f0f5f3fd..709effc7 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt @@ -633,7 +633,7 @@ open class NeoRssActivity : CommonActivity() { // R.id.webtoons -> TokiFragment.newInstanceWebtoons() // R.id.comics -> TokiFragment.newInstanceComics() R.id.youtube -> TokiFragment.newInstanceYouTube() - R.id.perplexity -> TokiFragment.newInstancePerplexity() +// R.id.perplexity -> TokiFragment.newInstancePerplexity() R.id.zzalbang -> BookmarkPagerFragment() R.id.btn_x -> TokiFragment.newInstanceX() R.id.btn_i -> TokiFragment.newInstanceI() diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/tokiz/view/PagedTextLayout.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/tokiz/view/PagedTextLayout.kt index 742ff492..74473e55 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/tokiz/view/PagedTextLayout.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/tokiz/view/PagedTextLayout.kt @@ -64,32 +64,24 @@ class PagedTextLayout : ConstraintLayout , PagedTextGenerateInterface { var guideLine : Guideline? = null var pageList = mutableListOf() var summaryText : String = "" - var text : String = "" - set(new) { - field = new - val summary = new.replace(" " ,"").replace("\n" ,"").substring(0,Math.min(30,new.length)) - if (summary.equals(summaryText) && summaryText.length > 100) { + var text: String = "" + set(value) { + field = value + if (value.isNotEmpty()) { + // ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ค€ ํ•œ ํŽ˜์ด์ง€ ๋ถ„๋Ÿ‰์˜ ํ…์ŠคํŠธ๋ฅผ ๊ณง๋ฐ”๋กœ ์ž์‹ ํ…์ŠคํŠธ๋ทฐ์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. + mainTextView?.text = value - } else { - if (field.length > 0) { - post { - if (width > 0 && height > 0) { - MainScope().launch { - pageList.clear() - val contentWidth = - mainTextView!!.width - (mainTextView!!.paddingLeft + mainTextView!!.paddingRight) - val contentHeight = - mainTextView!!.height - (mainTextView!!.paddingTop + mainTextView!!.paddingBottom) - val pages = paginateAsync(cleanText(text), contentWidth, contentHeight) - pageList.addAll(pages.map { it.trim() }) - Blog.LOGE("pages >>> ${pages.size}") - setPageBy(0) - } - } - } + // ๋งŒ์•ฝ ๋“€์–ผ ํŽ˜์ด์ง€ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ 2ํŽ˜์ด์ง€ ๋ถ„๋Ÿ‰์„ + // ๊ฐ๊ฐ ๋‚˜๋ˆ ์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ˆœ ํ…์ŠคํŠธ ์…‹ํŒ…๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. + if (isDualPage()) { + // ํ•„์š” ์‹œ ๋“€์–ผ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์•กํ‹ฐ๋น„ํ‹ฐ ์ŠคํŽ™์— ๋งž๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + // ํ˜„์žฌ๋Š” ๋‹จ์ผ ํŽ˜์ด์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋น„์›Œ๋‘๊ฑฐ๋‚˜ ์„œ๋ธŒ ๋ทฐ๋ฅผ ๋น„์›๋‹ˆ๋‹ค. + sencondTextView?.text = "" } + } else { + mainTextView?.text = "" + sencondTextView?.text = "" } - summaryText = summary } private fun cleanText(text: String): String { diff --git a/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt index fc0d8441..35ddb3bd 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt @@ -6,6 +6,7 @@ import android.view.KeyEvent import android.view.View import android.widget.SeekBar import android.widget.TextView +import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope @@ -107,14 +108,15 @@ class DocumentViewerActivity : AppCompatActivity(), PagedTextViewInterface { } return when (keyCode) { - KeyEvent.KEYCODE_VOLUME_UP -> { + KeyEvent.KEYCODE_DPAD_LEFT,KeyEvent.KEYCODE_VOLUME_UP -> { // ๋ณผ๋ฅจ ์—… ํ‚ค -> ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™ (๊ธฐ์กด ์˜จ์ŠคwipeRight ๋กœ์ง ํ™œ์šฉ) if (currentPageIndex > 0) { showPage(currentPageIndex - 1) } true // ์‹œ์Šคํ…œ ๋ณผ๋ฅจ UI๊ฐ€ ๋œจ์ง€ ์•Š๋„๋ก ์ด๋ฒคํŠธ๋ฅผ ์ฐจ๋‹จ(์†Œ๋น„)ํ•ฉ๋‹ˆ๋‹ค. } - KeyEvent.KEYCODE_VOLUME_DOWN -> { + + KeyEvent.KEYCODE_DPAD_RIGHT,KeyEvent.KEYCODE_VOLUME_DOWN -> { // ๋ณผ๋ฅจ ๋‹ค์šด ํ‚ค -> ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ์ด๋™ (๊ธฐ์กด ์˜จ์ŠคwipeLeft ๋กœ์ง ํ™œ์šฉ) if (currentPageIndex < pageIndexer.pageOffsets.size - 1) { showPage(currentPageIndex + 1) @@ -174,22 +176,45 @@ class DocumentViewerActivity : AppCompatActivity(), PagedTextViewInterface { private fun showChapterListDialog() { if (!::pageIndexer.isInitialized || pageIndexer.chapters.isEmpty()) { - // ์ฑ•ํ„ฐ๊ฐ€ ์•„์ง ํŒŒ์‹ฑ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + Toast.makeText(this, "์ธ๋ฑ์‹ฑ๋œ ์ฑ•ํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show() return } - val chapterTitles = pageIndexer.chapters.map { "${it.title} (p.${it.pageIndex + 1})" }.toTypedArray() - - AlertDialog.Builder(this) - .setTitle("๋ชฉ์ฐจ (Chapters)") - .setItems(chapterTitles) { dialog, which -> - // ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ์ฑ•ํ„ฐ์˜ pageIndex๋กœ ๋ฐ”๋กœ ์ด๋™ - val targetChapter = pageIndexer.chapters[which] - showPage(targetChapter.pageIndex) - dialog.dismiss() + // 1. ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ค ์ฑ•ํ„ฐ์— ์†ํ•ด ์žˆ๋Š”์ง€ index๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. + var currentChapterIndex = 0 + for (i in pageIndexer.chapters.indices) { + if (pageIndexer.chapters[i].pageIndex <= currentPageIndex) { + currentChapterIndex = i + } else { + break } - .setNegativeButton("๋‹ซ๊ธฐ", null) - .show() + } + + // 2. ์ฑ•ํ„ฐ ์ œ๋ชฉ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋ทฐ์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด ๋ณ€ํ™˜ + val chapterTitles = pageIndexer.chapters.map { it.title }.toTypedArray() + + // 3. AlertDialog ์ƒ์„ฑ + val builder = AlertDialog.Builder(this) + builder.setTitle("๋ชฉ์ฐจ (ํ˜„์žฌ ์œ„์น˜๋กœ ์ด๋™)") + + // setItems ๋Œ€์‹  Adapter๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ์Šคํฌ๋กค ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. + builder.setItems(chapterTitles) { dialog, which -> + // ์„ ํƒํ•œ ์ฑ•ํ„ฐ์˜ ํŽ˜์ด์ง€๋กœ ์ด๋™ + val targetPage = pageIndexer.chapters[which].pageIndex + showPage(targetPage) + dialog.dismiss() + } + + val dialog = builder.create() + dialog.show() + + // 4. [ํ•ต์‹ฌ] ๋‹ค์ด์–ผ๋กœ๊ทธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ํ›„, ๋‚ด๋ถ€ ListView๋ฅผ ์ฐพ์•„ ํ˜„์žฌ ์ฝ๋˜ ์ฑ•ํ„ฐ ์œ„์น˜๋กœ ์Šคํฌ๋กค์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. + dialog.listView?.let { listView -> + listView.post { + // ํ˜„์žฌ ์ฝ๊ณ  ์žˆ๋Š” ์ฑ•ํ„ฐ(currentChapterIndex)๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์ตœ์ƒ๋‹จ์— ๋ณด์ด๋„๋ก ์Šคํฌ๋กค ์ด๋™ + listView.setSelection(currentChapterIndex) + } + } } /** diff --git a/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt b/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt index ff8c2cce..cfbf02bb 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt @@ -11,10 +11,9 @@ import java.io.RandomAccessFile import java.nio.charset.Charset import java.util.regex.Pattern -// 1. ์ฑ•ํ„ฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค ์ •์˜ data class Chapter( - val title: String, // ์ฑ•ํ„ฐ ์ด๋ฆ„ (์˜ˆ: "์ œ 1ํ™” ์‹œ์ž‘ํ•˜๋ฉฐ") - val pageIndex: Int // ํ•ด๋‹น ์ฑ•ํ„ฐ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ํŽ˜์ด์ง€ ์ธ๋ฑ์Šค + val title: String, + val pageIndex: Int ) class PageIndexer( @@ -25,14 +24,9 @@ class PageIndexer( private val viewHeight: Int ) { val pageOffsets = ArrayList() - - // 2. ์ถ”์ถœ๋œ ์ฑ•ํ„ฐ๋“ค์„ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ val chapters = ArrayList() - private val charset = Charset.forName(encoding) - // 3. ํƒ์ง€ํ•  ์ฑ•ํ„ฐ ํŒจํ„ด ์ •๊ทœ์‹ ์ •์˜ (์˜ˆ: "์ œ 1ํ™”", "์ œ1์žฅ", "Chapter 5", "CH.3" ๋“ฑ ๋Œ€์‘) - // ์†Œ์„ค์ด๋‚˜ ํ…์ŠคํŠธ ํŠน์„ฑ์— ๋งž๊ฒŒ ํŒจํ„ด์„ ์ˆ˜์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. private val chapterPattern = Pattern.compile( "(?:์ œ\\s*)?\\d+\\s*[ํ™”|์žฅ|๋ง‰|์ ˆ|ํŽธ]" ) @@ -80,37 +74,58 @@ class PageIndexer( if (endLine < startLine) endLine = startLine val endCharOffset = layout.getLineEnd(endLine) + var pageText = chunkText.substring(chunkConsumedOffset, endCharOffset) - val pageText = chunkText.substring(chunkConsumedOffset, endCharOffset) - - // 4. [ํ•ต์‹ฌ] ํ˜„์žฌ ์ž˜๋ผ๋‚ธ ํŽ˜์ด์ง€ ํ…์ŠคํŠธ ๋‚ด์— ์ฑ•ํ„ฐ ํŒจํ„ด์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ - // ํŽ˜์ด์ง€์˜ ์ฒซ ๋ถ€๋ถ„ ์œ„์ฃผ๋กœ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ฌธ๋‹จ ๋‹จ์œ„๋กœ ์ฒซ ์ค„์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. + // ------------------------------------------------------------------------- + // [์ˆ˜์ • ๊ตฌ๊ฐ„] ์ฑ•ํ„ฐ ํƒ์ง€ ๋ฐ ๊ฐ•์ œ ํŽ˜์ด์ง€ ๋ถ„ํ•  ๋กœ์ง + // ------------------------------------------------------------------------- val matcher = chapterPattern.matcher(pageText) if (matcher.find()) { - // ํ•ด๋‹น ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์‹ค์ œ ์ฑ•ํ„ฐ ์ œ๋ชฉ์œผ๋กœ ์“ธ ๋งŒํ•œ ํ•œ ์ค„(Line) ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. - // ๋ณดํ†ต ์ฑ•ํ„ฐ ์ œ๋ชฉ์€ ํ•œ ์ค„์„ ํ†ต์งธ๋กœ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ, ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ ์œ„์น˜์˜ ์•ž๋’ค ์ค„๋ฐ”๊ฟˆ(\n)์„ ๊ธฐ์ค€์œผ๋กœ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค. val matchStart = matcher.start() - // ํŒจํ„ด ์‹œ์ž‘์  ๊ธฐ์ค€ ์•ž์ชฝ ์ค„๋ฐ”๊ฟˆ ์ฐพ๊ธฐ + // ์ฑ•ํ„ฐ ์ œ๋ชฉ ์ค„์˜ ์‹œ์ž‘ ์œ„์น˜ ๊ณ„์‚ฐ val lineStart = pageText.lastIndexOf('\n', matchStart).let { if (it == -1) 0 else it + 1 } - // ํŒจํ„ด ์‹œ์ž‘์  ๊ธฐ์ค€ ๋’ค์ชฝ ์ค„๋ฐ”๊ฟˆ ์ฐพ๊ธฐ val lineEnd = pageText.indexOf('\n', matchStart).let { if (it == -1) pageText.length else it } + val chapterTitle = pageText.substring(lineStart, lineEnd).trim() - var chapterTitle = pageText.substring(lineStart, lineEnd).trim() - - // ์ œ๋ชฉ์ด ๋„ˆ๋ฌด ๊ธธ๋ฉด ๋ณธ๋ฌธ ๋ฌธ์žฅ์ด ์˜คํƒ์ง€๋œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธ€์ž์ˆ˜ ์ œํ•œ(์˜ˆ: 40์ž)์„ ๋‘ก๋‹ˆ๋‹ค. + // ๊ธ€์ž์ˆ˜ ์ œํ•œ ์ฒดํฌ (40์ž ๋ฏธ๋งŒ ์ •์ƒ ์ฑ•ํ„ฐ์ธ ๊ฒฝ์šฐ) if (chapterTitle.isNotEmpty() && chapterTitle.length < 40) { - val currentPageIndex = pageOffsets.size - 1 - // ์ค‘๋ณต ๋“ฑ๋ก ๋ฐฉ์ง€ (๋™์ผ ํŽ˜์ด์ง€ ๋‚ด ๋‹ค์ค‘ ๊ฐ์ง€ ๋ฐฉ์–ด) - if (chapters.isEmpty() || chapters.last().pageIndex != currentPageIndex) { - chapters.add(Chapter(chapterTitle, currentPageIndex)) + // ๋งŒ์•ฝ ์ฑ•ํ„ฐ๊ฐ€ ํŽ˜์ด์ง€์˜ ๋งจ ์ฒ˜์Œ(lineStart == 0)์ด ์•„๋‹ˆ๋ผ๋ฉด, + // ์ฆ‰, ์ฑ•ํ„ฐ ์•ž์— ์ด์ „ ์žฅ์˜ ๋ณธ๋ฌธ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ฐ•์ œ๋กœ ์ชผ๊ฐญ๋‹ˆ๋‹ค. + if (lineStart > 0) { + // 1. ์ฑ•ํ„ฐ ์ง์ „ ๋‚ด์šฉ๊นŒ์ง€๋งŒ ํ˜„์žฌ ํŽ˜์ด์ง€ ํ…์ŠคํŠธ๋กœ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. + val previousSectionText = pageText.substring(0, lineStart) + val previousSectionBytes = previousSectionText.toByteArray(charset).size + + // 2. ํ˜„์žฌ ์˜คํ”„์…‹์— ์ด์ „ ๋‚ด์šฉ ํฌ๊ธฐ๋ฅผ ๋”ํ•ด "์ƒˆ ํŽ˜์ด์ง€(์ฑ•ํ„ฐ ์‹œ์ž‘์ )" ์˜คํ”„์…‹์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. + currentOffset += previousSectionBytes + + // 3. ํŽ˜์ด์ง€ ๋ชฉ๋ก์— ์ƒˆ ์˜คํ”„์…‹(์ฑ•ํ„ฐ์˜ ์‹œ์ž‘์ )์„ ์ฆ‰์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. + pageOffsets.add(currentOffset) + + // 4. ๋‹ค์Œ ๋ฃจํ”„๋ฅผ ์œ„ํ•ด chunk ๋‚ด ์†Œ๋น„๋œ ๋ฌธ์ž ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. + chunkConsumedOffset += lineStart + + // 5. StaticLayout ์ƒ์—์„œ ์ด ์ฑ•ํ„ฐ ์ค„์ด ์†ํ•œ ์‹ค์ œ Line์„ ์ฐพ์•„์„œ ๋ฃจํ”„์˜ startLine์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. + // layout.getLineForOffset์€ ์ „์ฒด chunkText ๊ธฐ์ค€์ด๋ฏ€๋กœ chunkConsumedOffset์„ ๋Œ€์ž…ํ•ฉ๋‹ˆ๋‹ค. + startLine = layout.getLineForOffset(chunkConsumedOffset) + + // ์ค‘์š”: ์ด๋ฒˆ ๋ฃจํ”„๋Š” ์—ฌ๊ธฐ์„œ ๋Š๊ณ , ์ชผ๊ฐœ์ง„ ์ƒˆ ํŽ˜์ด์ง€ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๋ฃจํ”„์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋„˜๊น๋‹ˆ๋‹ค. + continue + } else { + // ์ด๋ฏธ ํŽ˜์ด์ง€์˜ ๋งจ ์ฒซ ์ค„์ด ์ฑ•ํ„ฐ์ธ ๊ฒฝ์šฐ ๋ฐ”๋กœ ๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. + val currentPageIndex = pageOffsets.size - 1 + if (chapters.isEmpty() || chapters.last().pageIndex != currentPageIndex) { + chapters.add(Chapter(chapterTitle, currentPageIndex)) + } } } } + // ------------------------------------------------------------------------- + // ์ฑ•ํ„ฐ ๋ถ„ํ• ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์€ ์ผ๋ฐ˜์ ์ธ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ flow val pageBytesSize = pageText.toByteArray(charset).size - currentOffset += pageBytesSize chunkConsumedOffset = endCharOffset diff --git a/app/src/main/kotlin/bums/lunatic/launcher/workers/TorrentManager.kt b/app/src/main/kotlin/bums/lunatic/launcher/workers/TorrentManager.kt index 6f83a445..702f1d0b 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/workers/TorrentManager.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/workers/TorrentManager.kt @@ -210,7 +210,7 @@ var batteryPct = 50 // 2. ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ: ๊ณ„์‚ฐ๋œ ์ ์ˆ˜(finalScore)๊ฐ€ ๋‚ฎ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ - if (isCharging && batteryPct > 70) { + if (isCharging && batteryPct > 75) { torrentsWithoutMetadata.forEach { it.swig().resume() } val maxSlots = if (isWifiConnected) 6 else 1 val sortedByPriority = torrentsWithMetadata.sortedBy { it.second } diff --git a/app/src/main/res/layout/rss_activity.xml b/app/src/main/res/layout/rss_activity.xml index 2380e729..31325481 100644 --- a/app/src/main/res/layout/rss_activity.xml +++ b/app/src/main/res/layout/rss_activity.xml @@ -58,10 +58,10 @@ app:fab_label="๐Ÿ“บ" style="@style/CommonFabStyle" android:id="@+id/youtube"/> - + + + +