From 0a4fcc0869908335abdb0335a7492514368c55f3 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Wed, 17 Aug 2022 14:09:52 +0700 Subject: [PATCH] Melon core --- core/melon.py | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 core/melon.py diff --git a/core/melon.py b/core/melon.py new file mode 100644 index 0000000..9b9631f --- /dev/null +++ b/core/melon.py @@ -0,0 +1,128 @@ +import os +import mysql.connector as mariadb +import cv2 +from pyffmpeg import FFmpeg + +def CheckFileName(path): + filename, file_extension = os.path.splitext(path) + return filename + +def CheckFileType(path): + filename, file_extension = os.path.splitext(path) + return file_extension + +def CheckFileSize(path): + return os.path.getsize(path) # return in byte + +def CheckFileHeight(path): + try: + vid = cv2.VideoCapture(path) + height = vid.get(cv2.CAP_PROP_FRAME_HEIGHT) + except Exception as e: + height = None + print('[DEBUG] Error: '+str(e)) + return height + +def CheckFileWidth(path): + try: + vid = cv2.VideoCapture(path) + width = vid.get(cv2.CAP_PROP_FRAME_WIDTH) + except Exception as e: + width = None + print('[DEBUG] Error: '+str(e)) + return width + +def CheckDir(storage): + return os.path.isdir(storage) + +def CountDir(storage): + return len(os.listdir(storage)) + +def CountDb(dbin, table, portal_field, portal_value): + con = mariadb.connect(**dbin) + cursor = con.cursor() + cursor.execute(f"SELECT * FROM {table} WHERE {portal_field} = {portal_value} ;") + result = cursor.fetchall() + total = len(result) + con.close() + return total + +def CountCompare(storage, dbin, table, portal_field, portal_value): + storage_count = CountDir(storage) + print('[DEBUG] Storage Count: '+str(storage_count)) + record_count = CountDb(dbin, table, portal_field, portal_value) + print('[DEBUG] Record Count: '+str(record_count)) + if storage_count == record_count: + print('[DEBUG] Sync well!') + return 'ok' + elif storage_count > record_count: + print('[DEBUG] New file detected!') + return 'new' + elif storage_count < record_count: + print('[DEBUG] Warning: Some videos is missing!') + return 'miss' + else: + print('[DEBUG] Unknown Error!') + return 'error' + +def CreateVideoThumbnail(inf, outf): + FFmpeg().convert(inf, outf) + +def CleanVideoThumbnail(storage, temp): + pass + +def NewFileDetector(storage, dbin, table, temp): + # cek for list dari directori + new_file_count = 0 + new_file = [] + content = os.listdir(storage) + for row1 in content: + con = mariadb.connect(**dbin) + cursor = con.cursor() + cursor.execute("SELECT * FROM `"+table+"` WHERE id = '"+row1+"';") + result = cursor.fetchall() + detected = len(result) + con.close() + if detected == 0: + new_file_count += 1 + name = CheckFileName(row1) + type = CheckFileType(row1) + size = CheckFileSize(storage+row1) + height = CheckFileHeight(storage+row1) + width = CheckFileWidth(storage+row1) + name_esc = name.replace(' ','\ ') + in_file = f'{storage}{name_esc}{type}' + tempthumb = f'{temp}{name_esc}{type}.jpg' + info = { + "file" : row1, + "name" : name, + "type" : type, + "size" : size, + "height" : height, + "width" : width, + "thumbnail": tempthumb + } + try: + CreateVideoThumbnail(in_file, tempthumb) + print(f'[DEBUG] FFmpeg is running') + print(f'[DEBUG] In File: {in_file}') + print(f'[DEBUG] Out File: {tempthumb}') + except Exception as e: + print(f'[DEBUG] ERROR: {e}') + new_file.append(info) + + result = { + "count" : new_file_count, + "info" : new_file + } + return result + +def MissingFileDetector(storage, dbin, table): + # cek for list dari database + pass + +def NewFileInsertData(): + pass + +def MissingFileRemoveData(): + pass