Commit 4f362a4f authored by wanglei's avatar wanglei

[AI重构]AI重构SimilarPhotosActivity

parent 2111510d
...@@ -38,6 +38,7 @@ import kotlinx.coroutines.async ...@@ -38,6 +38,7 @@ import kotlinx.coroutines.async
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
import java.util.concurrent.Semaphore import java.util.concurrent.Semaphore
import kotlinx.coroutines.withContext
class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(ActivitySimilarPhotosBinding::inflate) { class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(ActivitySimilarPhotosBinding::inflate) {
...@@ -191,34 +192,36 @@ class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(Activit ...@@ -191,34 +192,36 @@ class SimilarPhotosActivity : BaseActivity<ActivitySimilarPhotosBinding>(Activit
private fun initData() { private fun initData() {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val images = MediaUtils.findImageFiles(this@SimilarPhotosActivity) 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>() val hasSame = mutableSetOf<String>()
similarBeans.forEach { similar -> for (value in images) {
if (hasSame.contains(similar.url)) return@forEach semaphore.acquire()
val similar = try {
SimilarUtils.createImage(value.path)
} finally {
semaphore.release()
}
if (similar == null || hasSame.contains(similar.url)) continue
hasSame.add(similar.url) hasSame.add(similar.url)
similar.items.add(similar) similar.items.add(similar)
similarBeans.forEach { for (it in images) {
if (!hasSame.contains(it.url) && SimilarUtils.similarCondition(similar, it)) { if (it.path == value.path) continue
hasSame.add(it.url) val other = SimilarUtils.createImage(it.path)
similar.items.add(it) 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) { launch(Dispatchers.IO) {
similarSize = list.sumOf { it.size } + list.sumOf { it.items.sumOf { it.size } } similarSize = list.sumOf { it.size } + list.sumOf { it.items.sumOf { it.size } }
} }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
if (state != 0) scanComplete() if (state != 0) scanComplete()
state = 2 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