dolphin.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import multiprocessing
  2. import logging
  3. import os
  4. import sys
  5. import shutil
  6. from .icon import *
  7. def _pack_animation(pair: set):
  8. source, destination = pair
  9. image = file2image(source)
  10. image.write(destination)
  11. def pack_animations(source: str, destination: str):
  12. assert os.path.exists(source)
  13. # Create list for processing
  14. to_pack = []
  15. dirpath, dirnames = next(os.walk(source))[:2]
  16. dirnames.sort()
  17. for dirname in dirnames:
  18. current_directory = os.path.join(dirpath, dirname)
  19. # Ensure destination folder
  20. destination_directory = os.path.join(destination, dirname)
  21. os.makedirs(destination_directory, exist_ok=True)
  22. # Find all files
  23. filenames = next(os.walk(current_directory))[2]
  24. filenames.sort()
  25. for filename in filenames:
  26. if is_file_an_icon(filename):
  27. source_filename = os.path.join(current_directory, filename)
  28. destination_filename = os.path.join(
  29. destination_directory, os.path.splitext(filename)[0] + ".bm"
  30. )
  31. to_pack.append((source_filename, destination_filename))
  32. elif filename == "meta.txt":
  33. source_filename = os.path.join(current_directory, filename)
  34. destination_filename = os.path.join(destination_directory, filename)
  35. shutil.copyfile(source_filename, destination_filename)
  36. # Process images in parallel
  37. pool = multiprocessing.Pool()
  38. pool.map(_pack_animation, to_pack)
  39. shutil.copyfile(
  40. os.path.join(source, "manifest.txt"), os.path.join(destination, "manifest.txt")
  41. )
  42. def pack_dolphin(source_directory: str, destination_directory: str):
  43. pack_animations(
  44. os.path.join(source_directory, "animations"),
  45. os.path.join(destination_directory, "animations"),
  46. )