from pathlib import Path
from xml.sax.saxutils import escape
from eyed3.plugins import LoaderPlugin
from eyed3.utils.console import printMsg
[docs]class Xep118Plugin(LoaderPlugin):
NAMES = ["xep-118"]
SUMMARY = "Outputs all tags in XEP-118 XML format. "\
"(see: http://xmpp.org/extensions/xep-0118.html)"
def __init__(self, arg_parser):
super().__init__(arg_parser, cache_files=True, track_images=False)
g = self.arg_group
g.add_argument("--no-pretty-print", action="store_true",
help="Output without new lines or indentation.")
[docs] def handleFile(self, f, *args, **kwargs):
super().handleFile(f)
if self.audio_file and self.audio_file.tag:
xml = self.getXML(self.audio_file)
printMsg(xml)
[docs] def getXML(self, audio_file):
tag = audio_file.tag
pprint = not self.args.no_pretty_print
nl = "\n" if pprint else ""
indent = (" " * 2) if pprint else ""
xml = f"<tune xmlns='http://jabber.org/protocol/tune'>{nl}"
if tag.artist:
xml += f"{indent}<artist>{escape(tag.artist)}</artist>{nl}"
if tag.title:
xml += f"{indent}<title>{escape(tag.title)}</title>{nl}"
if tag.album:
xml += f"{indent}<source>{escape(tag.album)}</source>{nl}"
xml += f"{indent}<track>file://{escape(str(Path(audio_file.path).absolute()))}</track>{nl}"
if audio_file.info:
xml += f"{indent}<length>{audio_file.info.time_secs:.2f}</length>{nl}"
xml += "</tune>"
return xml