' Command.File_Tagger.vbs option explicit Dim AHKScript, cmd, filt, i, item, tagfolders ' Called by Directory Opus to initialize the script Function OnInit(data) data.name = "Command.File: Tagger" data.copyright = "(c) 2014 Kundal" data.version = "2.3.1" data.min_version = "11.8.2" data.log_prefix = "Tagger" data.default_enable = True If DOpus.language = "Deutsch" Then data.desc = "Bearbeiten und Anzeigen von Tags für Dateien und Ordner." Else data.desc = "Show and edit Tags for files and folders." End If Dim desc, url, uid data.config_desc = DOpus.Create.Map Set desc = data.config_desc url = "http://resource.dopus.com/viewtopic.php?f=35&t=21806" uid = "60751A57-7873-4B1F-BEB7-75DEFEB15E85" data.config.AHKexePath = "C:\Tools\AutoHotkey\AutoHotkey.exe" data.config.Position = "0,0" data.config.TagFolders = True data.config.Filter = "" If DOpus.language = "Deutsch" Then desc("AHKexePath") = "Hier den Pfad zu AutoHotkey.exe eingeben." desc("Filter") = "Liste von Dateiendungen die bearbeitet werden sollen. Beispiel: .jpg|.png|.docx" & vbCrLf &_ "Leer lassen, um alle Dateitypen bearbeiten zu können." desc("Language") = "Sprache auswählen, die in den Dialogen angezeigt wird" desc("Position") = "Definiert die Position des Dialogs auf dem Bildschirm in Pixel." & vbCrLf &_ "Breite, Höhe: ""0,0"" ist die linke obere Ecke." desc("TagFolders") = "Einstellen, ob auch Ordner mit Tags versehen werden sollen oder nicht." Else desc("AHKexePath") = "Set the path to AutoHotkey.exe." desc("Filter") = "List of file extensions you want to apply tags. Example: .jpg|.png|.docx" & vbCrLf &_ "Leave empty for all file types (default)." desc("Language") = "Choose the language of the dialogs" desc("Position") = "Adjust the position of the dialog box on screen in pixel." & vbCrLf &_ "Width, Height: ""0,0"" is upper left corner." desc("TagFolders") = "Set this to ""False"" if you don't want to apply tags to folders." End If Set cmd = data.AddCommand cmd.name = "Tagger" cmd.method = "OnTagger" cmd.label = "Tagger" If DOpus.language = "Deutsch" Then cmd.desc = "Bearbeiten und Anzeigen von Tags für Dateien und Ordner." Else cmd.desc = "Show and edit Tags for files and folders." End If End Function Function OnAboutScript(data) 'v0.1 Set cmd = DOpus.Create.Command() If DOpus.language = "Deutsch" Then Dim cmd : set cmd = DOpus.Create.Command() If (Not cmd.Commandlist("s").exists("ScriptAbout")) Then If (DOpus.Dlg.Request("Das Add-In 'ScriptWizard' wurde nicht gefunden."&vbCrLf&vbCrLf&_ "Installiere 'ScriptWizard' von [resource.dopus.com]."&vbCrLf&"Das Add-In aktiviert diesen Dialog und bietet ausserdem "&_ "einfaches updaten von Scripts und vieles mehr.","Ja, zum Download!|Abbrechen", "No About.. ", data.window) =1) Then _ cmd.RunCommand("http://resource.dopus.com/viewtopic.php?f=35&t=23179") Else cmd.SetModifier "runmode", "hide" cmd.RunCommand("ScriptAbout WIN="&data.window&" FILE="""&Script.File&"""") End If Else If (Not cmd.Commandlist("s").exists("ScriptAbout")) Then If (DOpus.Dlg.Request("The 'ScriptWizard' add-in has not been found."&vbCrLf&vbCrLf&_ "Install 'ScriptWizard' from [resource.dopus.com]."&vbCrLf&"The add-in enables this dialog and also offers "&_ "easy updating of scripts and many more.","Yes, take me there!|Cancel", "No About.. ", data.window)) Then _ cmd.RunCommand("http://resource.dopus.com/viewtopic.php?f=35&t=23179") Else cmd.RunCommand("ScriptAbout WIN="&data.window&" FILE="""&Script.File&"""") End If End If End Function ' Implement the Tagger command Function OnTagger(ClickData) Dim file, objFSO, objOutputFile, pos, text, validfiles Set cmd = ClickData.Func.Command tagfolders = Script.config.TagFolders filt = Script.config.Filter ' Create temporary AHK-Script AHKScript = DOpus.FSUtil.Resolve("/temp\AutoMoveTagger.ahk") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objOutputFile = objFSO.CreateTextFile(AHKScript) pos = Script.config.Position text = "#NoTrayIcon" & vbCrLf &_ "#SingleInstance force" & vbCrLf &_ "SendMode Input" & vbCrLf &_ "SetWinDelay, -1" & vbCrLf &_ "Loop" & vbCrLf &_ "{" & vbCrLf &_ "WinWait,Tagger - Directory Opus ahk_class #32770,,180" & vbCrLf &_ "if ErrorLevel" & vbCrLf &_ "break" & vbCrLf &_ "else" & vbCrLf &_ "WinMove," & pos & vbCrLf &_ "}" & vbCrLf &_ "ExitApp" objOutputFile.WriteLine text objOutputFile.Close ' Select the first item to be edited Set validfiles = DOpus.Create.Vector If Not filt = "" Then For Each file In cmd.sourcetab.files If InStr(filt, LCase(file.ext)) And Not file.ext = "" Then validfiles.push_back(file) End If Next If Not validfiles.count = 0 Then cmd.RunCommand("Set SHOWFILTERFILENAME *(" & filt & ")") End If Else For Each file In cmd.sourcetab.files validfiles.push_back(file) Next End If If tagfolders = False Then If validfiles.count = 0 Then Exit Function Else cmd.RunCommand("Set HIDEFILTERFOLDERS=""*""") End If End If If cmd.sourcetab.selected.count = 0 Then If tagfolders = True Then cmd.RunCommand("Select FIRST") cmd.sourcetab.Update cmd.AddFile cmd.sourcetab.selected(0) Else cmd.RunCommand("Select FIRST TYPE=files") cmd.sourcetab.Update cmd.AddFile cmd.sourcetab.selected_files(0) End If DOpus.vars.Set "Selected", cmd.sourcetab.selected Else If tagfolders = True Then DOpus.vars.Set "Selected", cmd.sourcetab.selected cmd.ClearFiles cmd.AddFile cmd.sourcetab.selected(0) Else If cmd.sourcetab.selected_files.count = 0 Then cmd.RunCommand("Select FIRST TYPE=files") cmd.sourcetab.Update cmd.AddFile cmd.sourcetab.selected(0) DOpus.vars.Set "Selected", cmd.sourcetab.selected_files Else DOpus.vars.Set "Selected", cmd.sourcetab.selected_files cmd.ClearFiles cmd.AddFile cmd.sourcetab.selected_files(0) End If End If End If Call Edit(ClickData) End Function ' Edit the selected item Sub Edit(ClickData) Dim AHKexePath, all, dlg, index, itemData, range, tag, tagString, vecTags Set item = cmd.sourcetab.selected(0) Set itemData = DOpus.FSUtil.GetMetadata(item) Set vecTags = DOpus.Create.Vector AHKexePath = Script.config.AHKexePath AHKScript = DOpus.FSUtil.Resolve("/temp\AutoMoveTagger.ahk") all = cmd.sourcetab.all.count ' Get the index of the selected item For i=0 To all -1 If cmd.sourcetab.all(i) = cmd.sourcetab.selected(0) Then index = i+1 End If Next ' Read already existing Tags If (itemData = "none") Then If DOpus.language = "Deutsch" Then tagString = "" Else tagString = "" End If Else tagString = "" End If For Each tag In itemData.tags vecTags.push_back(tag) Next vecTags.sort If vecTags.Count = 0 Then If DOpus.language = "Deutsch" Then tagString = "" Else tagString = "" End If Else For i = 0 To vecTags.Count -1 If (tagString <> "") Then tagString = tagString & "; " tagString = tagString & vecTags(i) Else tagString = vecTags(i) End If Next End If ' Run the AHK script cmd.RunCommand(AHKexePath & " " & """" & AHKScript &"""") ' Create and show the Dialog Box Set dlg = ClickData.Func.Dlg dlg.title = "Tagger" dlg.default = "+" dlg.max = 512 If DOpus.language = "Deutsch" Then dlg.message = "Datei (" & index & "/" & all & "): " & item.name & vbCrLf &_ "@ Vorhandene Tags (" & vecTags.count & "):" & vbCrLf & tagString dlg.buttons = "OK|Gehe Zurück|Ausgewählte taggen+Range von Dateien taggen+" &_ "Alle Dateien taggen|Tags löschen+Tags aus ausgewählten Dateien löschen+" &_ "Tags aus Range von Dateien löschen+Tags aus allen Dateien löschen|Abbrechen" Else dlg.message = "File (" & index & "/" & all & "): " & item.name & vbCrLf &_ "@ Existing Tags (" & vecTags.count & "):" & vbCrLf & tagString dlg.buttons = "OK|Go Back|Tag Selected+Tag Range+" &_ "Tag All|Clear+Clear Selected+" &_ "Clear Range+Clear All|Cancel" End If i = dlg.show ' Write/Clear Tags according to the choosen button option If i = 1 Then If Not (dlg.input = "" Or dlg.input = "+") Then cmd.RunCommand("SetAttr META ""tags:" & dlg.Input & """") End If Call EditNext(ClickData) End If If i = 2 Then If Not (dlg.input = "" Or dlg.input = "+") Then cmd.RunCommand("SetAttr META ""tags:" & dlg.Input & """") End If Call EditPrev(ClickData) End If If i = 3 Then If Not (dlg.input = "" Or dlg.input = "+") Then cmd.ClearFiles For Each item In DOpus.vars.Get("Selected") cmd.Addfile item Next cmd.RunCommand("SetAttr META ""tags:" & dlg.Input & """") End If Call EditFirst(ClickData) End If If i = 4 Then If Not (dlg.input = "" Or dlg.input = "+") Then cmd.ClearFiles If DOpus.language = "Deutsch" Then range = cmd.Dlg.GetString("Range definieren:",,,,"Tagger") Else range = cmd.Dlg.GetString("Define Range:",,,,"Tagger") End If If Not range = "" Then cmd.RunCommand("Select RANGE " & range) cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next cmd.RunCommand("SetAttr META ""tags:" & dlg.Input & """") End If End If Call EditFirst(ClickData) End If If i = 5 Then If Not (dlg.input = "" Or dlg.input = "+") Then If tagfolders = True Then cmd.RunCommand("Select All") Else cmd.RunCommand("Select ALLFILES") End If cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next End If cmd.RunCommand("SetAttr META ""tags:" & dlg.Input & """") Call EditFirst(ClickData) End If If i = 6 Then cmd.RunCommand("SetAttr META ""tags:") Call EditNext(ClickData) End If If i = 7 Then cmd.ClearFiles For Each item In DOpus.vars.Get("Selected") cmd.Addfile item Next cmd.RunCommand("SetAttr META ""tags:") Call EditFirst(ClickData) End If If i = 8 Then cmd.ClearFiles If DOpus.language = "Deutsch" Then range = cmd.Dlg.GetString("Range definieren:",,,,"Tagger") Else range = cmd.Dlg.GetString("Define Range:",,,,"Tagger") End If If Not range = "" Then cmd.RunCommand("Select RANGE " & range) cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next cmd.RunCommand("SetAttr META ""tags:") End If Call EditFirst(ClickData) End If If i = 9 Then If tagfolders = True Then cmd.RunCommand("Select All") Else cmd.RunCommand("Select ALLFILES") End If cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next cmd.RunCommand("SetAttr META ""tags:") Call EditFirst(ClickData) End If If i = 0 Then If Not filt = "" Then cmd.RunCommand("Set SHOWFILTERFILENAME *.*") End If If tagfolders = False Then cmd.RunCommand("Set HIDEFILTERFOLDERS=""""") End If Exit Sub End If End Sub ' Select the next item and add it to the script Sub EditNext(ClickData) Set cmd = ClickData.Func.Command tagfolders = Script.config.TagFolders cmd.ClearFiles If tagfolders = True Then cmd.RunCommand("Select NEXT") Else cmd.RunCommand("Select NEXT TYPE=files") End If cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next Call Edit(ClickData) End Sub ' Select the previous item and add it to the script Sub EditPrev(ClickData) Set cmd = ClickData.Func.Command tagfolders = Script.config.TagFolders cmd.ClearFiles If tagfolders = True Then cmd.RunCommand("Select PREV") Else cmd.RunCommand("Select PREV TYPE=files") End If cmd.sourcetab.Update For Each item In cmd.sourcetab.selected If item.selected = True Then cmd.Addfile item End If Next Call Edit(ClickData) End Sub ' Select the first selected item and add it to the script Sub EditFirst(ClickData) Set cmd = ClickData.Func.Command cmd.ClearFiles If tagfolders = True Then cmd.AddFile cmd.sourcetab.selected(0) Else cmd.AddFile cmd.sourcetab.selected_files(0) End If cmd.RunCommand "Select FROMSCRIPT DESELECTNOMATCH" Call Edit(ClickData) End Sub 'MD5 = "94a2bf979f4f0299079147f022d7988e"; DATE = "2016.09.24 - 10:17:34"