@@ -186,6 +186,7 @@ def filter_iter_objs(self, iter_objs):
186
186
class ZipPlugin (JmOptionPlugin ):
187
187
plugin_key = 'zip'
188
188
189
+ # noinspection PyAttributeOutsideInit
189
190
def invoke (self ,
190
191
album : JmAlbumDetail ,
191
192
downloader ,
@@ -198,49 +199,39 @@ def invoke(self,
198
199
199
200
from .jm_downloader import JmDownloader
200
201
downloader : JmDownloader
202
+ self .downloader = downloader
203
+ self .level = level
204
+ self .delete_original_file = delete_original_file
201
205
206
+ # 确保压缩文件所在文件夹存在
202
207
zip_dir = JmcomicText .parse_to_abspath (zip_dir )
203
208
mkdir_if_not_exists (zip_dir )
209
+
210
+ # 原文件夹 -> zip文件
211
+ dir_zip_dict = {}
204
212
photo_dict = downloader .all_downloaded [album ]
205
- original_file_dir_list = []
206
213
207
214
if level == 'album' :
208
215
zip_path = self .get_zip_path (album , None , filename_rule , suffix , zip_dir )
209
- original_file_dir_list .append (
210
- self .zip_album (album , photo_dict , zip_path )
211
- )
216
+ dir_path = self .zip_album (album , photo_dict , zip_path )
217
+ dir_zip_dict [dir_path ] = zip_path
212
218
213
219
elif level == 'photo' :
214
- # dst_file_list = []
215
-
216
220
for photo , image_list in photo_dict .items ():
217
221
zip_path = self .get_zip_path (None , photo , filename_rule , suffix , zip_dir )
218
- original_file_dir_list .append (
219
- self .zip_photo (photo , image_list , zip_path )
220
- )
221
- # dst_file_list.append(zip_path)
222
+ dir_path = self .zip_photo (photo , image_list , zip_path )
223
+ dir_zip_dict [dir_path ] = zip_path
222
224
223
225
else :
224
226
raise NotImplementedError (f'level: { level } ' )
225
227
226
- if delete_original_file is True :
227
- self .delete_all_files (downloader .all_downloaded , original_file_dir_list )
228
-
229
- # noinspection PyMethodMayBeStatic
230
- def delete_all_files (self , all_downloaded : dict , dir_list : List [str ]):
231
- import os
232
- for album , photo_dict in all_downloaded .items ():
233
- for photo , image_list in photo_dict .items ():
234
- for f , image in image_list :
235
- os .remove (f )
236
- jm_debug ('plugin.zip.remove' , f'移除原文件: { f } ' )
237
-
238
- for d in dir_list :
239
- if len (files_of_dir (d )) == 0 :
240
- os .removedirs (d )
241
- jm_debug ('plugin.zip.remove' , f'移除文件夹: { d } ' )
228
+ self .after_zip (dir_zip_dict )
242
229
243
230
def zip_photo (self , photo , image_list : list , zip_path : str ):
231
+ """
232
+ 压缩photo文件夹
233
+ @return: photo文件夹路径
234
+ """
244
235
photo_dir = self .option .decide_image_save_dir (photo ) \
245
236
if len (image_list ) == 0 \
246
237
else os .path .dirname (image_list [0 ][0 ])
@@ -257,6 +248,10 @@ def zip_photo(self, photo, image_list: list, zip_path: str):
257
248
return photo_dir
258
249
259
250
def zip_album (self , album , photo_dict : dict , zip_path ):
251
+ """
252
+ 压缩album文件夹
253
+ @return: album文件夹路径
254
+ """
260
255
album_dir = self .option .decide_album_dir (album )
261
256
all_filepath : Set [str ] = set ()
262
257
@@ -279,15 +274,43 @@ def zip_album(self, album, photo_dict: dict, zip_path):
279
274
jm_debug ('plugin.zip.finish' , f'压缩本子[{ album .album_id } ]成功 → { zip_path } ' )
280
275
return album_dir
281
276
277
+ def after_zip (self , dir_zip_dict : Dict [str , str ]):
278
+ # 是否要删除所有原文件
279
+ if self .delete_original_file is True :
280
+ self .delete_all_files_and_empty_dir (
281
+ all_downloaded = self .downloader .all_downloaded ,
282
+ dir_list = list (dir_zip_dict .keys ())
283
+ )
284
+
282
285
# noinspection PyMethodMayBeStatic
283
286
def get_zip_path (self , album , photo , filename_rule , suffix , zip_dir ):
287
+ """
288
+ 计算zip文件的路径
289
+ """
284
290
filename = DirRule .apply_rule_directly (album , photo , filename_rule )
285
291
from os .path import join
286
292
return join (
287
293
zip_dir ,
288
294
filename + fix_suffix (suffix ),
289
295
)
290
296
297
+ # noinspection PyMethodMayBeStatic
298
+ def delete_all_files_and_empty_dir (self , all_downloaded : dict , dir_list : List [str ]):
299
+ """
300
+ 删除所有文件和文件夹
301
+ """
302
+ import os
303
+ for album , photo_dict in all_downloaded .items ():
304
+ for photo , image_list in photo_dict .items ():
305
+ for f , image in image_list :
306
+ os .remove (f )
307
+ jm_debug ('plugin.zip.remove' , f'删除原文件: { f } ' )
308
+
309
+ for d in dir_list :
310
+ if len (os .listdir (d )) == 0 :
311
+ os .removedirs (d )
312
+ jm_debug ('plugin.zip.remove' , f'删除文件夹: { d } ' )
313
+
291
314
292
315
JmModuleConfig .register_plugin (JmLoginPlugin )
293
316
JmModuleConfig .register_plugin (UsageLogPlugin )
0 commit comments