Fixed issues with colors on windows

This commit is contained in:
Fabrice Quenneville 2020-12-13 22:35:14 -05:00
parent a1cfc3a472
commit 96594806e0
6 changed files with 60 additions and 57 deletions

View File

@ -11,11 +11,13 @@
import sys
from library.bcolors import BColors
from library.video import Video
from library.medialibrary import MediaLibrary
from library.tools import detect_ffmpeg, user_confirm
import colorama
colorama.init()
def main():
'''
MediaCurator's main function
@ -23,14 +25,14 @@ def main():
# confirm that the command has enough parameters
if len(sys.argv) < 2:
print(f"{BColors.FAIL}ERROR: Command not understood, please see documentation.{BColors.ENDC}")
print(f"{colorama.Fore.RED}ERROR: Command not understood, please see documentation.{colorama.Style.RESET_ALL}")
# confirm that ffmpeg in indeed installed
ffmpeg_version = detect_ffmpeg()
if not ffmpeg_version:
print(f"{BColors.FAIL}No ffmpeg version detected{BColors.ENDC}")
print(f"{colorama.Fore.RED}No ffmpeg version detected{colorama.Style.RESET_ALL}")
exit()
print(f"{BColors.OKBLUE}ffmpeg version detected: {ffmpeg_version}{BColors.ENDC}")
print(f"{colorama.Fore.BLUE}ffmpeg version detected: {ffmpeg_version}{colorama.Style.RESET_ALL}")
# Get/load command parameters
directories = []
@ -43,9 +45,9 @@ def main():
for arg in sys.argv:
# Confirm with the user that he selected to delete found files
if "-del" in arg:
print(f"{BColors.WARNING}WARNING: Delete option selected!{BColors.ENDC}")
if not user_confirm(f"{BColors.WARNING}Are you sure you wish to delete all found results after selected operations are succesfull ? [Y/N] ?{BColors.ENDC}"):
print(f"{BColors.OKGREEN}Exiting!{BColors.ENDC}")
print(f"{colorama.Fore.YELLOW}WARNING: Delete option selected!{colorama.Style.RESET_ALL}")
if not user_confirm(f"Are you sure you wish to delete all found results after selected operations are succesfull ? [Y/N] ?", color="yellow"):
print(f"{colorama.Fore.GREEN}Exiting!{colorama.Style.RESET_ALL}")
exit()
elif "-in:" in arg:
inputs += arg[4:].split(",")
@ -66,7 +68,7 @@ def main():
elif len(directories) > 0:
medialibrary = MediaLibrary(directories = directories, inputs = inputs, filters = filters)
else:
print(f"{BColors.FAIL}ERROR: No files or directories selected.{BColors.ENDC}")
print(f"{colorama.Fore.RED}ERROR: No files or directories selected.{colorama.Style.RESET_ALL}")
# Actions
@ -80,12 +82,12 @@ def main():
if medialibrary.videos[filepath].useful:
if "formated" in printop or "verbose" in printop:
if medialibrary.videos[filepath].error:
print(f"{BColors.FAIL}{medialibrary.videos[filepath].fprint()}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[filepath].fprint()}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[filepath].fprint())
else:
if medialibrary.videos[filepath].error:
print(f"{BColors.FAIL}{medialibrary.videos[filepath]}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[filepath]}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[filepath])
@ -102,12 +104,12 @@ def main():
if medialibrary.videos[filepath].useful:
if "formated" in printop or "verbose" in printop:
if medialibrary.videos[filepath].error:
print(f"{BColors.FAIL}{medialibrary.videos[filepath].fprint()}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[filepath].fprint()}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[filepath].fprint())
else:
if medialibrary.videos[filepath].error:
print(f"{BColors.FAIL}{medialibrary.videos[filepath]}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[filepath]}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[filepath])
@ -131,14 +133,14 @@ def main():
vcodec = "x265"
# Verbosing
print(f"{BColors.OKGREEN}****** Starting conversion {counter} of {len(keylist)}: '{BColors.OKCYAN}{medialibrary.videos[filepath].filename_origin}{BColors.OKGREEN}' from {BColors.OKCYAN}{medialibrary.videos[filepath].codec}{BColors.OKGREEN} to {BColors.OKCYAN}{vcodec}{BColors.OKGREEN}...{BColors.ENDC}")
print(f"{BColors.OKCYAN}Original file:{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}****** Starting conversion {counter} of {len(keylist)}: '{colorama.Fore.CYAN}{medialibrary.videos[filepath].filename_origin}{colorama.Fore.GREEN}' from {colorama.Fore.CYAN}{medialibrary.videos[filepath].codec}{colorama.Fore.GREEN} to {colorama.Fore.CYAN}{vcodec}{colorama.Fore.GREEN}...{colorama.Style.RESET_ALL}")
print(f"{colorama.Fore.CYAN}Original file:{colorama.Style.RESET_ALL}")
if "formated" in printop or "verbose" in printop:
print(medialibrary.videos[filepath].fprint())
else:
print(medialibrary.videos[filepath])
print(f"{BColors.OKGREEN}Converting please wait...{BColors.ENDC}", end="\r")
print(f"{colorama.Fore.GREEN}Converting please wait...{colorama.Style.RESET_ALL}", end="\r")
# Converting
if medialibrary.videos[filepath].convert(verbose = "verbose" in printop):
@ -151,17 +153,17 @@ def main():
medialibrary.videos[newfpath] = Video(newfpath, verbose = "verbose" in printop)
# Verbose
print(f"{BColors.OKGREEN}Successfully converted '{medialibrary.videos[filepath].filename_origin}'{BColors.OKCYAN}({medialibrary.videos[filepath].filesize}mb){BColors.OKGREEN} to '{medialibrary.videos[newfpath].filename_origin}'{BColors.OKCYAN}({medialibrary.videos[newfpath].filesize}mb){BColors.OKGREEN}, {BColors.OKCYAN}new file:{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Successfully converted '{medialibrary.videos[filepath].filename_origin}'{colorama.Fore.CYAN}({medialibrary.videos[filepath].filesize}mb){colorama.Fore.GREEN} to '{medialibrary.videos[newfpath].filename_origin}'{colorama.Fore.CYAN}({medialibrary.videos[newfpath].filesize}mb){colorama.Fore.GREEN}, {colorama.Fore.CYAN}new file:{colorama.Style.RESET_ALL}")
if "formated" in printop or "verbose" in printop:
if medialibrary.videos[newfpath].error:
print(f"{BColors.FAIL}{medialibrary.videos[newfpath].fprint()}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[newfpath].fprint()}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[newfpath].fprint())
else:
if medialibrary.videos[newfpath].error:
print(f"{BColors.FAIL}{medialibrary.videos[newfpath]}{BColors.ENDC}")
print(f"{colorama.Fore.RED}{medialibrary.videos[newfpath]}{colorama.Style.RESET_ALL}")
else:
print(medialibrary.videos[newfpath])

View File

@ -1,15 +0,0 @@
#!/usr/bin/env python3
'''Fancy colors!'''
class BColors:
''' from https://stackoverflow.com/questions/287871/how-to-print-colored-text-in-python '''
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'

