// Regex to remove unwanted articles. Edit as needed. var reFind = /^(The|A) (.+)$/; var reReplace = "$2"; // Called by Directory Opus to initialize the script function OnInit(initData) { initData.name = "Music tags sorted without articles"; initData.version = "1.1"; initData.copyright = "(c) 2020 Leo Davidson"; initData.url = "https://resource.dopus.com/t/music-tags-sorted-without-articles/36622"; initData.desc = "Columns like music Artist which sort ignoring articles (The, A)"; initData.default_enable = true; initData.min_version = "12.0"; } // Called to add columns to Opus function OnAddColumns(addColData) { AddColumn(addColData, "Artists", "Artists"); AddColumn(addColData, "AlbumArtist", "Album Artist"); AddColumn(addColData, "Album", "Album"); AddColumn(addColData, "Title", "Title"); } // Called to get the columns (all at once; multicol = true) function OnColumns(scriptColData) { var item = scriptColData.item; if (item.is_dir) return; var meta = item.metadata; if (meta != "audio") return; var audio = meta.audio; for (var e = new Enumerator(scriptColData.columns); !e.atEnd(); e.moveNext()) { var colName = e.item(); var colData = scriptColData.columns(colName); if (colName == "Artists") FillColumn(colData, audio.mp3artist); else if (colName == "AlbumArtist") FillColumn(colData, audio.mp3albumartist); else if (colName == "Album") FillColumn(colData, audio.mp3album); else if (colName == "Title") FillColumn(colData, audio.mp3title); } } // Internal helper function function AddColumn(addColData, colName, colLabel) { var col = addColData.AddColumn(); col.name = colName; col.method = "OnColumns"; col.label = colLabel; col.justify = "left"; col.autogroup = true; col.multicol = true; col.autorefresh = true; } // Internal helper function function FillColumn(colData, tag) { if (!tag || typeof(tag) != "string") return; var newTag = tag.replace(reFind, reReplace); colData.value = tag; // Display it as it was. // colData.value = newTag; // Display how it's sorted (for testing) colData.sort = newTag; // Sort it with the article removed. // TODO: Custom grouping if wanted for certain columns. }