Skip to content

Instantly share code, notes, and snippets.

@alexeygrigorev
Last active April 30, 2022 08:14
Show Gist options
  • Save alexeygrigorev/bdedd854cf6df69879fb153543f1a5c9 to your computer and use it in GitHub Desktop.
Save alexeygrigorev/bdedd854cf6df69879fb153543f1a5c9 to your computer and use it in GitHub Desktop.
Moving Zoom audio recordings to Dropbox

Move Zoom Recording

I was tired manually moving the recording of the podcast to Dropbox so I decided to automate it

It works for Windows only. For Linux / MacOS you'll need to modify the code for showing messages

Clone the repo

git clone git@gist.github.com:bdedd854cf6df69879fb153543f1a5c9.git move_zoom_recording

Schedule it

Modidy run.bat:

  • Set full path to your Python interpreter
  • Set full path to pun.py

Next, schedule it:

Set RUN_PATH=%CD%\run.bat

schtasks /create ^
    /tn zoom-move-recording ^
    /sc daily ^
    /st 09:30 ^
    /tr %RUN_PATH%

Running it hourly:

Set RUN_PATH=%CD%\run.bat

schtasks /create ^
    /tn zoom-move-recording ^
    /sc hourly ^
    /st 00:05 ^
    /tr %RUN_PATH%

Some other useful stuff:

That's all!

Set PYTHON=%HomeDrive%%HomePath%\Anaconda3\python.exe
cd %HomeDrive%%HomePath%\git\move_zoom_recording
%PYTHON% run.py
#!/usr/bin/env python
# coding: utf-8
import ctypes
from datetime import datetime
from pathlib import Path
zoom_videos = Path.home() / 'Documents' / 'zoom'
test = False
if test:
dropbox_dest = Path.home() / 'tmp' / 'Dropbox' / 'podcast'
else:
dropbox_dest = Path.home() / 'Dropbox' / 'podcast'
def mbox(title, text, style):
return ctypes.windll.user32.MessageBoxW(0, text, title, style)
def mbox_ok_cancel(title, text):
resp = mbox(title, text, 1)
if resp == 1:
return 'ok'
return 'cancel'
def file_exists(file):
try:
file.stat()
return True
except:
return False
def folder_size(folder):
size = sum(f.stat().st_size for f in folder.iterdir())
size_mb = size / (1024 * 1024)
return size_mb
def should_be_processed(last_folder):
if file_exists(last_folder / 'processed'):
print(f'folder "{last_folder.name}" already processed')
return False
audio = last_folder / 'Audio Record'
if not file_exists(audio):
print(f'folder "{last_folder.name}" contains no audio')
return False
size_mb = folder_size(audio)
if size_mb <= 90:
print(f'folder "{last_folder.name}" size too small: {size_mb:.2f} mb')
return True
def get_guest_name(audio_records):
names = []
for r in audio_records.iterdir():
speaker_name = r.name[len('audio'):-len('21994097274.m4a')]
names.append(speaker_name)
names.remove('AlexeyGrigorev')
guest_name = names[0]
return guest_name
def main():
last_folder = sorted(zoom_videos.iterdir(), key=lambda f: -f.stat().st_ctime)[0]
if not should_be_processed(last_folder):
return
audio_records = last_folder / 'Audio Record'
dt = datetime.fromtimestamp(last_folder.stat().st_ctime)
prefix = dt.strftime('%Y-%m-%d')
guest_name = get_guest_name(audio_records)
target_folder_name = f'{prefix}-{guest_name}'
target_folder = dropbox_dest / target_folder_name
response = mbox_ok_cancel(
title='Moving zoom recording',
text=f'Moving "{last_folder.name}" to "{target_folder}". Proceed?'
)
if response != "ok":
return
audio_records.rename(target_folder)
(last_folder / 'processed').touch()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment