Skip to content

Commit

Permalink
Merge pull request #152 from ukdtom/tommy-work
Browse files Browse the repository at this point in the history
Tommy work
  • Loading branch information
ukdtom authored Dec 27, 2020
2 parents 1cc3579 + 98c5b74 commit f3d51fc
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 58 deletions.
2 changes: 1 addition & 1 deletion Contents/Code/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
########################################################################

# APP specific stuff
VERSION = ' V2.0.0.13'
VERSION = ' V2.0.0.14'
APPNAME = 'ExportTools'
NAME = APPNAME + VERSION
DESCRIPTION = 'Export Plex libraries to csv-files or xlsx-files'
Expand Down
51 changes: 37 additions & 14 deletions Contents/Code/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,9 @@ def GetRegInfo(myMedia, myField, default=''):
return myLookUp.encode('utf8')


def GetRegInfo2(myMedia, myField, default=consts.DEFAULT, key='N/A'):
def GetRegInfo2(
myMedia, myField, default=consts.DEFAULT,
key='N/A', mediaType='movie'):
''' Pull's a field from the xml '''
returnVal = ''
global retVal
Expand Down Expand Up @@ -165,15 +167,26 @@ def GetRegInfo2(myMedia, myField, default=consts.DEFAULT, key='N/A'):
returnVal = default
return WrapStr(fixCRLF(returnVal)).encode('utf8')
else:
if key in ['IMDB ID', 'TMDB ID', 'IMDB Link', 'TMDB Link']:
if key in [
'IMDB ID', 'TMDB ID', 'IMDB Link',
'TMDB Link', 'TVDB ID', 'TVDB Link']:
try:
if key == 'IMDB Link':
returnVal = ''.join((
'https://www.imdb.com/title/',
myMedia.xpath(myField)[0].split("//")[1]))
elif key == 'TMDB Link':
if mediaType == 'movie':
returnVal = ''.join((
'https://www.themoviedb.org/movie/',
myMedia.xpath(myField)[0].split("//")[1]))
else:
returnVal = ''.join((
'https://www.themoviedb.org/tv/',
myMedia.xpath(myField)[0].split("//")[1]))
elif key == 'TVDB Link':
returnVal = ''.join((
'https://www.themoviedb.org/movie/',
'https://www.GED.org/TEST/',
myMedia.xpath(myField)[0].split("//")[1]))
else:
returnVal = myMedia.xpath(myField)[0].split("//")[1]
Expand Down Expand Up @@ -270,7 +283,7 @@ def getLevelFields(levelFields, fieldnames):
return fieldnamesList