View File

@ -6,10 +6,12 @@
from pathlib import Path
import sys
from .bcolors import BColors
from .video import Video
from .tools import deletefile
import colorama
colorama.init()
class MediaLibrary():
'''
Contains the information and methods of a video file.
@ -55,7 +57,7 @@ class MediaLibrary():
Save them to the videos dictionary
'''
print(f"{BColors.OKGREEN}Scanning files in {', '.join(map(str, self.directories))} for videos{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Scanning files in {', '.join(map(str, self.directories))} for videos{colorama.Fore.RESET}")
videolist = []
for directory in self.directories:
@ -83,7 +85,7 @@ class MediaLibrary():
videolist = [video for video in videolist_tmp if video.is_file()]
# Map it all to the videos dictionary as initiated Video objects
print(f"{BColors.OKGREEN}Analazing {len(videolist)} videos in {', '.join(map(str, self.directories))}{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Analazing {len(videolist)} videos in {', '.join(map(str, self.directories))}{colorama.Fore.RESET}")
iteration = 0
for video in videolist:
if verbose:
@ -95,7 +97,7 @@ class MediaLibrary():
def filter_videos(self, verbose = False):
''' Mark useless videos in the videos dictionary (default is useful) '''
print(f"{BColors.OKGREEN}Filtering {len(self.videos)} videos for the requested parameters{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Filtering {len(self.videos)} videos for the requested parameters{colorama.Fore.RESET}")
for filepath in self.videos:
@ -146,7 +148,7 @@ class MediaLibrary():
self.videos[filepath].useful = useful
print(f"{BColors.OKGREEN}Found {len([filepath for filepath in self.videos if self.videos[filepath].useful])} videos for the requested parameters{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Found {len([filepath for filepath in self.videos if self.videos[filepath].useful])} videos for the requested parameters{colorama.Fore.RESET}")
def unwatch(self, filepath, delete = False):
''' remove a video from the index and delete it if requested'''

