File size: 2,275 Bytes
94b0868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import pandas as pd
import requests
from io import StringIO

# Define the base URL for the raw GitHub content
base_url = "https://raw.githubusercontent.com/halimbahae/Hadith/main"

# Define folder names and their corresponding book names
folders = {
    "Maliks_Muwataa": "Maliks Muwataa",
    "Musnad_Ahmad_Ibn-Hanbal": "Musnad Ahmad Ibn Hanbal",
    "Sahih_Al-Bukhari": "Sahih Al-Bukhari",
    "Sahih_Muslim": "Sahih Muslim",
    "Sunan_Abu-Dawud": "Sunan Abu Dawud",
    "Sunan_Al-Darimi": "Sunan Al-Darimi",
    "Sunan_Al-Nasai": "Sunan Al-Nasai",
    "Sunan_Al-Tirmidhi": "Sunan Al-Tirmidhi",
    "Sunan_Ibn-Maja": "Sunan Ibn Maja"
}

# Define function to read CSV file from GitHub
def read_csv_from_github(file_path):
    response = requests.get(f"{base_url}/{file_path}")
    if response.status_code == 200:
        return pd.read_csv(StringIO(response.text))
    else:
        return None

# Define function to filter and paginate data
def filter_and_paginate_data(data, rows_per_page):
    start_idx = (st.session_state.page_number - 1) * rows_per_page
    end_idx = start_idx + rows_per_page
    return data.iloc[start_idx:end_idx]

# Main Streamlit app
def main():
    st.sidebar.title("Books")
    selected_folder = st.sidebar.selectbox("Select a Book", list(folders.values()))

    folder_name = [k for k, v in folders.items() if v == selected_folder][0]
    files = os.listdir(folder_name)
    selected_file = st.sidebar.selectbox("Select a File", files)

    file_path = os.path.join(folder_name, selected_file)
    if st.button("View File"):
        csv_df = read_csv_from_github(file_path)
        if csv_df is not None:
            st.dataframe(csv_df)
        else:
            st.error("Error loading CSV file")

    if st.session_state.get("page_number") is None:
        st.session_state.page_number = 1

    rows_per_page = st.sidebar.number_input("Rows per Page", min_value=1, value=10)
    st.session_state.page_number = st.sidebar.number_input("Page Number", min_value=1, value=st.session_state.page_number)

    if st.button("Apply Filters"):
        if csv_df is not None:
            filtered_data = filter_and_paginate_data(csv_df, rows_per_page)
            st.write(filtered_data)

if __name__ == "__main__":
    main()