2018-04-18 15:09:24 +02:00
from beets . plugins import BeetsPlugin
import os
2018-04-28 17:28:24 +02:00
rename_cache = os . path . expanduser ( ' ~/.cache/beets_mv3u_renames ' )
2018-04-18 15:09:24 +02:00
class MV3U ( BeetsPlugin ) :
def __init__ ( self ) :
super ( MV3U , self ) . __init__ ( )
2018-04-28 17:28:24 +02:00
self . register_listener ( ' item_moved ' , self . add_rename )
self . register_listener ( ' import_task_created ' , self . clear_persistence )
self . register_listener ( ' import ' , self . mv3u )
"""
2018-04-18 15:09:24 +02:00
def mv3u ( self , item ) :
# TODO: cache renames, don’t write playlists for every single file
# TODO: sorted caching
src = item . path . decode ( )
dst = item . destination ( ) . decode ( )
playlist_dir = self . config [ ' playlists ' ] . get ( )
if not playlist_dir :
return
for pl in os . listdir ( playlist_dir ) :
pl = os . path . join ( playlist_dir , pl )
p2 = None
with open ( pl , ' r ' ) as p :
p2 = [ l . replace ( src , dst ) for l in p ]
with open ( pl , ' w ' ) as p :
p . write ( ' ' . join ( p2 ) )
#print(f'Changed entry {src} to {dst} in {pl}')
2018-04-28 17:28:24 +02:00
"""
def clear_persistence ( self , task , session ) :
if os . path . isfile ( rename_cache ) :
os . remove ( rename_cache )
def add_rename ( self , item ) :
src = item . path . decode ( )
dst = item . destination ( ) . decode ( )
with open ( rename_cache , ' a ' ) as cache :
cache . write ( f ' { src } \t \t { dst } \n ' )
def mv3u ( self , lib , paths ) :
def read_renames ( ) - > dict :
with open ( rename_cache ) as cache :
return dict ( [ line . rstrip ( ' \n ' ) . split ( ' \t \t ' ) for line in cache ] )
print ( read_renames ( ) )
2018-04-18 15:09:24 +02:00