[#101 state:fixed] Remove the Creation Time column.

This commit is contained in:
Virgil Dupras 2010-08-13 09:26:38 +02:00
parent 0ccdfe0e26
commit 565c990687
15 changed files with 38 additions and 61 deletions

View File

@ -20,7 +20,7 @@ http://www.hardcoded.net/licenses/hs_license
{ {
[super awakeFromNib]; [super awakeFromNib];
[[self window] setTitle:@"dupeGuru Music Edition"]; [[self window] setTitle:@"dupeGuru Music Edition"];
NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,7)]; NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,6)];
[deltaColumns removeIndex:6]; [deltaColumns removeIndex:6];
[outline setDeltaColumns:deltaColumns]; [outline setDeltaColumns:deltaColumns];
} }
@ -38,13 +38,13 @@ http://www.hardcoded.net/licenses/hs_license
[columnsOrder addObject:@"2"]; [columnsOrder addObject:@"2"];
[columnsOrder addObject:@"3"]; [columnsOrder addObject:@"3"];
[columnsOrder addObject:@"4"]; [columnsOrder addObject:@"4"];
[columnsOrder addObject:@"16"]; [columnsOrder addObject:@"15"];
NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary]; NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary];
[columnsWidth setObject:i2n(214) forKey:@"0"]; [columnsWidth setObject:i2n(214) forKey:@"0"];
[columnsWidth setObject:i2n(63) forKey:@"2"]; [columnsWidth setObject:i2n(63) forKey:@"2"];
[columnsWidth setObject:i2n(50) forKey:@"3"]; [columnsWidth setObject:i2n(50) forKey:@"3"];
[columnsWidth setObject:i2n(50) forKey:@"4"]; [columnsWidth setObject:i2n(50) forKey:@"4"];
[columnsWidth setObject:i2n(57) forKey:@"16"]; [columnsWidth setObject:i2n(57) forKey:@"15"];
[self restoreColumnsPosition:columnsOrder widths:columnsWidth]; [self restoreColumnsPosition:columnsOrder widths:columnsWidth];
} }
@ -96,18 +96,17 @@ http://www.hardcoded.net/licenses/hs_license
[_resultColumns addObject:brCol]; [_resultColumns addObject:brCol];
[_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Sample Rate" width:60 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Sample Rate" width:60 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Kind" width:40 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Kind" width:40 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Creation" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Modification" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:8 title:@"Modification" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:8 title:@"Title" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:9 title:@"Title" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:9 title:@"Artist" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:10 title:@"Artist" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:10 title:@"Album" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:11 title:@"Album" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:11 title:@"Genre" width:80 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:12 title:@"Genre" width:80 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:12 title:@"Year" width:40 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:13 title:@"Year" width:40 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:13 title:@"Track Number" width:40 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:14 title:@"Track Number" width:40 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:14 title:@"Comment" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:15 title:@"Comment" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:15 title:@"Match %" width:57 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:16 title:@"Match %" width:57 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:16 title:@"Words Used" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:17 title:@"Words Used" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:17 title:@"Dupe Count" width:80 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:18 title:@"Dupe Count" width:80 refCol:refCol]];
} }
/* Notifications */ /* Notifications */

View File

