function OnAddCommands(addCmdData) { var cmd = addCmdData.AddCommand(); cmd.name = 'EditQuickFilter'; cmd.method = 'OnEditQuickFilter'; cmd.desc = 'cmd.desc'; cmd.label = 'cmd.label'; cmd.template = 'headerkey/k'; cmd.hide = false; cmd.icon = 'script'; } function OnInit(initData) { initData.name = 'EditQuickFilter'; initData.version = '2024-03-15'; initData.url = 'https://resource.dopus.com/t/playground-using-the-evaluator-in-the-filter-bar/49510'; initData.desc = 'initData.desc'; initData.default_enable = true; initData.min_version = '13.3.4'; } function OnEditQuickFilter(scriptCmdData) { var cmd = scriptCmdData.func.command; var tab = scriptCmdData.func.sourcetab; var args = scriptCmdData.func.args; var dlg = scriptCmdData.func.Dlg(); var vec = DOpus.Create().Vector(); cmd.deselect = false; var evalMode = cmd.IsSet('Set QUICKFILTERFLAGS=evalon'); var headerkey = args.headerkey; if (!headerkey) headerkey = ''; if (headerkey.match(/(^\d.*|.*[$:/]+.*)/)) { var hk = 'Val("' + headerkey + '")'; var fromProperties = false; } else { var hk = headerkey; var fromProperties = true; } if (fromProperties) { for (var e = new Enumerator(tab.all); !e.atEnd(); e.moveNext()) { var item = e.item(); var md = GetMetadataFromHeaderkey(item, headerkey); if (!md) continue; if (DOpus.TypeOf(md) == 'object.Vector') { vec.append(md); } else { vec.push_back(String(md)); // might be a path object } } } else { cmd.SetFiles(tab.all); cmd.RunCommand('Rename' + ' PRESET=GetAnyColumn' + ' TO="{' + headerkey + '}"'); vec.assign(DOpus.vars.Get('columnValue').split('\n')); } vec.unique(); vec.sort(); var filterValue = ''; // no dropdown for unknown columns or those with too many different values if (vec.count > 0 && vec.count < 21) { var dlg2 = scriptCmdData.func.Dlg(); dlg2.message = 'Please select a filter value:'; dlg2.selection = 0; dlg2.choices = vec; // if (dlg2.Show()) filterValue = '"' + vec(dlg2.selection) + '"'; if (dlg2.Show()) filterValue = vec(dlg2.selection); } var newFilter = tab.quickfilter.filter; if (!evalMode && newFilter) newFilter = 'Match(name,"*' + newFilter + '*")'; if (newFilter) newFilter += ' && '; // if (hk) newFilter += hk + '==' + filterValue; if (hk) newFilter += hk + '=="' + filterValue + '"'; dlg.GetString('Edit QuickFilter:', newFilter); if (dlg.result == 0) return; // if (dlg.input == newFilter) return; var newFilter = (typeof dlg.input == 'string') ? dlg.input.replace(/"/g, '""') : ''; // DOpus.Output(newFilter); // cmd.RunCommand('Set QUICKFILTERCLEAR'); // shouldn't be needed, but without it the filter occasionally fails cmd.RunCommand('Set QUICKFILTERFLAGS=evalon QUICKFILTER="' + newFilter + '"'); } function GetMetadataFromHeaderkey(item, headerkey) { if (false); else if (headerkey == 'desc') return item.metadata.other.autodesc; else if (headerkey == 'keywords') { var itemTags = item.metadata.tags; return itemTags.count ? itemTags : null; } else if (headerkey == 'label') { var itemLabels = item.Labels(); return itemLabels.count ? itemLabels : null; } else if (headerkey == 'rating') { var rtg = item.metadata.other.rating; return rtg ? [1, 25, 50, 75, 99][rtg - 1] : null; } else if (headerkey == 'status') return '*'; else if (headerkey.substring(0, 3) == 'ext') return item.ext.substring(1); // // else if (headerkey == 'ext_m') return item.ext_m; // // else if (headerkey == 'extdir') return item.extdir; else if (headerkey == 'mp3artists') return item.metadata.audio.mp3artists; // // else if (headerkey == 'mp3artist') return item.metadata.image.mp3artist; // else if (headerkey == 'duration') return item.metadata.audio.duration; // else if (headerkey == 'duration') return item.metadata.video.duration; else if (headerkey == '35mmfocallength') return item.metadata.image['35mmfocallength']; else if (headerkey == 'access') return item.access; else if (headerkey == 'access_utc') return item.access_utc; else if (headerkey == 'accessed') return item.accessed; else if (headerkey == 'accesseddate') return item.accesseddate; else if (headerkey == 'accessedtime') return item.accessedtime; else if (headerkey == 'album') return item.metadata.audio.album; else if (headerkey == 'albumartist') return item.metadata.audio.albumartist; else if (headerkey == 'altitude') return item.metadata.image.altitude; else if (headerkey == 'aperture') return item.metadata.image.aperture; else if (headerkey == 'apertureval') return item.metadata.image.apertureval; else if (headerkey == 'artist') return item.metadata.audio.artist; else if (headerkey == 'artist') return item.metadata.video.artist; else if (headerkey == 'aspectratio') return item.metadata.image.aspectratio; else if (headerkey == 'aspectratio') return item.metadata.video.aspectratio; else if (headerkey == 'attr') return item.attr; else if (headerkey == 'attr') return item.metadata.other.attr; else if (headerkey == 'attr_text') return item.attr_text; else if (headerkey == 'audiocodec') return item.metadata.audio.audiocodec; else if (headerkey == 'author') return item.metadata.doc.author; else if (headerkey == 'authorurl') return item.metadata.audio.authorurl; else if (headerkey == 'authorurl') return item.metadata.video.authorurl; else if (headerkey == 'autodesc') return item.metadata.other.autodesc; else if (headerkey == 'availability') return item.metadata.other.availability; else if (headerkey == 'bpm') return item.metadata.audio.bpm; else if (headerkey == 'bpm') return item.metadata.video.bpm; else if (headerkey == 'broadcastdate') return item.metadata.video.broadcastdate; else if (headerkey == 'cameramake') return item.metadata.image.cameramake; else if (headerkey == 'cameramodel') return item.metadata.image.cameramodel; else if (headerkey == 'category') return item.metadata.doc.category; else if (headerkey == 'cdaterel') return item.cdaterel; else if (headerkey == 'channel') return item.metadata.video.channel; else if (headerkey == 'checked') return item.checked; else if (headerkey == 'colorspace') return item.metadata.image.colorspace; else if (headerkey == 'comments') return item.metadata.doc.comments; else if (headerkey == 'company') return item.metadata.doc.company; else if (headerkey == 'companyname') return item.metadata.doc.companyname; else if (headerkey == 'companyname') return item.metadata.exe.companyname; else if (headerkey == 'compilation') return item.metadata.audio.compilation; else if (headerkey == 'composers') return item.metadata.audio.composers; else if (headerkey == 'composers') return item.metadata.video.composers; else if (headerkey == 'conductor') return item.metadata.audio.conductor; else if (headerkey == 'conductor') return item.metadata.video.conductor; else if (headerkey == 'conductors') return item.metadata.audio.conductors; else if (headerkey == 'contentgroup') return item.metadata.audio.contentgroup; else if (headerkey == 'contentgroup') return item.metadata.video.contentgroup; else if (headerkey == 'contentstatus') return item.metadata.doc.contentstatus; else if (headerkey == 'contenttype') return item.metadata.doc.contenttype; else if (headerkey == 'contrast') return item.metadata.image.contrast; else if (headerkey == 'coords') return item.metadata.image.coords; else if (headerkey == 'copyright') return item.metadata.audio.copyright; else if (headerkey == 'copyright') return item.metadata.doc.copyright; else if (headerkey == 'copyright') return item.metadata.exe.copyright; else if (headerkey == 'copyright') return item.metadata.image.copyright; else if (headerkey == 'create') return item.create; else if (headerkey == 'create_utc') return item.create_utc; else if (headerkey == 'created') return item.created; else if (headerkey == 'createddate') return item.createddate; else if (headerkey == 'createdtime') return item.createdtime; else if (headerkey == 'creator') return item.metadata.doc.creator; else if (headerkey == 'credits') return item.metadata.video.credits; else if (headerkey == 'current') return item.current; else if (headerkey == 'datarate') return item.metadata.video.datarate; else if (headerkey == 'datedigitized') return item.metadata.image.datedigitized; else if (headerkey == 'daterel') return item.daterel; else if (headerkey == 'datetaken') return item.metadata.image.datetaken; else if (headerkey == 'digitalzoom') return item.metadata.image.digitalzoom; else if (headerkey == 'dimensions') return item.metadata.image.dimensions; else if (headerkey == 'dimensions') return item.metadata.video.dimensions; else if (headerkey == 'dircount') return item.metadata.other.dircount; else if (headerkey == 'dircounttotal') return item.metadata.other.dircounttotal; else if (headerkey == 'directors') return item.metadata.video.directors; else if (headerkey == 'discnumber') return item.metadata.audio.discnumber; else if (headerkey == 'disksize') return item.disksize; else if (headerkey == 'disksizeauto') return item.disksizeauto; else if (headerkey == 'disksizekb') return item.disksizekb; else if (headerkey == 'disksizerel') return item.disksizerel; else if (headerkey == 'display_name') return item.display_name; else if (headerkey == 'doccreateddate') return item.metadata.doc.doccreateddate; else if (headerkey == 'docedittime') return item.metadata.doc.docedittime; else if (headerkey == 'doclastsavedby') return item.metadata.doc.doclastsavedby; else if (headerkey == 'doclastsaveddate') return item.metadata.doc.doclastsaveddate; else if (headerkey == 'encoder') return item.metadata.audio.encoder; else if (headerkey == 'encoder') return item.metadata.video.encoder; else if (headerkey == 'encodingsoftware') return item.metadata.audio.encodingsoftware; else if (headerkey == 'encodingsoftware') return item.metadata.video.encodingsoftware; else if (headerkey == 'episodename') return item.metadata.video.episodename; else if (headerkey == 'exposurebias') return item.metadata.image.exposurebias; else if (headerkey == 'exposureprogram') return item.metadata.image.exposureprogram; else if (headerkey == 'exposuretime') return item.metadata.image.exposuretime; else if (headerkey == 'failed') return item.failed; else if (headerkey == 'fileattr') return item.fileattr; else if (headerkey == 'filecount') return item.metadata.other.filecount; else if (headerkey == 'filecounttotal') return item.metadata.other.filecounttotal; else if (headerkey == 'flash') return item.metadata.image.flash; else if (headerkey == 'fnumber') return item.metadata.image.fnumber; else if (headerkey == 'focallength') return item.metadata.image.focallength; else if (headerkey == 'foldercontents') return item.metadata.other.foldercontents; else if (headerkey == 'fontname') return item.metadata.other.fontname; else if (headerkey == 'fourcc') return item.metadata.video.fourcc; else if (headerkey == 'framerate') return item.metadata.video.framerate; else if (headerkey == 'fullpath') return item.fullpath; else if (headerkey == 'genre') return item.metadata.audio.genre; else if (headerkey == 'genre') return item.metadata.video.genre; else if (headerkey == 'got_size') return item.got_size; else if (headerkey == 'gpsaltitude') return item.metadata.image.gpsaltitude; else if (headerkey == 'gpslatitude') return item.metadata.image.gpslatitude; else if (headerkey == 'gpslongitude') return item.metadata.image.gpslongitude; else if (headerkey == 'group') return item.metadata.other.group; else if (headerkey == 'id') return item.id; else if (headerkey == 'imagedesc') return item.metadata.image.imagedesc; else if (headerkey == 'imagequality') return item.metadata.image.imagequality; else if (headerkey == 'index') return item.metadata.other.index; else if (headerkey == 'initialkey') return item.metadata.audio.initialkey; else if (headerkey == 'instructions') return item.metadata.image.instructions; else if (headerkey == 'ishd') return item.metadata.video.ishd; else if (headerkey == 'isorating') return item.metadata.image.isorating; else if (headerkey == 'isospeed') return item.metadata.image.isospeed; else if (headerkey == 'isrepeat') return item.metadata.video.isrepeat; else if (headerkey == 'language') return item.metadata.doc.language; else if (headerkey == 'lastsavedby') return item.metadata.doc.lastsavedby; else if (headerkey == 'latitude') return item.metadata.image.latitude; else if (headerkey == 'lensmake') return item.metadata.image.lensmake; else if (headerkey == 'lensmodel') return item.metadata.image.lensmodel; else if (headerkey == 'lenstype') return item.metadata.image.lenstype; else if (headerkey == 'longitude') return item.metadata.image.longitude; else if (headerkey == 'macromode') return item.metadata.image.macromode; else if (headerkey == 'manager') return item.metadata.doc.manager; else if (headerkey == 'md5sum') return item.metadata.other.md5sum; else if (headerkey == 'meteringmode') return item.metadata.image.meteringmode; else if (headerkey == 'moddesc') return item.metadata.exe.moddesc; else if (headerkey == 'modified') return item.modified; else if (headerkey == 'modifieddate') return item.modifieddate; else if (headerkey == 'modifiedtime') return item.modifiedtime; else if (headerkey == 'modify') return item.modify; else if (headerkey == 'modify_utc') return item.modify_utc; else if (headerkey == 'modversion') return item.metadata.exe.modversion; else if (headerkey == 'mood') return item.metadata.audio.mood; else if (headerkey == 'mood') return item.metadata.video.mood; else if (headerkey == 'mp3album') return item.metadata.audio.mp3album; else if (headerkey == 'mp3albumartist') return item.metadata.audio.mp3albumartist; else if (headerkey == 'mp3bitrate') return item.metadata.audio.mp3bitrate; else if (headerkey == 'mp3bitrate') return item.metadata.video.mp3bitrate; else if (headerkey == 'mp3bpm') return item.metadata.audio.mp3bpm; else if (headerkey == 'mp3comment') return item.metadata.audio.mp3comment; else if (headerkey == 'mp3disc') return item.metadata.audio.mp3disc; else if (headerkey == 'mp3disk') return item.metadata.audio.mp3disk; else if (headerkey == 'mp3drm') return item.metadata.audio.mp3drm; else if (headerkey == 'mp3encoder') return item.metadata.audio.mp3encoder; else if (headerkey == 'mp3encodingsoftware') return item.metadata.audio.mp3encodingsoftware; else if (headerkey == 'mp3genre') return item.metadata.audio.mp3genre; else if (headerkey == 'mp3info') return item.metadata.audio.mp3info; else if (headerkey == 'mp3mode') return item.metadata.audio.mp3mode; else if (headerkey == 'mp3mode') return item.metadata.video.mp3mode; else if (headerkey == 'mp3samplerate') return item.metadata.audio.mp3samplerate; else if (headerkey == 'mp3samplerate') return item.metadata.video.mp3samplerate; else if (headerkey == 'mp3songlength') return item.metadata.audio.mp3songlength; else if (headerkey == 'mp3songlength') return item.metadata.video.mp3songlength; else if (headerkey == 'mp3title') return item.metadata.audio.mp3title; else if (headerkey == 'mp3track') return item.metadata.audio.mp3track; else if (headerkey == 'mp3type') return item.metadata.audio.mp3type; else if (headerkey == 'mp3type') return item.metadata.video.mp3type; else if (headerkey == 'mp3year') return item.metadata.audio.mp3year; else if (headerkey == 'name') return item.name; else if (headerkey == 'name_stem') return item.name_stem; else if (headerkey == 'name_stem_m') return item.name_stem_m; else if (headerkey == 'nsdesc') return item.metadata.other.nsdesc; else if (headerkey == 'orientation') return item.metadata.image.orientation; else if (headerkey == 'origartist') return item.metadata.audio.origartist; else if (headerkey == 'owner') return item.metadata.other.owner; else if (headerkey == 'pages') return item.metadata.doc.pages; else if (headerkey == 'parent') return item.parent; else if (headerkey == 'parentlocation') return item.parentlocation; else if (headerkey == 'parentpath') return item.parentpath; else if (headerkey == 'path') return item.path; else if (headerkey == 'pathlen') return item.pathlen; else if (headerkey == 'pathrel') return item.pathrel; else if (headerkey == 'picdepth') return item.metadata.audio.picdepth; else if (headerkey == 'picdepth') return item.metadata.image.picdepth; else if (headerkey == 'picdepth') return item.metadata.video.picdepth; else if (headerkey == 'picheight') return item.metadata.image.picheight; else if (headerkey == 'picheight') return item.metadata.video.picheight; else if (headerkey == 'picphyssize') return item.metadata.image.picphyssize; else if (headerkey == 'picphyssize') return item.metadata.video.picphyssize; else if (headerkey == 'picphysx') return item.metadata.image.picphysx; else if (headerkey == 'picphysy') return item.metadata.image.picphysy; else if (headerkey == 'picresx') return item.metadata.image.picresx; else if (headerkey == 'picresy') return item.metadata.image.picresy; else if (headerkey == 'picsize') return item.metadata.image.picsize; else if (headerkey == 'picsize') return item.metadata.video.picsize; else if (headerkey == 'picwidth') return item.metadata.image.picwidth; else if (headerkey == 'picwidth') return item.metadata.video.picwidth; else if (headerkey == 'prodname') return item.metadata.exe.prodname; else if (headerkey == 'producer') return item.metadata.doc.producer; else if (headerkey == 'producers') return item.metadata.video.producers; else if (headerkey == 'prodversion') return item.metadata.exe.prodversion; else if (headerkey == 'publisher') return item.metadata.audio.publisher; else if (headerkey == 'publisher') return item.metadata.video.publisher; else if (headerkey == 'realpath') return item.realpath; else if (headerkey == 'recordingtime') return item.metadata.video.recordingtime; else if (headerkey == 'releasedate') return item.metadata.audio.releasedate; else if (headerkey == 'releasedate') return item.metadata.video.releasedate; else if (headerkey == 'rotation') return item.metadata.image.rotation; else if (headerkey == 'saturation') return item.metadata.image.saturation; else if (headerkey == 'scenecapturetype') return item.metadata.image.scenecapturetype; else if (headerkey == 'scenemode') return item.metadata.image.scenemode; else if (headerkey == 'selected') return item.selected; else if (headerkey == 'sharpness') return item.metadata.image.sharpness; else if (headerkey == 'shasum') return item.metadata.other.shasum; else if (headerkey == 'shootingtime') return item.metadata.image.shootingtime; else if (headerkey == 'shortname') return item.shortname; else if (headerkey == 'shortpath') return item.shortpath; else if (headerkey == 'shutterspeed') return item.metadata.image.shutterspeed; else if (headerkey == 'size') return item.size; else if (headerkey == 'sizeauto') return item.sizeauto; else if (headerkey == 'sizekb') return item.sizekb; else if (headerkey == 'sizerel') return item.sizerel; else if (headerkey == 'software') return item.metadata.image.software; else if (headerkey == 'station') return item.metadata.video.station; else if (headerkey == 'subject') return item.metadata.doc.subject; else if (headerkey == 'subject') return item.metadata.image.subject; else if (headerkey == 'subjectdistance') return item.metadata.image.subjectdistance; else if (headerkey == 'subtitle') return item.metadata.audio.subtitle; else if (headerkey == 'subtitle') return item.metadata.video.subtitle; else if (headerkey == 'target') return item.metadata.other.target; else if (headerkey == 'target_type') return item.metadata.other.target_type; else if (headerkey == 'thumbnail') return item.metadata.other.thumbnail; else if (headerkey == 'title') return item.metadata.doc.title; else if (headerkey == 'title') return item.metadata.image.title; else if (headerkey == 'track') return item.metadata.audio.track; else if (headerkey == 'type') return item.metadata.other.type; else if (headerkey == 'usercomment') return item.metadata.other.usercomment; else if (headerkey == 'userdesc') return item.metadata.other.userdesc; else if (headerkey == 'videocodec') return item.metadata.video.videocodec; else if (headerkey == 'whitebalance') return item.metadata.image.whitebalance; else if (headerkey == 'writers') return item.metadata.video.writers; else if (headerkey == 'year') return item.metadata.audio.year; else if (headerkey == 'year') return item.metadata.video.year; return null; }