Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
| 1 |
-
import os
|
| 2 |
import logging
|
| 3 |
import threading
|
| 4 |
import time
|
|
@@ -14,7 +13,7 @@ app = FastAPI()
|
|
| 14 |
# -------------------------------------------------------------------
|
| 15 |
# Configuration & Global Variables
|
| 16 |
# -------------------------------------------------------------------
|
| 17 |
-
# (No token or outgoing calls are used in this version.)
|
| 18 |
# Conversation state
|
| 19 |
user_inputs = {}
|
| 20 |
# The conversation fields will depend on the mode.
|
|
@@ -49,9 +48,9 @@ stream_thread = None
|
|
| 49 |
live_log_thread = None
|
| 50 |
|
| 51 |
# Live logging globals
|
| 52 |
-
live_log_lines = []
|
| 53 |
-
live_log_display = ""
|
| 54 |
-
error_notification = ""
|
| 55 |
|
| 56 |
# -------------------------------------------------------------------
|
| 57 |
# Enhanced Logging Setup
|
|
@@ -118,7 +117,7 @@ def help_text():
|
|
| 118 |
"*/start* - Begin setup for streaming (simple mode: only Input & Output URL)\n"
|
| 119 |
"*/setting* - Enter advanced settings (Input URL, Quality Settings, Video Codec, Audio Codec, Output URL)\n"
|
| 120 |
"*/help* - Display this help text\n"
|
| 121 |
-
"*/logs* - Show the log history\n\n"
|
| 122 |
"After inputs are collected, press the inline *Start Streaming* button.\n\n"
|
| 123 |
"While streaming, you can use inline buttons or commands:\n"
|
| 124 |
"*/pause* - Pause the stream\n"
|
|
@@ -128,7 +127,7 @@ def help_text():
|
|
| 128 |
)
|
| 129 |
|
| 130 |
def send_guide_message(chat_id, message):
|
| 131 |
-
# Return a response dictionary
|
| 132 |
logging.info(f"Sending message to chat {chat_id}: {message}")
|
| 133 |
return {
|
| 134 |
"method": "sendMessage",
|
|
@@ -162,8 +161,7 @@ def validate_inputs():
|
|
| 162 |
def notify_error(chat_id, error_message):
|
| 163 |
global error_notification
|
| 164 |
error_notification = error_message
|
| 165 |
-
|
| 166 |
-
logging.error(f"Error notified to user in chat {chat_id}: {error_message}")
|
| 167 |
|
| 168 |
# -------------------------------------------------------------------
|
| 169 |
# Live Log Updater (Background Thread)
|
|
@@ -172,7 +170,7 @@ def live_log_updater():
|
|
| 172 |
global live_log_display, streaming_state
|
| 173 |
try:
|
| 174 |
while streaming_state in ["streaming", "paused"]:
|
| 175 |
-
# Update the
|
| 176 |
live_log_display = "<pre>" + "\n".join(live_log_lines[-15:]) + "</pre>"
|
| 177 |
time.sleep(1)
|
| 178 |
except Exception as e:
|
|
@@ -182,12 +180,16 @@ def live_log_updater():
|
|
| 182 |
# Logs History Handler (/logs)
|
| 183 |
# -------------------------------------------------------------------
|
| 184 |
def logs_history(chat_id):
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
if error_notification:
|
| 190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
return {
|
| 192 |
"method": "sendMessage",
|
| 193 |
"chat_id": chat_id,
|
|
@@ -200,7 +202,7 @@ def logs_history(chat_id):
|
|
| 200 |
# -------------------------------------------------------------------
|
| 201 |
def handle_start(chat_id):
|
| 202 |
global current_step, user_inputs, conversation_fields, advanced_mode
|
| 203 |
-
# By default, simple mode
|
| 204 |
user_inputs = {}
|
| 205 |
if not advanced_mode:
|
| 206 |
conversation_fields = ["input_url", "output_url"]
|
|
@@ -323,12 +325,13 @@ def stream_to_youtube(input_url, quality_settings, video_codec, audio_codec, out
|
|
| 323 |
|
| 324 |
logging.info("Streaming started successfully.")
|
| 325 |
|
| 326 |
-
# Start the live log updater in a background thread
|
| 327 |
global live_log_thread
|
| 328 |
-
live_log_thread
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
|
|
|
| 332 |
|
| 333 |
# Stream loop: process packets until state changes
|
| 334 |
while streaming_state in ["streaming", "paused"]:
|
|
@@ -407,7 +410,7 @@ def start_streaming(chat_id):
|
|
| 407 |
logging.info("Streaming thread started.")
|
| 408 |
|
| 409 |
# Immediately inform the user that streaming has started;
|
| 410 |
-
# live log updates
|
| 411 |
return {
|
| 412 |
"method": "sendMessage",
|
| 413 |
"chat_id": chat_id,
|
|
|
|
|
|
|
| 1 |
import logging
|
| 2 |
import threading
|
| 3 |
import time
|
|
|
|
| 13 |
# -------------------------------------------------------------------
|
| 14 |
# Configuration & Global Variables
|
| 15 |
# -------------------------------------------------------------------
|
| 16 |
+
# (No token or outgoing HTTP calls are used in this version.)
|
| 17 |
# Conversation state
|
| 18 |
user_inputs = {}
|
| 19 |
# The conversation fields will depend on the mode.
|
|
|
|
| 48 |
live_log_thread = None
|
| 49 |
|
| 50 |
# Live logging globals
|
| 51 |
+
live_log_lines = [] # Rolling list (max 50 log lines)
|
| 52 |
+
live_log_display = "" # Global variable updated every second by live_log_updater
|
| 53 |
+
error_notification = "" # Global variable to hold error details if any
|
| 54 |
|
| 55 |
# -------------------------------------------------------------------
|
| 56 |
# Enhanced Logging Setup
|
|
|
|
| 117 |
"*/start* - Begin setup for streaming (simple mode: only Input & Output URL)\n"
|
| 118 |
"*/setting* - Enter advanced settings (Input URL, Quality Settings, Video Codec, Audio Codec, Output URL)\n"
|
| 119 |
"*/help* - Display this help text\n"
|
| 120 |
+
"*/logs* - Show the log history (live log display)\n\n"
|
| 121 |
"After inputs are collected, press the inline *Start Streaming* button.\n\n"
|
| 122 |
"While streaming, you can use inline buttons or commands:\n"
|
| 123 |
"*/pause* - Pause the stream\n"
|
|
|
|
| 127 |
)
|
| 128 |
|
| 129 |
def send_guide_message(chat_id, message):
|
| 130 |
+
# Return a response dictionary to be sent as the webhook reply
|
| 131 |
logging.info(f"Sending message to chat {chat_id}: {message}")
|
| 132 |
return {
|
| 133 |
"method": "sendMessage",
|
|
|
|
| 161 |
def notify_error(chat_id, error_message):
|
| 162 |
global error_notification
|
| 163 |
error_notification = error_message
|
| 164 |
+
logging.error(f"Error for chat {chat_id}: {error_message}")
|
|
|
|
| 165 |
|
| 166 |
# -------------------------------------------------------------------
|
| 167 |
# Live Log Updater (Background Thread)
|
|
|
|
| 170 |
global live_log_display, streaming_state
|
| 171 |
try:
|
| 172 |
while streaming_state in ["streaming", "paused"]:
|
| 173 |
+
# Update the global live_log_display with the last 15 log lines in HTML format
|
| 174 |
live_log_display = "<pre>" + "\n".join(live_log_lines[-15:]) + "</pre>"
|
| 175 |
time.sleep(1)
|
| 176 |
except Exception as e:
|
|
|
|
| 180 |
# Logs History Handler (/logs)
|
| 181 |
# -------------------------------------------------------------------
|
| 182 |
def logs_history(chat_id):
|
| 183 |
+
global live_log_display, error_notification
|
| 184 |
+
# Use the global live_log_display if available; otherwise, show a default message.
|
| 185 |
+
log_text = live_log_display if live_log_display else "<pre>No logs available yet.</pre>"
|
| 186 |
+
# If an error occurred, prepend the error notification.
|
| 187 |
if error_notification:
|
| 188 |
+
# Remove any opening <pre> tag from log_text and prepend error message
|
| 189 |
+
if log_text.startswith("<pre>"):
|
| 190 |
+
log_text = f"<pre>ERROR: {error_notification}\n\n" + log_text[5:]
|
| 191 |
+
else:
|
| 192 |
+
log_text = f"<pre>ERROR: {error_notification}\n\n{log_text}</pre>"
|
| 193 |
return {
|
| 194 |
"method": "sendMessage",
|
| 195 |
"chat_id": chat_id,
|
|
|
|
| 202 |
# -------------------------------------------------------------------
|
| 203 |
def handle_start(chat_id):
|
| 204 |
global current_step, user_inputs, conversation_fields, advanced_mode
|
| 205 |
+
# By default, use simple mode unless advanced_mode is set via /setting
|
| 206 |
user_inputs = {}
|
| 207 |
if not advanced_mode:
|
| 208 |
conversation_fields = ["input_url", "output_url"]
|
|
|
|
| 325 |
|
| 326 |
logging.info("Streaming started successfully.")
|
| 327 |
|
| 328 |
+
# Start the live log updater in a background thread if not already running.
|
| 329 |
global live_log_thread
|
| 330 |
+
if live_log_thread is None or not live_log_thread.is_alive():
|
| 331 |
+
live_log_thread = threading.Thread(target=live_log_updater)
|
| 332 |
+
live_log_thread.daemon = True
|
| 333 |
+
live_log_thread.start()
|
| 334 |
+
logging.info("Live log updater thread started.")
|
| 335 |
|
| 336 |
# Stream loop: process packets until state changes
|
| 337 |
while streaming_state in ["streaming", "paused"]:
|
|
|
|
| 410 |
logging.info("Streaming thread started.")
|
| 411 |
|
| 412 |
# Immediately inform the user that streaming has started;
|
| 413 |
+
# live log updates are available via the global variable and the /logs command.
|
| 414 |
return {
|
| 415 |
"method": "sendMessage",
|
| 416 |
"chat_id": chat_id,
|