@ -20,9 +20,8 @@ http://www.hardcoded.net/licenses/hs_license
{ {
[super awakeFromNib]; [super awakeFromNib];
[[self window] setTitle:@"dupeGuru Picture Edition"]; [[self window] setTitle:@"dupeGuru Picture Edition"];
NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,5)]; NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndex:2];
[deltaColumns removeIndex:3]; [deltaColumns addIndex:5];
[deltaColumns removeIndex:4];
[outline setDeltaColumns:deltaColumns]; [outline setDeltaColumns:deltaColumns];
} }
@ -41,13 +40,13 @@ http://www.hardcoded.net/licenses/hs_license
[columnsOrder addObject:@"1"]; [columnsOrder addObject:@"1"];
[columnsOrder addObject:@"2"]; [columnsOrder addObject:@"2"];
[columnsOrder addObject:@"4"]; [columnsOrder addObject:@"4"];
[columnsOrder addObject:@"7"]; [columnsOrder addObject:@"6"];
NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary]; NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary];
[columnsWidth setObject:i2n(121) forKey:@"0"]; [columnsWidth setObject:i2n(121) forKey:@"0"];
[columnsWidth setObject:i2n(120) forKey:@"1"]; [columnsWidth setObject:i2n(120) forKey:@"1"];
[columnsWidth setObject:i2n(63) forKey:@"2"]; [columnsWidth setObject:i2n(63) forKey:@"2"];
[columnsWidth setObject:i2n(73) forKey:@"4"]; [columnsWidth setObject:i2n(73) forKey:@"4"];
[columnsWidth setObject:i2n(58) forKey:@"7"]; [columnsWidth setObject:i2n(58) forKey:@"6"];
[self restoreColumnsPosition:columnsOrder widths:columnsWidth]; [self restoreColumnsPosition:columnsOrder widths:columnsWidth];
} }
@ -92,9 +91,8 @@ http://www.hardcoded.net/licenses/hs_license
[_resultColumns addObject:sizeCol]; [_resultColumns addObject:sizeCol];
[_resultColumns addObject:[self getColumnForIdentifier:3 title:@"Kind" width:40 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:3 title:@"Kind" width:40 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:4 title:@"Dimensions" width:80 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:4 title:@"Dimensions" width:80 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Creation" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Modification" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Modification" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Match %" width:58 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Match %" width:58 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Dupe Count" width:80 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:8 title:@"Dupe Count" width:80 refCol:refCol]];
} }
@end @end

View File

@ -18,8 +18,8 @@ http://www.hardcoded.net/licenses/hs_license
- (void)awakeFromNib - (void)awakeFromNib
{ {
[super awakeFromNib]; [super awakeFromNib];
NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(2,4)]; NSMutableIndexSet *deltaColumns = [NSMutableIndexSet indexSetWithIndex:2];
[deltaColumns removeIndex:3]; [deltaColumns addIndex:4];
[outline setDeltaColumns:deltaColumns]; [outline setDeltaColumns:deltaColumns];
} }
@ -30,12 +30,12 @@ http://www.hardcoded.net/licenses/hs_license
[columnsOrder addObject:@"0"]; [columnsOrder addObject:@"0"];
[columnsOrder addObject:@"1"]; [columnsOrder addObject:@"1"];
[columnsOrder addObject:@"2"]; [columnsOrder addObject:@"2"];
[columnsOrder addObject:@"6"]; [columnsOrder addObject:@"5"];
NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary]; NSMutableDictionary *columnsWidth = [NSMutableDictionary dictionary];
[columnsWidth setObject:i2n(195) forKey:@"0"]; [columnsWidth setObject:i2n(195) forKey:@"0"];
[columnsWidth setObject:i2n(120) forKey:@"1"]; [columnsWidth setObject:i2n(120) forKey:@"1"];
[columnsWidth setObject:i2n(63) forKey:@"2"]; [columnsWidth setObject:i2n(63) forKey:@"2"];
[columnsWidth setObject:i2n(60) forKey:@"6"]; [columnsWidth setObject:i2n(60) forKey:@"5"];
[self restoreColumnsPosition:columnsOrder widths:columnsWidth]; [self restoreColumnsPosition:columnsOrder widths:columnsWidth];
} }
@ -80,10 +80,9 @@ http://www.hardcoded.net/licenses/hs_license
[[sizeCol dataCell] setAlignment:NSRightTextAlignment]; [[sizeCol dataCell] setAlignment:NSRightTextAlignment];
[_resultColumns addObject:sizeCol]; [_resultColumns addObject:sizeCol];
[_resultColumns addObject:[self getColumnForIdentifier:3 title:@"Kind" width:40 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:3 title:@"Kind" width:40 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:4 title:@"Creation" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:4 title:@"Modification" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Modification" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:5 title:@"Match %" width:60 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Match %" width:60 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:6 title:@"Words Used" width:120 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Words Used" width:120 refCol:refCol]]; [_resultColumns addObject:[self getColumnForIdentifier:7 title:@"Dupe Count" width:80 refCol:refCol]];
[_resultColumns addObject:[self getColumnForIdentifier:8 title:@"Dupe Count" width:80 refCol:refCol]];
} }
@end @end

