awacke1 commited on
Commit
33f1e6c
Β·
verified Β·
1 Parent(s): 516ffb1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -36
app.py CHANGED
@@ -64,7 +64,7 @@ VOTE_DIR = "vote_logs"
64
  STATE_FILE = "user_state.txt"
65
  AUDIO_DIR = "audio_logs"
66
  HISTORY_DIR = "history_logs"
67
- MEDIA_DIR = "media_files" # New directory for uploaded media
68
  os.makedirs(CHAT_DIR, exist_ok=True)
69
  os.makedirs(VOTE_DIR, exist_ok=True)
70
  os.makedirs(AUDIO_DIR, exist_ok=True)
@@ -111,6 +111,10 @@ if 'active_connections' not in st.session_state:
111
  st.session_state.active_connections = {}
112
  if 'media_notifications' not in st.session_state:
113
  st.session_state.media_notifications = []
 
 
 
 
114
 
115
  # Timestamp wizardry - clock ticks with flair! ⏰🎩
116
  def format_timestamp_prefix():
@@ -158,6 +162,7 @@ async def save_chat_entry(username, message):
158
  with open(HISTORY_FILE, 'a') as f:
159
  f.write(f"[{timestamp}] {username}: Audio generated - {audio_file}\n")
160
  await broadcast_message(f"{username}|{message}", "chat") # Notify all clients
 
161
 
162
  # Chat loader - history unleashed! πŸ“œπŸš€
163
  async def load_chat():
@@ -366,8 +371,6 @@ def create_streamlit_interface():
366
  st.session_state.message_text = ""
367
  if 'audio_cache' not in st.session_state:
368
  st.session_state.audio_cache = {}
369
- if 'chat_history' not in st.session_state:
370
- st.session_state.chat_history = []
371
 
