HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
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)