[docs]defdecode_track(track:str)->Track:"""Decodes a base64 track string into a Track object. Parameters ---------- track: :class:`str` The base64 track string. Returns ------- :class:`Track` The decoded Track object """reader=DataReader(track)version=reader.read_version()plugin_info={}title=reader.read_utfm()author=reader.read_utfm()length=reader.read_long()identifier=reader.read_utf()is_stream=reader.read_boolean()uri=reader.read_nullable_utf()ifversion>=2elseNoneifversion>=3:artworkUrl=reader.read_nullable_utf()isrc=reader.read_nullable_utf()else:artworkUrl=Noneisrc=Nonesource=reader.read_utf()try:matchsource:case"local"|"http"ifversion>=2:plugin_info["probeInfo"]=reader.read_utfm()case"spotify"|"applemusic"|"deezer"ifversion==2:isrc=reader.read_nullable_utf()artworkUrl=reader.read_nullable_utf()case"yandexmusic"ifversion==2:artworkUrl=reader.read_nullable_utf()# Position__=reader.read_long()# Discard position, we don't need itexceptExceptionasexc:LOGGER.verbose("Error while decoding version %d track: %s",version,track,exc_info=exc)raiseUnicodeError("Error while decoding track")fromexcreturntyping.cast(Track,from_dict(data_class=Track,data={"encoded":track,"info":{"version":version,"title":title,"author":author,"length":length,"identifier":identifier,"isStream":is_stream,"uri":uri,"isSeekable":notis_stream,"sourceName":source,"artworkUrl":artworkUrl,"isrc":isrc,"position":0,},"pluginInfo":plugin_info,},),)