diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..edb9d07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +token.txt +.venv +.idea +__pycache__ \ No newline at end of file diff --git a/check-folder-revivetube.py b/check-folder-revivetube.py index ed407ba..57ea802 100644 --- a/check-folder-revivetube.py +++ b/check-folder-revivetube.py @@ -1,6 +1,7 @@ import os -import time import subprocess +import time + def get_folder_size(folder_path): total_size = 0 @@ -11,6 +12,7 @@ def get_folder_size(folder_path): total_size += os.path.getsize(filepath) return total_size + def delete_files(folder_path, extensions): os.system('sudo pkill -f revivetube.py') process = subprocess.Popen(['sudo', 'nohup', 'python3', 'revivetube.py']) @@ -23,6 +25,7 @@ def delete_files(folder_path, extensions): except: print("ERROR") + def monitor_folder(folder_path, size_limit_gb, check_interval): size_limit_bytes = size_limit_gb * 1024 * 1024 * 1024 while True: @@ -31,6 +34,7 @@ def monitor_folder(folder_path, size_limit_gb, check_interval): delete_files(folder_path, [".flv", ".mp4"]) time.sleep(check_interval) + if __name__ == "__main__": folder_to_monitor = "./sigma/videos/" size_limit = 7 diff --git a/generateRequirements.sh b/generateRequirements.sh new file mode 100644 index 0000000..a182d84 --- /dev/null +++ b/generateRequirements.sh @@ -0,0 +1 @@ +pipreqs . --force --ignore .venv \ No newline at end of file diff --git a/helper.py b/helper.py new file mode 100644 index 0000000..a4a5d25 --- /dev/null +++ b/helper.py @@ -0,0 +1,57 @@ +import json +import os +import subprocess + + +def read_file(path): + assert isinstance(path, str), "Path must be a string" + + try: + with open(path, 'r', encoding='utf-8') as file: + content = file.read() + return content + except FileNotFoundError: + return "Error: File not found." + except Exception as e: + return f"Error: {str(e)}" + + +def get_video_duration_from_file(video_path): + try: + result = subprocess.run( + ['ffprobe', '-v', 'error', '-show_format', '-show_streams', '-of', 'json', video_path], + stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + video_info = json.loads(result.stdout) + + duration = float(video_info['format']['duration']) + + return duration + except Exception as e: + print(f"Can't fetch Video-Duration: {str(e)}") + return 0 + + +def format_duration(seconds): + minutes = seconds // 60 + seconds = seconds % 60 + return f"{minutes}:{str(seconds).zfill(2)}" + + +def get_file_size(file_path): + return os.path.getsize(file_path) + + +def get_range(file_path, byte_range): + with open(file_path, 'rb') as f: + f.seek(byte_range[0]) + return f.read(byte_range[1] - byte_range[0] + 1) + + +def get_api_key(): + try: + with open("token.txt", "r") as f: + return f.read().strip() + except FileNotFoundError: + raise FileNotFoundError("Missing token.txt. Please go to README.md") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..76a77cb --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +Flask==3.1.0 +Requests==2.32.3 +yt_dlp==2024.12.23 diff --git a/revivetube.py b/revivetube.py index c49a344..3f68e7d 100644 --- a/revivetube.py +++ b/revivetube.py @@ -14,29 +14,32 @@ If you use this Code, you agree to https://revivemii.fr.to/revivetube/t-and-p.ht ReviveMii Project: https://revivemii.fr.to/ """ -import json -import isodate -from flask import Flask, request, render_template_string, send_file, Response, abort, jsonify -import tempfile -import shutil -import yt_dlp -import requests -import subprocess import os +import shutil +import subprocess +import tempfile import threading -from threading import Thread import time +from threading import Thread + +import requests +import yt_dlp +from flask import Flask, request, render_template_string, send_file, Response, abort, jsonify + +import helper app = Flask(__name__) + def check_and_create_folder(): while True: folder_path = './sigma/videos' if not os.path.exists(folder_path): os.makedirs(folder_path) - print(f"Ordner {folder_path} wurde erstellt.") + print(f"Folder {folder_path} got created.") time.sleep(10) + def start_folder_check(): thread = Thread(target=check_and_create_folder) thread.daemon = True @@ -48,118 +51,16 @@ API_BASE_URL = "https://y.com.sb/api/v1/" YOUTUBE_API_URL = "https://www.googleapis.com/youtube/v3/videos" video_status = {} -LOADING_TEMPLATE = """ - - -
- - -Fetching Info...
- -A YouTube App for the Wii
- - {% if results %} -\/ Scroll down \/
-We are NOT affiliated with Nintendo or YouTube. This app uses code from Wiinet.xyz. For more information, scroll down to Open Source Software.
-It's recommended to bookmark this page. Some sites may take longer to load.
- Terms of Service and Privacy Policy (Last Updated: 7. Dec 2024 12:41 CET)Version: v2 Beta (Sometimes I forget to update the Version Number)
- Open Source Software Used in This App -