mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
fixed async in download all!
now need to figure out how to use all cores
This commit is contained in:
@@ -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 {
|
||||||
|
if !skipStoreIndex {
|
||||||
self.downloadedEmojis.insert(emoji.name)
|
self.downloadedEmojis.insert(emoji.name)
|
||||||
self.downloadedEmojisArr.append(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()
|
||||||
|
if !skipStoreIndex {
|
||||||
downloadedEmojis.remove(emoji.name)
|
downloadedEmojis.remove(emoji.name)
|
||||||
downloadedEmojisArr.removeAll(where: { $0 == 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) {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user