
    i                     j    d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	  e       Z
 G d d      Zy)    N)Console)
os_manager)get_megatools_pathc                   $   e Zd Z ej                  d       ej                  dej
                        gZ ej                  dej
                         ej                  dej
                        gZh dZddZ	ddZ
dd	Zdd
Zd Zd Zd Zd Zd Zy)MEGA_Downloaderz[Ss](\d{1,2})[Ee](\d{1,2})z[_\s-]+(\d{1,2})x(\d{1,2})z\bita\bitalian>   .avi.m4v.mkv.mov.mp4.wmvc                 ^    t               | _        || _        | j                  st        d      y )Nz>Megatools executable not found. Please ensure it is installed.)r   megatools_exechoose_filesRuntimeError)selfr   s     \/home/nidran/Documenti/script/streaming-community/StreamingCommunity/core/downloader/mega.py__init__zMEGA_Downloader.__init__%   s/    /1(!!_`` "    Nc                     d|v r)| j                  t        |      j                         |      S | j                  t        |      j                         |      S )z+Download a file or folder by its public urlz/folder/)_download_folder_megatoolsstrstrip_download_movie_megatools)r   url	dest_paths      r   download_urlzMEGA_Downloader.download_url,   sF    223s8>>3CYOO11#c(..2BINNr   c                 $   |rt         j                  j                  |      nd}t        j                  |d       t	        | j
                        d|d|g}t        j                  |t        j                  t        j                  dd      }|j                  D ]  }t        |d	        |j                          |j                  d
