|
import streamlit as st |
|
import os |
|
import csv |
|
import time |
|
|
|
uploaded_images = {'characters': {}, 'terrain': {}} |
|
|
|
def get_image_path(img, name, image_type): |
|
file_path = f"data/uploadedImages/{image_type}/{name}/{img.name}" |
|
os.makedirs(os.path.dirname(file_path), exist_ok=True) |
|
with open(file_path, "wb") as img_file: |
|
img_file.write(img.getbuffer()) |
|
return file_path |
|
|
|
def update_csv_file(uploaded_file, name, image_type): |
|
csv_file_path = "Resources.csv" |
|
|
|
file_contents = set() |
|
if os.path.exists(csv_file_path): |
|
with open(csv_file_path, mode='r') as csv_file: |
|
csv_reader = csv.reader(csv_file) |
|
for row in csv_reader: |
|
if row: |
|
file_contents.add(tuple(row)) |
|
|
|
file_content = (name, uploaded_file.name, image_type) |
|
file_contents.add(file_content) |
|
|
|
with open(csv_file_path, mode='w', newline='') as csv_file: |
|
csv_writer = csv.writer(csv_file) |
|
for row in file_contents: |
|
csv_writer.writerow(row) |
|
|
|
def get_uploaded_files_info(): |
|
csv_file_path = "Resources.csv" |
|
if os.path.exists(csv_file_path): |
|
with open(csv_file_path, mode='r') as csv_file: |
|
csv_reader = csv.reader(csv_file) |
|
files_info = [] |
|
for row in csv_reader: |
|
if row: |
|
files_info.append(row) |
|
return files_info |
|
else: |
|
return [] |
|
|
|
def display_images_from_csv(): |
|
files_info = get_uploaded_files_info() |
|
for row in files_info: |
|
name, file_name, image_type = row |
|
|
|
file_name_without_extension = os.path.splitext(file_name)[0] |
|
if image_type == 'characters': |
|
img_path = f"data/uploadedImages/{image_type}/{name}/{file_name}" |
|
st.sidebar.image(img_path, width=100, caption=name) |
|
else: |
|
img_path = f"data/uploadedImages/{image_type}/{name}/{file_name}" |
|
st.image(img_path, width=100, caption=name) |
|
|
|
def get_table_from_csv(): |
|
csv_file_path = "Resources.csv" |
|
if os.path.exists(csv_file_path): |
|
with open(csv_file_path, mode='r') as csv_file: |
|
csv_reader = csv.reader(csv_file) |
|
table_rows = [row for row in csv_reader if row] |
|
|
|
table_md = "| Name | File Name | Image Type |\n| --- | --- | --- |\n" |
|
for row in table_rows: |
|
name, file_name, image_type = row |
|
|
|
file_name_without_extension = os.path.splitext(file_name)[0] |
|
table_md += f"| {name} | {file_name_without_extension} | {image_type} |\n" |
|
return table_md |
|
else: |
|
return "" |
|
|
|
|
|
image_type = st.selectbox('Choose image type:', options=['characters', 'terrain']) |
|
name = st.text_input('Enter a name for the image:') |
|
uploaded_files = st.file_uploader('Upload image(s)', type=['png', 'jpg'], accept_multiple_files=True) |
|
for uploaded_file in uploaded_files: |
|
if uploaded_file is not None: |
|
|
|
bytes_data = get_image_path(uploaded_file, name, image_type) |
|
uploaded_images[image_type].setdefault(name, []) |
|
uploaded_images[image_type][ name].append(bytes_data) |
|
st.image(bytes_data, use_column_width=True) |
|
update_csv_file(uploaded_file, name, image_type) |
|
|
|
def display_characters(): |
|
if uploaded_images['characters']: |
|
st.sidebar.write('**Characters**') |
|
for name, files in uploaded_images['characters'].items(): |
|
for file in files: |
|
st.sidebar.image(file, width=100, caption=name) |
|
|
|
def display_terrain(): |
|
if uploaded_images['terrain']: |
|
st.write('**Terrain**') |
|
row = [] |
|
for name, files in uploaded_images['terrain'].items(): |
|
for file in files: |
|
row.append(file) |
|
if len(row) == 3: |
|
st.image(row, width=100 * 3) |
|
row = [] |
|
if row: |
|
st.image(row, width=100 * len(row)) |
|
|
|
def display_uploaded_images(): |
|
st.write("## Uploaded Images") |
|
if image_type == 'characters': |
|
display_characters() |
|
else: |
|
display_terrain() |
|
|
|
st.write("## Uploaded Images Table") |
|
|
|
table_md = get_table_from_csv() |
|
if table_md: |
|
st.markdown(table_md, unsafe_allow_html=True) |
|
else: |
|
st.write("No images uploaded yet.") |
|
|
|
while True: |
|
time.sleep(20) |
|
st.empty() |
|
display_images_from_csv() |
|
|
|
|
|
|
|
image_type = st.selectbox('Choose image type:', options=['characters', 'terrain']) |
|
name = st.text_input('Enter a name for the image:') |
|
uploaded_files = st.file_uploader(key="part2", 'Upload image(s)', type=['png', 'jpg'], accept_multiple_files=True) |
|
for uploaded_file in uploaded_files: |
|
if uploaded_file is not None: |
|
|
|
bytes_data = get_image_path(uploaded_file, name, image_type) |
|
uploaded_images[image_type].setdefault(name, []) |
|
uploaded_images[image_type][name].append(bytes_data) |
|
st.image(bytes_data, use_column_width=True) |
|
update_csv_file(uploaded_file, name, image_type) |
|
|
|
display_uploaded_images() |
|
|