[3] fix deleting playlists

This commit is contained in:
meisnate12 2022-05-28 12:01:51 -04:00
parent 3e8cb33a83
commit e64c56f4f2
5 changed files with 33 additions and 16 deletions

View file

@ -1 +1 @@
1.17.0-develop2
1.17.0-develop3

View file

@ -1,7 +1,7 @@
import os, re, time
from datetime import datetime
from modules import anidb, anilist, flixpatrol, icheckmovies, imdb, letterboxd, mal, plex, radarr, reciperr, sonarr, tautulli, tmdb, trakt, tvdb, mdblist, util
from modules.util import Failed, NotScheduled, NotScheduledRange, Overlay
from modules.util import Failed, NotScheduled, NotScheduledRange, Overlay, Deleted
from plexapi.audio import Artist, Album, Track
from plexapi.exceptions import BadRequest, NotFound
from plexapi.video import Movie, Show, Season, Episode
@ -293,7 +293,7 @@ class CollectionBuilder:
logger.debug(f"Value: {data[methods['delete_playlist']]}")
if util.parse(self.Type, "delete_playlist", self.data, datatype="bool", methods=methods, default=False):
self.obj = self.library.get_playlist(self.name)
logger.info(self.delete())
raise Deleted(self.delete())
else:
self.libraries.append(self.library)
@ -2576,18 +2576,23 @@ class CollectionBuilder:
self.config.Trakt.sync_list(self.sync_to_trakt_list, current_ids)
def delete(self):
output = ""
if self.playlist:
output = f"Deleting {self.Type} {self.obj.title}"
output += f"\n{self.Type} {'deleted' if self.obj else 'not found'} on {self.library.account.username}"
elif self.obj:
output = f"{self.Type} {self.obj.title} deleted"
else:
output = ""
if self.obj:
self.library.query(self.obj.delete)
output = f"{self.Type} {self.obj.title} deleted"
if self.playlist:
if self.valid_users:
for user in self.valid_users:
try:
self.library.delete_user_playlist(self.obj.title, user)
output += f"\nPlaylist {self.obj.title} deleted on User {user}"
except NotFound:
output += f"\nPlaylist {self.obj.title} not found on User {user}"
if self.playlist and self.valid_users:
for user in self.valid_users:
try:
self.library.delete_user_playlist(self.obj.title, user)
output += f"\nPlaylist deleted on User {user}"
except NotFound:
output += f"\nPlaylist not found on User {user}"
return output
def sync_playlist(self):

View file

@ -417,6 +417,7 @@ class Plex(Library):
self.type = self.Plex.type.capitalize()
self._users = []
self._all_items = []
self._account = None
self.agent = self.Plex.agent
self.is_movie = self.type == "Movie"
self.is_show = self.type == "Show"
@ -615,7 +616,7 @@ class Plex(Library):
def users(self):
if not self._users:
users = []
for user in self.PlexServer.myPlexAccount().users():
for user in self.account.users():
if self.PlexServer.machineIdentifier in [s.machineIdentifier for s in user.servers]:
users.append(user.title)
self._users = users
@ -624,6 +625,12 @@ class Plex(Library):
def delete_user_playlist(self, title, user):
self.PlexServer.switchUser(user).playlist(title).delete()
@property
def account(self):
if self._account is None:
self._account = self.PlexServer.myPlexAccount()
return self._account
def playlist_report(self):
playlists = {}
def scan_user(server, username):
@ -634,7 +641,7 @@ class Plex(Library):
playlists[playlist.title].append(username)
except requests.exceptions.ConnectionError:
pass
scan_user(self.PlexServer, self.PlexServer.myPlexAccount().title)
scan_user(self.PlexServer, self.account.title)
for user in self.users:
scan_user(self.PlexServer.switchUser(user), user)
return playlists

View file

@ -21,6 +21,9 @@ class TimeoutExpired(Exception):
class Failed(Exception):
pass
class Deleted(Exception):
pass
class NotScheduled(Exception):
pass

View file

@ -112,7 +112,7 @@ from modules import util
util.logger = logger
from modules.builder import CollectionBuilder
from modules.config import ConfigFile
from modules.util import Failed, NotScheduled
from modules.util import Failed, NotScheduled, Deleted
def my_except_hook(exctype, value, tb):
for _line in traceback.format_exception(etype=exctype, value=value, tb=tb):
@ -816,6 +816,8 @@ def run_playlists(config):
builder.send_notifications(playlist=True)
except Deleted as e:
logger.info(e)
except NotScheduled as e:
logger.info(e)
if str(e).endswith("and was deleted"):