Esempio n. 1
0
def get_servers():
    username = session[USERNAME]
    password = session[PASSWORD]
    plex_server = Plex(username, password)
    servers = plex_server.get_plex_server_resources()
    names = [server.name for server in servers]
    return jsonify(names)
Esempio n. 2
0
def add_movies():
    data = request.json
    if (not data):
        return {
            "error": "You need to include movies, playlist name and users"
        }, 400

    movie_list = data["movies"]
    name = data["name"]
    users = data["users"]

    if (not movie_list or not name or not users):
        return {
            "error": "You need to include movies, playlist name and users"
        }, 400

    username = session[USERNAME]
    password = session[PASSWORD]
    server = session[SERVER]
    imdb_id = session[IMDB_ID]

    if (not username or not password or not server or not imdb_id):
        return {"error": "Could not find session data"}, 500

    plex_server = Plex(username, password)
    plex_server.add_resource_by_name(server)
    plex_server.connect()
    playlist, failed_movies = plex_server.add_playlist(name, movie_list)

    if (len(users) > 0 and playlist is not None):
        plex_server.copy_to_users(playlist, users)

    return jsonify(failed_movies)
Esempio n. 3
0
def scrape_imdb():
    data = request.json
    if (not data):
        return {"error": "You need to include an IMDb id"}, 400

    imdb_id = data[IMDB_ID]

    if (not imdb_id):
        return {"error": "You need to include an IMDb id"}, 400

    username = session[USERNAME]
    password = session[PASSWORD]
    server = session[SERVER]

    if (not username or not password or not server):
        return {"error": "Could not find session data"}, 500

    plex_server = Plex(username, password)
    plex_server.add_resource_by_name(server)
    plex_server.connect()
    movies = plex_server.scrape_imdb("https://www.imdb.com/list/" + imdb_id)

    if (not movies):
        return {"error": "You need to include a valid IMDb id"}, 400

    session[IMDB_ID] = imdb_id

    return jsonify(movies)
Esempio n. 4
0
def get_users():
    username = session[USERNAME]
    password = session[PASSWORD]
    server = session[SERVER]

    if (not username or not password or not server):
        return {"error": "Could not find session data"}, 500

    plex_server = Plex(username, password)
    plex_server.add_resource_by_name(server)
    plex_server.connect()
    users = plex_server.get_users()

    return jsonify(users)
Esempio n. 5
0
File: main.py Progetto: Sytten/iPlex
def main():
    app = QApplication([])
    engine = QQmlApplicationEngine()

    # Instances of Objects
    plex = Plex(os.environ['USERNAME'], os.environ['PASSWORD'],
                os.environ['SERVER_NAME'])

    # Expose instances
    context = engine.rootContext()
    context.setContextProperty("plex", plex)

    # Load the view
    view_path = join(dirname(__file__), 'views/view.qml')
    engine.load(abspath(view_path))

    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())
Esempio n. 6
0
def sign_in():
    data = request.json

    if (not data):
        return {"error": "You need to include username and password"}, 400

    username = data[USERNAME]
    password = data[PASSWORD]

    if (not username or not password):
        return {"error": "You need to include username and password"}, 400

    try:
        plex_server = Plex(username, password)
    except SignInError:
        return {"error": "Wrong username or password"}, 401

    session[USERNAME] = username
    session[PASSWORD] = password
    return {"message": "Success"}, 200
Esempio n. 7
0
def choose_server():
    data = request.json
    if (not data):
        return {"error": "You need to include a server name"}, 400

    server = data[SERVER]

    if (not server):
        return {"error": "You need to include a server name"}, 400

    username = session[USERNAME]
    password = session[PASSWORD]
    plex_server = Plex(username, password)
    try:
        plex_server.add_resource_by_name(server)
    except NotMediaServerError:
        return {"error": "Not a plex server"}, 400
    except NoServerError:
        return {"error": "No server with that name"}, 400

    session[SERVER] = server
    return {"message": "Success"}, 200
