File size: 5,556 Bytes
0e82287
67b56c1
0e82287
 
 
1108709
0e82287
 
 
 
b24c605
 
 
 
 
1108709
67b56c1
b24c605
 
0e82287
b24c605
 
 
 
 
 
 
 
 
 
 
 
 
 
67b56c1
b24c605
 
 
 
 
 
 
 
 
 
 
 
 
67b56c1
b24c605
 
 
 
 
 
67b56c1
b24c605
 
 
 
 
 
 
 
 
1108709
67b56c1
0e82287
 
 
 
 
b24c605
0e82287
 
 
 
67b56c1
0e82287
 
1108709
 
0e82287
 
 
 
 
 
 
 
 
67b56c1
0e82287
 
1108709
 
0e82287
 
 
 
 
 
67b56c1
0e82287
 
1108709
0e82287
1108709
 
 
0e82287
 
 
 
 
 
 
 
 
67b56c1
0e82287
 
 
 
 
 
 
 
 
 
 
 
 
67b56c1
0e82287
8662493
b24c605
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1108709
67b56c1
0e82287
 
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import streamlit as st

from postly.clients.postly_client import PostlyClient

# Initialize the PostlyClient in Streamlit's session state
if "client" not in st.session_state:
    st.session_state.client = PostlyClient()

client = st.session_state.client

# Initialize user session state
if "logged_in" not in st.session_state:
    st.session_state.logged_in = False
if "current_user" not in st.session_state:
    st.session_state.current_user = None


def register():
    st.title("Register")
    user_name = st.text_input("Enter user name")
    password = st.text_input("Enter password", type="password")
    if st.button("Register"):
        if user_name and password:
            try:
                client.add_user(user_name, password)
                st.session_state.logged_in = True
                st.session_state.current_user = user_name
                st.success(f"User '{user_name}' registered and logged in successfully.")
                st.rerun()
            except ValueError as e:
                st.error(f"Error: {e}")
        else:
            st.error("Please enter both user name and password.")


def login():
    st.title("Login")
    user_name = st.text_input("Enter user name")
    password = st.text_input("Enter password", type="password")
    if st.button("Login"):
        if client.authenticate_user(user_name, password):
            st.session_state.logged_in = True
            st.session_state.current_user = user_name
            st.success(f"User '{user_name}' logged in successfully.")
            st.rerun()
        else:
            st.error("Invalid user name or password.")


def logout():
    st.session_state.logged_in = False
    st.session_state.current_user = None
    st.success("Logged out successfully.")
    st.rerun()


def delete_own_user():
    st.title("Delete Account")
    if st.button("Delete Account"):
        try:
            client.delete_user(st.session_state.current_user)
            st.success(f"User '{st.session_state.current_user}' deleted successfully.")
            logout()
        except KeyError as e:
            st.error(f"Error: {e}")


def add_post():
    st.title("Add Post")
    post_text = st.text_area("Enter post text")
    if st.button("Add Post"):
        try:
            client.add_post(st.session_state.current_user, post_text)
            st.success("Post added successfully.")
        except Exception as e:
            st.error(f"Error: {e}")


def get_posts_for_user():
    st.title("Get Posts for User")
    users = client.get_users()
    user_name = st.selectbox("Select user name", users)
    if st.button("Get Posts"):
        try:
            posts = client.get_posts_for_user(user_name)
            st.write(f"Posts for user '{user_name}':")
            for post in posts:
                st.write(post)
        except KeyError as e:
            st.error(f"Error: {e}")


def get_posts_for_topic():
    st.title("Get Posts for Topic")
    topics = client.get_topics()
    topic = st.selectbox("Enter topic", topics)
    if st.button("Get Posts"):
        posts = client.get_posts_for_topic(topic)
        st.write(f"Posts for topic '{topic}':")
        for post in posts:
            st.write(post)


def get_trending_topics():
    st.title("Get Trending Topics")
    current_timestamp = client.get_current_timestamp()
    from_timestamp = st.number_input("Enter from timestamp", min_value=0, step=1)
    to_timestamp = st.number_input(
        "Enter to timestamp", min_value=0, max_value=current_timestamp, step=1, value=current_timestamp
    )
    if st.button("Get Trending Topics"):
        try:
            topics = client.get_trending_topics(int(from_timestamp), int(to_timestamp))
            st.write("Trending topics:")
            for topic in topics:
                st.write(topic)
        except ValueError as e:
            st.error(f"Error: {e}")


def get_all_posts():
    st.title("All Posts")
    posts = client.get_posts()
    all_posts = []
    for user_name, user_posts in posts.items():
        for post in user_posts:
            all_posts.append((user_name, post))
    sorted_posts = sorted(all_posts, key=lambda x: x[1].timestamp)
    for user_name, post in sorted_posts:
        st.markdown(f"**{user_name}**")
        st.markdown(f"{post.content}")
        st.markdown("---")


def main():
    st.sidebar.title("Postly\nSimple social media platform")
    if st.session_state.logged_in:
        st.sidebar.write(f"Logged in as: {st.session_state.current_user}")
        if st.sidebar.button("Logout"):
            logout()
        page = st.sidebar.selectbox(
            "Choose an action",
            [
                "Add Post",
                "Delete Account",
                "Get Posts for User",
                "Get Posts for Topic",
                "Get Trending Topics",
                "View All Posts",
            ],
            index=5,
        )

        if page == "Add Post":
            add_post()
        elif page == "Delete Account":
            delete_own_user()
        elif page == "Get Posts for User":
            get_posts_for_user()
        elif page == "Get Posts for Topic":
            get_posts_for_topic()
        elif page == "Get Trending Topics":
            get_trending_topics()
        elif page == "View All Posts":
            get_all_posts()
    else:
        page = st.sidebar.selectbox("Choose an action", ["Login", "Register"], index=0)
        if page == "Login":
            login()
        elif page == "Register":
            register()


if __name__ == "__main__":
    main()