parent
ef16511f9a
commit
b073bcbacb
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i python3 -p python3 python3.pkgs.requests -I nixpkgs=channel:nixos-22.05
|
||||
import json, os, sys, hashlib
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
import tempfile
|
||||
import requests
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print(f"Usage: sudo {sys.argv[0]} [dest] [files..]", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
if os.geteuid() != 0:
|
||||
print("Please run as root", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
plexmedia = Path("/data/plexmedia")
|
||||
dest = plexmedia / sys.argv[1]
|
||||
|
||||
sections = {
|
||||
"movies": 1,
|
||||
"series": 2,
|
||||
"anime-movies": 3,
|
||||
"anime-series": 4,
|
||||
"talks": 5
|
||||
}
|
||||
|
||||
if not dest.is_dir():
|
||||
print(f"Error: {dest} is not a directory/does not exist")
|
||||
sys.exit(1)
|
||||
|
||||
sid = sections[sys.argv[1]]
|
||||
|
||||
def hashfile(path: Path) -> str:
|
||||
hash = hashlib.sha256()
|
||||
buf = bytearray(128 * 1024) # 128kb
|
||||
mv = memoryview(buf)
|
||||
with path.open('rb') as f:
|
||||
while n := f.readinto(mv):
|
||||
hash.update(mv[:n])
|
||||
return hash.hexdigest()
|
||||
|
||||
def symlink_force(name: Path, target: Path) -> None:
|
||||
try:
|
||||
name.symlink_to(target)
|
||||
except FileExistsError:
|
||||
tmp = Path(tempfile.mktemp(dir=name.parent))
|
||||
tmp.symlink_to(target)
|
||||
tmp.replace(name)
|
||||
|
||||
def ca_import(source: Path) -> Path:
|
||||
if not sourcepath.is_file() or sourcepath.is_symlink():
|
||||
print(f"{sourcepath} is not a regular file")
|
||||
if sourcepath.is_symlink():
|
||||
rsv = sourcepath.resolve()
|
||||
if rsv.parent == plexmedia / "ca":
|
||||
return rsv
|
||||
else:
|
||||
sys.exit(2)
|
||||
return
|
||||
# CA import
|
||||
print(f"[{source.name}] hash")
|
||||
hash = hashfile(sourcepath)
|
||||
print(hash)
|
||||
ca_dest = (plexmedia / "ca" / hash).with_suffix(sourcepath.suffix)
|
||||
print(f"[{source.name}] copy")
|
||||
try:
|
||||
shutil.copyfile(sourcepath, ca_dest)
|
||||
except shutil.SameFileError:
|
||||
print(f"warning: skipping copy, already in place")
|
||||
#print(f"chown plex:plex {ca_dest}")
|
||||
shutil.chown(ca_dest, user="plex", group="plex")
|
||||
return ca_dest
|
||||
|
||||
for sourcefile in sys.argv[2:]:
|
||||
sourcepath = Path(sourcefile)
|
||||
print("CA", sourcepath)
|
||||
ca_dest = ca_import(sourcepath)
|
||||
# plex import
|
||||
destpath = dest / sourcepath.name
|
||||
print(f"ln -s {ca_dest} {destpath}")
|
||||
symlink_force(destpath, ca_dest)
|
||||
shutil.chown(destpath, user="plex", group="plex")
|
||||
# torrent link
|
||||
symlink_force(sourcepath, ca_dest)
|
||||
|
||||
|
||||
with open("/home/yorick/plex_token", 'r') as f:
|
||||
PLEX_TOKEN = f.read().splitlines()[0]
|
||||
|
||||
requests.get(f"https://plex.yori.cc/library/sections/{sid}/refresh", headers={
|
||||
"X-Plex-Token": PLEX_TOKEN
|
||||
})
|
Loading…
Reference in new issue