1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
import datetime
import sqlite3
import requests
import humanize
import initialize_variables
from create_message import create_message
def status(from_number):
# This returns a list of ALL movies being downloaded, but not all of them were
# requested by the user, so we need to filter out the ones that were not requested
response = requests.get(f'{initialize_variables.radarr_host_url}/api/v3/queue/', headers=initialize_variables.headers)
# Get all the movie_ids that were requested by the user
db = sqlite3.connect(initialize_variables.db_path)
cursor = db.cursor()
cursor.execute('''
SELECT movie_id, movie_title FROM movies WHERE from_number = ?
''', (from_number,))
movie_info = cursor.fetchall()
db.close()
movies = {} # movie_id: movie_title
for movie in movie_info:
movies[movie[0]] = movie[1]
if len(movies) == 0:
create_message(from_number, "You have no movies being downloaded at the moment.\n\nIf you previously added a movie, it is likely that it has finished downloading. If you believe this is an error, please contact Parker.")
return
message = ""
# Loop through the response from the radarr API and filter out the movies that were not requested by the user
for movie in response.json()['records']:
movie_id = str(movie['movieId'])
if movie_id in movies.keys():
if movie['status'] == 'downloading':
# Humanize the time_left value
try:
time_left = humanize.precisedelta(datetime.datetime.strptime(movie['timeleft'], '%H:%M:%S') - datetime.datetime.strptime('00:00:00', '%H:%M:%S'), minimum_unit='seconds')
except ValueError:
# Sometimes movie downloads take a long time and include days in the time_left value
# This is formated as 1.00:00:00
time_left = humanize.precisedelta(datetime.datetime.strptime(movie['timeleft'], '%d.%H:%M:%S') - datetime.datetime.strptime('00:00:00', '%H:%M:%S'), minimum_unit='seconds')
except KeyError:
time_left = 'Unknown'
message += f"📥 {movies[movie_id]} - {time_left}\n"
else:
message += f"{movies[movie_id]} - {str(movie['status']).upper()}\n"
# If the message is empty, that means the user has no movies being downloaded
# Or, no download was found for the movie they requested
if message == "":
# For all movie IDs within the database
for movie_id in movies.keys():
response = requests.get(f'{initialize_variables.radarr_host_url}/api/v3/movie/{movie_id}', headers=initialize_variables.headers)
# This means that there is no current download, and no file has been found
# MOST likely means a download just wasn't found, so alert the user
data = response.json()
if data['hasFile'] == False:
message += f"{movies[movie_id]} - NOT FOUND\n\nThis means a download was not found for the movie(s), if this is a brand new movie that is likely the reason. If the movie has already been released on DVD/Blu-Ray, please contact Parker."
# Send message with info about download to user, otherwise, the user has
# no movies being downloaded at the moment so alert them
if message != "":
create_message(from_number, message)
return
else:
create_message(from_number, "You have no movies being downloaded at the moment.\n\nIf you previously added a movie, it is likely that it has finished downloading. If you believe this is an error, please contact Parker.")
return
# Otherwise, add another part to the message containing movie data
else:
message += "\n\nIf movies consistently show as 'WARNING' or 'QUEUED' or any other error over multiple hours, please contact Parker."
create_message(from_number, message)
return
|