adelevett commited on
Commit
958f060
·
verified ·
1 Parent(s): 4ad9728

Upload 4 files

Browse files
Files changed (2) hide show
  1. README.md +2 -2
  2. app.py +20 -10
README.md CHANGED
@@ -4,10 +4,10 @@ emoji: 🎴
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: gradio
7
- sdk_version: 6.5.1
8
  app_file: app.py
9
  pinned: false
10
- python_version: '3.10'
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
- # Filter logic
 
 
 
 
 
 
 
247
  if search_term:
248
- mask = df_full.astype(str).apply(lambda x: x.str.contains(search_term, case=False)).any(axis=1)
249
- df = df_full[mask]
250
- else:
251
- df = df_full
 
 
 
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.iloc[idx]['Question'])
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.iloc[idx]['Answer'])
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)