@@ -2038,26 +2038,34 @@ def flat_to_tree(curr_dict,all_path_elems_par,size_par,mtime_par,descr_par):
20382038
20392039 return filenames ,sld ,customdataset
20402040
2041- def caf_data_to_scan_like_data (self , caf_names_dict ):
2042- def convert_data ( i = 0 ):
2043- this_level_data = {}
2044- try :
2045- for date , m_lLength , m_pszName in caf_names_dict [ i ]:
2041+ def convert_data (self ,i , caf_names_dict ):
2042+ this_level_data = {}
2043+ try :
2044+ for date , m_lLength , m_pszName in caf_names_dict [ i ] :
2045+ mtime = int ( date )
20462046
2047- mtime = int (date )
2047+ if m_lLength < 0 :
2048+ #[size,is_dir,is_file,is_symlink,is_bind,has_files,mtime,subdict]
2049+ this_level_data [m_pszName ]= [0 ,True ,False ,False ,False ,True ,mtime ,self .convert_data (abs (m_lLength ),caf_names_dict )]
2050+ else :
2051+ #scan_like_data[name] = [size,is_dir,is_file,is_symlink,is_bind,has_files,mtime]
2052+ this_level_data [m_pszName ]= [int (m_lLength ),False ,True ,False ,False ,False ,mtime ]
2053+ except Exception as e :
2054+ print ('ERROR:' ,e )
20482055
2049- if m_lLength < 0 :
2050- #[size,is_dir,is_file,is_symlink,is_bind,has_files,mtime,subdict]
2051- this_level_data [m_pszName ]= [0 ,True ,False ,False ,False ,True ,mtime ,convert_data (abs (m_lLength ))]
2052- else :
2053- #scan_like_data[name] = [size,is_dir,is_file,is_symlink,is_bind,has_files,mtime]
2054- this_level_data [m_pszName ]= [int (m_lLength ),False ,True ,False ,False ,False ,mtime ]
2055- except Exception as e :
2056- print ('ERROR:' ,e )
2056+ return this_level_data
20572057
2058- return this_level_data
2058+ def caf_data_to_scan_like_data (self , caf_names_dict ):
2059+ return self .convert_data (0 ,caf_names_dict )
2060+
2061+ def caf_data_to_scan_like_data_multi (self , caf_names_dict_dict ):
2062+ level_zero_data = {}
2063+ for cafname ,(caf_names_dict ,m_sVersion , m_timeDate , m_strDevice , m_strVolume , m_strAlias , m_dwSerialNumber , m_strComment , m_fFreeSize , m_sArchive ) in caf_names_dict_dict .items ():
20592064
2060- return convert_data ()
2065+ #[size,is_dir,is_file,is_symlink,is_bind,has_files,mtime,subdict]
2066+ level_zero_data [cafname ]= [0 ,True ,False ,False ,False ,True ,m_timeDate ,self .convert_data (abs (0 ),caf_names_dict )]
2067+
2068+ return level_zero_data
20612069
20622070 def wii_data_to_scan_like_data (self ,path_list ,curr_dict_ref ,scan_like_data ,customdata_helper ):
20632071 #path_list_tuple = tuple(path_list)
@@ -2122,7 +2130,7 @@ def wii_data_to_scan_like_data(self,path_list,curr_dict_ref,scan_like_data,custo
21222130 def import_records_wii_scan (self ,import_filenames ,res_list ):
21232131 self .log .info (f'import_records_wii:{ "," .join (import_filenames )} ' )
21242132
2125- self .wii_import_core_info2 = 'init0'
2133+ # self.wii_import_core_info2 = 'init0'
21262134
21272135 gc_disable ()
21282136 res = self .get_wii_files_dict (import_filenames )
@@ -2148,6 +2156,35 @@ def import_records_wii_scan(self,import_filenames,res_list):
21482156 #return res
21492157 res_list [0 ]= res
21502158
2159+ def import_records_cathy_scan (self ,import_filenames ,res_list ):
2160+ self .log .info (f'import_records_cathy:{ "," .join (import_filenames )} ' )
2161+
2162+ #self.cathy_import_core_info2 = 'init0'
2163+
2164+ gc_disable ()
2165+ res = self .get_cathy_files_dict (import_filenames )
2166+ gc_collect ()
2167+ gc_enable ()
2168+
2169+ if len (res )== 8 :
2170+ filenames_set ,filenames_set_per_disk ,cathy_path_tuple_to_data ,cathy_path_tuple_to_data_per_disk ,cathy_paths_dict ,cathy_paths_dict_per_disk ,cd_set ,cd_set_per_disk = res
2171+
2172+ quant_disks = len (cathy_path_tuple_to_data_per_disk )
2173+
2174+ quant_files ,quant_folders = 0 ,0
2175+ for k ,v in cathy_path_tuple_to_data .items ():
2176+ size ,is_dir ,is_file ,is_symlink ,is_bind ,has_files ,mtime ,cd = v
2177+ if is_dir :
2178+ quant_folders += 1
2179+ elif is_file :
2180+ quant_files += 1
2181+
2182+ #return quant_disks,quant_files,quant_folders,filenames_set,filenames_set_per_disk,cathy_path_tuple_to_data,cathy_path_tuple_to_data_per_disk,cathy_paths_dict,cathy_paths_dict_per_disk,cd_set,cd_set_per_disk
2183+ res_list [0 ]= quant_disks ,quant_files ,quant_folders ,filenames_set ,filenames_set_per_disk ,cathy_path_tuple_to_data ,cathy_path_tuple_to_data_per_disk ,cathy_paths_dict ,cathy_paths_dict_per_disk ,cd_set ,cd_set_per_disk
2184+ else :
2185+ #return res
2186+ res_list [0 ]= res
2187+
21512188 def import_records_vvv (self ,postfix ,import_filename ,volumename ,volumeset ,info ,update_callback ,group = None ):
21522189 print ('import_records_vvv' ,postfix ,import_filename ,volumename )
21532190
@@ -2309,6 +2346,85 @@ def import_records_caf_do(self,compr,postfix,label, caf_names_dict,update_callba
23092346
23102347 return None
23112348
2349+ def import_records_caf_do_multi (self ,compr ,label ,caf_names_dict_dict ,update_callback ,filenames_set ,caf_info ,group = None ):
2350+ import_res = []
2351+ new_record = self .create ()
2352+
2353+ expressions = ''
2354+ use_smin = False
2355+ smin_int = 0
2356+ use_smax = False
2357+ smax_int = 0
2358+ executable = 'Imported from "Cathy" database'
2359+ parameters = ''
2360+ shell = False
2361+ timeout = 0
2362+ crc = False
2363+
2364+ new_record .header .scan_path = ''
2365+ new_record .header .info = caf_info
2366+
2367+ scan_like_data = self .caf_data_to_scan_like_data_multi (caf_names_dict_dict )
2368+
2369+ new_record .filenames = tuple (sorted (list (filenames_set )))
2370+ new_record .header .label = label
2371+
2372+ new_record .filenames_helper = {fsname :fsname_index for fsname_index ,fsname in enumerate (new_record .filenames )}
2373+
2374+ ##################################
2375+ mtime = 0
2376+ is_dir = True
2377+ is_file = False
2378+ is_symlink = False
2379+ is_bind = False
2380+ has_cd = bool (new_record .customdata )
2381+ has_files = True
2382+ cd_ok = False
2383+
2384+ new_record .header .references_names = 0
2385+ new_record .header .references_cd = 0
2386+
2387+ sub_size ,sub_quant ,sub_folders_quant = new_record .sld_recalc_rec (scan_like_data )
2388+
2389+ code = LUT_encode [ (is_dir ,is_file ,is_symlink ,is_bind ,has_cd ,has_files ,cd_ok ,False ,False ,False ) ]
2390+
2391+ new_record .header .sum_size = sub_size
2392+ new_record .header .quant_files = sub_quant
2393+ new_record .header .quant_folders = sub_folders_quant
2394+
2395+ new_record .header .items_names = len (new_record .filenames )
2396+ new_record .header .items_cd = len (new_record .customdata )
2397+
2398+ new_record .filestructure = ('' ,code ,sub_size ,mtime ,new_record .tupelize_rec (scan_like_data ,print ))
2399+
2400+ label_filename = safe_filename (label )
2401+
2402+ new_file_path = sep .join ([self .db_dir ,f'caf.{ int (time ())} { label_filename } .dat' ])
2403+
2404+ new_record .save (print ,file_path = new_file_path ,compression_level = compr )
2405+
2406+ self .records .remove (new_record )
2407+
2408+ #############################################
2409+
2410+ new_record_really = self .create ()
2411+
2412+ if res := new_record_really .load (new_file_path ) :
2413+ self .records .remove (new_record_really )
2414+ send2trash_delete (new_file_path )
2415+ import_res .append (str (res ))
2416+ else :
2417+ if group :
2418+ self .assign_new_group (new_record_really ,group )
2419+
2420+ update_callback (new_record_really )
2421+
2422+ if import_res :
2423+ return '\n ' .join (import_res )
2424+
2425+ return None
2426+
2427+
23122428 def import_records_wii_do (self ,compr ,postfix ,label ,quant_files ,quant_folders ,filenames_set ,wii_path_tuple_to_data ,wii_paths_dict ,cd_set ,update_callback ,group = None ):
23132429 import_res = []
23142430
0 commit comments