Files
Jellyfin-Mods-Automated-Script/customize-WebUI-V3.py
2024-12-09 01:02:27 +01:00

95 lines
3.9 KiB
Python

import os
import re
import sys
import yaml
def modify_files(config_path):
"""
Modifiziert Dateien basierend auf einer YAML-Konfigurationsdatei.
:param config_path: Pfad zur Konfigurationsdatei
"""
# load config
with open(config_path, 'r', encoding='utf-8') as config_file:
config = yaml.safe_load(config_file)
files_modified = 0
# iterate trough every config
for entry in config['modifications']:
search_pattern = entry.get('file_pattern')
insert_rules = entry.get('insert_rules', [])
replace_rules = entry.get('replace_rules', [])
# recursiv search starting at start dir
for root, dirs, files in os.walk(config.get('start_directory', '.')):
for filename in files:
# check filenamepattern
if re.search(search_pattern, filename):
full_path = os.path.join(root, filename)
try:
with open(full_path, 'r', encoding='utf-8') as file:
content = file.read()
modified = False
modified_content = content
# iterate trough insert rules
for rule in insert_rules:
insert_text = rule.get('insert_text')
# insert after specific text
if 'after_text' in rule:
search_text = rule.get('after_text')
if insert_text not in modified_content:
modified_content = modified_content.replace(
search_text,
f'{search_text}\n{insert_text}'
)
modified = True
# insert before spicific text
elif 'before_text' in rule:
search_text = rule.get('before_text')
if insert_text not in modified_content:
modified_content = modified_content.replace(
search_text,
f'{insert_text}\n{search_text}'
)
modified = True
# iterate replace rules
for rule in replace_rules:
old_text = rule.get('old_text')
new_text = rule.get('new_text')
# check, if the text to be replaced, exists
if old_text in modified_content:
modified_content = modified_content.replace(old_text, new_text)
modified = True
# save changed files
if modified:
with open(full_path, 'w', encoding='utf-8') as file:
file.write(modified_content)
files_modified += 1
print(f'Modified: {full_path}')
except Exception as e:
print(f'Error modifying file {full_path}: {e}')
print(f'\nAnzahl modifizierter Dateien: {files_modified}')
def main():
# path of config file as argument
if len(sys.argv) < 2:
print("Error: Provide a path to the config.yaml file")
sys.exit(1)
config_path = sys.argv[1]
modify_files(config_path)
if __name__ == '__main__':
main()