129 lines
3.9 KiB
Python
129 lines
3.9 KiB
Python
from configparser import ConfigParser
|
|
from pathlib import Path
|
|
from json import dump
|
|
import subprocess
|
|
from tkinter import *
|
|
from tkinter.ttk import *
|
|
|
|
config = ConfigParser()
|
|
options = {"ftp": ["host", "user", "pass", "lftp"], "file": ["local", "remote"]}
|
|
|
|
|
|
def check_config_valid(config: ConfigParser, options: dict[str, list[str]]) -> bool:
|
|
for sec in options:
|
|
if not config.has_section(sec):
|
|
return False
|
|
for opt in options[sec]:
|
|
if not config.has_option(sec, opt):
|
|
return False
|
|
return True
|
|
|
|
|
|
def set_default_config(config: ConfigParser, options: dict[str, list[str]]) -> None:
|
|
config.clear()
|
|
for sec in options:
|
|
config.add_section(sec)
|
|
for opt in options[sec]:
|
|
config[sec][opt] = ""
|
|
with open("config.ini", "w") as f:
|
|
config.write(f)
|
|
|
|
|
|
config.read("config.ini")
|
|
if not check_config_valid(config, options):
|
|
set_default_config(config, options)
|
|
|
|
|
|
def generate_db(config: ConfigParser) -> None:
|
|
local_dir = Path(config["file"]["local"])
|
|
categories = Path(local_dir, "categories")
|
|
output = []
|
|
for category in categories.iterdir():
|
|
if not category.is_dir():
|
|
continue
|
|
output_category = {"name": category.name, "files": []}
|
|
for file in category.iterdir():
|
|
output_category["files"].append(file.name)
|
|
output.append(output_category)
|
|
with open(Path(local_dir, "db.json"), "w") as f:
|
|
dump(output, f)
|
|
|
|
|
|
# generate_db(config)
|
|
|
|
sync_all_command = [
|
|
config["ftp"]["lftp"],
|
|
f'-e mirror -R -e --parallel=10 {config["file"]["local"]} {config["file"]["remote"]}; exit',
|
|
"-u",
|
|
f'{config["ftp"]["user"]},{config["ftp"]["pass"]}',
|
|
config["ftp"]["host"],
|
|
]
|
|
|
|
sync_files_command = [
|
|
config["ftp"]["lftp"],
|
|
f'-e mirror -R -e --parallel=10 {config["file"]["local"]}/categories {config["file"]["remote"]}/categories; exit',
|
|
"-u",
|
|
f'{config["ftp"]["user"]},{config["ftp"]["pass"]}',
|
|
config["ftp"]["host"],
|
|
]
|
|
|
|
|
|
def tfunc(txt: str) -> None:
|
|
print(txt)
|
|
|
|
|
|
# print(subprocess.run(sync_files_command))
|
|
|
|
root = Tk()
|
|
|
|
ftp_header_frm = Frame(root)
|
|
ftp_header_frm.grid(row=0, column=0)
|
|
|
|
Label(ftp_header_frm, text="FTP Settings").grid(row=0, column=0, padx=5, pady=5)
|
|
|
|
ftp_settings_frm = Frame(root)
|
|
ftp_settings_frm.grid(row=1, column=0)
|
|
|
|
Label(ftp_settings_frm, text="Host").grid(row=0, column=0, padx=5, pady=5)
|
|
host_entry = Entry(ftp_settings_frm)
|
|
host_entry.insert(0, config["ftp"]["host"])
|
|
host_entry.grid(row=0, column=1, padx=5, pady=5)
|
|
|
|
Label(ftp_settings_frm, text="Username").grid(row=1, column=0, padx=5, pady=5)
|
|
user_entry = Entry(ftp_settings_frm)
|
|
user_entry.insert(0, config["ftp"]["user"])
|
|
user_entry.grid(row=1, column=1, padx=5, pady=5)
|
|
|
|
Label(ftp_settings_frm, text="Password").grid(row=2, column=0, padx=5, pady=5)
|
|
pass_entry = Entry(ftp_settings_frm)
|
|
pass_entry.insert(0, config["ftp"]["pass"])
|
|
pass_entry.grid(row=2, column=1, padx=5, pady=5)
|
|
|
|
Label(ftp_settings_frm, text="lftp Path").grid(row=3, column=0, padx=5, pady=5)
|
|
lftp_entry = Entry(ftp_settings_frm)
|
|
lftp_entry.insert(0, config["ftp"]["lftp"])
|
|
lftp_entry.grid(row=3, column=1, padx=5, pady=5)
|
|
|
|
file_header_frm = Frame(root)
|
|
file_header_frm.grid(row=2, column=0)
|
|
|
|
Label(file_header_frm, text="File Path Settings").grid(
|
|
row=0, column=0, columnspan=2, padx=5, pady=5
|
|
)
|
|
|
|
file_settings_frm = Frame(root)
|
|
file_settings_frm.grid(row=3, column=0)
|
|
|
|
Label(file_settings_frm, text="Local Path").grid(row=0, column=0, padx=5, pady=5)
|
|
local_entry = Entry(file_settings_frm)
|
|
local_entry.insert(0, config["file"]["local"])
|
|
local_entry.grid(row=0, column=1, padx=5, pady=5)
|
|
|
|
Label(file_settings_frm, text="Remote Path").grid(row=1, column=0, padx=5, pady=5)
|
|
remote_entry = Entry(file_settings_frm)
|
|
remote_entry.insert(0, config["file"]["remote"])
|
|
remote_entry.grid(row=1, column=1, padx=5, pady=5)
|
|
|
|
|
|
# Button(ftp_settings_frm, text="Save Config").grid(row=5, column=0, columnspan=2, padx=5, pady=5)
|
|
root.mainloop()
|