File size: 4,172 Bytes
eadf58c
 
 
 
 
 
 
49e2a28
eadf58c
49e2a28
 
 
 
 
 
 
 
 
 
 
 
 
 
eadf58c
 
 
 
 
 
49e2a28
eadf58c
 
 
49e2a28
 
eadf58c
49e2a28
 
 
 
eadf58c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49e2a28
 
 
 
 
 
 
 
 
 
eadf58c
49e2a28
 
 
 
 
 
 
 
eadf58c
49e2a28
 
 
 
 
 
eadf58c
 
 
 
 
49e2a28
eadf58c
 
49e2a28
eadf58c
49e2a28
 
eadf58c
49e2a28
 
 
eadf58c
 
 
49e2a28
eadf58c
49e2a28
eadf58c
49e2a28
 
 
eadf58c
49e2a28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import streamlit as st
import time
import pytz
from datetime import datetime
import matplotlib.pyplot as plt

# Set page configuration
st.set_page_config(page_title="MK316 Quiet Timer", layout="centered")

# Initialize session state for countdown
if "countdown_started" not in st.session_state:
    st.session_state.countdown_started = False
if "start_time" not in st.session_state:
    st.session_state.start_time = 0
if "remaining_time" not in st.session_state:
    st.session_state.remaining_time = 0
if "time_up" not in st.session_state:
    st.session_state.time_up = False

# Title
st.title("🐧 MK316 Quiet Timer ⏳ ")

# Function to display the current time (as a live digital clock)
def display_current_time():
    seoul_tz = pytz.timezone('Asia/Seoul')  # Set timezone to Seoul
    current_time = datetime.now(seoul_tz).strftime("%H:%M:%S")  # Convert to Seoul time
    
    # Style the clock (increase font size and set color)
    st.markdown(
        f"<h1 style='text-align: center; font-size: 80px; color: #5785A4;'>{current_time}</h1>",  # Large font
        unsafe_allow_html=True
    )

# Function to update the progress circle
def update_progress_circle(remaining_time, total_time):
    fig, ax = plt.subplots(figsize=(2, 2))  # Smaller figure size to fit layout
    fraction_completed = remaining_time / total_time if total_time > 0 else 0
    ax.pie([fraction_completed, 1 - fraction_completed], colors=['#5785A4', '#D5DEDD'], startangle=90, counterclock=False, wedgeprops=dict(width=0.3))
    minutes, seconds = divmod(remaining_time, 60)
    ax.text(0, 0, f"{int(minutes):02d}:{int(seconds):02d}", fontsize=14, va='center', ha='center')  # Remaining time
    ax.set_aspect('equal')
    return fig

# Function to start the countdown timer
def start_countdown():
    if not st.session_state.countdown_started:
        st.session_state.remaining_time = st.session_state.start_time
        st.session_state.countdown_started = True
        st.session_state.time_up = False

# Function to reset the countdown timer
def reset_countdown():
    st.session_state.start_time = 0
    st.session_state.remaining_time = 0
    st.session_state.countdown_started = False
    st.session_state.time_up = False

# Input field for countdown time in seconds
st.session_state.start_time = st.number_input("Set Countdown Time (in seconds)", min_value=0, max_value=3600, value=10)

# Two columns: one for current time and buttons, another for circular progress
col1, col2 = st.columns([2, 1])

# Left column: Current time, input, buttons
with col1:
    # Display current time
    display_current_time()

    # Buttons to Start and Reset the countdown
    start_button, reset_button = st.columns([1, 1])
    with start_button:
        if st.button("Start"):
            start_countdown()
    with reset_button:
        if st.button("Reset"):
            reset_countdown()

    # Placeholder for displaying countdown text message
    countdown_placeholder = st.empty()

# Right column: Circular progress chart
with col2:
    progress_placeholder = st.empty()

# Timer countdown logic (runs when countdown has started)
if st.session_state.countdown_started and not st.session_state.time_up:
    if st.session_state.remaining_time > 0:
        # Update the circular progress chart with time in the center
        fig = update_progress_circle(st.session_state.remaining_time, st.session_state.start_time)
        progress_placeholder.pyplot(fig)

        # Update the remaining time
        st.session_state.remaining_time -= 1

        # Sleep for a second
        time.sleep(1)
        
        # Rerun the app to update every second
        st.experimental_rerun()
    else:
        # When the countdown finishes, display "Time's Up!" inside the circle
        st.session_state.time_up = True
        fig = update_progress_circle(0, st.session_state.start_time)
        progress_placeholder.pyplot(fig)
        countdown_placeholder.write("⏰ **Time's Up!**")

        # Play the sound using Streamlit's audio player
        audio_file = open("timesup.mp3", "rb")
        st.audio(audio_file.read(), format="audio/mp3")

        st.session_state.countdown_started = False