k7  r*t        j                  |j                  |j                        t         j                  d       t	        |      S )z,Download a single movie file using megatoolsz./MoviesTexist_okdl--path   stdoutstderrtextbufsize endr   z[green]Download completato!)ospathdirnamemakedirsr   r   
subprocessPopenPIPESTDOUTr&   printwait
returncodeCalledProcessErrorargsconsole)r   r   r   
output_dircmdprocesslines          r   r   z)MEGA_Downloader._download_movie_megatools3   s    3<RWW__Y/*

J.4%%&c8ZH""??$$
 NN 	 D$B	  	"//0B0BGLLQQ34:r   c                 0   |r5t        j                  |      }t        j                  j	                  |      }nd}t        j                  j                  |d      }ddl}d|j                         j                  dd  }t        j                  j                  ||      }t        j                  d       t        j                  j                  |      rt        j                  |       t        j                  |d	       t        | j                         d
|d|g}| j"                  r|j%                  d       t'        j(                  |t&        j*                  t&        j,                  dd      }	|	j.                  D ]  }
t        |
d       |
j1                  d      s"| j"                  r/|
j3                  d      d   j5                         }| j7                  |      }|se|\  }}}}d|dd|d}|r|d| z  }t        j                  d| d| d        |	j9                          |	j:                  dk7  r*t'        j<                  |	j:                  |	j>                        | jA                  |      }| jC                  ||      }t        j                  |       |S )z5Download and organize a series folder using megatoolsz./TVr   N_tmp_   z[cyan]Download Series ...Tr    r"   r#   z--choose-filesr$   r%   r*   r+   zF \S02dE - z
[cyan]Download: [yellow]z
 [magenta]
)"r   get_sanitize_pathr-   r.   r/   joinuuiduuid4hexr:   r5   existsshutilrmtreer0   r   r   r   appendr1   r2   r3   r4   r&   
startswithsplitr   _parse_episoder6   r7   r8   r9   _select_language_folder_organize_series)r   r   r   base_dirtv_dirrL   tmp_dir_nametmp_dirr<   r=   r>   filenameparsedshowseasonepisodeep_title
ep_displayseries_rootresult_paths                       r   r   z*MEGA_Downloader._download_folder_megatoolsK   s/    "44Y?Iwwy1HHh- 	tzz|//345'',,x61277>>'"MM'"
Gd+4%%&c8WEJJ'(""??$$
 NN 	_D$Bt$T->->::d+B/557,,X66<3D&'8#$VCL'#!?J"H:&66
MM$>tfJzlZ\"]^	_ 	"//0B0BGLLQQ227;++K@gr   c                 0   |j                         D cg c]  }|j                         s| }}|s|S | j                  D ]L  }|D ]E  }|j                  |j                        st
        j                  d|j                          |c c S  N |d   S c c}w )z(Select folder based on language priorityz[green]Select language: r   )iterdiris_dirLANG_PRIORITYsearchnamer:   r5   )r   baseffoldersrxs        r   rV   z'MEGA_Downloader._select_language_folder   s    "lln;
1;;K$$ 	B 99QVV$MM$<QVVH"EFH	 qz <s
   BBc                    |j                  dd       d}d}|j                  d      D ]  }|j                         s|j                  j	                         | j
                  vr;| j                  |j                        }|sY|\  }}}	}
||}t        j                  |      }||z  d|dz  }|j                  dd       d|dd|	d}|
rd	}t        |
      |kD  r|
d| }
|d
|
 z  }t        j                  | |j                         }||z  }t        j                  ||        |rt        |j                        S t        |      S )z+Organize series files into proper structureT)parentsr!   N*zSeason rF   rE   rG   2   rH   )mkdirrglobis_filesuffixlowerVIDEO_EXTENSIONSrU   rj   r   get_sanitize_filelenrP   mover   parent)r   rk   rY   	show_name	last_pathfiler]   r^   r_   r`   ra   
clean_show
season_dirrj   max_title_len
final_names                   r   rW   z MEGA_Downloader._organize_series   sk   TD1		JJsO !	)D<<>{{  "$*?*??((3F.4+D&'8  	 $55d;J*,/EEJTD9vcl!GC=1D "x==0'7H#hZ(( $55t{{m6LMJ"Z/IKKi(C!	)F )2s9##$Bs6{Br   c                 T   | j                   D ]  }|j                  |      }|st        |j                  d            }t        |j                  d            }|d|j	                          }||j                         d }| j                  |      }| j                  |      }	||||	fc S  y)z'Parse episode information from filenamer$      N)EP_PATTERNSri   intgroupstartr,   _clean_show_name_clean_episode_title)
r   r\   rn   mr_   r`   beforeafterr^   ra   s
             r   rU   zMEGA_Downloader._parse_episode   s    "" 	7B		(#AQWWQZaggaj/!*1779- *,,V444U;VWh66	7 r   c                     t        j                  dd|      }t        j                  dd|      }|j                  dd      }t        j                  dd|      }|j                         j	                         S )z%Clean show name from extra charactersz[-._\s]+\d*$r*   z[-._]+$_ \s{2,})resubreplacer   titler   r(   s     r   r   z MEGA_Downloader._clean_show_name   s]    vvor40vvj"d+||C%vvid+zz|!!##r   c                 :   t        j                  dd|t         j                        }t        j                  dd|      }t        j                  dd|t         j                        }t        j                  dd|      j                         }t	        |      dkD  r|S d	S )
z%Clean episode title from quality tagsz\.(mkv|mp4|avi).*$r*   )flagsz[-_]r   z0\b(web[- ]?dl|bluray|720p|1080p|ita|eng|subs?)\br      N)r   r   Ir   rz   r   s     r   r   z$MEGA_Downloader._clean_episode_title   sy    vv+RRTTBvvgsD)vvI2t[][_[_`vvid+1134y1}t.$.r   )F)N)__name__
__module____qualname__r   compile
IGNORECASEr   rh   rx   r   r   r   r   rV   rW   rU   r   r    r   r   r   r      s     	

01

0"--@K 	

:r}}-

:r}}-M
 HaO08t)CV"$/r   r   )r   r-   r1   rP   rich.consoler   StreamingCommunity.utils.osr   StreamingCommunity.setupr   r:   r   r   r   r   <module>r      s5    
 	   ! 3 7 )G/ G/r   