I see.
Not that it's a big deal for me now, because my Folder Metadata generation script seems to force ES to display the folder properly, but in future it would be nice for a way to disable that via settings or something...
Here is the updated Python Code. This works for me only because:
I generated the folder names based off the ROM names (stripping them of the region suffix tags etc)
Have already moved all the ROMS into their respective folder.
Folder metadata will only be applied if the ROM it contains already has been scraped
#Code Start
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import ElementTree
tree = ET.parse('gamelist.xml')
root = tree.getroot()
subPathGames = []
def makefolder(element):
print("Folder Metadata Not Found for ", element, "-> making folder")
folder_created = False
for game in root.findall('game'):
for path in game.findall('path'):
if all([element == path.text.split('/')[1], folder_created == False]):
#print ("Game Data" , game.tostring(xml).decode())
#Construct with this indexes data
folder_tag = ET.Element("folder")
name_tag = ET.Element("name")
name_tag.text = path.text.split('/')[1].strip()
folder_tag.append(name_tag)
image_tag = ET.Element("image")
if game.find('image') == None:
print("img not found")
else:
image_tag.text = game.find('image').text
folder_tag.append(image_tag)
desc_tag = ET.Element("desc")
if game.find('desc') == None:
print("desc not found")
else:
desc_tag.text = game.find('desc').text
folder_tag.append(desc_tag)
rating_tag = ET.Element("rating")
if game.find('rating') == None:
print("rating not found")
else:
rating_tag.text = game.find('rating').text
folder_tag.append(rating_tag)
releasedate_tag = ET.Element("releasedate")
if game.find('releasedate') == None:
print("release date not found")
else:
releasedate_tag.text = game.find('releasedate').text
folder_tag.append(releasedate_tag)
developer_tag = ET.Element("developer")
if game.find('developer') == None:
print("dev date not found")
else:
developer_tag.text = game.find('developer').text
folder_tag.append(developer_tag)
publisher_tag = ET.Element("publisher")
if game.find('publisher') == None:
print("pub date not found")
else:
publisher_tag.text = game.find('publisher').text
folder_tag.append(publisher_tag)
genre_tag = ET.Element("genre")
if game.find('genre') == None:
print("genre not found")
else:
genre_tag.text = game.find('genre').text
folder_tag.append(genre_tag)
players_tag = ET.Element("players")
if game.find('players') == None:
print("players not found")
else:
players_tag.text = game.find('players').text
folder_tag.append(players_tag)
path_tag = ET.Element("path")
path_tag.text = "./" + path.text.split('/')[1].strip()
folder_tag.append(path_tag)
root.append(folder_tag)
folder_created = True
return
for game in root.findall('game'):
for path in game.findall('path'):
if path.text.count('/') > 1:
subPathGames.append(path.text.split('/')[1])
else:
continue
#de-duplicate
subPathGames = list(set(subPathGames))
print("Unique List of Games in Subfolder:\n", subPathGames)
for element in subPathGames:
#no folder elements at all! lets start one!
if root.findall('folder') == None:
print("Creating first folder metadata in gamelist.xml")
makefolder(element)
continue
else:
exists = False
for folder in root.findall('folder'):
#print("ELEMENT: " ,element, " NAME: ", folder.find('name').text)
if element == folder.find('name').text:
print ("Folder Already Exists! Next Question! Faster!")
exists = True
break
if not exists:
makefolder(element)
print ("All folders made - now writing to file")
new_root = ElementTree(root)
new_root.write("gamelist-new.xml")
#Code End
I suppose can be run straight from the Pi if Python is installed. or else just use WinSCP to transfer, modify and return the gamelist.xml file as normal.