Add script for transferring ripped dvds to transcoder

This commit is contained in:
Julian Mutter 2022-08-18 15:38:07 +02:00
parent d117ff2de4
commit b353b313ee
2 changed files with 128 additions and 0 deletions

View File

@ -89,6 +89,8 @@ def chdir_to_script_dir():
def mkdirs():
os.makedirs(TMP_DIR, exist_ok=True)
os.makedirs(RIPPED_DIR, exist_ok=True)
os.makedirs(os.path.join(RIPPED_DIR, "movie"), exist_ok=True)
os.makedirs(os.path.join(RIPPED_DIR, "series"), exist_ok=True)
def write_to_logfile(args, tag):

126
ripper/transfer_ripped.py Executable file
View File

@ -0,0 +1,126 @@
#!/usr/bin/env python3
import os
import subprocess
DESTINATION_FOLDER = "transcode/raw" # pi@192.168.xxx:/home/pi/transcode/raw
RIPPED_DIR = "ripped"
def main():
chdir_to_script_dir()
for dvd_type in ("movie", "series"):
for dvd in list_ripped_dvds(dvd_type):
print(f"Transferring {dvd_type}: {dvd}")
success = transfer_ripped_dvd_to_transcoder(dvd, dvd_type)
print()
if not success:
print("Transfer failed!")
exit(1)
print("Success")
def chdir_to_script_dir():
os.chdir(os.path.dirname(__file__))
def list_ripped_dvds(dvd_type):
path = os.path.join(RIPPED_DIR, dvd_type)
try:
dvd_titles = os.listdir(path)
dvd_titles = filter(lambda title: not title.endswith(".lock"), dvd_titles)
return map(lambda dvd_title: os.path.join(path, dvd_title), dvd_titles)
except FileNotFoundError:
print(
f"Directory {path} not found. Running the ripper script will generate it."
)
exit(1)
def transfer_ripped_dvd_to_transcoder(ripped_dvd, dvd_type) -> bool:
"""Returns: success of command"""
dvd_title = os.path.basename(ripped_dvd)
local_folder = os.path.dirname(ripped_dvd)
remote_folder = os.path.join(DESTINATION_FOLDER, dvd_type)
lock_file_name = dvd_title + ".lock"
lock_file_local = os.path.join(local_folder, lock_file_name)
lock_file_remote = os.path.join(remote_folder, lock_file_name)
try:
create_local_lock_file(lock_file_local)
transfer_lock_file(lock_file_local, lock_file_remote)
transfer_ripped_dvd(ripped_dvd, remote_folder)
remove_empty_dirs_lefover_from_rsync(local_folder)
delete_local_lock_file(lock_file_local)
remove_remote_lock_file(lock_file_name, local_folder, remote_folder)
except subprocess.CalledProcessError:
return False
return True
def create_local_lock_file(path):
create_empty_file(path)
def create_empty_file(path):
with open(path, "w") as _:
pass
def delete_local_lock_file(path):
os.remove(path)
def transfer_lock_file(lock_file_local, lock_file_remote):
subprocess.run(["rsync", "-e ssh", lock_file_local, lock_file_remote], check=True)
def transfer_ripped_dvd(ripped_dvd, destination_folder):
subprocess.run(
[
"rsync",
"-az",
"-e ssh",
"--remove-source-files",
ripped_dvd,
destination_folder,
],
check=True,
)
def remove_empty_dirs_lefover_from_rsync(folder):
"""Rsyncs --remove-source-files does not delete directories, so call this method to fix this"""
subprocess.run(
["find", folder, "-depth", "-type", "d", "-empty", "-delete"],
check=True,
)
def remove_remote_lock_file(lock_file_name, folder, destination_folder):
subprocess.run(
[
"rsync",
"-r",
"-e ssh",
"--delete",
f"--include={lock_file_name}",
"--exclude=*",
folder + "/",
destination_folder + "/",
],
check=True,
)
if __name__ == "__main__":
main()