File: //usr/syno/bin/synomigratewallpaper
#!/bin/python3
import argparse
import json
import subprocess
import sqlite3
import os
import shutil
import subprocess
MAX_HISTORY_RECORD = 8
ACCEPT_EXT = ['.jpg', '.jpeg', '.jpe', '.bmp', '.gif', '.png']
def migrate_wallpaper_if_exists(file_path, wallpaper_dir):
if os.path.exists(file_path):
os.rename(file_path, f"{wallpaper_dir}/{os.path.basename(file_path)}")
def migrate_history_record(preference_dir, wallpaper_dir):
for index in range(MAX_HISTORY_RECORD):
for ext in ACCEPT_EXT:
thumbFile = f"{preference_dir}/{index}thumb{ext}"
file = f"{preference_dir}/{index}{ext}"
hd_file = f"{preference_dir}/{index}_hd{ext}"
migrate_wallpaper_if_exists(thumbFile, wallpaper_dir)
migrate_wallpaper_if_exists(file, wallpaper_dir)
migrate_wallpaper_if_exists(hd_file, wallpaper_dir)
def migrate_wallpapers(preference_dir, wallpaper_dir):
migrate_wallpaper_if_exists(f"{preference_dir}/wallpaper", wallpaper_dir)
migrate_wallpaper_if_exists(f"{preference_dir}/wallpaper_hd", wallpaper_dir)
def migrate(preference_dir, wallpaper_dir):
migrate_wallpapers(preference_dir, wallpaper_dir)
migrate_history_record(preference_dir, wallpaper_dir)
def get_pref_ugid(path):
stat_info = os.stat(path)
uid = stat_info.st_uid
gid = stat_info.st_gid
return uid, gid
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
"-u",
"--user",
type=str,
action="store",
help="user name",
required=True
)
args = parser.parse_args()
preference_dir = subprocess.check_output(f"/usr/syno/bin/synopreferencedir --user-get '{args.user}'", shell=True).decode('UTF-8')
user_wallpaper = str(preference_dir) + "/wallpaper_dir"
if os.path.exists(user_wallpaper):
if os.path.islink(user_wallpaper):
real_wallpaper_path = os.readlink(user_wallpaper)
os.unlink(user_wallpaper)
shutil.move(real_wallpaper_path, user_wallpaper)
else:
uid, gid = get_pref_ugid(preference_dir)
os.mkdir(user_wallpaper, 0o755)
os.chown(user_wallpaper, uid, gid)
migrate(preference_dir, user_wallpaper)
if __name__ == "__main__":
try:
main()
except Exception as e:
print(e)
exit(1)