From 00437e41d2618f7f7d22ecbdb466b9d8d9c5474d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odin=20H=C3=B8rthe=20Omdal?= Date: Sat, 23 Aug 2014 22:42:29 +0200 Subject: [PATCH] Implement removing of rating --- __init__.py | 3 ++- ratings.py | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/__init__.py b/__init__.py index cea2ede..4dbfe7d 100644 --- a/__init__.py +++ b/__init__.py @@ -64,6 +64,7 @@ def setup_plugin(): hooks = { - 'setup': setup_plugin, 'add_media_to_collection': ratings.media_added_to_collection, + 'remove_media_from_collection': ratings.media_removed_from_collection, + 'setup': setup_plugin, } diff --git a/ratings.py b/ratings.py index 6049ba0..b6c16ac 100644 --- a/ratings.py +++ b/ratings.py @@ -14,20 +14,48 @@ from .metadata import Metadata -def media_added_to_collection(collection, media_entry, note): +def collection_to_rating(collection): m = re.match(r'rating:(\d+)', collection.title) if not m: return - rating_number = int(m.group(1)) - set_rating_from_media_entry(media_entry, rating_number) + try: + return int(m.group(1)) + except ValueError: + return + + +def media_added_to_collection(collection, media_entry, note): + rating = collection_to_rating(collection) + if rating is None: + return + set_rating_from_media_entry(media_entry, rating) + + +def media_removed_from_collection(collection, media_entry): + removed_rating = collection_to_rating(collection) + if removed_rating is None: + return + for col in media_entry.collections: + fallback_rating = collection_to_rating(col) + if fallback_rating is not None: + set_rating_from_media_entry(media_entry, fallback_rating, + expect_rating=removed_rating) + return + set_rating_from_media_entry(media_entry, 0, + expect_rating=removed_rating) -def set_rating_from_media_entry(media_entry, rating): +def set_rating_from_media_entry(media_entry, rating, expect_rating=None): filepath = (mgg.public_store ._cachefile_to_original_filepath( media_entry.media_files['original'])) path = mgg.public_store._resolve_filepath(filepath) - set_rating(path) + if expect_rating is not None: + actual_rating = get_rating(path) + if actual_rating != expect_rating: + return False + set_rating(path, rating) + return True def set_rating(path, rating):