Skip to content

Commit

Permalink
NEW: Option to tag series/movie with Telegram username
Browse files Browse the repository at this point in the history
VER: 1.4
  • Loading branch information
toddrob99 committed Dec 20, 2020
1 parent e3142bc commit e1aac23
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 1 deletion.
38 changes: 38 additions & 0 deletions radarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def add_movie(
quality=None,
search=True,
monitored=True,
tag=None,
):
if not movie_info and not tmdb_id:
return False
Expand All @@ -81,6 +82,8 @@ def add_movie(
"monitored": monitored,
"addOptions": {"searchForMovie": search},
}
if tag:
params.update({"tags": [self.get_tag_id(tag)]})

return self._api_post("movie", params)

Expand Down Expand Up @@ -110,6 +113,41 @@ def _api_get(self, endpoint, params={}):
else:
return r.json()

def get_all_tags(self):
r = self._api_get("tag", {})
self.logger.debug(f"Result of API call to get all tags: {r}")
return [] if not r else r

def add_tag(self, tag):
params = {
"label": tag,
}
t = self._api_post("tag", params)
self.logger.debug(f"Result of API call to add tag: {t}")
return t

def get_tag_id(self, tag):
if i := next(
iter(
[
x.get("id")
for x in self.get_all_tags()
if x.get("label").lower() == tag.lower()
]
),
None,
):
self.logger.debug(f"Found tag id [{i}] for tag [{tag}]")
return i
else:
t = self.add_tag(tag)
self.logger.debug(
f"Created tag id for tag [{tag}]: {t['id']}"
if t.get("id")
else f"Could not add tag [{tag}]"
)
return t.get("id", None)

def lookup_quality_profile_id(self, v):
# Look up quality profile id from a profile name,
# But also allow input of a quality profile id
Expand Down
28 changes: 27 additions & 1 deletion searcharr.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import sonarr
import settings

__version__ = "1.3.5"
__version__ = "1.4"

DBPATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data")
DBFILE = "searcharr.db"
Expand Down Expand Up @@ -114,6 +114,20 @@ def __init__(self, token):
logger.warning(
'Password is blank. This will allow anyone to add series/movies using your bot. If this is unexpected, set a password in settings.py (searcharr_password="your password").'
)
try: # Handle missing sonarr_tag_with_username setting - added v1.4
settings.sonarr_tag_with_username
except AttributeError:
settings.sonarr_tag_with_username = True
logger.warning(
"No sonarr_tag_with_username setting found. Please add sonarr_tag_with_username to settings.py (sonarr_tag_with_username=True or sonarr_tag_with_username=False). Defaulting to True."
)
try: # Handle missing radarr_tag_with_username setting - added v1.4
settings.radarr_tag_with_username
except AttributeError:
settings.radarr_tag_with_username = True
logger.warning(
"No radarr_tag_with_username setting found. Please add radarr_tag_with_username to settings.py (radarr_tag_with_username=True or radarr_tag_with_username=False). Defaulting to True."
)

def cmd_start(self, update, context):
logger.debug(f"Received start cmd from [{update.message.from_user.username}]")
Expand Down Expand Up @@ -472,6 +486,9 @@ def callback(self, update, context):
quality=settings.sonarr_quality_profile_id,
monitored=settings.sonarr_add_monitored,
search=settings.sonarr_search_on_add,
tag=f"searcharr-{query.from_user.username if query.from_user.username else query.from_user.id}"
if settings.sonarr_tag_with_username
else None,
)
elif convo["type"] == "movie":
added = self.radarr.add_movie(
Expand All @@ -480,6 +497,9 @@ def callback(self, update, context):
quality=settings.radarr_quality_profile_id,
monitored=settings.radarr_add_monitored,
search=settings.radarr_search_on_add,
tag=f"searcharr-{query.from_user.username if query.from_user.username else query.from_user.id}"
if settings.radarr_tag_with_username
else None,
)
else:
added = False
Expand Down Expand Up @@ -529,6 +549,9 @@ def callback(self, update, context):
quality=settings.sonarr_quality_profile_id,
monitored=settings.sonarr_add_monitored,
search=settings.sonarr_search_on_add,
tag=f"searcharr-{query.from_user.username if query.from_user.username else query.from_user.id}"
if settings.sonarr_tag_with_username
else None,
)
elif convo["type"] == "movie":
added = self.radarr.add_movie(
Expand All @@ -537,6 +560,9 @@ def callback(self, update, context):
quality=settings.radarr_quality_profile_id,
monitored=settings.radarr_add_monitored,
search=settings.radarr_search_on_add,
tag=f"searcharr-{query.from_user.username if query.from_user.username else query.from_user.id}"
if settings.radarr_tag_with_username
else None,
)
else:
added = False
Expand Down
2 changes: 2 additions & 0 deletions settings-sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
sonarr_quality_profile_id = "HD 720p" # can be name or id value
sonarr_add_monitored = True
sonarr_search_on_add = True
sonarr_tag_with_username = True

# Radarr
radarr_enabled = True
Expand All @@ -27,4 +28,5 @@
radarr_quality_profile_id = "HD-720p" # can be name or id value
radarr_add_monitored = True
radarr_search_on_add = True
radarr_tag_with_username = True
radarr_api_version = 1 # v3 api not yet available -- use 1 even for aphrodite
38 changes: 38 additions & 0 deletions sonarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ def add_series(
season_folders=True,
monitored=True,
unmonitor_existing=True,
tag=None,
):
if not series_info and not tvdb_id:
return False
Expand Down Expand Up @@ -111,6 +112,8 @@ def add_series(
"searchForMissingEpisodes": search,
},
}
if tag:
params.update({"tags": [self.get_tag_id(tag)]})

return self._api_post("series", params)

Expand All @@ -129,6 +132,41 @@ def get_root_folders(self):
for x in r
]

def get_all_tags(self):
r = self._api_get("tag", {})
self.logger.debug(f"Result of API call to get all tags: {r}")
return [] if not r else r

def add_tag(self, tag):
params = {
"label": tag,
}
t = self._api_post("tag", params)
self.logger.debug(f"Result of API call to add tag: {t}")
return t

def get_tag_id(self, tag):
if i := next(
iter(
[
x.get("id")
for x in self.get_all_tags()
if x.get("label").lower() == tag.lower()
]
),
None,
):
self.logger.debug(f"Found tag id [{i}] for tag [{tag}]")
return i
else:
t = self.add_tag(tag)
self.logger.debug(
f"Created tag id for tag [{tag}]: {t['id']}"
if t.get("id")
else f"Could not add tag [{tag}]"
)
return t.get("id", None)

def lookup_quality_profile_id(self, v):
# Look up quality profile id from a profile name,
# Or validate existence of a quality profile id
Expand Down

0 comments on commit e1aac23

Please sign in to comment.