diff --git a/picard/album.py b/picard/album.py
index 3820f40ca..291d4f708 100644
--- a/picard/album.py
+++ b/picard/album.py
@@ -459,7 +459,7 @@ class Album(DataObject, Item):
if not self.tracks:
return False
for track in self.tracks:
- if track.num_linked_files != 1:
+ if not track.is_complete():
return False
else:
return True
diff --git a/picard/const/__init__.py b/picard/const/__init__.py
index ae9608beb..89f7701bf 100644
--- a/picard/const/__init__.py
+++ b/picard/const/__init__.py
@@ -67,6 +67,10 @@ PICARD_URLS = {
# Various Artists MBID
VARIOUS_ARTISTS_ID = '89ad4ac3-39f7-470e-963a-56509c546377'
+# Special purpose track titles
+SILENCE_TRACK_TITLE = '[silence]'
+DATA_TRACK_TITLE = '[data track]'
+
# Release formats
from picard.const.attributes import MB_ATTRIBUTES
RELEASE_FORMATS = {}
diff --git a/picard/mbxml.py b/picard/mbxml.py
index 0368b808d..9cc758353 100644
--- a/picard/mbxml.py
+++ b/picard/mbxml.py
@@ -284,6 +284,8 @@ def recording_to_metadata(node, track):
add_isrcs_to_metadata(nodes[0], m)
elif name == 'user_rating':
m['~rating'] = nodes[0].text
+ elif name == 'video' and nodes[0].text == 'true':
+ m['~video'] = '1'
m['~length'] = format_time(m.length)
diff --git a/picard/resources.py b/picard/resources.py
index 04036569e..7b5c03bfd 100644
--- a/picard/resources.py
+++ b/picard/resources.py
@@ -2,8 +2,8 @@
# Resource object code
#
-# Created: ven. juil. 18 23:11:29 2014
-# by: The Resource Compiler for PyQt (Qt v4.8.2)
+# Created: Mo. Jan 26 23:13:10 2015
+# by: The Resource Compiler for PyQt (Qt v4.8.6)
#
# WARNING! All changes made in this file will be lost!
@@ -36,6 +36,39 @@ qt_resource_data = "\
\x9b\x3c\x71\x95\x28\x7f\xf3\x9d\xed\x85\x7d\x96\xfa\xc9\xc9\x79\
\xf7\x20\x68\x4d\x1f\x7a\xed\x1f\x2d\x49\x58\xba\x4e\x19\x3c\x81\
\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xec\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x69\x49\x44\
+\x41\x54\x38\x8d\x8d\xd3\xbb\x6a\xd4\x51\x10\x06\xf0\xdf\x97\xb8\
+\x10\x04\xb3\xc6\x4b\x20\x44\xb0\xd3\xe0\x05\x2f\xa5\x12\x10\x0b\
+\x09\x58\x49\x34\x9d\x68\xe1\x13\x58\xfb\x1e\x92\x36\x2f\x60\xa1\
+\x68\x6b\xa7\x45\x0a\xd1\x66\x0b\x31\x82\x22\x42\x1a\x6f\x88\xa8\
+\x78\x2c\x76\xd4\xdd\xbf\x2c\x3a\x30\xcc\x99\xdb\x77\x86\xef\xcc\
+\xd1\x5a\x83\x0d\xb4\x7f\xe8\x26\x2e\xb5\xd6\x8c\xaa\x02\x18\xe0\
+\x06\x96\x26\xe8\x0b\xac\xe3\x33\xae\x8d\x02\x4c\xf9\x23\xaf\xf1\
+\x09\xb3\xad\xb5\x01\x96\xca\xbe\xc3\x34\xee\xe0\x32\x6e\x27\xb9\
+\xfa\xab\x69\x14\x00\x8e\xe2\x70\x92\x3e\x66\x2a\x76\xbc\x00\xe6\
+\x5b\x6b\xf7\xb1\x86\xf5\x24\xe7\x60\x47\x07\x60\x16\xdf\xf1\x0d\
+\xbd\x24\xbd\x8a\x35\x9c\x4f\xb2\xa7\xea\x1e\xe1\x26\x1e\x76\x01\
+\xee\x61\x11\x3f\xf0\x0a\x87\x70\x17\x47\x70\x16\x2b\x55\xd7\xaf\
+\xba\x31\x12\x57\xd0\xc3\xde\x8a\x2d\x94\x9d\xc2\x62\x9d\xe7\xcb\
+\x5f\xc1\xa0\x4b\x22\xec\xc7\xc5\x3a\x5f\x2f\x7b\x01\x27\x93\xcc\
+\x61\x15\xbb\x46\x1b\xc6\x00\x5a\x6b\x6f\xf0\xb5\xdc\xad\xb2\x3d\
+\xec\xac\xb1\xb7\x74\x64\x0c\x20\xc9\x09\x4c\x27\xd9\x57\xf6\x14\
+\x9e\xe1\xa3\xe1\x33\xf7\x8b\x8f\xb1\x5b\x7f\x73\xd0\xdd\xb2\x49\
+\x3a\x91\x83\x24\xcb\x49\xd6\x32\x94\x5b\x15\x3b\x93\x64\x35\xc9\
+\x4c\x92\x2b\x49\x96\x47\x7b\xba\xcf\xb8\xbb\xc6\x9c\xc7\xf3\x8a\
+\xcd\x55\xdd\xe9\xca\x7f\x31\xdc\x93\xbf\x39\xc0\x36\xde\xe3\x03\
+\x16\x8a\x83\xb7\x08\x1e\x57\x6e\x7b\xd2\x04\x07\xf0\xd2\x70\xf7\
+\x0f\xe2\xc1\x48\xee\x89\xe1\x52\x3d\x2d\xff\x58\x97\xc4\xff\xf9\
+\xce\x5d\xdd\x68\xad\xf9\x09\xc0\x15\xad\x77\x52\xd4\x5b\xb1\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x40\x8c\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -1201,6 +1234,33 @@ qt_resource_data = "\
\x01\x03\x83\x2f\x12\x7b\x33\x71\x56\x8c\x2a\xc0\x12\xd4\xb0\xd0\
\x43\x06\x8c\x14\xc7\x26\x00\xbe\x5b\x05\xd6\xa8\x8e\xff\x70\x00\
\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x84\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x01\x49\x44\
+\x41\x54\x38\x8d\x8d\xd2\xbf\x2e\x83\x61\x14\xc7\xf1\xcf\xa1\x0c\
+\x22\x12\x8b\x84\x45\x68\x37\x4b\x17\x37\x20\x8d\x98\x48\xcc\x46\
+\x26\x37\xe0\x0a\x8c\x26\x2e\xa4\x83\x8d\xc4\x68\x63\x30\x35\x92\
+\x86\x20\x31\x11\x89\x8d\x1c\x83\x36\x79\x55\xdf\xb7\xfd\x25\x27\
+\x4f\xce\xc9\xf3\xfb\x9e\xf3\xfc\x89\xcc\x34\xae\x22\xa2\x8e\x9d\
+\x5e\xac\xa1\x55\x1b\x61\x08\xac\x0f\x98\x8a\x6a\x0e\x05\x44\xc4\
+\x34\x4e\xb0\x8b\xc5\xaa\x26\x65\x13\xec\xe3\xb0\xca\xd8\xd7\x44\
+\x49\x7d\x6e\x1c\x73\x15\xa0\x4c\x8f\x38\x45\x0b\xf7\x94\x1f\xa1\
+\xa8\x5b\xb4\xd1\xce\xcc\x9b\x7e\x31\x22\xbe\x47\x01\x3a\xd8\xcc\
+\xcc\x87\x2a\x7a\xd5\x11\xde\x46\x99\x47\x01\xfe\x29\x22\xa6\x22\
+\xe2\xcf\xb3\x8e\x05\x88\x88\x46\x44\x5c\xe2\x03\x2f\x11\xf1\x8a\
+\x65\xe4\x38\x97\x08\xc7\xd8\x28\xe4\x0b\xbd\xf5\xab\xd6\xeb\xb0\
+\x8a\x6d\x34\xf1\x8c\xc6\x00\xe0\xdc\xef\xaf\x9c\x2c\xd4\x9e\x70\
+\x01\x75\x7c\x22\x07\xe2\x3a\x33\xf5\x03\x2b\xd8\xc3\x11\xb6\x30\
+\x9b\x99\x6a\x58\xc2\xcc\x90\xb1\x3b\xc5\x24\x33\xbb\xe8\xfe\xdb\
+\xd5\xa3\x1f\xe0\x0a\xef\xb8\xc3\x19\xe6\x8b\x13\x94\xc5\x0f\x6c\
+\x71\x60\x2c\xa4\xe9\xa5\x5d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
\x00\x00\x06\xf4\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -1373,35 +1433,6 @@ qt_resource_data = "\
\x52\x91\xd8\xb3\xa9\xe4\x06\xaa\xfb\x62\x36\x86\x02\x46\x8a\x63\
\x13\x00\x29\x51\x09\x03\x00\x20\x62\x2f\x00\x00\x00\x00\x49\x45\
\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x01\xa3\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
-\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
-\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
-\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
-\xd5\x04\x1c\x0b\x36\x39\xbb\x24\x9f\x47\x00\x00\x01\x30\x49\x44\
-\x41\x54\x38\xcb\x63\x60\xa0\x10\x30\x62\x13\x2c\xad\x35\xed\x67\
-\x60\xfa\x5a\x40\x48\x33\x13\x13\xc7\x5e\x16\xec\x32\x5f\x0b\x82\
-\x83\x02\x09\xda\xbe\x76\xdd\x7a\x67\x26\x6c\x12\xff\xff\x33\x7e\
-\x23\xd6\x0b\x2c\x04\x6c\xc0\x2a\xfe\xff\x1f\xc3\xbf\x90\x90\x40\
-\x26\x82\x06\x30\x30\x30\x30\x74\x37\x5e\xc3\x08\xa7\x92\x3a\xed\
-\xef\x0c\x0c\x0c\x1c\x0c\x0c\x0c\x0c\x4c\x64\x06\xfe\x3f\x78\x70\
-\x61\x8d\x1a\xc6\xff\x5c\x78\xa3\x0e\x49\x9e\x89\xd2\x74\x40\x56\
-\x2c\x20\xcb\xb3\x30\x30\x30\x30\x64\x15\x5a\x48\x32\xb3\xfc\x89\
-\xfd\xf1\xfd\xbb\x93\x80\xf0\x7f\x77\x06\x86\xff\x0c\xbf\xfe\x7c\
-\x86\x6b\xc0\x27\xcf\xc2\xc0\xc0\xc0\xf0\xf9\xd3\xa7\x3a\x35\x2d\
-\xb6\x0c\x13\x33\x55\x06\x7e\x5e\x75\x06\x7e\x6e\x65\x86\x7b\x4f\
-\xd7\x32\x88\x89\x73\x32\x10\x92\x67\x61\x60\x60\x60\x90\x90\x61\
-\xc8\xb0\xb7\xb7\x66\xf8\xf7\xef\x0f\x03\x33\x33\x3b\xc3\xdd\x27\
-\x6b\x18\x2e\x9d\x7f\xfd\xff\xcd\xeb\xff\x5b\xf1\xc9\xbf\x7a\xc1\
-\xd4\x00\x4f\x07\xf7\x1e\x9e\x67\xe0\xe0\x60\x61\xe0\xe7\x7b\xcb\
-\x70\xf3\xfa\x5b\x86\x77\x6f\xff\x5e\x3c\x7d\xec\x43\x17\x3e\xf9\
-\xb3\x27\xdf\xee\x87\x27\x92\xc4\x4c\xb5\xdb\x22\x62\x2c\x2a\x0c\
-\x0c\x0c\x0c\xb7\xaf\xff\x5c\xb4\x61\xd5\xdd\x78\xe4\x80\x43\x97\
-\x97\x57\x94\xa8\x98\xd8\x79\xf4\x39\xa5\xb1\xc8\x00\x00\xbd\x75\
-\x89\xf9\x6f\x29\x4a\x9e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
-\x60\x82\
\x00\x00\x00\xbc\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -1501,6 +1532,33 @@ qt_resource_data = "\
\x23\xb1\x27\x12\xe7\x8b\x21\xa1\x00\xcd\x9b\x13\x31\x14\x30\x52\
\x1c\x9b\x00\xca\x15\x09\x34\x69\x85\x73\x4d\x00\x00\x00\x00\x49\
\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x8a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x07\x49\x44\
+\x41\x54\x38\x8d\xad\xd3\x31\x4b\x83\x41\x0c\xc6\xf1\x5f\xb4\x20\
+\x88\x42\xb1\x3a\x08\x05\x07\x71\x55\xa1\x93\x83\x7b\x11\x97\x22\
+\xee\x82\xa8\xbb\x83\x1f\xc3\x55\xd0\xb1\x83\x83\xb8\xfa\x11\x9c\
+\x3b\x76\x71\x10\x1d\xc5\x49\x2c\x82\x72\x0e\xbd\xc2\x4b\xf1\xad\
+\x2d\x1a\x38\x2e\x90\xe4\xb9\xfc\x73\x24\x52\x4a\xfe\x62\x81\x5d\
+\x1c\x61\x66\xc2\xda\x0f\x5c\x05\x5e\x70\x89\x47\x9c\xe3\x0e\xb7\
+\x25\x45\x7b\xd8\xc1\x29\x56\x70\x0c\x09\xd5\x8c\xd2\x41\x33\xa5\
+\xe4\xa7\x83\x26\x3a\xd9\xaf\x22\x55\xb2\x72\x3b\x22\x9e\xb1\x3e\
+\x46\xeb\xeb\x11\x71\x81\x3a\x4c\x4d\x02\x5d\x66\xff\x82\x70\x16\
+\x11\x8f\x58\xc3\x61\x44\x54\x4b\x1e\xdb\xc3\x5a\x44\x9c\xe8\x0f\
+\x51\xa5\x10\x78\xc5\x2c\xb6\x31\x5f\x22\xb0\x99\x73\x0e\xb0\x50\
+\x44\x58\xce\x6d\x75\xd1\x1a\x81\xd0\x42\x37\xfb\xcb\x45\x84\xad\
+\x88\x78\x40\x0d\xbd\x11\xf3\xea\xa1\x16\x11\x1b\x58\x2d\x22\x5c\
+\xe3\x33\xb7\xf7\x9b\x2d\xe2\x7e\x50\x3b\xf8\xc6\x06\x96\xf0\x34\
+\x86\xc0\x53\xce\x6d\x0c\x04\x86\xb7\xa9\x3e\xa2\x78\x38\x96\x02\
+\x6d\xec\xe3\x4b\x1f\xe1\x0b\x6f\x25\x02\x73\x98\xc6\x7b\xbe\x6f\
+\xe2\xaf\xeb\xfc\x0d\xa4\xae\x7b\x37\x08\x76\x75\x73\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x00\xca\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -9643,6 +9701,10 @@ qt_resource_name = "\
\x00\xe0\x1d\x47\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x70\x00\x65\x00\x6e\x00\x64\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x08\x53\x8e\xe7\
+\x00\x74\
+\x00\x72\x00\x61\x00\x63\x00\x6b\x00\x2d\x00\x64\x00\x61\x00\x74\x00\x61\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x12\
\x08\xc2\x5a\x27\
\x00\x43\
@@ -9669,6 +9731,10 @@ qt_resource_name = "\
\x00\x36\x9b\x62\
\x00\x33\
\x00\x32\x00\x78\x00\x33\x00\x32\
+\x00\x0f\
+\x05\xff\xc8\x27\
+\x00\x74\
+\x00\x72\x00\x61\x00\x63\x00\x6b\x00\x2d\x00\x61\x00\x75\x00\x64\x00\x69\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x05\
\x00\x37\xfb\x78\
\x00\x34\
@@ -9695,10 +9761,6 @@ qt_resource_name = "\
\x00\x6d\
\x00\x61\x00\x74\x00\x63\x00\x68\x00\x2d\x00\x70\x00\x65\x00\x6e\x00\x64\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x36\x00\x30\x00\x2e\
\x00\x70\x00\x6e\x00\x67\
-\x00\x08\
-\x06\xa8\x59\xe7\
-\x00\x6e\
-\x00\x6f\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x05\
\x00\x35\x9b\x52\
\x00\x32\
@@ -9725,6 +9787,10 @@ qt_resource_name = "\
\x00\x6d\
\x00\x61\x00\x74\x00\x63\x00\x68\x00\x2d\x00\x70\x00\x65\x00\x6e\x00\x64\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x38\x00\x30\x00\x2e\
\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x05\xbf\x20\xa7\
+\x00\x74\
+\x00\x72\x00\x61\x00\x63\x00\x6b\x00\x2d\x00\x76\x00\x69\x00\x64\x00\x65\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x05\
\x00\x34\xdb\x46\
\x00\x31\
@@ -9871,75 +9937,77 @@ qt_resource_name = "\
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x02\
-\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x57\x19\
-\x00\x00\x02\x8c\x00\x02\x00\x00\x00\x12\x00\x00\x00\x34\
-\x00\x00\x01\xce\x00\x02\x00\x00\x00\x13\x00\x00\x00\x21\
-\x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\
-\x00\x00\x00\xe0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\
-\x00\x00\x00\xf0\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1e\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\x02\
+\x00\x00\x02\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x58\xea\
+\x00\x00\x02\xe0\x00\x02\x00\x00\x00\x12\x00\x00\x00\x36\
+\x00\x00\x01\xfe\x00\x02\x00\x00\x00\x13\x00\x00\x00\x23\
+\x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x22\
+\x00\x00\x01\x02\x00\x02\x00\x00\x00\x01\x00\x00\x00\x21\
+\x00\x00\x01\x36\x00\x02\x00\x00\x00\x01\x00\x00\x00\x20\
\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x02\xde\x00\x00\x00\x00\x00\x01\x00\x00\x5c\xbd\
-\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xea\
-\x00\x00\x00\x72\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1d\
-\x00\x00\x00\xcc\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1c\
-\x00\x00\x01\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x53\xf6\
-\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x49\x37\
+\x00\x00\x03\x32\x00\x00\x00\x00\x00\x01\x00\x00\x60\x1c\
+\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x5f\x49\
+\x00\x00\x00\x94\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1f\
+\x00\x00\x00\xee\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1e\
+\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x5c\xed\
+\x00\x00\x01\x12\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xd7\
+\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x27\
\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x01\x81\
-\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x5a\x50\
-\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x42\x11\
-\x00\x00\x01\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x56\x5d\
-\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x53\x2b\
-\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x51\x9f\
-\x00\x00\x02\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x72\
-\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x49\xe7\
-\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x1c\
-\x00\x00\x02\x40\x00\x00\x00\x00\x00\x01\x00\x00\x59\x7e\
-\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x55\x9d\
-\x00\x00\x01\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x52\x58\
-\x00\x00\x01\x20\x00\x00\x00\x00\x00\x01\x00\x00\x50\xdf\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x01\x07\x26\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x01\xf2\x73\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x00\xe9\x46\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x00\xfc\xd9\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x02\x49\xb0\
-\x00\x00\x05\xde\x00\x00\x00\x00\x00\x01\x00\x00\xdb\xe2\
-\x00\x00\x04\x2c\x00\x00\x00\x00\x00\x01\x00\x00\xac\xba\
-\x00\x00\x06\x54\x00\x00\x00\x00\x00\x01\x00\x00\x9b\x25\
-\x00\x00\x06\xd8\x00\x00\x00\x00\x00\x01\x00\x00\xbf\xae\
-\x00\x00\x05\x5e\x00\x00\x00\x00\x00\x01\x00\x00\xcc\xd9\
-\x00\x00\x07\x02\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x85\
-\x00\x00\x06\x28\x00\x00\x00\x00\x00\x01\x00\x00\x92\xa2\
-\x00\x00\x03\x60\x00\x00\x00\x00\x00\x01\x00\x00\x95\xfa\
-\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x9d\xfa\
-\x00\x00\x06\x78\x00\x00\x00\x00\x00\x01\x00\x00\xa3\x90\
-\x00\x00\x07\x52\x00\x00\x00\x00\x00\x01\x00\x00\xe1\x57\
-\x00\x00\x04\x54\x00\x00\x00\x00\x00\x01\x00\x00\xb0\xa7\
-\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00\x97\xfe\
-\x00\x00\x04\xce\x00\x00\x00\x00\x00\x01\x00\x00\xc8\xd4\
-\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\xe4\x6d\
-\x00\x00\x04\x9a\x00\x00\x00\x00\x00\x01\x00\x00\xba\x49\
-\x00\x00\x06\xaa\x00\x00\x00\x00\x00\x01\x00\x00\xb6\x1b\
-\x00\x00\x07\x2a\x00\x00\x00\x00\x00\x01\x00\x00\xd6\xeb\
-\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x00\xd2\x69\
-\x00\x00\x03\xae\x00\x00\x00\x00\x00\x01\x00\x00\x64\x3b\
-\x00\x00\x05\xde\x00\x00\x00\x00\x00\x01\x00\x00\x8c\xb0\
-\x00\x00\x04\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x2b\
-\x00\x00\x05\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x82\x3c\
-\x00\x00\x03\x60\x00\x00\x00\x00\x00\x01\x00\x00\x60\x89\
-\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x00\x85\xf2\
-\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x79\xe2\
-\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x63\
-\x00\x00\x03\xde\x00\x00\x00\x00\x00\x01\x00\x00\x66\xea\
-\x00\x00\x04\x54\x00\x00\x00\x00\x00\x01\x00\x00\x70\x48\
-\x00\x00\x03\x94\x00\x00\x00\x00\x00\x01\x00\x00\x62\x45\
-\x00\x00\x05\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x80\x07\
-\x00\x00\x04\xce\x00\x00\x00\x00\x00\x01\x00\x00\x77\x58\
-\x00\x00\x03\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x39\
-\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x90\x57\
-\x00\x00\x04\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x74\x04\
-\x00\x00\x05\x16\x00\x00\x00\x00\x00\x01\x00\x00\x7d\x76\
-\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x89\x1d\
+\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x71\
+\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x5c\x21\
+\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x44\x01\
+\x00\x00\x02\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x58\x2e\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x56\xa3\
+\x00\x00\x01\x84\x00\x00\x00\x00\x00\x01\x00\x00\x55\x17\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x60\xd1\
+\x00\x00\x01\x46\x00\x00\x00\x00\x00\x01\x00\x00\x4d\x5f\
+\x00\x00\x02\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x7b\
+\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x4f\
+\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x57\x6e\
+\x00\x00\x01\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x55\xd0\
+\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x54\x57\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x01\x0a\x85\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x01\xf5\xd2\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x00\xec\xa5\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x01\x00\x38\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x02\x4d\x0f\
+\x00\x00\x06\x32\x00\x00\x00\x00\x00\x01\x00\x00\xdf\x41\
+\x00\x00\x04\x80\x00\x00\x00\x00\x00\x01\x00\x00\xb0\x19\
+\x00\x00\x06\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x9e\x84\
+\x00\x00\x07\x2c\x00\x00\x00\x00\x00\x01\x00\x00\xc3\x0d\
+\x00\x00\x05\xb2\x00\x00\x00\x00\x00\x01\x00\x00\xd0\x38\
+\x00\x00\x07\x56\x00\x00\x00\x00\x00\x01\x00\x00\xc5\xe4\
+\x00\x00\x06\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x96\x01\
+\x00\x00\x03\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x99\x59\
+\x00\x00\x04\x4c\x00\x00\x00\x00\x00\x01\x00\x00\xa1\x59\
+\x00\x00\x06\xcc\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xef\
+\x00\x00\x07\xa6\x00\x00\x00\x00\x00\x01\x00\x00\xe4\xb6\
+\x00\x00\x04\xa8\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x06\
+\x00\x00\x03\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x9b\x5d\
+\x00\x00\x05\x22\x00\x00\x00\x00\x00\x01\x00\x00\xcc\x33\
+\x00\x00\x06\x5a\x00\x00\x00\x00\x00\x01\x00\x00\xe7\xcc\
+\x00\x00\x04\xee\x00\x00\x00\x00\x00\x01\x00\x00\xbd\xa8\
+\x00\x00\x06\xfe\x00\x00\x00\x00\x00\x01\x00\x00\xb9\x7a\
+\x00\x00\x07\x7e\x00\x00\x00\x00\x00\x01\x00\x00\xda\x4a\
+\x00\x00\x06\x0a\x00\x00\x00\x00\x00\x01\x00\x00\xd5\xc8\
+\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00\x67\x9a\
+\x00\x00\x06\x32\x00\x00\x00\x00\x00\x01\x00\x00\x90\x0f\
+\x00\x00\x04\x80\x00\x00\x00\x00\x00\x01\x00\x00\x71\x8a\
+\x00\x00\x05\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x85\x9b\
+\x00\x00\x03\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x63\xe8\
+\x00\x00\x05\xec\x00\x00\x00\x00\x00\x01\x00\x00\x89\x51\
+\x00\x00\x05\x44\x00\x00\x00\x00\x00\x01\x00\x00\x7d\x41\
+\x00\x00\x04\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x6d\xc2\
+\x00\x00\x04\x32\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x49\
+\x00\x00\x04\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x73\xa7\
+\x00\x00\x03\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x65\xa4\
+\x00\x00\x05\x90\x00\x00\x00\x00\x00\x01\x00\x00\x83\x66\
+\x00\x00\x05\x22\x00\x00\x00\x00\x00\x01\x00\x00\x7a\xb7\
+\x00\x00\x03\x80\x00\x00\x00\x00\x00\x01\x00\x00\x61\x98\
+\x00\x00\x06\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x93\xb6\
+\x00\x00\x04\xee\x00\x00\x00\x00\x00\x01\x00\x00\x77\x63\
+\x00\x00\x05\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x80\xd5\
+\x00\x00\x06\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x8c\x7c\
"
def qInitResources():
diff --git a/picard/script.py b/picard/script.py
index 6c5da9ef4..e4cb1c887 100644
--- a/picard/script.py
+++ b/picard/script.py
@@ -596,9 +596,15 @@ def func_performer(parser, pattern="", join=", "):
def func_matchedtracks(parser, arg):
- if parser.file:
- if parser.file.parent:
- return str(parser.file.parent.album.get_num_matched_tracks())
+ if parser.file and parser.file.parent:
+ return str(parser.file.parent.album.get_num_matched_tracks())
+ return "0"
+
+
+def func_is_complete(parser):
+ if (parser.file and parser.file.parent
+ and parser.file.parent.album.is_complete()):
+ return "1"
return "0"
@@ -758,6 +764,7 @@ register_script_function(func_copymerge, "copymerge")
register_script_function(func_len, "len")
register_script_function(func_performer, "performer")
register_script_function(func_matchedtracks, "matchedtracks")
+register_script_function(func_is_complete, "is_complete")
register_script_function(func_firstalphachar, "firstalphachar")
register_script_function(func_initials, "initials")
register_script_function(func_firstwords, "firstwords")
diff --git a/picard/track.py b/picard/track.py
index 0e660a0ab..cfb14d5d6 100644
--- a/picard/track.py
+++ b/picard/track.py
@@ -25,7 +25,7 @@ from picard.dataobj import DataObject
from picard.util.textencoding import asciipunct
from picard.mbxml import recording_to_metadata
from picard.script import ScriptParser
-from picard.const import VARIOUS_ARTISTS_ID
+from picard.const import VARIOUS_ARTISTS_ID, SILENCE_TRACK_TITLE, DATA_TRACK_TITLE
from picard.ui.item import Item
import traceback
@@ -113,6 +113,29 @@ class Track(DataObject, Item):
return u"%s%s %s" % (prefix, m['tracknumber'].zfill(2), m['title'])
return m[column]
+ def is_video(self):
+ return self.metadata['~video'] == '1'
+
+ def is_pregap(self):
+ return self.metadata['~pregap'] == '1'
+
+ def is_data(self):
+ return self.metadata['~datatrack'] == '1'
+
+ def is_silence(self):
+ return self.metadata['~silence'] == '1'
+
+ def is_complete(self):
+ return self.ignored_for_completeness() or self.num_linked_files == 1
+
+ def ignored_for_completeness(self):
+ if (config.setting['completeness_ignore_videos'] and self.is_video()) \
+ or (config.setting['completeness_ignore_pregap'] and self.is_pregap()) \
+ or (config.setting['completeness_ignore_data'] and self.is_data()) \
+ or (config.setting['completeness_ignore_silence'] and self.is_silence()):
+ return True
+ return False
+
def _customize_metadata(self):
tm = self.metadata
@@ -120,6 +143,12 @@ class Track(DataObject, Item):
if tm['musicbrainz_artistid'] == VARIOUS_ARTISTS_ID:
tm['artistsort'] = tm['artist'] = config.setting['va_name']
+ if tm['title'] == DATA_TRACK_TITLE:
+ tm['~datatrack'] = '1'
+
+ if tm['title'] == SILENCE_TRACK_TITLE:
+ tm['~silence'] = '1'
+
if config.setting['folksonomy_tags']:
self._convert_folksonomy_tags_to_genre()
diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py
index 39f7ff8ea..dcf7521ec 100644
--- a/picard/ui/itemviews.py
+++ b/picard/ui/itemviews.py
@@ -109,6 +109,8 @@ class MainPanel(QtGui.QSplitter):
TreeItem.window = window
TreeItem.base_color = self.palette().base().color()
TreeItem.text_color = self.palette().text().color()
+ TreeItem.text_color_secondary = self.palette() \
+ .brush(QtGui.QPalette.Disabled, QtGui.QPalette.Text).color()
TrackItem.track_colors = {
File.NORMAL: config.setting["color_saved"],
File.CHANGED: TreeItem.text_color,
@@ -141,7 +143,9 @@ class MainPanel(QtGui.QSplitter):
AlbumItem.icon_cd_saved_modified = icontheme.lookup('media-optical-saved-modified',
icontheme.ICON_SIZE_MENU)
AlbumItem.icon_error = icontheme.lookup('media-optical-error', icontheme.ICON_SIZE_MENU)
- TrackItem.icon_note = QtGui.QIcon(":/images/note.png")
+ TrackItem.icon_audio = QtGui.QIcon(":/images/track-audio.png")
+ TrackItem.icon_video = QtGui.QIcon(":/images/track-video.png")
+ TrackItem.icon_data = QtGui.QIcon(":/images/track-data.png")
FileItem.icon_file = QtGui.QIcon(":/images/file.png")
FileItem.icon_file_pending = QtGui.QIcon(":/images/file-pending.png")
FileItem.icon_error = icontheme.lookup('dialog-error', icontheme.ICON_SIZE_MENU)
@@ -705,9 +709,17 @@ class TrackItem(TreeItem):
icon = FileItem.decide_file_icon(file)
self.takeChildren()
else:
- color = TreeItem.text_color
+ if track.ignored_for_completeness():
+ color = TreeItem.text_color_secondary
+ else:
+ color = TreeItem.text_color
bgcolor = get_match_color(1, TreeItem.base_color)
- icon = TrackItem.icon_note
+ if track.is_video():
+ icon = TrackItem.icon_video
+ elif track.is_data():
+ icon = TrackItem.icon_data
+ else:
+ icon = TrackItem.icon_audio
oldnum = self.childCount()
newnum = track.num_linked_files
if oldnum > newnum: # remove old items
diff --git a/picard/ui/options/advanced.py b/picard/ui/options/advanced.py
index 734e2fea7..114872207 100644
--- a/picard/ui/options/advanced.py
+++ b/picard/ui/options/advanced.py
@@ -36,6 +36,10 @@ class AdvancedOptionsPage(OptionsPage):
options = [
config.TextOption("setting", "ignore_regex", ""),
config.BoolOption("setting", "ignore_hidden_files", False),
+ config.BoolOption("setting", "completeness_ignore_videos", False),
+ config.BoolOption("setting", "completeness_ignore_pregap", False),
+ config.BoolOption("setting", "completeness_ignore_data", False),
+ config.BoolOption("setting", "completeness_ignore_silence", False),
]
def __init__(self, parent=None):
@@ -47,10 +51,18 @@ class AdvancedOptionsPage(OptionsPage):
def load(self):
self.ui.ignore_regex.setText(config.setting["ignore_regex"])
self.ui.ignore_hidden_files.setChecked(config.setting["ignore_hidden_files"])
+ self.ui.completeness_ignore_videos.setChecked(config.setting["completeness_ignore_videos"])
+ self.ui.completeness_ignore_pregap.setChecked(config.setting["completeness_ignore_pregap"])
+ self.ui.completeness_ignore_data.setChecked(config.setting["completeness_ignore_data"])
+ self.ui.completeness_ignore_silence.setChecked(config.setting["completeness_ignore_silence"])
def save(self):
config.setting["ignore_regex"] = unicode(self.ui.ignore_regex.text())
config.setting["ignore_hidden_files"] = self.ui.ignore_hidden_files.isChecked()
+ config.setting["completeness_ignore_videos"] = self.ui.completeness_ignore_videos.isChecked()
+ config.setting["completeness_ignore_pregap"] = self.ui.completeness_ignore_pregap.isChecked()
+ config.setting["completeness_ignore_data"] = self.ui.completeness_ignore_data.isChecked()
+ config.setting["completeness_ignore_silence"] = self.ui.completeness_ignore_silence.isChecked()
def live_checker(self, text):
self.ui.regex_error.setStyleSheet("")
diff --git a/picard/ui/ui_options_advanced.py b/picard/ui/ui_options_advanced.py
index 0b819ff05..0e078d9f5 100644
--- a/picard/ui/ui_options_advanced.py
+++ b/picard/ui/ui_options_advanced.py
@@ -8,7 +8,16 @@ from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
- _fromUtf8 = lambda s: s
+ def _fromUtf8(s):
+ return s
+
+try:
+ _encoding = QtGui.QApplication.UnicodeUTF8
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+ def _translate(context, text, disambig):
+ return QtGui.QApplication.translate(context, text, disambig)
class Ui_AdvancedOptionsPage(object):
def setupUi(self, AdvancedOptionsPage):
@@ -27,14 +36,32 @@ class Ui_AdvancedOptionsPage(object):
self.ignore_regex = QtGui.QLineEdit(self.groupBox)
self.ignore_regex.setObjectName(_fromUtf8("ignore_regex"))
self.gridlayout.addWidget(self.ignore_regex, 2, 0, 1, 1)
+ self.ignore_hidden_files = QtGui.QCheckBox(self.groupBox)
+ self.ignore_hidden_files.setObjectName(_fromUtf8("ignore_hidden_files"))
+ self.gridlayout.addWidget(self.ignore_hidden_files, 4, 0, 1, 1)
self.regex_error = QtGui.QLabel(self.groupBox)
self.regex_error.setText(_fromUtf8(""))
self.regex_error.setObjectName(_fromUtf8("regex_error"))
- self.gridlayout.addWidget(self.regex_error, 4, 0, 1, 1)
- self.ignore_hidden_files = QtGui.QCheckBox(self.groupBox)
- self.ignore_hidden_files.setObjectName(_fromUtf8("ignore_hidden_files"))
- self.gridlayout.addWidget(self.ignore_hidden_files, 3, 0, 1, 1)
+ self.gridlayout.addWidget(self.regex_error, 3, 0, 1, 1)
self.vboxlayout.addWidget(self.groupBox)
+ self.groupBox_completeness = QtGui.QGroupBox(AdvancedOptionsPage)
+ self.groupBox_completeness.setObjectName(_fromUtf8("groupBox_completeness"))
+ self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox_completeness)
+ self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
+ self.completeness_ignore_videos = QtGui.QCheckBox(self.groupBox_completeness)
+ self.completeness_ignore_videos.setObjectName(_fromUtf8("completeness_ignore_videos"))
+ self.verticalLayout_2.addWidget(self.completeness_ignore_videos)
+ self.completeness_ignore_pregap = QtGui.QCheckBox(self.groupBox_completeness)
+ self.completeness_ignore_pregap.setObjectName(_fromUtf8("completeness_ignore_pregap"))
+ self.verticalLayout_2.addWidget(self.completeness_ignore_pregap)
+ self.completeness_ignore_data = QtGui.QCheckBox(self.groupBox_completeness)
+ self.completeness_ignore_data.setCheckable(True)
+ self.completeness_ignore_data.setObjectName(_fromUtf8("completeness_ignore_data"))
+ self.verticalLayout_2.addWidget(self.completeness_ignore_data)
+ self.completeness_ignore_silence = QtGui.QCheckBox(self.groupBox_completeness)
+ self.completeness_ignore_silence.setObjectName(_fromUtf8("completeness_ignore_silence"))
+ self.verticalLayout_2.addWidget(self.completeness_ignore_silence)
+ self.vboxlayout.addWidget(self.groupBox_completeness)
spacerItem = QtGui.QSpacerItem(181, 21, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.vboxlayout.addItem(spacerItem)
@@ -45,4 +72,9 @@ class Ui_AdvancedOptionsPage(object):
self.groupBox.setTitle(_("Advanced options"))
self.label_ignore_regex.setText(_("Ignore file paths matching the following regular expression:"))
self.ignore_hidden_files.setText(_("Ignore hidden files"))
+ self.groupBox_completeness.setTitle(_("Ignore the following tracks when determining whether a release is complete"))
+ self.completeness_ignore_videos.setText(_("Video tracks"))
+ self.completeness_ignore_pregap.setText(_("Pregap tracks"))
+ self.completeness_ignore_data.setText(_("Data tracks"))
+ self.completeness_ignore_silence.setText(_("Silent tracks"))
diff --git a/resources/images/note.png b/resources/images/note.png
deleted file mode 100644
index fd877cb8d..000000000
Binary files a/resources/images/note.png and /dev/null differ
diff --git a/resources/images/track-audio.png b/resources/images/track-audio.png
new file mode 100644
index 000000000..1a87e455d
Binary files /dev/null and b/resources/images/track-audio.png differ
diff --git a/resources/images/track-data.png b/resources/images/track-data.png
new file mode 100644
index 000000000..444d10609
Binary files /dev/null and b/resources/images/track-data.png differ
diff --git a/resources/images/track-video.png b/resources/images/track-video.png
new file mode 100644
index 000000000..de35edd6c
Binary files /dev/null and b/resources/images/track-video.png differ
diff --git a/resources/img-src/licenses.txt b/resources/img-src/licenses.txt
new file mode 100644
index 000000000..e2e9c4dd5
--- /dev/null
+++ b/resources/img-src/licenses.txt
@@ -0,0 +1,11 @@
+The following icons were created by Carlin Mangar and
+published under Creative Commons Attribution-ShareAlike 2.0 UK: England & Wales
+(CC BY-SA 2.0 UK) license (https://creativecommons.org/licenses/by-sa/2.0/uk/):
+* Picard application icon
+* picard-submit
+
+The following icons use symbols from Font Awesome by Dave Gandy (http://fontawesome.io)
+published under the SIL OFL 1.1 license (http://scripts.sil.org/OFL):
+* track-audio
+* track-data
+* track-video
\ No newline at end of file
diff --git a/resources/img-src/track-audio.svg b/resources/img-src/track-audio.svg
new file mode 100644
index 000000000..9e7880f9b
--- /dev/null
+++ b/resources/img-src/track-audio.svg
@@ -0,0 +1,65 @@
+
+
+
+
diff --git a/resources/img-src/track-data.svg b/resources/img-src/track-data.svg
new file mode 100644
index 000000000..eba13dba0
--- /dev/null
+++ b/resources/img-src/track-data.svg
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/resources/img-src/track-video.svg b/resources/img-src/track-video.svg
new file mode 100644
index 000000000..005a4bead
--- /dev/null
+++ b/resources/img-src/track-video.svg
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/resources/picard.qrc b/resources/picard.qrc
index 27ca46029..30f822597 100644
--- a/resources/picard.qrc
+++ b/resources/picard.qrc
@@ -57,9 +57,11 @@
images/match-pending-80.png
images/match-pending-90.png
images/match-pending-100.png
- images/note.png
images/star-gray.png
images/star.png
+ images/track-audio.png
+ images/track-data.png
images/track-saved.png
+ images/track-video.png
diff --git a/ui/options_advanced.ui b/ui/options_advanced.ui
index 23d3d624d..71fdfc396 100644
--- a/ui/options_advanced.ui
+++ b/ui/options_advanced.ui
@@ -31,16 +31,56 @@
-
+
+
+ Ignore hidden files
+
+
+
+ -
- -
-
+
+
+
+ -
+
+
+ Ignore the following tracks when determining whether a release is complete
+
+
+
-
+
- Ignore hidden files
+ Video tracks
+
+
+
+ -
+
+
+ Pregap tracks
+
+
+
+ -
+
+
+ Data tracks
+
+
+ true
+
+
+
+ -
+
+
+ Silent tracks