pass a UI to NAT entryProcessors

This commit is contained in:
2022-06-27 18:22:57 +00:00
parent 7924cabaf5
commit 8a71a1f823
10 changed files with 17 additions and 15 deletions

View File

@@ -24,8 +24,8 @@
(systems.push system)
system)
(method processSystems []
(doFor system systems (system.process this)))
(method processSystems [&opt :ArchiveUI ui]
(doFor system systems (system.process this ui)))
(method :Entry createEntry [:Entry->Dynamic initializer] // initializer returns Dynamic so ->:Void isn't required
(let [e (_newEntry)]

View File

@@ -80,7 +80,7 @@
(method handleChanges [:Archive archive :ChangeSet changeSet]
(archive.processSystems)
(archive.processSystems this)
(doFor e changeSet
(print (archive.fullString e))))

View File

@@ -3,7 +3,7 @@ package nat;
import kiss.Prelude;
typedef EntryChecker = (Archive, Entry) -> Bool;
typedef EntryProcessor = (Archive, Entry) -> Dynamic; // Whatever value is returned will be dropped, but this is easier than requiring ->:Void
typedef EntryProcessor = (Archive, Entry, ?ArchiveUI) -> Dynamic; // Whatever value is returned will be dropped, but this is easier than requiring ->:Void
@:build(kiss.Kiss.build())
class System {}

View File

@@ -1,8 +1,8 @@
(prop :Map<String,Entry> entries (new Map))
(method :Void process [:Archive archive]
(method :Void process [:Archive archive &opt :ArchiveUI ui]
(doFor e (entries.iterator)
(processEntry archive e)))
(processEntry archive e ui)))
(defNew [&prop :EntryChecker canProcessEntry
&prop :EntryProcessor processEntry]
@@ -17,4 +17,4 @@
(entries.remove e.id)
(when onRemoveEntry (onRemoveEntry archive e)))))
// TODO systems may need access to a UI or ArchiveController
// TODO systems may need access to an ArchiveController

View File

@@ -7,7 +7,7 @@ import haxe.Json;
using haxe.io.Path;
typedef AttachmentProcessor = (Archive, Entry, Array<FileRef>) -> Dynamic;
typedef AttachmentProcessor = (Archive, Entry, Array<FileRef>, ?ArchiveUI) -> Dynamic;
/**
* Base System that processes Entries based on whether they have file attachments

View File

@@ -12,5 +12,5 @@
(return true)))
false
}
->[archive e]
(processor archive e (filter e.files ->file !(= -1 (extensions.indexOf (file.extension)))))))
->[archive e &opt ui]
(processor archive e (filter e.files ->file !(= -1 (extensions.indexOf (file.extension)))) ui)))

View File

@@ -3,7 +3,7 @@
(defNew []
(super
["jpg" "jpeg" "png"]
->[archive e imageFiles]
->[archive e imageFiles &opt ui]
(unless (hasComponent e Images)
(addComponent archive e Images
(object

View File

@@ -6,7 +6,7 @@
(defNew []
(super
->[archive e] (hasComponent e Name)
->[archive e] (let [name (readComponent e Name)]
->[archive e &opt ui] (let [name (readComponent e Name)]
(if (entriesByName.exists (name.toLowerCase))
(.push (dictGet entriesByName (name.toLowerCase)) e)
(dictSet entriesByName (name.toLowerCase) [e]))

View File

@@ -3,7 +3,7 @@
(defNew []
(super
->[archive e] false
->[archive e] null)
->[archive e &opt ui] null)
~(#extern String js
(object

View File

@@ -8,7 +8,7 @@
1))
// named method in case a user will want to run it on selectedEntries instead of on media entries
(method scrapeForImages [archive e]
(method scrapeForImages [archive e &opt ui]
(let [:String title
(readComponent e Name)
:Array<String> wikipediaImageUrls
@@ -21,7 +21,9 @@
(.urlDecode (url.withoutDirectory))
// Some symbols shouldn't be decoded because they're invalid in file systems!
"\"" "%22"))]
// TODO do this with ui.displayMessage
// TODO write a macro that either does both print and displayMessage if a ui is available
(when ui
(ui.displayMessage "Downloading $title image: $url"))
(print url "downloading")
(assertProcess "curl" ["--output" filePath url])
filePath)))