def getItemInfo(et, myRow, fieldList):
def getItemInfo(et, myRow, fieldList, mediaType='movie'):
''' fetch the actual info for the element '''
intBehindthescenes = 0
intDeleted = 0
Expand All @@ -286,21 +299,24 @@ def getItemInfo(et, myRow, fieldList):
key = str(item[0])
value = str(item[1])
# Special deal for Sort Title
if key == 'Sort title':
if key in ['Sort title', 'Episode Sort Title']:
if Prefs['Sort_title']:
if consts.DEFAULT == GetRegInfo2(
et,
value,
consts.DEFAULT,
key=key):
element = GetRegInfo2(
et, '@title', consts.DEFAULT, key='Title')
et, '@title', consts.DEFAULT, key='Title',
mediaType=mediaType)
else:
element = GetRegInfo2(
et, value, consts.DEFAULT, key=key)
et, value, consts.DEFAULT, key=key,
mediaType=mediaType)
else:
element = GetRegInfo2(
et, value, consts.DEFAULT, key=key)
et, value, consts.DEFAULT, key=key,
mediaType=mediaType)
elif key.startswith('Extras-'):
retVals = et.xpath(value)
element = str(len(retVals))
Expand All @@ -312,7 +328,8 @@ def getItemInfo(et, myRow, fieldList):
et,
value,
consts.DEFAULT,
key='Part File Only')
key='Part File Only',
mediaType=mediaType)
if key == 'Part File Only':
element = os.path.split(element)[1]
else:
Expand All @@ -324,21 +341,27 @@ def getItemInfo(et, myRow, fieldList):
et,
value,
consts.DEFAULT,
key=key):
key=key,
mediaType=mediaType):
element = GetRegInfo2(
et, '@title', consts.DEFAULT, key='Title')
et, '@title', consts.DEFAULT, key='Title',
mediaType=mediaType)
else:
element = GetRegInfo2(
et, value, consts.DEFAULT, key=key)
et, value, consts.DEFAULT, key=key,
mediaType=mediaType)
else:
element = GetRegInfo2(
et,
value,
consts.DEFAULT,
key=key)
key=key,
mediaType=mediaType)
# part file
elif key.startswith('Part File'):
element = GetRegInfo2(et, value, consts.DEFAULT, key=key)
element = GetRegInfo2(
et, value, consts.DEFAULT, key=key,
mediaType=mediaType)
if key == 'Part File':
element = os.path.split(element)[1]
elif key == 'Part File Path':
Expand Down
4 changes: 2 additions & 2 deletions Contents/Code/output.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,9 @@ def createHeader(outFile, sectionType, playListType='', level=None):
# Do we have an csv output here?
if extension == '.csv':
try:
targetfile = io.open(outFile, 'wb')
targetfile = io.open(outFile, 'w', encoding='utf8')
except Exception, e:
targetfile = io.open(outFile, 'wb', encoding='utf8')
targetfile = io.open(outFile, 'w')
# Create output file, and print the header
writer = csv.DictWriter(
targetfile,
Expand Down
16 changes: 16 additions & 0 deletions Contents/Code/tvfields.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@
('Intro Stop', 'Marker[@type="intro"]/@endTimeOffset'),
('MetaDB Link', '@guid'),
('MetaData Language', '@guid'),
('IMDB ID',
'//Guid[starts-with(@id, "imdb")]/@id'),
('IMDB Link',
'//Guid[starts-with(@id, "imdb")]/@id'),
('TMDB ID',
'//Guid[starts-with(@id, "tmdb")]/@id'),
('TVDB ID',
'//Guid[starts-with(@id, "tvdb")]/@id'),
('Part File Combined',
'Media/Part/@file'),
('Part File',
Expand Down Expand Up @@ -227,6 +235,14 @@
Show_3 = [
('Location', '//Location/@path'),
('MetaDB Link', '@guid'),
('IMDB ID',
'//Guid[starts-with(@id, "imdb")]/@id'),
('IMDB Link',
'//Guid[starts-with(@id, "imdb")]/@id'),
('TMDB ID',
'//Guid[starts-with(@id, "tmdb")]/@id'),
('TVDB ID',
'//Guid[starts-with(@id, "tvdb")]/@id'),
('Labels', '//Label/@tag'),
('Collection', ''),
('Delete Item Watched after days', '@autoDeletionItemPolicyWatchedLibrary')
Expand Down
138 changes: 97 additions & 41 deletions Contents/Code/tvseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,27 +117,35 @@ def getTvInfo(myMedia, myRow, level=None):
else:
prefsLevel = Prefs['TV_Level']
if prefsLevel in ['Show Only 1', 'Show Only 2']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Show_1)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Show_1, mediaType='show')
if prefsLevel == 'Show Only 2':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Show_2)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Show_2, mediaType='show')
return myRow
elif 'Special' in prefsLevel:
if prefsLevel == 'Special Level 1':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.SLevel_1)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.SLevel_1, mediaType='episode')
elif prefsLevel == 'Special Level 2':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.SLevel_2)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.SLevel_2, mediaType='episode')
elif prefsLevel == 'Special Level 3':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.SLevel_3)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.SLevel_3, mediaType='episode')
elif prefsLevel == 'Special Level 4':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.SLevel_4)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.SLevel_4, mediaType='episode')
elif prefsLevel == 'Special Level 666':
myRow = misc.getItemInfo(myMedia, myRow, tvfields.SLevel_666)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.SLevel_666, mediaType='episode')
if '666' in prefsLevel:
myRow = misc.getMediaPath(myMedia, myRow)
return myRow
else:
# Get Simple Info
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_1)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_1, mediaType='episode')
# Get Basic Info
if prefsLevel in [
'Level 2',
Expand All @@ -148,7 +156,8 @@ def getTvInfo(myMedia, myRow, level=None):
'Level 7',
'Level 8',
'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_2)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_2, mediaType='episode')
# Get Extended Info
if prefsLevel in [
'Level 3',
Expand All @@ -158,7 +167,8 @@ def getTvInfo(myMedia, myRow, level=None):
'Level 7',
'Level 8',
'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_3)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_3, mediaType='episode')
# Get Extreme Info
if prefsLevel in [
'Level 4',
Expand All @@ -167,21 +177,25 @@ def getTvInfo(myMedia, myRow, level=None):
'Level 7',
'Level 8',
'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_4)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_4, mediaType='episode')
# Get Extreme 2 Info
if prefsLevel in [
'Level 5',
'Level 6',
'Level 7',
'Level 8',
'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_5)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_5, mediaType='episode')
# Get Extreme 3 Info
if prefsLevel in ['Level 6', 'Level 7', 'Level 8', 'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_6)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_6, mediaType='episode')
# Get Extreme 3 Info
if prefsLevel in ['Level 7', 'Level 8', 'Level 666']:
myRow = misc.getItemInfo(myMedia, myRow, tvfields.Level_7)
myRow = misc.getItemInfo(
myMedia, myRow, tvfields.Level_7, mediaType='episode')
# Get Media Path as well
if '666' in prefsLevel:
myRow = misc.getMediaPath(myMedia, myRow)
Expand All @@ -198,7 +212,7 @@ def getShowOnly(myMedia, myRow, level):
for key, value in tvfields.Show_1:
element = myMedia.get(value[1:])
if element is None:
element = 'N/A'
element = consts.DEFAULT
element = misc.WrapStr(misc.fixCRLF(element).encode('utf8'))
if key == 'MetaDB Link':
myRow[key] = misc.metaDBLink(element)
Expand All @@ -221,35 +235,77 @@ def getShowOnly(myMedia, myRow, level):
directURL, timeout=float(consts.PMSTIMEOUT))
for key, value in tvfields.Show_3:
if key == 'MetaDB Link':
myRow[key] = misc.metaDBLink(
str(directMedia.xpath('//Directory/@guid')))
try:
myRow[key] = misc.metaDBLink(
str(directMedia.xpath('//Directory/@guid')))
except Exception, e:
myRow[key] = consts.DEFAULT
pass
elif key == 'Delete Item Watched after days':
deleteDays = directMedia.xpath(
'//Directory/@autoDeletionItemPolicyWatchedLibrary')
if deleteDays == ['100']:
deleteDays = 'Next Refresh'
elif deleteDays == []:
deleteDays = 'Never'
elif deleteDays == ['0']:
deleteDays = 'Never'
elif deleteDays == ['1']:
deleteDays = '1 Day'
elif deleteDays == ['7']:
deleteDays = '7 Days'
myRow[key] = deleteDays
try:
deleteDays = directMedia.xpath(
'//Directory/@autoDeletionItemPolicyWatchedLibrary')
if deleteDays == ['100']:
deleteDays = 'Next Refresh'
elif deleteDays == []:
deleteDays = 'Never'
elif deleteDays == ['0']:
deleteDays = 'Never'
elif deleteDays == ['1']:
deleteDays = '1 Day'
elif deleteDays == ['7']:
deleteDays = '7 Days'
myRow[key] = deleteDays
except Exception, e:
myRow[key] = consts.DEFAULT
pass
elif key == 'Collection':
serieInfo = directMedia.xpath('//Directory/Collection')
myCol = ''
for collection in serieInfo:
try:
serieInfo = directMedia.xpath('//Directory/Collection')
myCol = ''
for collection in serieInfo:
if myCol == '':
myCol = collection.get('tag')
else:
myCol = myCol + \
Prefs['Seperator'] + collection.get('tag')
if myCol == '':
myCol = collection.get('tag')
myCol = consts.DEFAULT
myRow[key] = myCol
except Exception, e:
myRow[key] = consts.DEFAULT
pass
elif key in [
'IMDB ID', 'TMDB ID', 'IMDB Link',
'TMDB Link', 'TVDB ID', 'TVDB Link']:
try:
if key == 'IMDB Link':
myRow[key] = ''.join((
'https://www.imdb.com/title/',
directMedia.xpath(value)[0].split("//")[1]))
elif key == 'TMDB Link':
if mediaType == 'movie':
myRow[key] = ''.join((
'https://www.themoviedb.org/movie/',
directMedia.xpath(value)[0].split("//")[1]))
else:
myRow[key] = ''.join((
'https://www.themoviedb.org/tv/',
directMedia.xpath(value)[0].split("//")[1]))
elif key == 'TVDB Link':
myRow[key] = ''.join((
'This should not show up',
directMedia.xpath(value)[0].split("//")[1]))
else:
myCol = myCol + \
Prefs['Seperator'] + collection.get('tag')
if myCol == '':
myCol = 'N/A'
myRow[key] = myCol
myRow[key] = directMedia.xpath(value)[0].split("//")[1]
except Exception, e:
myRow[key] = consts.DEFAULT
pass
else:
myRow[key] = misc.GetArrayAsString(
directMedia, value, default=consts.DEFAULT)
try:
myRow[key] = misc.GetArrayAsString(
directMedia, value, default=consts.DEFAULT)
except Exception, e:
myRow[key] = consts.DEFAULT
pass
return myRow
17 changes: 17 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
V2.0.0.14:
- New:
- #151 Handle new Guid for shows with the new TV Agent
* Added fields to episodes level 4 as:
* IMDB ID
* IMDB Link
* TMDB ID
* TVDB ID
* Added fields to Show_Only level 3 as:
* IMDB ID
* IMDB Link
* TMDB ID
* TVDB ID
- Fix:
- #144 binary mode doesn't take an encoding argument
- #147 Default Sort Title to Title, if empty

V2.0.0.13:
- New:
- #149 Export TV Show Original Added Date when using Shows Only Levels
Expand Down

0 comments on commit f3d51fc

Please sign in to comment.