o
    h3                     @   sf  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
 d dlmZmZmZmZ d dlmZ d dlmZ e je jeZe jedZe jedZe jed	Zd
Zg dZe jedZdede fddZ!de dede de dB fddZ"dede de#de#de de	de dB de$dB fddZ%de#de de de	fd d!Z&de d"e fd#d$Z'dS )%    N)date)EnvironmentFileSystemLoader)
music_dataExtensionAlbumExtensionSongExtensionReview)process_html_files)AudioExtensionassetsalbum_coversZaudioz/assets/audio)Z)OLAK5uy_nLmxB70YJBLEThZljF4v1xhhSJ2pwB6GAz)OLAK5uy_lvJG6wOQoiTe_vyGkre-RbZWnd4y5NtXMz)OLAK5uy_kMVviQYyPZN-EUsk91z_hZJzCzu1804xgz)OLAK5uy_kmzoSOa_tCizE-r4sweNz91d9qBv1UCVYz)OLAK5uy_mgDUvSi1yFc9Sr-s1BmCGZKBFGravXSEcz)OLAK5uy_mlZk7kmAEKb8ZQWs-2sxnMmRrANtpXpzUz)OLAK5uy_mXoi-FuQb9Gw7Mguhdx5F4jltT0L1qOCwz)OLAK5uy_mPI0_Yf-l12oLr5cbmu_HorkcRRDYPMfEzmd/music_index.mddate_objreturnc                 C   s   | sdS |  dS )z/Formats a date object into 'Mon DD 'YY' format. z%b '%y)strftime)r    r   3/Users/srajan/code/music-website/music_generator.pyformat_date'   s   
r   album_idalbum	cover_dirc           	      C   s  |r|j std|  d dS |  d}tj||}tj|r/td|  d|  |S td|  d|j  d	 z>t	j
|j d
dd}|  t|d}|jddD ]}|| qVW d   n1 shw   Y  td|  d|  |W S  t	jjy } z!td|j  d|  d|  tj|rt| W Y d}~dS d}~w ty } ztd|  d|  tj|rt| W Y d}~dS d}~ww )zEDownloads album cover if not already present, returns the local path.zAlbum z) has no thumbnail URL. Skipping download.Nz.jpgzCover already exists for : zDownloading cover for z from z...T
   )streamZtimeoutwbi    )Z
chunk_sizez"Successfully downloaded cover for z to zError downloading image  for album z1An unexpected error occurred during download for )Zthumbnail_urlloggingwarningospathjoinexistsdebuginforequestsgetZraise_for_statusopenZiter_contentwriteZ
exceptionsZRequestExceptionerrorremove	Exception)	r   r   r   Zlocal_image_filenameZlocal_image_pathZresponsefZchunker   r   r   download_album_cover-   s@   



r-   
artist_stralbum_reviews_datasongs_with_reviews_data
output_direnv
cover_pathc                 C   s  z| d}W n ty" } ztd|  W Y d}~dS d}~ww |j| ||||d}	| j d}
tj||
}z$t	|ddd}|
|	 W d   n1 sRw   Y  |
| j|d	W S  ty } ztd
| d| j d|  W Y d}~dS d}~ww )z7Renders the HTML for a single album using the template.ztemplates/album_template.htmlz#Error loading album_template.html: N)r   r.   Zalbum_reviewsZsongs_with_reviewsr3   z.htmlwutf-8encoding)filenameZ
album_namer.   zError writing HTML to r   r   )get_templater*   r   r(   renderidr   r   r    r&   r'   name)r   r.   r/   r0   r1   r2   r3   templater,   html_contentr8   output_pathr+   r   r   r   render_album_htmlP   s:   r@   
pages_infosite_description_htmlc              
   C   s   | d}| d}g }| D ]}||j|d q|jd||dd}tj|d}	z't|	dd	d
}
|
| W d   n1 sBw   Y  t	d|	  W dS  t
yo } ztd|	 d|  W Y d}~dS d}~ww )z9Generates the index.html file linking to all album pages.z!templates/list_page_template.htmlz.templates/list_templates/music_album_item.html)Zpagez
WU - MusicT)
page_titlerB   list_items_htmlZshould_include_audio_playerz
index.htmlr4   r5   r6   Nz+Successfully generated music index.html -> z"Error writing music index.html to r   )r9   appendr:   r   r   r    r&   r'   r   r"   r*   r(   )rA   rB   r1   r2   r=   item_templaterD   Z	page_datar>   r?   r+   r,   r   r   r   generate_index_htmlp   s*   

