diff --git a/app/bs_debug.keystore b/app/bs_debug.keystore new file mode 100644 index 0000000..d8a2f96 Binary files /dev/null and b/app/bs_debug.keystore differ diff --git a/app/build.gradle b/app/build.gradle index bf9cf1b..57bd023 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,15 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + + debug { + storeFile = file("./bs_debug.keystore") + storePassword = "android" + keyAlias = "androiddebugkey" + keyPassword = "android" + } + } buildTypes { release { @@ -56,7 +65,7 @@ dependencies { // implementation files('libs/DualScreen.jar') - implementation 'io.realm.kotlin:library-base:1.16.0' + implementation 'io.realm.kotlin:library-base:2.0.0' diff --git a/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt b/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt index b49273b..7c29c3b 100644 --- a/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt +++ b/app/src/main/java/com/mime/dualscreenview/activity/Intro.kt @@ -62,8 +62,10 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import java.lang.System.currentTimeMillis +import java.text.Normalizer import java.text.SimpleDateFormat import java.util.Date +import java.util.regex.Pattern import kotlin.random.Random @@ -430,6 +432,20 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { }) } } + val String.cleanTextContent: String + get() { + // strips off all non-ASCII characters + var text = this + text = text.replace("[^\\x00-\\x7F]".toRegex(), "") + + // erases all the ASCII control characters + text = text.replace("[\\p{Cntrl}&&[^\r\n\t]]".toRegex(), "") + + // removes non-printable characters from Unicode + text = text.replace("\\p{C}".toRegex(), "") + return text.trim() + } + var isLoading = false var saveClient = object : WebViewClient() { override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { @@ -457,12 +473,10 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { Blog.LOGE("saveClient contents >>> ${contents.length}") Uri.parse(url)?.let { it.path?.let { + HistoryManager.getBooPageInfoContentsSave(it, contents.replace(Char(0x20).toString()," ")) HistoryManager.getBooPageInfo(it) { info -> runOnUiThread { info?.let { - HistoryManager.openRealm.writeBlocking { - it.contents = contents - } var origin = info.getTitleItem() val biggerText = SpannableStringBuilder(origin) biggerText.setSpan(RelativeSizeSpan(1.6f), 0, origin.length, 0) @@ -473,6 +487,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { } } } + } } var ramdomTime = 8000L + Random(System.currentTimeMillis()).nextLong().rem(7999) @@ -863,14 +878,12 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface { it.path?.let { HistoryManager.getBooPageInfo(it){ currentBooinfo = it - HistoryManager.openRealm.writeBlocking { - currentBooinfo?.contents = contents - } currentChapter = it?.chapterNum ?: 0 currentPage = it?.chapterNum ?: 0 HistoryManager.save(historyItem = HistoryItem().putHistory(it,mBaseWebContentsViewer.webview.url!!)) } } + HistoryManager.getBooPageInfoContentsSave(it!!.path!!,contents) } } } diff --git a/app/src/main/java/com/mime/dualscreenview/data/HistoryManager.kt b/app/src/main/java/com/mime/dualscreenview/data/HistoryManager.kt index b43864d..23e3d3b 100644 --- a/app/src/main/java/com/mime/dualscreenview/data/HistoryManager.kt +++ b/app/src/main/java/com/mime/dualscreenview/data/HistoryManager.kt @@ -21,7 +21,7 @@ object HistoryManager { val openRealm : Realm = Realm.open(RealmConfiguration.Builder(clazz as Set>) .schemaVersion(schemaVersion) - .log(LogLevel.ALL) + .deleteRealmIfMigrationNeeded() .build()) fun save(lastInfo: LastInfo) { @@ -58,13 +58,15 @@ object HistoryManager { openRealm.apply{ Blog.LOGE("get ${url}" ) Blog.LOGE("get ${this.query(BookPageInfo::class).count().find()}" ) - var bookPageInfo = this.query(BookPageInfo::class).query("pathUrl == $0","${url}").find().first() - if (bookPageInfo != null) { + var bookPageInfo = this.query(BookPageInfo::class).query("pathUrl == $0","${url}").find() + if (bookPageInfo != null && bookPageInfo.count() > 0) { Blog.LOGE("get ${bookPageInfo}" ) - this.query(BookPageInfos::class,"bookPageUrl == $0",bookPageInfo.bookPageUrl).find().first().let { + this.query(BookPageInfos::class,"bookPageUrl == $0",bookPageInfo.first().bookPageUrl).find().first().let { Blog.LOGE("get ${it} , ${it?.pages}" ) callback.invoke(this.copyFromRealm(it)) } + } else { + callback.invoke(null) } } } @@ -77,25 +79,22 @@ object HistoryManager { if (result.size > 0) { var bookPageInfo = result?.first() if (bookPageInfo != null) { - callback.invoke(this.copyFromRealm(bookPageInfo)) + callback.invoke(bookPageInfo) } } } } - suspend fun getBooPageInfoContentsSave(url : String, contents : String) { - val realm = openRealm - Blog.LOGE("get ${url}" ) - Blog.LOGE("get ${realm.query(BookPageInfo::class).count().find()}" ) - val result = realm.query(BookPageInfo::class).query("pathUrl == $0","${url}").find() - if (result.size > 0) { - val bookPageInfo = realm.copyFromRealm(result.first()) - realm.write { - bookPageInfo.contents = contents - copyToRealm(bookPageInfo, UpdatePolicy.ALL) + fun getBooPageInfoContentsSave(url : String, contents : String) { + openRealm.writeBlocking { + Blog.LOGE("get ${url}") + Blog.LOGE("get ${query(BookPageInfo::class).count().find()}") + val result = query(BookPageInfo::class).query("pathUrl == $0", "${url}").find() + if (result.size > 0) { + result.first().contents = contents + copyToRealm(result.first(), UpdatePolicy.ALL) } } - } diff --git a/app/src/main/java/com/mime/dualscreenview/webcontents/contentsinfo/Booktoki.kt b/app/src/main/java/com/mime/dualscreenview/webcontents/contentsinfo/Booktoki.kt index 64078eb..63bfbac 100644 --- a/app/src/main/java/com/mime/dualscreenview/webcontents/contentsinfo/Booktoki.kt +++ b/app/src/main/java/com/mime/dualscreenview/webcontents/contentsinfo/Booktoki.kt @@ -4,7 +4,7 @@ import com.mime.dualscreenview.webcontents.BaseWebContents object Booktoki : BaseWebContents() { - override var lastNumber : Int = 349 + override var lastNumber : Int = 350 override fun getWebcontentsName(): String { return "Booktoki" diff --git a/build.gradle b/build.gradle index d5a7d5b..2e41990 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,8 @@ plugins { id 'com.android.application' version '8.5.2' apply false id 'com.android.library' version '8.5.2' apply false - id 'org.jetbrains.kotlin.android' version '1.9.22' apply false - id 'io.realm.kotlin' version '1.16.0' apply false + id 'org.jetbrains.kotlin.android' version '2.0.0' apply false + id 'io.realm.kotlin' version '2.0.0' apply false }