Spaces:
Sleeping
Sleeping
Upload 4 files
Browse files
README.md
CHANGED
|
@@ -4,10 +4,10 @@ emoji: 🎴
|
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: purple
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version:
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
-
python_version:
|
| 11 |
---
|
| 12 |
|
| 13 |
# Flashcard2Audio
|
|
|
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: purple
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 4.0.0
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
+
python_version: "3.10"
|
| 11 |
---
|
| 12 |
|
| 13 |
# Flashcard2Audio
|
app.py
CHANGED
|
@@ -239,16 +239,26 @@ def estimate_time(num_cards, has_existing_media=False, mode="Smart Fill (Preserv
|
|
| 239 |
mins = int((seconds % 3600) / 60)
|
| 240 |
return f"~{hours}h {mins}m" if mins > 0 else f"~{hours}h"
|
| 241 |
|
| 242 |
-
def process_dataframe(df_full, search_term, extract_root, mode, progress=gr.Progress()):
|
| 243 |
if df_full is None or len(df_full) == 0:
|
| 244 |
return None, "No data"
|
| 245 |
|
| 246 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
if search_term:
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
|
|
|
|
|
|
|
|
|
| 252 |
|
| 253 |
if len(df) == 0:
|
| 254 |
return None, "No matching cards"
|
|
@@ -311,7 +321,7 @@ def process_dataframe(df_full, search_term, extract_root, mode, progress=gr.Prog
|
|
| 311 |
q_res, a_res = future.result()
|
| 312 |
|
| 313 |
# --- Field Construction (Corrected) ---
|
| 314 |
-
q_original = str(df.
|
| 315 |
q_field = q_original
|
| 316 |
|
| 317 |
# Update Question
|
|
@@ -326,7 +336,7 @@ def process_dataframe(df_full, search_term, extract_root, mode, progress=gr.Prog
|
|
| 326 |
q_field = q_field.strip() + f"<br>[sound:{os.path.basename(q_mp3)}]"
|
| 327 |
|
| 328 |
# Update Answer
|
| 329 |
-
a_original = str(df.
|
| 330 |
a_field = a_original
|
| 331 |
|
| 332 |
if a_res and a_res != "SKIP":
|
|
@@ -502,8 +512,8 @@ with gr.Blocks(title="Pocket TTS Anki") as app:
|
|
| 502 |
outputs=[preview_table, eta_box])
|
| 503 |
|
| 504 |
btn.click(process_dataframe,
|
| 505 |
-
inputs=[full_df_state, search_box, extract_root_state, mode_radio],
|
| 506 |
outputs=[dl, result_lbl])
|
| 507 |
|
| 508 |
if __name__ == "__main__":
|
| 509 |
-
app.queue(max_size=2).launch(server_name="0.0.0.0", server_port=7860)
|
|
|
|
| 239 |
mins = int((seconds % 3600) / 60)
|
| 240 |
return f"~{hours}h {mins}m" if mins > 0 else f"~{hours}h"
|
| 241 |
|
| 242 |
+
def process_dataframe(df_full, search_term, extract_root, mode, search_in, selected_tag, progress=gr.Progress()):
|
| 243 |
if df_full is None or len(df_full) == 0:
|
| 244 |
return None, "No data"
|
| 245 |
|
| 246 |
+
# Start with full dataframe
|
| 247 |
+
df = df_full.copy()
|
| 248 |
+
|
| 249 |
+
# Apply tag filter first
|
| 250 |
+
if selected_tag and selected_tag != "All":
|
| 251 |
+
df = df[df['Tags'].str.contains(selected_tag, na=False, case=False)]
|
| 252 |
+
|
| 253 |
+
# Apply text search filter
|
| 254 |
if search_term:
|
| 255 |
+
if search_in == "Question Only":
|
| 256 |
+
mask = df['Question'].str.contains(search_term, case=False, na=False)
|
| 257 |
+
elif search_in == "Answer Only":
|
| 258 |
+
mask = df['Answer'].str.contains(search_term, case=False, na=False)
|
| 259 |
+
else: # Both
|
| 260 |
+
mask = df.astype(str).apply(lambda x: x.str.contains(search_term, case=False, na=False)).any(axis=1)
|
| 261 |
+
df = df[mask]
|
| 262 |
|
| 263 |
if len(df) == 0:
|
| 264 |
return None, "No matching cards"
|
|
|
|
| 321 |
q_res, a_res = future.result()
|
| 322 |
|
| 323 |
# --- Field Construction (Corrected) ---
|
| 324 |
+
q_original = str(df.loc[idx, 'Question'])
|
| 325 |
q_field = q_original
|
| 326 |
|
| 327 |
# Update Question
|
|
|
|
| 336 |
q_field = q_field.strip() + f"<br>[sound:{os.path.basename(q_mp3)}]"
|
| 337 |
|
| 338 |
# Update Answer
|
| 339 |
+
a_original = str(df.loc[idx, 'Answer'])
|
| 340 |
a_field = a_original
|
| 341 |
|
| 342 |
if a_res and a_res != "SKIP":
|
|
|
|
| 512 |
outputs=[preview_table, eta_box])
|
| 513 |
|
| 514 |
btn.click(process_dataframe,
|
| 515 |
+
inputs=[full_df_state, search_box, extract_root_state, mode_radio, search_field, tag_dropdown],
|
| 516 |
outputs=[dl, result_lbl])
|
| 517 |
|
| 518 |
if __name__ == "__main__":
|
| 519 |
+
app.queue(max_size=2).launch(server_name="0.0.0.0", server_port=7860, ssr_mode=False)
|