forked from dvingerh/PyInstaLive
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request dvingerh#52 from BassThatHertz/master
Improved filenames before organizing the MP4 files.
- Loading branch information
Showing
1 changed file
with
115 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,74 +1,116 @@ | ||
import os | ||
import shutil | ||
try: | ||
import pil | ||
import logger | ||
except ImportError: | ||
from . import pil | ||
from . import logger | ||
|
||
def organize_videos(): | ||
|
||
try: | ||
# Make a variable equal to the names of the files in the current directory. | ||
current_dir_files = os.listdir(pil.dl_path) | ||
|
||
# Count the amount of files moved and not moved because they already exist etc. | ||
not_moved = 0 | ||
has_moved = 0 | ||
|
||
# The downloaded livestream(s) are in MP4 format. | ||
video_format = ['mp4'] | ||
|
||
# Find the MP4 files and save them in a variable called 'filenames'. | ||
filenames = [os.path.join(pil.dl_path, filename) for filename in current_dir_files | ||
if filename.split('.')[-1] in video_format] | ||
|
||
if len(filenames) == 0: | ||
logger.binfo("No files were found to organize.") | ||
logger.separator() | ||
return | ||
|
||
# We want a dictionary where the filenames are the keys | ||
# and the usernames are the values. | ||
filenames_to_usernames = {} | ||
|
||
# Populate the dictionary by going through each filename and removing the | ||
# undesired characters, leaving just the usernames. | ||
for filename in filenames: | ||
filename_parts = filename.split('_')[1:-3] | ||
usernames = '_'.join(filename_parts) | ||
filenames_to_usernames[filename] = usernames | ||
|
||
# The usernames are the values of the filenames_to_usernames dictionary. | ||
usernames = set(filenames_to_usernames.values()) | ||
|
||
# Make a folder for each username. | ||
for username in usernames: | ||
username_path = os.path.join(pil.dl_path, username) | ||
if not os.path.isdir(username_path): | ||
os.mkdir(username_path) | ||
|
||
# Move the videos into the folders | ||
for filename, username in filenames_to_usernames.items(): | ||
filename_base = os.path.basename(filename) | ||
destination_path = os.path.join(pil.dl_path, username, filename_base) | ||
if not os.path.isfile(destination_path): | ||
try: | ||
shutil.move(filename, destination_path) | ||
logger.info("Moved '{:s}' successfully.".format(filename_base)) | ||
has_moved += 1 | ||
except OSError as oe: | ||
logger.warn("Could not move {:s}: {:s}".format(filename_base, str(oe))) | ||
not_moved += 1 | ||
else: | ||
logger.binfo("Did not move '{:s}' because it already exists.".format(filename_base)) | ||
not_moved += 1 | ||
|
||
logger.separator() | ||
logger.info("{} {} moved.".format(has_moved, "file was" if has_moved == 1 else "files were")) | ||
if not_moved: | ||
logger.binfo("{} {} not moved.".format(not_moved, "file was" if not_moved == 1 else "files were")) | ||
logger.separator() | ||
except Exception as e: | ||
import os | ||
import shutil | ||
from datetime import datetime | ||
import time | ||
try: | ||
import pil | ||
import logger | ||
except ImportError: | ||
from . import pil | ||
from . import logger | ||
|
||
def organize_videos(): | ||
|
||
try: | ||
# Make a variable equal to the names of the files in the current directory. | ||
download_path_files = os.listdir(pil.dl_path) | ||
|
||
# Count the amount of files moved and not moved because they already exist etc. | ||
not_moved = 0 | ||
has_moved = 0 | ||
|
||
# The downloaded livestream(s) are in MP4 format. | ||
video_format = ['mp4'] | ||
|
||
# Find the MP4 files and save them in a variable called 'filenames'. | ||
filenames = [filename for filename in download_path_files | ||
if filename.split('.')[-1] in video_format] | ||
|
||
if len(filenames) == 0: | ||
logger.binfo("No files were found to organize.") | ||
logger.separator() | ||
return | ||
|
||
for filename in filenames: | ||
# Split the filenames into parts. | ||
filename_parts = filename.split('_') | ||
|
||
# Get the date from the filename. | ||
date = datetime.strptime(filename_parts[0], '%Y%m%d').strftime('%d-%m-%Y') | ||
|
||
# Get the username from the filename. | ||
username = '_'.join(filename_parts[1:-3]) | ||
|
||
# Get the time from the unix timestamp. | ||
time_from_unix_timestamp = time.strftime('%I.%M%p', time.localtime(int(filename_parts[-2]))) | ||
|
||
# # Remove the leading zero from single-digit hours. | ||
if float(time_from_unix_timestamp[0:2]) < 10: | ||
time_from_unix_timestamp = time_from_unix_timestamp[1:] | ||
|
||
# Get the last part of the filename ("live.mp4" or "replay.mp4"). | ||
live_or_replay = filename_parts[-1] | ||
|
||
# The path of each original filename is as follows: | ||
old_filename_path = os.path.join(pil.dl_path, filename) | ||
|
||
# We want to change the format of each filename to: | ||
new_filename_format = date + " " + username + " [" + time_from_unix_timestamp + "] " + live_or_replay | ||
|
||
# The path of each new filename is as follows: | ||
new_filename_path = os.path.join(pil.dl_path, new_filename_format) | ||
|
||
# Change the filenames. | ||
os.rename(old_filename_path, new_filename_path) | ||
|
||
# Now that the files have been renamed, we need to rescan the files in the directory. | ||
download_path_files = os.listdir(pil.dl_path) | ||
|
||
new_filenames = [filename for filename in download_path_files if filename.split('.')[-1] in video_format] | ||
|
||
# We want a dictionary where the filenames are the keys | ||
# and the usernames are the values. | ||
filenames_to_usernames = {} | ||
|
||
# Populate the dictionary with a loop. | ||
for filename in new_filenames: | ||
# Split the filenames into parts so we get just the usernames: | ||
filename_parts = filename.split() | ||
# This is how to get the usernames from the split filenames: | ||
username = filename_parts[1] | ||
# Filename = key and username = value: | ||
filenames_to_usernames[filename] = username | ||
|
||
# We only want one folder for each username, so convert the list into a set to remove duplicates. | ||
usernames = set(filenames_to_usernames.values()) | ||
|
||
# Make a folder for each username. | ||
for username in usernames: | ||
username_path = os.path.join(pil.dl_path, username) | ||
if not os.path.isdir(username_path): | ||
os.mkdir(username_path) | ||
|
||
# Move the videos into the folders | ||
for filename, username in filenames_to_usernames.items(): | ||
filename_base = os.path.basename(filename) | ||
source_path = os.path.join(pil.dl_path, filename) | ||
destination_path = os.path.join(pil.dl_path, username, filename_base) | ||
if not os.path.isfile(destination_path): | ||
try: | ||
shutil.move(source_path, destination_path) | ||
logger.info("Moved '{:s}' successfully.".format(filename_base)) | ||
has_moved += 1 | ||
except OSError as oe: | ||
logger.warn("Could not move {:s}: {:s}".format(filename_base, str(oe))) | ||
not_moved += 1 | ||
else: | ||
logger.binfo("Did not move '{:s}' because it already exists.".format(filename_base)) | ||
not_moved += 1 | ||
|
||
logger.separator() | ||
logger.info("{} {} moved.".format(has_moved, "file was" if has_moved == 1 else "files were")) | ||
if not_moved: | ||
logger.binfo("{} {} not moved.".format(not_moved, "file was" if not_moved == 1 else "files were")) | ||
logger.separator() | ||
except Exception as e: | ||
logger.error("Could not organize files: {:s}".format(str(e))) |