View File

@ -55,7 +55,6 @@ class OperationError(FSError):
class File(object): class File(object):
INITIAL_INFO = { INITIAL_INFO = {
'size': 0, 'size': 0,
'ctime': 0,
'mtime': 0, 'mtime': 0,
'md5': '', 'md5': '',
'md5partial': '', 'md5partial': '',
@ -82,10 +81,9 @@ class File(object):
raise AttributeError() raise AttributeError()
def _read_info(self, field): def _read_info(self, field):
if field in ('size', 'ctime', 'mtime'): if field in ('size', 'mtime'):
stats = io.stat(self.path) stats = io.stat(self.path)
self.size = nonone(stats.st_size, 0) self.size = nonone(stats.st_size, 0)
self.ctime = nonone(stats.st_ctime, 0)
self.mtime = nonone(stats.st_mtime, 0) self.mtime = nonone(stats.st_mtime, 0)
elif field == 'md5partial': elif field == 'md5partial':
try: try:

View File

@ -18,7 +18,6 @@ COLUMNS = [
{'attr':'bitrate','display':'Bitrate'}, {'attr':'bitrate','display':'Bitrate'},
{'attr':'samplerate','display':'Sample Rate'}, {'attr':'samplerate','display':'Sample Rate'},
{'attr':'extension','display':'Kind'}, {'attr':'extension','display':'Kind'},
{'attr':'ctime','display':'Creation'},
{'attr':'mtime','display':'Modification'}, {'attr':'mtime','display':'Modification'},
{'attr':'title','display':'Title'}, {'attr':'title','display':'Title'},
{'attr':'artist','display':'Artist'}, {'attr':'artist','display':'Artist'},
@ -32,7 +31,7 @@ COLUMNS = [
{'attr':'dupe_count','display':'Dupe Count'}, {'attr':'dupe_count','display':'Dupe Count'},
] ]
METADATA_TO_READ = ['size', 'ctime', 'mtime', 'duration', 'bitrate', 'samplerate', 'title', 'artist', METADATA_TO_READ = ['size', 'mtime', 'duration', 'bitrate', 'samplerate', 'title', 'artist',
'album', 'genre', 'year', 'track', 'comment'] 'album', 'genre', 'year', 'track', 'comment']
def GetDisplayInfo(dupe, group, delta): def GetDisplayInfo(dupe, group, delta):
@ -40,7 +39,6 @@ def GetDisplayInfo(dupe, group, delta):
duration = dupe.duration duration = dupe.duration
bitrate = dupe.bitrate bitrate = dupe.bitrate
samplerate = dupe.samplerate samplerate = dupe.samplerate
ctime = dupe.ctime
mtime = dupe.mtime mtime = dupe.mtime
m = group.get_match_of(dupe) m = group.get_match_of(dupe)
if m: if m:
@ -52,7 +50,6 @@ def GetDisplayInfo(dupe, group, delta):
duration -= r.duration duration -= r.duration
bitrate -= r.bitrate bitrate -= r.bitrate
samplerate -= r.samplerate samplerate -= r.samplerate
ctime -= r.ctime
mtime -= r.mtime mtime -= r.mtime
else: else:
percentage = group.percentage percentage = group.percentage
@ -65,7 +62,6 @@ def GetDisplayInfo(dupe, group, delta):
str(bitrate), str(bitrate),
str(samplerate), str(samplerate),
dupe.extension, dupe.extension,
format_timestamp(ctime,delta and m),
format_timestamp(mtime,delta and m), format_timestamp(mtime,delta and m),
dupe.title, dupe.title,
dupe.artist, dupe.artist,

View File

@ -18,19 +18,17 @@ COLUMNS = [
{'attr':'size','display':'Size (KB)'}, {'attr':'size','display':'Size (KB)'},
{'attr':'extension','display':'Kind'}, {'attr':'extension','display':'Kind'},
{'attr':'dimensions','display':'Dimensions'}, {'attr':'dimensions','display':'Dimensions'},
{'attr':'ctime','display':'Creation'},
{'attr':'mtime','display':'Modification'}, {'attr':'mtime','display':'Modification'},
{'attr':'percentage','display':'Match %'}, {'attr':'percentage','display':'Match %'},
{'attr':'dupe_count','display':'Dupe Count'}, {'attr':'dupe_count','display':'Dupe Count'},
] ]
METADATA_TO_READ = ['size', 'ctime', 'mtime', 'dimensions'] METADATA_TO_READ = ['size', 'mtime', 'dimensions']
def GetDisplayInfo(dupe,group,delta=False): def GetDisplayInfo(dupe,group,delta=False):
if (dupe is None) or (group is None): if (dupe is None) or (group is None):
return ['---'] * len(COLUMNS) return ['---'] * len(COLUMNS)
size = dupe.size size = dupe.size
ctime = dupe.ctime
mtime = dupe.mtime mtime = dupe.mtime
m = group.get_match_of(dupe) m = group.get_match_of(dupe)
if m: if m:
@ -39,7 +37,6 @@ def GetDisplayInfo(dupe,group,delta=False):
if delta: if delta:
r = group.ref r = group.ref
size -= r.size size -= r.size
ctime -= r.ctime
mtime -= r.mtime mtime -= r.mtime
else: else:
percentage = group.percentage percentage = group.percentage
@ -51,7 +48,6 @@ def GetDisplayInfo(dupe,group,delta=False):
format_size(size, 0, 1, False), format_size(size, 0, 1, False),
dupe.extension, dupe.extension,
format_dimensions(dupe.dimensions), format_dimensions(dupe.dimensions),
format_timestamp(ctime, delta and m),
format_timestamp(mtime, delta and m), format_timestamp(mtime, delta and m),
format_perc(percentage), format_perc(percentage),
format_dupe_count(dupe_count) format_dupe_count(dupe_count)

View File

@ -15,18 +15,16 @@ COLUMNS = [
{'attr':'path','display':'Directory'}, {'attr':'path','display':'Directory'},
{'attr':'size','display':'Size (KB)'}, {'attr':'size','display':'Size (KB)'},
{'attr':'extension','display':'Kind'}, {'attr':'extension','display':'Kind'},
{'attr':'ctime','display':'Creation'},
{'attr':'mtime','display':'Modification'}, {'attr':'mtime','display':'Modification'},
{'attr':'percentage','display':'Match %'}, {'attr':'percentage','display':'Match %'},
{'attr':'words','display':'Words Used'}, {'attr':'words','display':'Words Used'},
{'attr':'dupe_count','display':'Dupe Count'}, {'attr':'dupe_count','display':'Dupe Count'},
] ]
METADATA_TO_READ = ['size', 'ctime', 'mtime'] METADATA_TO_READ = ['size', 'mtime']
def GetDisplayInfo(dupe, group, delta): def GetDisplayInfo(dupe, group, delta):
size = dupe.size size = dupe.size
ctime = dupe.ctime
mtime = dupe.mtime mtime = dupe.mtime
m = group.get_match_of(dupe) m = group.get_match_of(dupe)
if m: if m:
@ -35,7 +33,6 @@ def GetDisplayInfo(dupe, group, delta):
if delta: if delta:
r = group.ref r = group.ref
size -= r.size size -= r.size
ctime -= r.ctime
mtime -= r.mtime mtime -= r.mtime
else: else:
percentage = group.percentage percentage = group.percentage
@ -45,7 +42,6 @@ def GetDisplayInfo(dupe, group, delta):
format_path(dupe.path), format_path(dupe.path),
format_size(size, 0, 1, False), format_size(size, 0, 1, False),
dupe.extension, dupe.extension,
format_timestamp(ctime, delta and m),
format_timestamp(mtime, delta and m), format_timestamp(mtime, delta and m),
format_perc(percentage), format_perc(percentage),
format_words(dupe.words) if hasattr(dupe, 'words') else '', format_words(dupe.words) if hasattr(dupe, 'words') else '',

