Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
import gradio as gr
|
2 |
-
import requests, zipfile, os, shutil,
|
3 |
|
4 |
# FILE DI CONFIGURAZIONE
|
5 |
SETTINGS_FILE = "settings.json"
|
6 |
DEFAULT_SETTINGS = {
|
7 |
-
"videolibrarypath": "
|
8 |
"folder_tvshows": "Serie TV",
|
9 |
"folder_movies": "Film",
|
10 |
"videolibrary_kodi": False
|
11 |
}
|
12 |
|
13 |
def load_settings():
|
14 |
-
"""Carica le impostazioni dal file JSON
|
15 |
if os.path.exists(SETTINGS_FILE):
|
16 |
try:
|
17 |
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
|
@@ -48,7 +48,7 @@ def update_settings(videolibrarypath, folder_tvshows, folder_movies, videolibrar
|
|
48 |
def get_branches():
|
49 |
"""
|
50 |
Recupera la lista dei branch disponibili dal repository GitHub.
|
51 |
-
|
52 |
"""
|
53 |
url = "https://api.github.com/repos/stream4me/addon/branches"
|
54 |
try:
|
@@ -66,9 +66,9 @@ def get_branches():
|
|
66 |
|
67 |
def update_from_zip(branch: str) -> str:
|
68 |
"""
|
69 |
-
Scarica
|
70 |
-
lo estrae
|
71 |
-
|
72 |
"""
|
73 |
log = []
|
74 |
try:
|
@@ -83,11 +83,11 @@ def update_from_zip(branch: str) -> str:
|
|
83 |
f.write(chunk)
|
84 |
log.append("Download completato.")
|
85 |
|
86 |
-
# Definizione delle directory
|
87 |
-
extract_base = f"
|
88 |
-
target_dir = "
|
89 |
|
90 |
-
#
|
91 |
if os.path.isdir(target_dir):
|
92 |
shutil.rmtree(target_dir)
|
93 |
log.append(f"Vecchia cartella '{target_dir}' rimossa.")
|
@@ -105,7 +105,7 @@ def update_from_zip(branch: str) -> str:
|
|
105 |
else:
|
106 |
log.append("Errore: cartella estratta non trovata.")
|
107 |
|
108 |
-
# Pulizia
|
109 |
os.remove(zip_filename)
|
110 |
shutil.rmtree(extract_base)
|
111 |
log.append("Pulizia completata. Aggiornamento eseguito con successo.")
|
@@ -121,19 +121,16 @@ def build_interface():
|
|
121 |
"""Costruisce l’interfaccia completa utilizzando Gradio."""
|
122 |
branches = get_branches()
|
123 |
|
124 |
-
# CSS personalizzato per Smart TV: font
|
125 |
css_custom = """
|
126 |
body { font-size: 32px; }
|
127 |
.gradio-container { font-size: 32px; }
|
128 |
.gr-button { font-size: 32px; padding: 20px; }
|
129 |
.gr-input { font-size: 32px; padding: 10px; }
|
130 |
.gr-dropdown { font-size: 32px; padding: 10px; }
|
131 |
-
|
132 |
-
.gradio-container * {
|
133 |
-
margin: 20px;
|
134 |
-
}
|
135 |
"""
|
136 |
-
# Script JS per navigazione
|
137 |
js_script = """
|
138 |
<script>
|
139 |
document.addEventListener('keydown', function(event) {
|
@@ -153,11 +150,11 @@ def build_interface():
|
|
153 |
"""
|
154 |
|
155 |
with gr.Blocks(css=css_custom, title="Stream4Me Update per Smart TV") as demo:
|
156 |
-
gr.Markdown("# Stream4Me - Aggiornamento e Configurazione
|
157 |
-
gr.HTML(js_script) # Iniezione dello script JS per la navigazione
|
158 |
with gr.Tabs():
|
159 |
with gr.TabItem("Aggiornamento"):
|
160 |
-
gr.Markdown("## Aggiorna l'
|
161 |
branch_dropdown = gr.Dropdown(choices=branches, value=branches[0], label="Seleziona Branch")
|
162 |
update_button = gr.Button("Avvia Aggiornamento")
|
163 |
update_log = gr.Textbox(label="Log di Aggiornamento", lines=10)
|
@@ -169,7 +166,7 @@ def build_interface():
|
|
169 |
input_videolibrarypath = gr.Textbox(value=settings.get("videolibrarypath", ""), label="Percorso Video Library")
|
170 |
input_folder_tvshows = gr.Textbox(value=settings.get("folder_tvshows", ""), label="Cartella Serie TV")
|
171 |
input_folder_movies = gr.Textbox(value=settings.get("folder_movies", ""), label="Cartella Film")
|
172 |
-
input_videolibrary_kodi = gr.Checkbox(value=settings.get("videolibrary_kodi", False), label="Integrazione Video Library Kodi")
|
173 |
save_button = gr.Button("Salva Impostazioni")
|
174 |
settings_status = gr.Textbox(label="Stato Impostazioni", lines=2)
|
175 |
save_button.click(fn=update_settings,
|
@@ -183,12 +180,13 @@ def build_interface():
|
|
183 |
with gr.TabItem("Informazioni"):
|
184 |
gr.Markdown("## Informazioni sul Progetto")
|
185 |
gr.Markdown("""
|
186 |
-
**Stream4Me** è un progetto per gestire e
|
|
|
187 |
|
188 |
**Funzionalità:**
|
189 |
-
- Aggiornamento automatico
|
190 |
- Configurazione personalizzata tramite interfaccia web.
|
191 |
-
-
|
192 |
|
193 |
**Repository:** [Stream4Me su GitHub](https://github.com/Stream4me/addon)
|
194 |
|
|
|
1 |
import gradio as gr
|
2 |
+
import requests, zipfile, os, shutil, json
|
3 |
|
4 |
# FILE DI CONFIGURAZIONE
|
5 |
SETTINGS_FILE = "settings.json"
|
6 |
DEFAULT_SETTINGS = {
|
7 |
+
"videolibrarypath": "path/to/videolibrary",
|
8 |
"folder_tvshows": "Serie TV",
|
9 |
"folder_movies": "Film",
|
10 |
"videolibrary_kodi": False
|
11 |
}
|
12 |
|
13 |
def load_settings():
|
14 |
+
"""Carica le impostazioni dal file JSON oppure restituisce quelle di default."""
|
15 |
if os.path.exists(SETTINGS_FILE):
|
16 |
try:
|
17 |
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
|
|
|
48 |
def get_branches():
|
49 |
"""
|
50 |
Recupera la lista dei branch disponibili dal repository GitHub.
|
51 |
+
Ordina dando priorità a 'stable' e 'master'.
|
52 |
"""
|
53 |
url = "https://api.github.com/repos/stream4me/addon/branches"
|
54 |
try:
|
|
|
66 |
|
67 |
def update_from_zip(branch: str) -> str:
|
68 |
"""
|
69 |
+
Scarica il file zip del branch selezionato da GitHub,
|
70 |
+
lo estrae in una cartella target ("s4me_app") e restituisce un log delle operazioni.
|
71 |
+
Questa funzione non utilizza alcuna dipendenza da Kodi.
|
72 |
"""
|
73 |
log = []
|
74 |
try:
|
|
|
83 |
f.write(chunk)
|
84 |
log.append("Download completato.")
|
85 |
|
86 |
+
# Definizione delle directory: estraiamo in una cartella temporanea
|
87 |
+
extract_base = f"s4me_app_{branch}"
|
88 |
+
target_dir = "s4me_app"
|
89 |
|
90 |
+
# Rimuovo la cartella target se esiste già
|
91 |
if os.path.isdir(target_dir):
|
92 |
shutil.rmtree(target_dir)
|
93 |
log.append(f"Vecchia cartella '{target_dir}' rimossa.")
|
|
|
105 |
else:
|
106 |
log.append("Errore: cartella estratta non trovata.")
|
107 |
|
108 |
+
# Pulizia: rimozione del file zip e della cartella temporanea
|
109 |
os.remove(zip_filename)
|
110 |
shutil.rmtree(extract_base)
|
111 |
log.append("Pulizia completata. Aggiornamento eseguito con successo.")
|
|
|
121 |
"""Costruisce l’interfaccia completa utilizzando Gradio."""
|
122 |
branches = get_branches()
|
123 |
|
124 |
+
# CSS personalizzato per Smart TV: font e padding maggiorati per una migliore usabilità
|
125 |
css_custom = """
|
126 |
body { font-size: 32px; }
|
127 |
.gradio-container { font-size: 32px; }
|
128 |
.gr-button { font-size: 32px; padding: 20px; }
|
129 |
.gr-input { font-size: 32px; padding: 10px; }
|
130 |
.gr-dropdown { font-size: 32px; padding: 10px; }
|
131 |
+
.gradio-container * { margin: 20px; }
|
|
|
|
|
|
|
132 |
"""
|
133 |
+
# Script JS per navigazione tramite tasti freccia (utile con telecomando)
|
134 |
js_script = """
|
135 |
<script>
|
136 |
document.addEventListener('keydown', function(event) {
|
|
|
150 |
"""
|
151 |
|
152 |
with gr.Blocks(css=css_custom, title="Stream4Me Update per Smart TV") as demo:
|
153 |
+
gr.Markdown("# Stream4Me - Aggiornamento e Configurazione")
|
154 |
+
gr.HTML(js_script) # Iniezione dello script JS per la navigazione con telecomando
|
155 |
with gr.Tabs():
|
156 |
with gr.TabItem("Aggiornamento"):
|
157 |
+
gr.Markdown("## Aggiorna l'applicazione dal repository GitHub")
|
158 |
branch_dropdown = gr.Dropdown(choices=branches, value=branches[0], label="Seleziona Branch")
|
159 |
update_button = gr.Button("Avvia Aggiornamento")
|
160 |
update_log = gr.Textbox(label="Log di Aggiornamento", lines=10)
|
|
|
166 |
input_videolibrarypath = gr.Textbox(value=settings.get("videolibrarypath", ""), label="Percorso Video Library")
|
167 |
input_folder_tvshows = gr.Textbox(value=settings.get("folder_tvshows", ""), label="Cartella Serie TV")
|
168 |
input_folder_movies = gr.Textbox(value=settings.get("folder_movies", ""), label="Cartella Film")
|
169 |
+
input_videolibrary_kodi = gr.Checkbox(value=settings.get("videolibrary_kodi", False), label="Integrazione Video Library (Kodi)")
|
170 |
save_button = gr.Button("Salva Impostazioni")
|
171 |
settings_status = gr.Textbox(label="Stato Impostazioni", lines=2)
|
172 |
save_button.click(fn=update_settings,
|
|
|
180 |
with gr.TabItem("Informazioni"):
|
181 |
gr.Markdown("## Informazioni sul Progetto")
|
182 |
gr.Markdown("""
|
183 |
+
**Stream4Me** è un progetto stand-alone per gestire l’aggiornamento e la configurazione di un’applicazione,
|
184 |
+
completamente indipendente da Kodi e ottimizzata per Smart TV.
|
185 |
|
186 |
**Funzionalità:**
|
187 |
+
- Aggiornamento automatico dal repository GitHub.
|
188 |
- Configurazione personalizzata tramite interfaccia web.
|
189 |
+
- Interfaccia responsive, con navigazione tramite telecomando.
|
190 |
|
191 |
**Repository:** [Stream4Me su GitHub](https://github.com/Stream4me/addon)
|
192 |
|