| 
					
				 | 
			
			
				@@ -3,10 +3,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import datetime as dt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import os 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import re 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import symuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# import symuid.library.cmus 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import sys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import symuid.library.cmus 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 FILE_PREFIX = b'CTC' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 VERSION_LENGTH = 1 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -15,48 +13,6 @@ SUPPORTED_VERSION = b'\x0c' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 FLAGS_BYTEORDER = 'big' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 FLAGS_LENGTH = 4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 FLAG_64_BIT = 0x01 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-RESERVED_PAD_REGEX = rb'\xff{16,}' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-STRING_TERMINATOR = b'\x00' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-def _int_from_bytes_sys(data_bytes): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return int.from_bytes(data_bytes, byteorder=sys.byteorder) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Track: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def __init__(self, cache_size, cache_bytes): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        struct cache_entry { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // size of this struct including size itself 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uint32_t size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int32_t play_count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int64_t mtime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int32_t duration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int32_t bitrate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int32_t bpm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            uint8_t _reserved[CACHE_ENTRY_RESERVED_SIZE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // filename, codec, codec_profile and N * (key, val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            char strings[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        assert len(cache_bytes) + 4 == cache_size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self._play_count = _int_from_bytes_sys(cache_bytes[0:4]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # self._mtime = _int_from_bytes_sys(cache_bytes[4:12]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # self._duration_seconds = _int_from_bytes_sys(cache_bytes[12:16]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # self._bitrate = _int_from_bytes_sys(cache_bytes[16:20]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # self._bpm = _int_from_bytes_sys(cache_bytes[20:24]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        strings = re.split(RESERVED_PAD_REGEX, cache_bytes)[1] \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            .split(STRING_TERMINATOR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self._path = strings[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def path(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return self._path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def play_count(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return self._play_count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def import_track(cmus_track): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,10 +35,10 @@ def symuid_import_cmus(cache_path): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         assert flags & ~FLAG_64_BIT == 0, flags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # size includes size itself 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         while True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            size = _int_from_bytes_sys(cache.read(4)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            size = symuid.library.cmus._int_from_bytes_sys(cache.read(4)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if size == 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cmus_track = Track(size, cache.read(size - 4)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cmus_track = symuid.library.cmus.Track(size, cache.read(size - 4)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             import_track(cmus_track) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # see cache.c write_ti ALIGN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             cache.read((-size) % 8) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -107,4 +63,5 @@ def main(argv): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if __name__ == "__main__": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    import sys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sys.exit(main(sys.argv)) 
			 |