| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- import argparse
 
- import glob
 
- import json
 
- import logging
 
- import os
 
- import sys
 
- from typing import Any
 
- def main() -> int:
 
-     parser = argparse.ArgumentParser(description="Format Flatpak manifest")
 
-     parser.add_argument(
 
-         "manifest_file",
 
-         metavar="FILE",
 
-         type=str,
 
-         help="Manifest file to adjust format for",
 
-     )
 
-     parser.add_argument(
 
-         "--check",
 
-         action="store_true",
 
-         help="Check for necessary changes only",
 
-         default=False,
 
-         required=False,
 
-     )
 
-     parser.add_argument(
 
-         "--loglevel", type=str, help="Set log level", default="WARNING", required=False
 
-     )
 
-     arguments = parser.parse_args()
 
-     logging.basicConfig(level=arguments.loglevel, format="%(message)s")
 
-     logger = logging.getLogger()
 
-     manifest_file = arguments.manifest_file
 
-     try:
 
-         with open(manifest_file, "r+") as manifest:
 
-             manifest_path = os.path.dirname(manifest_file)
 
-             manifest_string = manifest.read()
 
-             manifest_data = json.loads(manifest_string)
 
-             module_list = manifest_data.get("modules", [])
 
-             obs_object = module_list[-1]
 
-             if type(obs_object) != dict:
 
-                 logger.error(
 
-                     f"❌ Last element in modules list is not the obs-studio object"
 
-                 )
 
-                 return 2
 
-             new_module_list = []
 
-             for module in module_list:
 
-                 if type(module) == str:
 
-                     if not os.path.isfile(os.path.join(manifest_path, module)):
 
-                         logger.warning(
 
-                             f"⚠️ Specified module {os.path.basename(module)} not found."
 
-                         )
 
-                         continue
 
-                     new_module_list.append(module)
 
-             new_module_list.sort()
 
-             new_module_list.append(obs_object)
 
-             manifest_data["modules"] = new_module_list
 
-             new_manifest_string = (
 
-                 f"{json.dumps(manifest_data, indent=4, ensure_ascii=False)}\n"
 
-             )
 
-             if arguments.check:
 
-                 if new_module_list != module_list:
 
-                     logger.error(f"❌ Module list failed order validation")
 
-                     return 2
 
-                 elif new_manifest_string != manifest_string:
 
-                     logger.error(f"❌ Manifest file is not correctly formatted")
 
-                     return 2
 
-                 else:
 
-                     logger.info(f"✅ Module list passed order validation")
 
-                     return 0
 
-             manifest.seek(0)
 
-             manifest.truncate()
 
-             manifest.write(new_manifest_string)
 
-             logger.info(f"✅ Updated manifest file '{manifest_file}")
 
-     except IOError:
 
-         logger.error(f"❌ Unable to read manifest file '{manifest_file}'")
 
-         return 2
 
-     return 0
 
- if __name__ == "__main__":
 
-     sys.exit(main())
 
 
  |