Skip to content

Commit

Permalink
修改url定位逻辑
Browse files Browse the repository at this point in the history
Signed-off-by: 子斗子 <[email protected]>
  • Loading branch information
ZIDOUZI committed Dec 7, 2022
1 parent 0a50822 commit 75e0f8c
Show file tree
Hide file tree
Showing 13 changed files with 137 additions and 120 deletions.
2 changes: 1 addition & 1 deletion .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 9 additions & 7 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
kotlin("android")
kotlin("kapt")
id("dagger.hilt.android.plugin")
kotlin("plugin.serialization") version Version.kotlin
Expand Down Expand Up @@ -85,7 +85,7 @@ android {
create("canary") {
signingConfig = signingConfigs.getByName("canary")
applicationIdSuffix = ".canary"
versionNameSuffix = "雀食"
versionNameSuffix = "奇异鸟"
resValue("string", "provider", ".canary")
}
}
Expand All @@ -105,6 +105,7 @@ android {
}
buildFeatures {
compose = true
buildConfig = true
}
composeOptions {
kotlinCompilerExtensionVersion = Version.compose
Expand All @@ -114,17 +115,18 @@ android {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
namespace = "zdz.imageURL"
}

dependencies {

implementation("androidx.activity:activity-compose:1.4.0")
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.activity:activity-compose:1.6.1")
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.compose.ui:ui:${Version.ui}")
implementation(Lib.material3)
implementation(Lib.material)
implementation("androidx.compose.ui:ui-tooling-preview:${Version.ui}")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1")
implementation("androidx.navigation:navigation-compose:${Version.navigation}")
implementation("androidx.documentfile:documentfile:1.0.1")
implementation("io.ktor:ktor-client-core:${Version.ktor}")
Expand All @@ -142,8 +144,8 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:${Version.coroutine}")
implementation(project(":compose"))
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
androidTestImplementation("androidx.test.ext:junit:1.1.4")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
androidTestImplementation("androidx.compose.ui:ui-test-junit4:${Version.ui}")
debugImplementation("androidx.compose.ui:ui-tooling:${Version.ui}")
debugImplementation("androidx.compose.ui:ui-test-manifest:${Version.ui}")
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="zdz.imageURL">
xmlns:tools="http://schemas.android.com/tools">

<!--获取网络访问权限-->
<uses-permission-sdk-23 android:name="android.permission.INTERNET"/>
Expand Down
23 changes: 16 additions & 7 deletions app/src/main/java/zdz/imageURL/Global.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package zdz.imageURL

import io.ktor.http.*
import zdz.imageURL.Type.*
import io.ktor.http.Url
import zdz.imageURL.Type.AV
import zdz.imageURL.Type.CV
import zdz.imageURL.Type.Companion.value
import zdz.imageURL.Type.Live
import zdz.imageURL.Type.PID
import zdz.imageURL.Type.UID
import zdz.imageURL.Type.WeChat
import zdz.libs.encode.softDecodeUnicode16
import zdz.libs.url.getSourceCode
import zdz.libs.url.toHTTPS
Expand Down Expand Up @@ -56,21 +61,25 @@ enum class Type {

AV {
override fun action(sourceCode: String): String? =
""""og:image" content="([^">]+?\.(jpe?g|png))">""".toRegex().find(sourceCode)
?.run { groupValues[1] }?.takeIf { sourceCode.contains("itemprop=\"video\"") }
""""og:image" content="([^">]+?\.(jpe?g|png))(@.+)?">""".toRegex().find(sourceCode)
?.run { groupValues[1] }
?.takeIf { sourceCode.contains("itemprop=\"video\"") }
?.let { "https:$it" }

override val domain: String = "www.bilibili.com/video/av"
},
BV {
override fun action(sourceCode: String): String? =
""""og:image" content="([^">]+?\.(jpe?g|png))">""".toRegex().find(sourceCode)
?.run { groupValues[1] }?.takeIf { sourceCode.contains("itemprop=\"video\"") }
""""og:image" content="([^">]+?\.(jpe?g|png))(@.+)?">""".toRegex().find(sourceCode)
?.run { groupValues[1] }
?.takeIf { sourceCode.contains("itemprop=\"video\"") }
?.let { "https:$it" }

override val domain: String = "www.bilibili.com/video/bv"
},
CV {
override fun action(sourceCode: String): String? =
"""origin_img: "([^"\]]+?\.(jpe?g|png))"""".toRegex().find(sourceCode)
""""origin_image_urls": ?\["([^"\]]+?\.(jpe?g|png))"]""".toRegex().find(sourceCode)
?.run { groupValues[1] }?.takeIf { sourceCode.contains("itemprop=\"Article\"") }

override val domain: String = "www.bilibili.com/read/cv"
Expand Down
62 changes: 31 additions & 31 deletions app/src/main/java/zdz/imageURL/activity/main/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import android.widget.Toast
import android.widget.Toast.LENGTH_SHORT
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.viewModels
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
Expand Down Expand Up @@ -81,8 +80,6 @@ class MainActivity : ComponentActivity() {

private val vm: MainViewModel by viewModels()

lateinit var pickDir: ActivityResultLauncher<Uri?>

lateinit var data: Data

private val scope by lazy { vm.viewModelScope }
Expand Down Expand Up @@ -175,16 +172,12 @@ class MainActivity : ComponentActivity() {
navController = navController,
startDestination = NavItem.MainScr.route
) {
composable(NavItem.MainScr.route) {
MainScreen(vm, this@MainActivity)
}
composable(NavItem.MainScr.route) { MainScreen(vm, this@MainActivity) }
composable(NavItem.HelpScr.route) { GuideScreen(BuildConfig.DEBUG) }
composable(NavItem.SettingsScr.route) {
SettingsScreen(vm, this@MainActivity)
}
composable(NavItem.LogScr.route) {
LogScreen(vm)
}
composable(NavItem.LogScr.route) { LogScreen(vm) }
}
}
}
Expand All @@ -201,6 +194,7 @@ class MainActivity : ComponentActivity() {
} ?: toast("分享错误.分享内容为空")
}
}

Intent.ACTION_PROCESS_TEXT -> {
intent.getStringExtra(EXTRA_PROCESS_TEXT)?.let { s ->
vm.text = s
Expand All @@ -212,8 +206,24 @@ class MainActivity : ComponentActivity() {
//初始化时将保有的永久uri访问地址读取到viewModel
setRoot()

// TODO: 跳过延迟属性.要求注册时Activity处于
pickDir = registerForActivityResult(vm.dirContracts) {
scope.launch(Dispatchers.IO) {
try {
measureTimeMillis {
data = Json.decodeFromString(
Url(getString(R.string.update_url)).getSourceCode(skipSSL = true)
)
vm.show = data.isOutOfData(MainViewModel.version) && vm.autoCheck.state
}.let { log("get remove info in $it millis time", c = Green) }
} catch (e: SocketTimeoutException) {
error(e, this)
} catch (e: NullPointerException) {
error(e, this)
}
}
}

fun chooseDir(uri: Uri) {
registerForActivityResult(vm.dirContracts) {
if (it != null) {
if (vm.rootDir?.uri != it && vm.rootDir != null) {
try {
Expand All @@ -232,22 +242,7 @@ class MainActivity : ComponentActivity() {
)
vm.rootDir = DocumentFile.fromTreeUri(this, it)
}
}

scope.launch(Dispatchers.IO) {
try {
measureTimeMillis {
data = Json.decodeFromString(
Url(getString(R.string.update_url)).getSourceCode(skipSSL = true)
)
vm.show = data.isOutOfData(MainViewModel.version) && vm.autoCheck.state
}.let { log("get remove info in $it millis time", c = Green) }
} catch (e: SocketTimeoutException) {
error(e, this)
} catch (e: NullPointerException) {
error(e, this)
}
}
}.launch(uri)
}

override fun onDestroy() {
Expand Down Expand Up @@ -369,7 +364,7 @@ class MainActivity : ComponentActivity() {
// 防止uri泄露.save()方法的uri以file://开头,应转化为content://开头
val uri = FileProvider.getUriForFile(
this@MainActivity,
"${BuildConfig.APPLICATION_ID}.fileProvider",
"${BuildConfig.DEBUG}.fileProvider",
saveAsync().await().toFile()
)
val intent = Intent(Intent.ACTION_SEND).apply {
Expand Down Expand Up @@ -413,25 +408,30 @@ class MainActivity : ComponentActivity() {
mimeType = "*/jpg"
format = Bitmap.CompressFormat.JPEG
}

".png" -> {
mimeType = "*/png"
format = Bitmap.CompressFormat.PNG
}

".webp" -> {
mimeType = "*/webp"
@Suppress("DEPRECATION")
format = if (Build.VERSION.SDK_INT >= 30) Bitmap.CompressFormat.WEBP_LOSSLESS
else Bitmap.CompressFormat.WEBP
}

else -> throw IllegalStateException("MainActivity: save 未知的图片格式")
}

val folder = if (prefix == "cacheFile") externalCacheDir?.let { DocumentFile.fromFile(it) }
else vm.rootDir

return scope.async(Dispatchers.IO) {
folder ?: return@async Uri.EMPTY.apply { toast("MainActivity: save 无法获取文件夹") }
val resolve = folder.findFile("$prefix$suffix")?.takeUnless { it.isDirectory }
folder ?: return@async Uri.EMPTY.also {
toast("MainActivity: save 无法获取文件夹", this)
}
val resolve = folder.findFile("$prefix$suffix")?.takeIf { it.isFile }
?: folder.createFile(mimeType, fileName)
?: throw Exception("........")
measureTimeMillis {
Expand Down Expand Up @@ -486,7 +486,7 @@ class MainActivity : ComponentActivity() {
val intent = Intent(Intent.ACTION_VIEW)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
//使用null,避免保存在缓存目录引发错误
scope.launch {
runBlocking(scope.coroutineContext) {
saveAsync(null).await().takeIf { it != Uri.EMPTY }?.let {
intent.setDataAndType(it, "image/*")
startActivity(intent)
Expand Down
Loading

0 comments on commit 75e0f8c

Please sign in to comment.