Add script for transferring ripped dvds to transcoder
This commit is contained in:
parent
d117ff2de4
commit
b353b313ee
@ -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
126
ripper/transfer_ripped.py
Executable 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()
|
Loading…
x
Reference in New Issue
Block a user