Esempio n. 8
0

def setup_logger():
    formatter = logging.Formatter('%(asctime)s %(message)s')
    handler = logging.FileHandler('failed-lookup.log')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
    logger.setLevel(logging.INFO)


if __name__ == '__main__':
    config_parser.read('settings.ini')
    plex = PlexServer(config_parser.get('Plex', 'url'),
                      config_parser.get('Plex', 'token'))
    plex_interface = Plex()
    min_weight = int(config_parser.get('AniDB', 'min_tag_weight'))
    setup_logger()

    titles = []
    anime_library = plex.library.section(
        config_parser.get('Plex', 'anime_library'))
    plex_interface.set_library(anime_library)
    for video in anime_library.search():
        titles.append(AniDBTitle(video.title))
        #plex_interface.add_show(video.title, video)

    for anime in titles:
        print('Processing "{}"'.format(anime.title))

        anime.anidb_id = anidb.find_id(anime)
Esempio n. 9
0
    def get_synced_items(self, machine_id=None, client_id_filter=None, user_id_filter=None,
                         rating_key_filter=None, sync_id_filter=None):

        if not machine_id:
            machine_id = plexpy.CONFIG.PMS_IDENTIFIER

        if isinstance(rating_key_filter, list):
            rating_key_filter = [str(k) for k in rating_key_filter]
        elif rating_key_filter:
            rating_key_filter = [str(rating_key_filter)]

        if isinstance(user_id_filter, list):
            user_id_filter = [str(k) for k in user_id_filter]
        elif user_id_filter:
            user_id_filter = [str(user_id_filter)]

        sync_list = self.get_plextv_sync_lists(machine_id, output_format='xml')
        user_data = users.Users()

        synced_items = []

        try:
            xml_head = sync_list.getElementsByTagName('SyncList')
        except Exception as e:
            logger.warn("Tautulli PlexTV :: Unable to parse XML for get_synced_items: %s." % e)
            return {}

        for a in xml_head:
            client_id = helpers.get_xml_attr(a, 'clientIdentifier')

            # Filter by client_id
            if client_id_filter and str(client_id_filter) != client_id:
                continue

            sync_list_id = helpers.get_xml_attr(a, 'id')
            sync_device = a.getElementsByTagName('Device')

            for device in sync_device:
                device_user_id = helpers.get_xml_attr(device, 'userID')
                try:
                    device_username = user_data.get_details(user_id=device_user_id)['username']
                    device_friendly_name = user_data.get_details(user_id=device_user_id)['friendly_name']
                except:
                    device_username = ''
                    device_friendly_name = ''
                device_name = helpers.get_xml_attr(device, 'name')
                device_product = helpers.get_xml_attr(device, 'product')
                device_product_version = helpers.get_xml_attr(device, 'productVersion')
                device_platform = helpers.get_xml_attr(device, 'platform')
                device_platform_version = helpers.get_xml_attr(device, 'platformVersion')
                device_type = helpers.get_xml_attr(device, 'device')
                device_model = helpers.get_xml_attr(device, 'model')
                device_last_seen = helpers.get_xml_attr(device, 'lastSeenAt')

            # Filter by user_id
            if user_id_filter and device_user_id not in user_id_filter:
                continue

            for synced in a.getElementsByTagName('SyncItems'):
                sync_item = synced.getElementsByTagName('SyncItem')
                for item in sync_item:

                    sync_media_type = None
                    rating_key = None
                    for location in item.getElementsByTagName('Location'):
                        location_uri = unquote(helpers.get_xml_attr(location, 'uri'))

                        if location_uri.startswith('library://'):
                            if 'collection' in location_uri:
                                sync_media_type = 'collection'
                            clean_uri = location_uri.split('/')
                            rating_key = next((j for i, j in zip(clean_uri[:-1], clean_uri[1:])
                                              if i in ('metadata', 'collections')), None)

                        elif location_uri.startswith('playlist://'):
                            sync_media_type = 'playlist'
                            tokens = users.Users().get_tokens(user_id=device_user_id)
                            if tokens['server_token']:
                                plex = Plex(token=tokens['server_token'])
                                for playlist in plex.PlexServer.playlists():
                                    if location_uri.endswith(playlist.guid):
                                        rating_key = str(playlist.ratingKey)  # String for backwards consistency

                    # Filter by rating_key
                    if rating_key_filter and rating_key not in rating_key_filter:
                        continue

                    sync_id = helpers.get_xml_attr(item, 'id')

                    # Filter by sync_id
                    if sync_id_filter and str(sync_id_filter) != sync_id:
                        continue

                    sync_version = helpers.get_xml_attr(item, 'version')
                    sync_root_title = helpers.get_xml_attr(item, 'rootTitle')
                    sync_title = helpers.get_xml_attr(item, 'title')
                    sync_metadata_type = helpers.get_xml_attr(item, 'metadataType')
                    sync_content_type = helpers.get_xml_attr(item, 'contentType')

                    for status in item.getElementsByTagName('Status'):
                        status_failure_code = helpers.get_xml_attr(status, 'failureCode')
                        status_failure = helpers.get_xml_attr(status, 'failure')
                        status_state = helpers.get_xml_attr(status, 'state')
                        status_item_count = helpers.get_xml_attr(status, 'itemsCount')
                        status_item_complete_count = helpers.get_xml_attr(status, 'itemsCompleteCount')
                        status_item_downloaded_count = helpers.get_xml_attr(status, 'itemsDownloadedCount')
                        status_item_ready_count = helpers.get_xml_attr(status, 'itemsReadyCount')
                        status_item_successful_count = helpers.get_xml_attr(status, 'itemsSuccessfulCount')
                        status_total_size = helpers.get_xml_attr(status, 'totalSize')
                        status_item_download_percent_complete = helpers.get_percent(
                            status_item_downloaded_count, status_item_count)

                    for settings in item.getElementsByTagName('MediaSettings'):
                        settings_video_bitrate = helpers.get_xml_attr(settings, 'maxVideoBitrate')
                        settings_video_quality = helpers.get_xml_attr(settings, 'videoQuality')
                        settings_video_resolution = helpers.get_xml_attr(settings, 'videoResolution')
                        settings_audio_boost = helpers.get_xml_attr(settings, 'audioBoost')
                        settings_audio_bitrate = helpers.get_xml_attr(settings, 'musicBitrate')
                        settings_photo_quality = helpers.get_xml_attr(settings, 'photoQuality')
                        settings_photo_resolution = helpers.get_xml_attr(settings, 'photoResolution')

                    sync_details = {"device_name": device_name,
                                    "platform": device_platform,
                                    "user_id": device_user_id,
                                    "user": device_friendly_name,
                                    "username": device_username,
                                    "root_title": sync_root_title,
                                    "sync_title": sync_title,
                                    "metadata_type": sync_metadata_type,
                                    "content_type": sync_content_type,
                                    "rating_key": rating_key,
                                    "state": status_state,
                                    "item_count": status_item_count,
                                    "item_complete_count": status_item_complete_count,
                                    "item_downloaded_count": status_item_downloaded_count,
                                    "item_downloaded_percent_complete": status_item_download_percent_complete,
                                    "video_bitrate": settings_video_bitrate,
                                    "audio_bitrate": settings_audio_bitrate,
                                    "photo_quality": settings_photo_quality,
                                    "video_quality": settings_video_quality,
                                    "total_size": status_total_size,
                                    "failure": status_failure,
                                    "client_id": client_id,
                                    "sync_id": sync_id,
                                    "sync_media_type": sync_media_type
                                    }

                    synced_items.append(sync_details)

        return session.filter_session_info(synced_items, filter_key='user_id')