aboutsummaryrefslogtreecommitdiff
path: root/app/commands/status.py
blob: acf9376d51b80b5ed33d8f7ecfe65a43985b7edf (plain)
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