$rG   templates_dirc              
   C   s  t dtt d t d|   tj| dd tjtdd tjtdd tt	|d}i }i }tD ]}t
j|}|rD|||< q5t d| d q5t| }t d	t| d
 t d |D ]}|| }t||t}|||< qft d g }	|D ]}|| }dd |jD }
|
rd|
nd}g }tjtdtdgd}|jD ]}||j}||t|jd |  qg }|jD ]E}t
j|}|r	|jr	g }tjt|tdgd}|jD ]}||j}||t|jd |  q|r	||j|j |d qd}||}|r"tj!"|}tj!dd|}t#||||| ||d}|rC||d< |	| t $d|j   qt %d|j  d| d qt d dt& d }tj!'t&rz6t(t&d!d"d#}|) }W d   n	1 s{w   Y  tjtdtdgd}||}t d$t&  W n& t*y } zt %d%t& d&|  W Y d}~nd}~ww t t& d' |	rt+|	|| | nt d( t d) t,| td* t d+ dS ),z-Generates the complete music website section.z+Starting music site generation process for z target albums...zOutput directory set to: T)exist_ok)loaderzAlbum data not found for ID: z. Skipping.zFound data for z albums to process.z7--- Music Step 1: Checking/Downloading Album Covers ---z1--- Music Step 2: Generating Album HTML Pages ---c                 S   s&   g | ]}t j|rt j|jqS r   )r   artistsr%   r<   ).0Z	artist_idr   r   r   
<listcomp>   s    
z'generate_music_site.<locals>.<listcomp>z, zUnknown ArtistN)Zfallback_song_idZrelative_audio_path)
extensions)Z	html_textZformatted_date)r;   r<   reviewsz/assetsr   )r   r.   r/   r0   r1   r2   r3   r3   z Successfully generated HTML for zFailed to generate HTML for z ()z1--- Music Step 3: Generating Music Index HTML ---z
<p>Error: z$ not found or could not be read.</p>rr5   r6   z Successfully read and converted zError processing r   z& not found. Using default description.zMNo album pages were generated successfully for music. Index file not created.z?--- Music Step 4: Processing and Downloading Audio Segments ---)Zhtml_dirZaudio_output_dirz'Music site generation process finished.)-r   r#   lenTARGET_ALBUM_IDSr   makedirsSOURCE_COVER_DIRSOURCE_AUDIO_DIRr   r   r   Z
all_albumsr%   r   listkeysr-   rK   r    markdownMarkdownr
   OUTPUT_AUDIO_SUBDIRrO   convertrE   r   ZaddedOnresetZsongIdsZsongsr;   r<   r   basenamer@   r"   r(   MUSIC_INDEX_MD_PATHr!   r&   readr*   rG   r	   )r1   rH   	jinja_envZalbums_dataZimage_pathsr   r   Zactive_album_idsZ
image_pathZgenerated_pages_infoZartist_namesr.   r/   Zalbum_md_parserZreviewr>   r0   Zsong_idZsongZsong_reviews_dataZsong_md_parserZ#local_cover_path_relative_to_outputZfull_image_pathZimage_filenameZ	page_inforB   r+   index_md_contentZindex_md_parserr,   r   r   r   generate_music_site   s   














"

rc   )(r   sysshutilr   datetimer   r$   rY   jinja2r   r   Zimport_helpersr   r   r   r   Zaudio_downloaderr	   Zmarkdown_extensionsr
   r   dirnameabspath__file__CURRENT_DIRr    ZSOURCE_ASSETS_DIRrU   rV   r[   rS   r_   strr   r-   rW   dictr@   rG   rc   r   r   r   r   <module>   sB    #
 !