View File

@ -20,12 +20,11 @@ class Bundle(fs.File):
to see them as files. to see them as files.
""" """
def _read_info(self, field): def _read_info(self, field):
if field in ('size', 'ctime', 'mtime'): if field in ('size', 'mtime'):
files = fs.get_all_files(self.path) files = fs.get_all_files(self.path)
size = sum((file.size for file in files), 0) size = sum((file.size for file in files), 0)
self.size = size self.size = size
stats = io.stat(self.path) stats = io.stat(self.path)
self.ctime = nonone(stats.st_ctime, 0)
self.mtime = nonone(stats.st_mtime, 0) self.mtime = nonone(stats.st_mtime, 0)
elif field in ('md5', 'md5partial'): elif field in ('md5', 'md5partial'):
# What's sensitive here is that we must make sure that subfiles' # What's sensitive here is that we must make sure that subfiles'

View File

@ -38,9 +38,8 @@ class TCBundle(TestCase):
eq_(b.md5, md5.digest()) eq_(b.md5, md5.digest())
def test_has_file_attrs(self): def test_has_file_attrs(self):
#a Bundle must behave like a file, so it must have ctime and mtime attributes #a Bundle must behave like a file, so it must have mtime attributes
b = fs.Bundle(self.tmppath()) b = fs.Bundle(self.tmppath())
assert b.mtime > 0 assert b.mtime > 0
assert b.ctime > 0
eq_(b.extension, '') eq_(b.extension, '')

