function OnInit(initData) { initData.name = 'CopyMeta'; initData.version = '2022-09-03'; initData.copyright = 'CopyMeta'; initData.url = 'https://resource.dopus.com/t/script-command-copymeta-copy-metadata-between-files/42137'; initData.desc = 'Copy metadata from the first selected file to other files'; initData.default_enable = true; initData.min_version = '12.0'; } function OnAddCommands(addCmdData) { var cmd = addCmdData.AddCommand(); cmd.name = 'CopyMeta'; cmd.method = 'OnCopyMeta'; cmd.desc = 'CopyMeta'; cmd.label = 'CopyMeta'; cmd.template = 'createdate/s,lastmodifieddate/s,comment/s,rating/s,gps/s,tags/s,labels/s'; cmd.hide = false; cmd.icon = 'script'; } function OnCopyMeta(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; var dtab = scriptCmdData.func.desttab; var dlg = scriptCmdData.func.Dlg(); var args = scriptCmdData.func.args; cmd.deselect = false; if (tab.selected.count == 0) return; cmd.RunCommand('Set UTILITY=otherlog'); DOpus.ClearOutput(); var item = tab.selected(0); if (item.metadata == 'none') { DOpus.Output(item); DOpus.Output('... contains no metadata.'); return; } var all = scriptCmdData.func.argsmap.empty; var tmp; var cmdLine = ''; cmd.Clear(); if (all || args.createdate) { tmp = item.create.Format('D#yyyy-MM-dd T#HH:mm:ss'); cmdLine += ' "createdate:' + tmp + '"'; } if (all || args.lastmodifieddate) { tmp = item.modify.Format('D#yyyy-MM-dd T#HH:mm:ss'); cmdLine += ' "lastmodifieddate:' + tmp + '"'; } if (all || args.comment) { tmp = item.metadata.other.usercomment; if (typeof tmp == 'undefined') tmp = ''; cmdLine += ' "comment:' + tmp + '"'; } if (all || args.rating) { tmp = item.metadata.other.rating; if (typeof tmp != 'number') tmp = 0; cmdLine += ' rating:' + tmp; } if (all || args.gps) { tmp = item.metadata.image.latitude; if (typeof tmp != 'number') tmp = 0; cmdLine += ' gpslatitude:' + tmp; tmp = item.metadata.image.longitude; if (typeof tmp != 'number') tmp = 0; cmdLine += ' gpslongitude:' + tmp; tmp = item.metadata.image.altitude; if (typeof tmp != 'number') tmp = 0; cmdLine += ' gpsaltitude:' + tmp; } if (all || args.tags) { tmp = ''; if (item.metadata.tags.count > 0) { for (var e = new Enumerator(item.metadata.tags); !e.atEnd(); e.moveNext()) { tmp += e.item() + ';'; } tmp = tmp.slice(0, -1); } cmdLine += ' "tags:' + tmp + '"'; } if (cmdLine != '') { cmdLine = 'SetAttr META' + cmdLine; DOpus.Output(cmdLine); cmd.AddLine(cmdLine); } if (all || args.labels) { tmp = ''; var itemLabels = item.Labels(); if (itemLabels.count > 0) { for (var e = new Enumerator(itemLabels); !e.atEnd(); e.moveNext()) { tmp += e.item() + ','; } tmp = tmp.slice(0, -1); } var cmdLine = 'Properties SETLABEL="' + tmp + '"'; DOpus.Output(cmdLine); cmd.AddLine(cmdLine); } if (dtab && dtab.selected.count > 0) { cmd.SetFiles(dtab.selected); } else { cmd.RemoveFile(item); // We leave the file untouched whose metadata we copy } if (cmd.filecount == 0) { DOpus.Output(''); DOpus.Output('No copy targets selected.'); return; } // Outcomment the following line, if the dialog gets in the way if (dlg.Request('Copy metadata from\n\n' + item.name + '\n\nto ' + cmd.filecount + ' files?') == 0) return; cmd.Run(); DOpus.Output(''); DOpus.Output('Metadata copied from:'); DOpus.Output(item); DOpus.Output(''); DOpus.Output('To:'); for (var e = new Enumerator(cmd.files); !e.atEnd(); e.moveNext()) { DOpus.Output(e.item()); } }