fixed async in download all!

now need to figure out how to use all cores
This commit is contained in:
neon443
2025-11-22 19:09:24 +00:00
parent 12484f6226
commit 020bb0e405
4 changed files with 65 additions and 16 deletions

View File

@@ -52,12 +52,49 @@ class EmojiHoarder: ObservableObject {
} }
@MainActor @MainActor
func downloadAllStickers() { func downloadAllStickers() async {
downloadedEmojisArr = []
let cores = ProcessInfo.processInfo.processorCount-1
var indiciesSplit: [Range<Int>] = []
for i in 0..<cores {
let onething = emojis.count/cores
indiciesSplit.append(onething*i..<onething + (onething*i))
if i == (0..<cores).last {
let last = indiciesSplit.last!
indiciesSplit.append(onething*i..<(onething + (onething*i)+emojis.count-last.upperBound))
}
}
print(indiciesSplit)
var t: Int = 0
for split in indiciesSplit {
for thing in split {
t+=1
}
}
print(t)
print()
// let indicies = emojis.indices.split(separator: indiciesSplit)
// await withTaskGroup { group in
// for indicy in indicies {
// group.addTask {
// for i in indicy {
// print(i)
// }
// }
// }
// }
for emoji in emojis { for emoji in emojis {
downloadedEmojisArr.append(emoji.name)
guard !downloadedEmojis.contains(emoji.name) else { continue } guard !downloadedEmojis.contains(emoji.name) else { continue }
download(emoji: emoji, skipStoreIndex: true) await download(emoji: emoji, skipStoreIndex: true)
downloadedEmojis.insert(emoji.name) downloadedEmojis.insert(emoji.name)
} }
DispatchQueue.main.asyncAfter(deadline: .now()+1) { DispatchQueue.main.asyncAfter(deadline: .now()+1) {
self.storeDownloadedIndexes() self.storeDownloadedIndexes()
} }
@@ -69,6 +106,8 @@ class EmojiHoarder: ObservableObject {
guard downloadedEmojis.contains(emojis[i].name) else { continue } guard downloadedEmojis.contains(emojis[i].name) else { continue }
delete(emoji: emojis[i], skipStoreIndex: true) delete(emoji: emojis[i], skipStoreIndex: true)
} }
downloadedEmojis = []
downloadedEmojisArr = []
storeDownloadedIndexes() storeDownloadedIndexes()
} }
@@ -207,27 +246,31 @@ class EmojiHoarder: ObservableObject {
} }
} }
nonisolated func download(emoji: Emoji, skipStoreIndex: Bool = false) { nonisolated func download(emoji: Emoji, skipStoreIndex: Bool = false) async {
Task.detached { // Task.detached(priority: .high) {
try? await emoji.downloadImage() try? await emoji.downloadImage()
await MainActor.run { await MainActor.run {
self.downloadedEmojis.insert(emoji.name) if !skipStoreIndex {
self.downloadedEmojisArr.append(emoji.name) self.downloadedEmojis.insert(emoji.name)
self.downloadedEmojisArr.append(emoji.name)
self.storeDownloadedIndexes()
}
self.trie.dict[emoji.name]?.refresh() self.trie.dict[emoji.name]?.refresh()
if !skipStoreIndex { self.storeDownloadedIndexes() } if !skipStoreIndex { Haptic.success.trigger() }
Haptic.success.trigger()
} }
} // }
} }
@MainActor @MainActor
func delete(emoji: Emoji, skipStoreIndex: Bool = false) { func delete(emoji: Emoji, skipStoreIndex: Bool = false) {
emoji.deleteImage() emoji.deleteImage()
downloadedEmojis.remove(emoji.name) if !skipStoreIndex {
downloadedEmojisArr.removeAll(where: { $0 == emoji.name }) downloadedEmojis.remove(emoji.name)
downloadedEmojisArr.removeAll(where: { $0 == emoji.name })
storeDownloadedIndexes()
}
self.trie.dict[emoji.name]?.refresh() self.trie.dict[emoji.name]?.refresh()
if !skipStoreIndex { storeDownloadedIndexes() } if !skipStoreIndex { Haptic.heavy.trigger() }
Haptic.heavy.trigger()
} }
func setShowWelcome(to newValue: Bool) { func setShowWelcome(to newValue: Bool) {

View File

@@ -39,7 +39,9 @@ struct EmojiRow: View {
.buttonStyle(.plain) .buttonStyle(.plain)
} else { } else {
Button("", systemImage: "arrow.down.circle") { Button("", systemImage: "arrow.down.circle") {
hoarder.download(emoji: emoji) Task {
await hoarder.download(emoji: emoji)
}
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} }

View File

@@ -92,7 +92,9 @@ struct SettingsView: View {
Section("Use with Caution") { Section("Use with Caution") {
Button("download all", role: .destructive) { Button("download all", role: .destructive) {
hoarder.downloadAllStickers() Task {
await hoarder.downloadAllStickers()
}
} }
Button("delete all", role: .destructive) { Button("delete all", role: .destructive) {
hoarder.deleteAllStickers() hoarder.deleteAllStickers()

View File

@@ -64,7 +64,9 @@ struct EmojiCollectionView: UIViewRepresentable {
.buttonStyle(.plain) .buttonStyle(.plain)
} else { } else {
Button("", systemImage: "arrow.down.circle") { Button("", systemImage: "arrow.down.circle") {
self.hoarder.download(emoji: emoji) Task {
await self.hoarder.download(emoji: emoji)
}
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} }