View File

@ -18,7 +18,7 @@ class DupeGuru(DupeGuruBase):
LOGO_NAME = 'logo_me' LOGO_NAME = 'logo_me'
NAME = 'dupeGuru Music Edition' NAME = 'dupeGuru Music Edition'
VERSION = '5.8.1' VERSION = '5.8.1'
DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7, 8]) DELTA_COLUMNS = frozenset([2, 3, 4, 5, 7])
def __init__(self): def __init__(self):
DupeGuruBase.__init__(self, data, appid=1) DupeGuruBase.__init__(self, data, appid=1)

View File

@ -21,7 +21,6 @@ class Preferences(PreferencesBase):
(50, True), # Bitrate (50, True), # Bitrate
(60, False), # Sample Rate (60, False), # Sample Rate
(40, False), # Kind (40, False), # Kind
(120, False), # creation
(120, False), # modification (120, False), # modification
(120, False), # Title (120, False), # Title
(120, False), # Artist (120, False), # Artist

View File

@ -58,7 +58,7 @@ class DupeGuru(DupeGuruBase):
LOGO_NAME = 'logo_pe' LOGO_NAME = 'logo_pe'
NAME = 'dupeGuru Picture Edition' NAME = 'dupeGuru Picture Edition'
VERSION = '1.9.1' VERSION = '1.9.1'
DELTA_COLUMNS = frozenset([2, 5, 6]) DELTA_COLUMNS = frozenset([2, 5])
def __init__(self): def __init__(self):
DupeGuruBase.__init__(self, data_pe, appid=5) DupeGuruBase.__init__(self, data_pe, appid=5)

View File

@ -18,7 +18,6 @@ class Preferences(PreferencesBase):
(60, True), # size (60, True), # size
(40, False), # kind (40, False), # kind
(100, True), # dimensions (100, True), # dimensions
(120, False), # creation
(120, False), # modification (120, False), # modification
(60, True), # match % (60, True), # match %
(80, False), # dupe count (80, False), # dupe count

View File

@ -28,7 +28,7 @@ class DupeGuru(DupeGuruBase):
LOGO_NAME = 'logo_se' LOGO_NAME = 'logo_se'
NAME = 'dupeGuru' NAME = 'dupeGuru'
VERSION = '2.10.1' VERSION = '2.10.1'
DELTA_COLUMNS = frozenset([2, 4, 5]) DELTA_COLUMNS = frozenset([2, 4])
def __init__(self): def __init__(self):
DupeGuruBase.__init__(self, data, appid=4) DupeGuruBase.__init__(self, data, appid=4)

View File

@ -17,7 +17,6 @@ class Preferences(PreferencesBase):
(180, True), # path (180, True), # path
(60, True), # size (60, True), # size
(40, False), # Kind (40, False), # Kind
(120, False), # creation
(120, False), # modification (120, False), # modification
(60, True), # match % (60, True), # match %
(120, False), # Words Used (120, False), # Words Used