Public Access
START.applescript aktualisiert
Aktualisiert auf Version 1.5 Doppelte Pfadwurzel eliminiert. Funktionalität unverändert, verweist auf aktualisierte _belegversand*-Scripts. Alle Pfade von Version 1.4 unverändert übernommen!
This commit is contained in:
+55
-127
@@ -1,5 +1,5 @@
|
||||
(*
|
||||
START.scpt - Version 1.4
|
||||
START.scpt - Version 1.5
|
||||
Rolle dieses Scripts
|
||||
--------------------
|
||||
Dieses Script ist der sichtbare Einstiegspunkt für Anwender:innen.
|
||||
@@ -20,44 +20,53 @@ START.scpt ist bewusst klein gehalten.
|
||||
Die eigentliche Fachlogik liegt in:
|
||||
- _belegversand_setup.scpt
|
||||
- _belegversand.scpt
|
||||
Version 1.5:
|
||||
-----------
|
||||
- Fix: Pfade zu Helpers/scripts werden zentral in helperScriptPath()
|
||||
gebaut. Vorher überschrieb showWelcomeDialogIfNeeded() die Property
|
||||
basePath mit einem absoluten Pfad – danach entstand beim Start des
|
||||
Setup-Scripts ein doppelter Home-Pfad (/Users/x//Users/x/Library/...).
|
||||
Aufgefallen ist das erst, seit das Setup SHOW_README=true schreibt.
|
||||
- basePath jetzt ohne führenden Schrägstrich, wie in den anderen Scripts
|
||||
- doppelten Kommentarblock entfernt
|
||||
*)
|
||||
|
||||
-- Name des Setup-Scripts, das im Unterordner "Helpers/scripts" liegt.
|
||||
-- Dieses Script wird von START.scpt immer am Ende aufgerufen.
|
||||
property setupScriptName : "_belegversand_setup.scpt"
|
||||
-- Name des Scripts mit dem Text für den Willkommensdialog.
|
||||
property aboutScriptName : "_text_about.scpt"
|
||||
-- Name der DEVONthink-Gruppe, in der Konfigurationsdateien liegen.
|
||||
property configGroupName : "_config"
|
||||
-- Name der eigentlichen Konfigurationsdatei in DEVONthink.
|
||||
property configRecordName : "belegversand.conf"
|
||||
|
||||
property appVersion : "1.4"
|
||||
property basePath : "/Library/Application Scripts/com.devon-technologies.think/Menu/Belegversand"
|
||||
|
||||
property appVersion : "1.5"
|
||||
-- Relativ zum Home-Ordner. Wird NIE zur Laufzeit verändert.
|
||||
property basePath : "Library/Application Scripts/com.devon-technologies.think/Menu/Belegversand"
|
||||
property windowTitle : "Belegversand, Vers. " & appVersion
|
||||
|
||||
(*
|
||||
helperScriptPath(scriptFileName)
|
||||
--------------------------------
|
||||
Liefert den absoluten Pfad eines Scripts in Helpers/scripts, z. B.
|
||||
/Users/<name>/Library/Application Scripts/.../Belegversand/Helpers/scripts/_belegversand_setup.scpt
|
||||
Einzige Stelle, an der dieser Pfad zusammengebaut wird.
|
||||
*)
|
||||
on helperScriptPath(scriptFileName)
|
||||
-- POSIX path of (path to home folder) endet bereits mit "/"
|
||||
return (POSIX path of (path to home folder)) & basePath & "/Helpers/scripts/" & scriptFileName
|
||||
end helperScriptPath
|
||||
|
||||
(*
|
||||
runSiblingScript(scriptFileName)
|
||||
--------------------------------
|
||||
Lädt und startet ein weiteres AppleScript aus dem Unterordner "Helpers/scripts".
|
||||
Parameter:
|
||||
- scriptFileName : Dateiname des aufzurufenden Scripts, z. B.
|
||||
"_belegversand_setup.scpt"
|
||||
Ablauf:
|
||||
- absolute Basis-Path setzen
|
||||
- daran den Unterordner "Helpers/scripts" und den Dateinamen anhängen
|
||||
- prüfen, ob die Scriptdatei existiert
|
||||
- Script laden
|
||||
- Script ausführen
|
||||
Fehlerbehandlung:
|
||||
- wenn die Datei nicht gefunden wird -> Hinweisdialog
|
||||
- wenn das Laden oder Starten fehlschlägt -> Hinweisdialog mit Fehlermeldung
|
||||
Wichtig:
|
||||
--------
|
||||
Der absolute Pfad ist invariant und unabhängig vom Speicherort dieses Scripts.
|
||||
*)
|
||||
on runSiblingScript(scriptFileName)
|
||||
-- Absolute Basis-Path (Home + fest Installation)
|
||||
set expandedPath to (do shell script "echo ~") & "/" & basePath
|
||||
set targetPath to expandedPath & "/Helpers/scripts/" & scriptFileName
|
||||
set targetPath to my helperScriptPath(scriptFileName)
|
||||
|
||||
try
|
||||
set targetAlias to POSIX file targetPath as alias
|
||||
@@ -73,23 +82,14 @@ on runSiblingScript(scriptFileName)
|
||||
display dialog "Hinweis: Konnte Script nicht starten:" & return & scriptFileName & return & return & errMsg buttons {"OK"} default button "OK"
|
||||
end try
|
||||
end runSiblingScript
|
||||
|
||||
(*
|
||||
recordText(theRecord)
|
||||
---------------------
|
||||
Liest den Textinhalt eines DEVONthink-Records.
|
||||
Verwendung in START.scpt:
|
||||
-------------------------
|
||||
Hier wird dieser Handler genutzt, um den Inhalt der Datei
|
||||
"_config/belegversand.conf" als Text einzulesen.
|
||||
Ablauf:
|
||||
- zunächst plain text versuchen
|
||||
- wenn das fehlschlägt, auf content ausweichen
|
||||
- wenn beides fehlschlägt, leeren String zurückgeben
|
||||
Hinweis:
|
||||
--------
|
||||
Die Konvertierung erscheint hier als "rich text", weil AppleScript/Script Editor
|
||||
solche Stellen beim Kompilieren teilweise selbstständig umschreiben kann.
|
||||
Der funktionale Zweck ist hier aber: Textinhalt lesbar zurückgeben.
|
||||
*)
|
||||
on recordText(theRecord)
|
||||
tell application id "DNtp"
|
||||
@@ -108,20 +108,12 @@ on recordText(theRecord)
|
||||
end try
|
||||
end tell
|
||||
end recordText
|
||||
|
||||
(*
|
||||
findChildByName(parentRecord, childName)
|
||||
----------------------------------------
|
||||
Sucht innerhalb einer DEVONthink-Gruppe ein direktes Kind mit bestimmtem Namen.
|
||||
Parameter:
|
||||
- parentRecord : die Gruppe, in der gesucht werden soll
|
||||
- childName : Name des gesuchten direkten Kinds
|
||||
Rückgabe:
|
||||
- den gefundenen DEVONthink-Record
|
||||
- oder missing value, wenn nichts passt
|
||||
Verwendung in START.scpt:
|
||||
-------------------------
|
||||
- _config-Gruppe unter der DB-Wurzel suchen
|
||||
- belegversand.conf innerhalb von _config suchen
|
||||
Rückgabe: den gefundenen Record oder missing value.
|
||||
*)
|
||||
on findChildByName(parentRecord, childName)
|
||||
tell application id "DNtp"
|
||||
@@ -135,25 +127,13 @@ on findChildByName(parentRecord, childName)
|
||||
end tell
|
||||
return missing value
|
||||
end findChildByName
|
||||
|
||||
(*
|
||||
getTopParentGroup(theRecord)
|
||||
----------------------------
|
||||
Ermittelt die oberste Gruppe einer DEVONthink-Hierarchie ausgehend von einem Record.
|
||||
Ablauf:
|
||||
- starte mit dem aktuell übergebenen Record
|
||||
- frage wiederholt nach dessen Eltern
|
||||
- solange es noch einen Parent gibt, gehe eine Ebene nach oben
|
||||
- sobald kein Parent mehr vorhanden ist, ist die Wurzel erreicht
|
||||
Verwendung in START.scpt:
|
||||
-------------------------
|
||||
START.scpt kennt die gewünschte Datenbank nicht direkt.
|
||||
Darum nimmt es irgendein ausgewähltes Objekt in DEVONthink
|
||||
und geht davon über die Parent-Kette bis zur obersten Gruppe hoch.
|
||||
Dort wird dann _config gesucht.
|
||||
Vorteil:
|
||||
--------
|
||||
Das Script ist dadurch nicht an einen festen Datenbanknamen gebunden,
|
||||
sondern arbeitet relativ zur aktuellen Auswahl.
|
||||
START.scpt kennt die gewünschte Datenbank nicht direkt, sondern geht von
|
||||
der aktuellen Auswahl über die Parent-Kette bis zur Wurzel hoch.
|
||||
*)
|
||||
on getTopParentGroup(theRecord)
|
||||
tell application id "DNtp"
|
||||
@@ -170,21 +150,12 @@ on getTopParentGroup(theRecord)
|
||||
end repeat
|
||||
end tell
|
||||
end getTopParentGroup
|
||||
|
||||
(*
|
||||
configValue(configText, keyName)
|
||||
--------------------------------
|
||||
Liest aus einem einfachen key=value-Konfigurationstext den Wert zu einem bestimmten Schlüssel.
|
||||
Parameter:
|
||||
- configText : kompletter Textinhalt der Konfigurationsdatei
|
||||
- keyName : gesuchter Schlüssel, z. B. "SHOW_README"
|
||||
Rückgabe:
|
||||
- Textwert des gefundenen Schlüssels
|
||||
- oder missing value, wenn kein passender Eintrag existiert
|
||||
Funktionsweise:
|
||||
---------------
|
||||
- zeilenweise durch die Konfiguration gehen
|
||||
- prüfen, ob eine Zeile mit "KEY=" beginnt
|
||||
- den Teil rechts vom "=" zurückgeben
|
||||
Liest aus einem key=value-Konfigurationstext den Wert zu einem Schlüssel.
|
||||
Rückgabe: Textwert oder missing value.
|
||||
*)
|
||||
on configValue(configText, keyName)
|
||||
set keyPrefix to keyName & "="
|
||||
@@ -201,24 +172,13 @@ on configValue(configText, keyName)
|
||||
end repeat
|
||||
return missing value
|
||||
end configValue
|
||||
|
||||
(*
|
||||
findConfigInCurrentDB()
|
||||
-----------------------
|
||||
Sucht die Konfigurationsdatei belegversand.conf relativ zur aktuellen DEVONthink-Auswahl.
|
||||
Ablauf:
|
||||
1. aktuelle Auswahl holen
|
||||
2. falls nichts ausgewählt ist -> missing value
|
||||
3. von der Auswahl zur DB-Wurzel hochgehen
|
||||
4. dort die Gruppe _config suchen
|
||||
5. darin die Datei belegversand.conf suchen
|
||||
Rückgabe:
|
||||
- den gefundenen Config-Record
|
||||
- oder missing value, wenn keine passende Konfiguration existiert
|
||||
Wichtig:
|
||||
--------
|
||||
Es wird absichtlich nicht global in allen Datenbanken gesucht,
|
||||
sondern immer nur relativ zur aktuellen Auswahl.
|
||||
So bleibt das Verhalten bei mehreren Datenbanken stabil und nachvollziehbar.
|
||||
Sucht belegversand.conf relativ zur aktuellen DEVONthink-Auswahl
|
||||
(DB-Wurzel → _config → belegversand.conf).
|
||||
Bewusst nicht global in allen Datenbanken.
|
||||
*)
|
||||
on findConfigInCurrentDB()
|
||||
tell application id "DNtp"
|
||||
@@ -239,61 +199,38 @@ end findConfigInCurrentDB
|
||||
showWelcomeDialogIfNeeded()
|
||||
---------------------------
|
||||
Zeigt den Willkommensdialog beim Start an, falls konfiguriert (SHOW_README=true).
|
||||
Ablauf:
|
||||
1. Config-Datei relativ zur aktuellen Auswahl suchen
|
||||
2. Wert SHOW_README auslesen
|
||||
3. falls SHOW_README=true -> Dialog mit "Nicht mehr anzeigen"-Option anzeigen
|
||||
4. falls User "Diesen Dialog nicht mehr anzeigen" wählt:
|
||||
-> SHOW_README auf false in der Config zurückschreiben
|
||||
|
||||
Wichtig:
|
||||
--------
|
||||
4. falls gewählt: SHOW_README=false in die Config zurückschreiben
|
||||
Der Dialog-Text wird aus Helpers/scripts/_text_about.scpt geladen.
|
||||
So wird verhindert, dass buildAboutText() doppelt definiert ist.
|
||||
*)
|
||||
(*
|
||||
showWelcomeDialogIfNeeded()
|
||||
---------------------------
|
||||
Zeigt den Willkommensdialog beim Start an, falls konfiguriert (SHOW_README=true).
|
||||
Ablauf:
|
||||
1. Config-Datei relativ zur aktuellen Auswahl suchen
|
||||
2. Wert SHOW_README auslesen
|
||||
3. falls SHOW_README=true -> Dialog mit "Nicht mehr anzeigen"-Option anzeigen
|
||||
4. falls User "Diesen Dialog nicht mehr anzeigen" wählt:
|
||||
-> SHOW_README auf false in der Config zurückschreiben
|
||||
|
||||
Wichtig:
|
||||
--------
|
||||
Der Dialog-Text wird aus Helpers/scripts/_text_about.scpt geladen.
|
||||
So wird verhindert, dass buildAboutText() doppelt definiert ist.
|
||||
*)
|
||||
on showWelcomeDialogIfNeeded()
|
||||
set configRecord to my findConfigInCurrentDB()
|
||||
if configRecord is missing value then return
|
||||
|
||||
|
||||
set cfgText to my recordText(configRecord)
|
||||
set showReadmeVal to my configValue(cfgText, "SHOW_README")
|
||||
if showReadmeVal is missing value then return
|
||||
|
||||
|
||||
set showReadmeLower to do shell script "printf %s " & quoted form of showReadmeVal & " | tr '[:upper:]' '[:lower:]'"
|
||||
if showReadmeLower is not "true" then return
|
||||
|
||||
set basePath to (do shell script "echo ~") & "/Library/Application Scripts/com.devon-technologies.think/Menu/Belegversand"
|
||||
set textScript to basePath & "/Helpers/scripts/_text_about.scpt"
|
||||
|
||||
|
||||
set textScriptPath to my helperScriptPath(aboutScriptName)
|
||||
|
||||
try
|
||||
set loadedScript to load script (POSIX file textScript as alias)
|
||||
set loadedScript to load script (POSIX file textScriptPath as alias)
|
||||
run loadedScript
|
||||
tell loadedScript
|
||||
set msgText to buildAboutText()
|
||||
end tell
|
||||
on error errMsg
|
||||
display dialog "Fehler beim Laden des About-Textes:" & return & errMsg buttons {"OK"}
|
||||
display dialog "Fehler beim Laden des About-Textes:" & return & textScriptPath & return & return & errMsg buttons {"OK"}
|
||||
return
|
||||
end try
|
||||
|
||||
set choice to button returned of (display dialog msgText buttons {"Diesen Dialog nicht mehr anzeigen", "Weiter"} default button "Weiter")
|
||||
|
||||
|
||||
set choice to button returned of (display dialog msgText buttons {"Diesen Dialog nicht mehr anzeigen", "Weiter"} default button "Weiter" with title windowTitle)
|
||||
|
||||
if choice is "Diesen Dialog nicht mehr anzeigen" then
|
||||
set newCfgText to ""
|
||||
repeat with oneLine in paragraphs of cfgText
|
||||
@@ -304,7 +241,7 @@ on showWelcomeDialogIfNeeded()
|
||||
set newCfgText to newCfgText & lineText & return
|
||||
end if
|
||||
end repeat
|
||||
|
||||
|
||||
tell application id "DNtp"
|
||||
try
|
||||
set plain text of configRecord to newCfgText
|
||||
@@ -315,21 +252,12 @@ on showWelcomeDialogIfNeeded()
|
||||
end if
|
||||
end showWelcomeDialogIfNeeded
|
||||
|
||||
|
||||
(*
|
||||
run
|
||||
---
|
||||
Haupteinstiegspunkt des START-Scripts.
|
||||
Ablauf:
|
||||
1. optionalen Startdialog anzeigen
|
||||
2. Setup-Script starten
|
||||
Wichtig:
|
||||
--------
|
||||
START.scpt delegiert die eigentliche Entscheidung an das Setup-Script.
|
||||
Dort wird geprüft:
|
||||
- existiert schon eine gültige Konfiguration?
|
||||
-> dann Hauptscript starten
|
||||
- oder muss erst eingerichtet werden?
|
||||
2. Setup-Script starten (entscheidet: Versand oder Einrichtung)
|
||||
*)
|
||||
on run
|
||||
with timeout of 3600 seconds
|
||||
|
||||
Reference in New Issue
Block a user