372
  st.markdown("""
373
  <style>
@@ -389,43 +392,52 @@ def create_streamlit_interface():
389
  await process_voice_input(audio_bytes)
390
  st.rerun()
391
 
 
392
  st.subheader(f"{START_ROOM} Chat πŸ’¬")
393
  chat_content = await load_chat()
394
  chat_lines = chat_content.split('\n')
395
  chat_votes = await load_votes(QUOTE_VOTES_FILE)
396
- for i, line in enumerate(chat_lines):
397
- if line.strip() and ': ' in line:
398
- col1, col2, col3, col4 = st.columns([3, 1, 1, 2])
399
- with col1:
400
- st.markdown(line)
401
- with col2:
402
- vote_count = chat_votes.get(line.split('. ')[1] if '. ' in line else line, 0)
403
- if st.button(f"πŸ‘ {vote_count}", key=f"chat_vote_{i}"):
404
- comment = st.session_state.message_text
405
- await save_vote(QUOTE_VOTES_FILE, line.split('. ')[1] if '. ' in line else line, await generate_user_hash(), st.session_state.username, comment)
406
- if st.session_state.pasted_image_data:
407
- filename = await save_pasted_image(st.session_state.pasted_image_data, st.session_state.username)
408
- if filename:
409
- await save_chat_entry(st.session_state.username, f"Pasted image: {filename}")
410
- st.session_state.pasted_image_data = None
411
- st.session_state.message_text = ''
412
- st.rerun()
413
- with col3:
414
- if st.button("πŸ“’ Quote", key=f"quote_{i}"):
415
- st.session_state.quote_line = line
416
- st.rerun()
417
- with col4:
418
- username = line.split(': ')[1].split(' ')[0]
419
- audio_file = None
420
- cache_key = f"{line}_{FUN_USERNAMES.get(username, 'en-US-AriaNeural')}"
421
- if cache_key in st.session_state.audio_cache:
422
- audio_file = st.session_state.audio_cache[cache_key]
423
- else:
424
- cleaned_text = clean_text_for_tts(line.split(': ', 1)[1])
425
- audio_file = await async_edge_tts_generate(cleaned_text, FUN_USERNAMES.get(username, "en-US-AriaNeural"))
426
- st.session_state.audio_cache[cache_key] = audio_file
427
- if audio_file:
428
- play_and_download_audio(audio_file)
 
 
 
 
 
 
 
 
429
 
430
  if 'quote_line' in st.session_state:
431
  st.markdown(f"### Quoting: {st.session_state.quote_line}")
 
64
  STATE_FILE = "user_state.txt"
65
  AUDIO_DIR = "audio_logs"
66
  HISTORY_DIR = "history_logs"
67
+ MEDIA_DIR = "media_files"
68
  os.makedirs(CHAT_DIR, exist_ok=True)
69
  os.makedirs(VOTE_DIR, exist_ok=True)
70
  os.makedirs(AUDIO_DIR, exist_ok=True)
 
111
  st.session_state.active_connections = {}
112
  if 'media_notifications' not in st.session_state:
113
  st.session_state.media_notifications = []
114
+ if 'last_chat_update' not in st.session_state:
115
+ st.session_state.last_chat_update = 0
116
+ if 'displayed_chat_lines' not in st.session_state:
117
+ st.session_state.displayed_chat_lines = []
118
 
119
  # Timestamp wizardry - clock ticks with flair! ⏰🎩
120
  def format_timestamp_prefix():
 
162
  with open(HISTORY_FILE, 'a') as f:
163
  f.write(f"[{timestamp}] {username}: Audio generated - {audio_file}\n")
164
  await broadcast_message(f"{username}|{message}", "chat") # Notify all clients
165
+ st.session_state.last_chat_update = time.time() # Update timestamp for new chat
166
 
167
  # Chat loader - history unleashed! πŸ“œπŸš€
168
  async def load_chat():
 
371
  st.session_state.message_text = ""
372
  if 'audio_cache' not in st.session_state:
373
  st.session_state.audio_cache = {}
 
 
374
 
375
  st.markdown("""
376
  <style>
 
392
  await process_voice_input(audio_bytes)
393
  st.rerun()
394
 
395
+ # Load chat only if there’s an update
396
  st.subheader(f"{START_ROOM} Chat πŸ’¬")
397
  chat_content = await load_chat()
398
  chat_lines = chat_content.split('\n')
399
  chat_votes = await load_votes(QUOTE_VOTES_FILE)
400
+
401
+ # Only add new lines that haven’t been displayed yet
402
+ current_time = time.time()
403
+ if current_time - st.session_state.last_chat_update > 1 or not st.session_state.displayed_chat_lines:
404
+ new_lines = [line for line in chat_lines if line.strip() and ': ' in line and line not in st.session_state.displayed_chat_lines]
405
+ st.session_state.displayed_chat_lines.extend(new_lines)
406
+ st.session_state.last_chat_update = current_time
407
+
408
+ # Display chat lines from session state
409
+ for i, line in enumerate(st.session_state.displayed_chat_lines):
410
+ col1, col2, col3, col4 = st.columns([3, 1, 1, 2])
411
+ with col1:
412
+ st.markdown(line)
413
+ with col2:
414
+ vote_count = chat_votes.get(line.split('. ')[1] if '. ' in line else line, 0)
415
+ if st.button(f"πŸ‘ {vote_count}", key=f"chat_vote_{i}"):
416
+ comment = st.session_state.message_text
417
+ await save_vote(QUOTE_VOTES_FILE, line.split('. ')[1] if '. ' in line else line, await generate_user_hash(), st.session_state.username, comment)
418
+ if st.session_state.pasted_image_data:
419
+ filename = await save_pasted_image(st.session_state.pasted_image_data, st.session_state.username)
420
+ if filename:
421
+ await save_chat_entry(st.session_state.username, f"Pasted image: {filename}")
422
+ st.session_state.pasted_image_data = None
423
+ st.session_state.message_text = ''
424
+ st.rerun()
425
+ with col3:
426
+ if st.button("πŸ“’ Quote", key=f"quote_{i}"):
427
+ st.session_state.quote_line = line
428
+ st.rerun()
429
+ with col4:
430
+ username = line.split(': ')[1].split(' ')[0]
431
+ audio_file = None
432
+ cache_key = f"{line}_{FUN_USERNAMES.get(username, 'en-US-AriaNeural')}"
433
+ if cache_key in st.session_state.audio_cache:
434
+ audio_file = st.session_state.audio_cache[cache_key]
435
+ else:
436
+ cleaned_text = clean_text_for_tts(line.split(': ', 1)[1])
437
+ audio_file = await async_edge_tts_generate(cleaned_text, FUN_USERNAMES.get(username, "en-US-AriaNeural"))
438
+ st.session_state.audio_cache[cache_key] = audio_file
439
+ if audio_file:
440
+ play_and_download_audio(audio_file)
441
 
442
  if 'quote_line' in st.session_state:
443
  st.markdown(f"### Quoting: {st.session_state.quote_line}")