Commit 4f362a4f authored by wanglei's avatar wanglei

[AI重构]AI重构SimilarPhotosActivity

parent 2111510d
......@@ -38,6 +38,7 @@ import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import java.io.File
import java.util.concurrent.Semaphore
import kotlinx.coroutines.withContext
class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(ActivitySimilarPhotosBinding::inflate) {
......@@ -191,34 +192,36 @@ class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(Activit
private fun initData() {
lifecycleScope.launch(Dispatchers.IO) {
val images = MediaUtils.findImageFiles(this@SimilarPhotosActivity)
val similarBeans = images.mapNotNull { value ->
lifecycleScope.async(Dispatchers.IO) {
semaphore.acquire() // 请求许可
try {
SimilarUtils.createImage(value.path)
} finally {
semaphore.release() // 释放许可
}
}.await()
}
val hasSame = mutableSetOf<String>()
similarBeans.forEach { similar ->
if (hasSame.contains(similar.url)) return@forEach
for (value in images) {
semaphore.acquire()
val similar = try {
SimilarUtils.createImage(value.path)
} finally {
semaphore.release()
}
if (similar == null || hasSame.contains(similar.url)) continue
hasSame.add(similar.url)
similar.items.add(similar)
similarBeans.forEach {
if (!hasSame.contains(it.url) && SimilarUtils.similarCondition(similar, it)) {
hasSame.add(it.url)
similar.items.add(it)
for (it in images) {
if (it.path == value.path) continue
val other = SimilarUtils.createImage(it.path)
if (other != null && !hasSame.contains(other.url) && SimilarUtils.similarCondition(similar, other)) {
hasSame.add(other.url)
similar.items.add(other)
}
}
if (similar.items.size > 1) {
withContext(Dispatchers.Main) {
list.add(similar)
adapter.notifyItemInserted(list.lastIndex)
updateSelection()
}
}
}
list = similarBeans.filter { it.items.size > 1 }.toMutableList()
launch(Dispatchers.IO) {
similarSize = list.sumOf { it.size } + list.sumOf { it.items.sumOf { it.size } }
}
launch(Dispatchers.Main) {
if (state != 0) scanComplete()
state = 2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment