| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from helper import console
- def smart(items, criteria):
- if '-' in criteria:
- _criteria = criteria.split('-', 1)
- artist = _criteria[0].split(' ')
- title = _criteria[1].split(' ')
- else:
- artist = title = criteria.split(' ')
- for item in items:
- # First do negative stuff, bad news comes always first
- if item.duration_seconds is not None and item.duration_seconds < 180:
- item.decrement_score(0.5)
- if item.duration_seconds is not None and item.duration_seconds > 600:
- item.decrement_score(1)
- if 'radio' in item.title.lower():
- item.decrement_score(1)
- if len(set(item.artist.lower().split(' ')).intersection(artist)) == 0:
- item.decrement_score(2)
- if len(set(item.title.lower().split(' ')).intersection(title)) == 0:
- item.decrement_score(2)
- # Now do the positive stuff
- # The following 2 rules are not always correct. Need more testing to evaluate
- # if 'original' in item.title.lower():
- # item.increment_score(0.5)
- # if 'extended' in item.title.lower():
- # item.increment_score(1)
- if ' '.join(title).strip().lower() == item.title.strip().lower():
- item.increment_score(1)
- if item.duration_seconds is not None:
- item.increment_score(0.1)
- if item.size is not None:
- item.increment_score(0.1)
- sortedlist = []
- for item in items:
- # We don't show negative scores
- if item.score > 0:
- sortedlist.append(item)
- else:
- console.output('Removing {x.artist} - {x.title} from list: Score to low ({x.score})'.format(x=item), console.DBG_INFO)
- sortedlist.sort(reverse=True, key=lambda x: (x.score, x.duration_seconds))
- return sortedlist
|