Skip to content

Commit 74c2c44

Browse files
author
xxx
committed
Cathy import to single record (draft)
1 parent bd2754d commit 74c2c44

File tree

3 files changed

+311
-29
lines changed

3 files changed

+311
-29
lines changed

.github/workflows/run.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ jobs:
259259
with:
260260
tag_name: ${{ steps.version.outputs.version }}
261261
name: Librer ${{ steps.version.outputs.version }}
262-
draft: false
262+
draft: true
263263
prerelease: false
264264
files: |
265265
librer.${{ steps.version.outputs.version }}.lin.zip

src/core.py

Lines changed: 133 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)