WebFM/src/core/utils/shellfm/windows/Launcher.py

105 lines
3.6 KiB
Python

# System import
import os, subprocess, threading
# Lib imports
# Apoplication imports
class Launcher:
def openFilelocally(self, file):
lowerName = file.lower()
command = []
if lowerName.endswith(self.fvideos):
player = self.fm_config["settings"]["media_app"]
options = self.fm_config["settings"]["mplayer_options"].split()
command = [player]
if "mplayer" in player:
command += options
command += [file]
elif lowerName.endswith(self.fimages):
command = [self.fm_config["settings"]["image_app"], file]
elif lowerName.endswith(self.fmusic):
command = [self.fm_config["settings"]["music_app"], file]
elif lowerName.endswith(self.foffice):
command = [self.fm_config["settings"]["office_app"], file]
elif lowerName.endswith(self.ftext):
command = [self.fm_config["settings"]["text_app"], file]
elif lowerName.endswith(self.fpdf):
command = [self.fm_config["settings"]["pdf_app"], file]
else:
command = [self.fm_config["settings"]["file_manager_app"], file]
self.logging.debug(command)
DEVNULL = open(os.devnull, 'w')
subprocess.Popen(command, start_new_session=True, stdout=DEVNULL, stderr=DEVNULL, close_fds=True)
def remuxVideo(self, hash, file):
remux_vid_pth = self.REMUX_FOLDER + "/" + hash + ".mp4"
self.logging.debug(remux_vid_pth)
if not os.path.isfile(remux_vid_pth):
self.check_remux_space()
command = ["ffmpeg", "-i", file, "-hide_banner", "-movflags", "+faststart"]
if file.endswith("mkv"):
command += ["-codec", "copy", "-strict", "-2"]
if file.endswith("avi"):
command += ["-c:v", "libx264", "-crf", "21", "-c:a", "aac", "-b:a", "192k", "-ac", "2"]
if file.endswith("wmv"):
command += ["-c:v", "libx264", "-crf", "23", "-c:a", "aac", "-strict", "-2", "-q:a", "100"]
if file.endswith("f4v") or file.endswith("flv"):
command += ["-vcodec", "copy"]
command += [remux_vid_pth]
try:
proc = subprocess.Popen(command)
proc.wait()
except Exception as e:
self.logging.debug(message)
self.logging.debug(e)
return False
return True
def generateVideoThumbnail(self, fullPath, hashImgPth):
try:
proc = subprocess.Popen([self.FFMPG_THUMBNLR, "-t", "65%", "-s", "300", "-c", "jpg", "-i", fullPath, "-o", hashImgPth])
proc.wait()
except Exception as e:
self.logging.debug(repr(e))
def check_remux_space(self):
limit = self.fm_config["settings"]["remux_folder_max_disk_usage"]
try:
limit = int(limit)
except Exception as e:
self.logging.debug(e)
return
usage = self.getRemuxFolderUsage(self.REMUX_FOLDER)
if usage > limit:
files = os.listdir(self.REMUX_FOLDER)
for file in files:
fp = os.path.join(self.REMUX_FOLDER, file)
os.unlink(fp)
def getRemuxFolderUsage(self, start_path = "."):
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
if not os.path.islink(fp): # Skip if it is symbolic link
total_size += os.path.getsize(fp)
return total_size