import streamlit as st from app.adapters.aws.s3 import S3Client from app.adapters.opus_clip.client import OpusClipClient from app.assets.models import GlobalParticipant from app.assets.services import AssetService from app.opus_clip.services import OpusClipService from app.streamlit_app.page_add_song import render_add_song_page from app.streamlit_app.page_artist_search import render_search_page from app.streamlit_app.page_clip_it import render_clip_it_page from app.streamlit_app.utils import clear_session_state from container import setup_container from app.streamlit_app.enums import Page def main() -> None: # --- Page Configuration --- # Set the title and icon that appear in the browser tab container = setup_container() if "artist_selection_index" not in st.session_state: st.session_state.artist_selection_index = None if "artist_name" not in st.session_state: st.session_state.artist_name = None container.resolve(OpusClipClient) asset_service = container.resolve(AssetService) opus_service = container.resolve(OpusClipService) s3_client = container.resolve(S3Client) st.set_page_config(page_title="Opus Clip", page_icon="👋") with container.request_context(): artists = asset_service.find_all_global_participants() clips_per_asset = opus_service.find_number_of_clips_per_asset_id() artists_by_name: dict[str, GlobalParticipant] = dict() clips_by_asset: dict[str, int] = dict() for gp in artists: artists_by_name[gp.name] = gp for asset in clips_per_asset: clips_by_asset[asset.asset_id] = asset.clips # Initialize session state for page navigation and search queries if "page" not in st.session_state: clear_session_state() # Page router if artists: if st.session_state.page == Page.ARTIST_SEARCH: st.session_state.clips_by_asset = clips_by_asset st.session_state.artist_by_name = artists_by_name render_search_page() elif st.session_state.page == Page.CLIP_IT: st.session_state.projects = opus_service.find_projects_by_asset_id( asset_id=st.session_state.asset.id ) render_clip_it_page( opus_service=opus_service, asset_service=asset_service, s3_client=s3_client, ) elif st.session_state.page == Page.ADD_SONG: render_add_song_page(asset_service=asset_service) # --- Main execution --- if __name__ == "__main__": main()