View File

@ -5,7 +5,9 @@
import subprocess
import os
from .bcolors import BColors
import colorama
colorama.init()
def detect_ffmpeg():
@ -19,8 +21,13 @@ def detect_ffmpeg():
pass
return False
def user_confirm(question):
def user_confirm(question, color=False):
'''Returns the user answer to a yes or no question'''
if color == "yellow":
print(colorama.Fore.YELLOW, end = '')
answer = input(question)
print(colorama.Fore.RESET)
else:
answer = input(question)
if answer.lower() in ["y","yes"]:
return True
@ -34,8 +41,8 @@ def deletefile(filename):
try:
os.remove(filename)
except OSError:
print(f"{BColors.FAIL}Error deleting {filename}{BColors.ENDC}")
print(f"{colorama.Fore.RED}Error deleting {filename}{colorama.Fore.RESET}")
return False
print(f"{BColors.OKGREEN}Successfully deleted {filename}{BColors.ENDC}")
print(f"{colorama.Fore.GREEN}Successfully deleted {filename}{colorama.Fore.RESET}")
return True

View File

@ -1,12 +1,14 @@
#!/usr/bin/env python3
'''Its a video!'''
from .bcolors import BColors
from .tools import deletefile
import subprocess
import os
import sys
import colorama
colorama.init()
class Video():
'''Contains the information and methods of a video file.'''
@ -28,6 +30,10 @@ class Video():
''' creates and analyse a video file '''
#Breaking down the full path in its components
if os.name == 'nt':
self.path = str(filepath)[:str(filepath).rindex("\\") + 1]
self.filename_origin = str(filepath)[str(filepath).rindex("\\") + 1:]
else:
self.path = str(filepath)[:str(filepath).rindex("/") + 1]
self.filename_origin = str(filepath)[str(filepath).rindex("/") + 1:]
@ -53,8 +59,8 @@ class Video():
self.definition = False
if self.error and verbose:
print(f"{BColors.FAIL}There seams to be an error with \"{filepath}\"{BColors.ENDC}")
print(f"{BColors.FAIL} {self.error}{BColors.ENDC}")
print(f"{colorama.Fore.RED}There seams to be an error with \"{filepath}\"{colorama.Fore.RESET}")
print(f"{colorama.Fore.RED} {self.error}{colorama.Fore.RESET}")
def __str__(self):
'''Returns a short formated string about the video'''
@ -80,9 +86,9 @@ class Video():
if self.error:
text += f"{BColors.FAIL}\nErrors:{BColors.ENDC}"
text += f"{colorama.Fore.RED}\nErrors:{colorama.Fore.RESET}"
for err in self.error.splitlines():
text += f"{BColors.FAIL}\n {err}{BColors.ENDC}"
text += f"{colorama.Fore.RED}\n {err}{colorama.Fore.RESET}"
return text
@ -115,9 +121,9 @@ class Video():
text += f" size: {self.filesize} mb"
if self.error:
text += f"{BColors.FAIL}\n Errors:{BColors.ENDC}"
text += f"{colorama.Fore.RED}\n Errors:{colorama.Fore.RESET}"
for err in self.error.splitlines():
text += f"{BColors.FAIL}\n {err}{BColors.ENDC}"
text += f"{colorama.Fore.RED}\n {err}{colorama.Fore.RESET}"
return text
@ -164,10 +170,10 @@ class Video():
except subprocess.CalledProcessError as e:
deletefile(self.path + self.filename_tmp)
self.filename_tmp = ""
print(f"{BColors.FAIL}Conversion failed {e}{BColors.ENDC}")
print(f"{colorama.Fore.RED}Conversion failed {e}{colorama.Fore.RESET}")
return False
except KeyboardInterrupt:
print(f"{BColors.WARNING}Conversion cancelled, cleaning up...{BColors.ENDC}")
print(f"{colorama.Style.YELLOW}Conversion cancelled, cleaning up...{colorama.Fore.RESET}")
deletefile(self.path + self.filename_tmp)
self.filename_tmp = ""
exit()
@ -193,7 +199,7 @@ class Video():
if len(output) > 0:
return output
except (subprocess.CalledProcessError, IndexError):
return f'{BColors.FAIL}There seams to be a "subprocess.CalledProcessError" error with \"{filepath}\"{BColors.ENDC}'
return f'{colorama.Fore.RED}There seams to be a "subprocess.CalledProcessError" error with \"{filepath}\"{colorama.Fore.RESET}'
return False

View File

@ -1,2 +1,3 @@
hurry.filesize
pathlib
colorama
sphinx