U
    9dM                     @   s6  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 d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZmZmZmZ d dlmZmZmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z' e(e)Z*dd Z+dd Z,dd Z-G dd deZ.G dd deZ/G dd deZ0dS )    N)Image)BytesIO)YouTube)colored)View)settings)JsonResponse)redirectrender)FileMediaStatus
UploadTypeProcessedMedia)yt_down_allowgenerate_namegenerate_thumbnail)convert)AsyncResult)valid_extensionsfile_extension_validretrieve_limit_of_sizeretrieve_limit_of_durationhas_reached_upload_limitc                 C   s   | j ddkS )NHTTP_X_REQUESTED_WITHXMLHttpRequest)METAget)request r   6/var/www/html/UseVoiceDocker/src/apps/process/views.pyis_ajax   s    r!   c              	   C   s2  |dks(|dks(|dks(|dks(|dkr6ddd}|S |dkrt t|||d}	|	  ztjj|	| d}
W n( tjk
r   t|	|| tjd}
Y nX ||	j	 }t
|d	}|| W 5 Q R X t|rntj|
_|
jjd
tt|	j	dd tj||
_t|
j |
  td tj|	j	||
j| jgd}t|j}td|   d|	j	d| |	j|
jd}n*tj |
_tj||
_|
  |	j	dd}|S || }t jj|d}tjj|d}
|j!|kr|j"st
|d}|| W 5 Q R X t|rt||_"|  tj|
_|
jjd
tt|dd tj||
_|
  tj|j	||
j| jgd}t|j}td|   d|j	d| |j|j|
jd}n.tj |
_tj||
_|
  |j	d|jd}|S tj#|
_tjd|	j	 |
_|
  dddS n(tj#|
_tj||
_|
  dddS d S )N zInvalid Requestfaileddatastatusnull)existingPatheofname)original_fileuser)r+   titler,   upload_sourcezwb+zthumbnail.jpgTsavez start celery task argszFinal Video ID:zUploaded Successfullysuccess)r%   r(   r&   final_video_idmodel_idmedia_idZ	uploading)r(   r&   r(   )r+   zab+)r%   r(   r&   r4   task_idr5   r6   )r(   r&   r5   media/original_videos/zEOF found. Invalid requestz'No such file exists in the existingPath)$r   r   r0   r   objectsr   DoesNotExistr   Localr(   openwriteintr   
Processingr&   	thumbnailr   r   ospathgetsizesizeprintr   apply_asyncid_mediaidr   loggerinfoid_file	Uploadingr*   r)   Failed)serialize_user
media_pathfilefileNamer(   end	nextSlicepartsres
FileFoldermediarC   destinationZconvert_taskZtask_responser5   r   r   r    normal_upload!   s    (









rZ   c                 C   s  zt jj|dd d  }W n& t jk
rD   t || tjd}Y nX |jr|jd kr|jd krt || |j	|j
|j|j|j|jtjtjd
}|  tj|j||j| jgd dddS | |_t| | d	d
}zztd| }W n< tk
r$   td| d dd| dd Y W S X tj d}tjdsJtd tjd| ddd}	tj|sxt | |j!"d# $ }
|j	 d	|_%|
j&|| dd d|_'|  |j!jdd# $ }|j&|| dd t(d| | d| d | d!| | d	 t)| | d |j	|_	|j
|_
||_|jj| d"t*|	j+dd# | d | d|_tj,|j-|_tj|_.|  t/t0|d$ t/t0d%d& tj|j||j| jgd d'ddW S  t1k
r } z d|_'|  d(d)d W Y S d }~X Y nX d S )*N)
youtube_id   )r[   r,   r.   )
r[   r,   r-   authorr+   rA   
audio_pathrE   r&   r.   r1   z=inserted Video is already downloaded and it will be proccesedr3   r$   z.mp4r7   z https://www.youtube.com/watch?v=zVideo z is unavaialable, skipping.errorz is unavaialable)r&   messagez/original_audioszmedia/thumbnails/zhttps://i.ytimg.com/vi/z/maxresdefault.jpgF)verify
resolutionz.mkv)Zoutput_pathfilenameT)Z
only_audioz.mp3)rc   zffmpeg -hide_banner -y -i z.mkv -i /z+.mp3 -map 0:v -map 1:a -c:v copy -shortest z_thumbnail.jpgr/   redzcalling celery...bluez)video downloaded and it will be proccesedr#   zvideo not downloaded)2r   r:   filterr   r;   r   r   r+   r^   r-   r]   rA   rE   r   r@   r0   r   rG   rH   rI   r,   r   ZVideoUnavailablerJ   rK   r   
MEDIA_ROOTrB   rC   existsmakedirsrequestsmkdirstreamsorder_bydescfirstr*   downloadr)   systemremover   contentrD   r(   r&   rF   r   	Exception)rO   rP   video_idrU   rX   Z	new_mediarW   videor^   responsestreamaudioer   r   r    youtube_upload   sv    


,r|   c                   @   s    e Zd ZdZdd Zdd ZdS )ProcessViewz Process view c                 O   s   |j jstdS d S )Naccounts:signin)r,   is_authenticatedr	   selfr   r2   kwargsr   r   r    r     s    zProcessView.getc              	   O   s  |j jstdS t|r|j }i }t|}t| |d rtt|j	d |}t| |d rhd}t
j|st
| |j	d dkr$tt|j	d d |}	t|	 |jd	  }
|j	d
 }|j	d }|j	d }|j	d }|j	d }t|j	d }t|||
|||||}td| |j	d dkr~t|jr~|j	d}|j	d}t||||}ndd|d  dd}ndddd}t|S d S )Nr~   r&   file_durationr9   upload_typenormal	file_sizeMbP?rQ   rc   r(   rS   rT   rU   zParts: youtuberv   z:current User has reached the limit of plan video duration.r#   r`   z> 
 Upgrade Your Plan Or Contact The Support For More Detailes.)r%   r&   suggestz-User has reached the limit of videos per day.z;Upgrade Your Plan Or Contact The Support For More Detailes.)r,   r   r	   r!   r   rJ   rK   r   floatPOSTrB   rC   ri   rj   r   FILESreadrZ   r   emailr   r|   r   )r   r   r2   r   rO   rx   has_reached_limitZdata_durationrP   	data_sizerQ   rR   r(   rS   rT   rU   durationrv   r   r   r    post  sB    











zProcessView.postN)__name__
__module____qualname____doc__r   r   r   r   r   r    r}      s   r}   c                   @   s   e Zd Zdd Zdd ZdS )VoiceEnhancementViewc                 O   s   |j jstdS t|dS )Nr~   zenhancement.html)r,   r   r	   r
   r   r   r   r    r   N  s    zVoiceEnhancementView.getc              	   O   sJ  |j jstdS t|rFtd |j }i }t|}t| d}tj	|sZt
| |jd dkr>tt|jd d |}t| |jd  }	|jd	 }
|jd
 }|jd }|jd }|jd }t|jd }|j jjj}t|||	|
||||}|jd dkr>t|jr>|jd}|jd}t||||}t|S d S )Nr~   zRecieve from Enhancement viewsr9   r   r   r   r   rQ   rc   r(   rS   rT   rU   r   r   rv   )r,   r   r	   r!   rJ   rK   r   rB   rC   ri   rj   r   r   r   r   r   subscriptionplan	plan_typerZ   r   r   r   r|   r   )r   r   r2   r   rO   rx   r   rP   r   rQ   rR   r(   rS   rT   rU   r   Z	user_planrv   r   r   r    r   T  s8    










zVoiceEnhancementView.postN)r   r   r   r   r   r   r   r   r    r   M  s   r   c                   @   s   e Zd Zdd ZdS )CancelMediaViewc                 O   s   d S )Nr   r   r   r   r    r     s    zCancelMediaView.postN)r   r   r   r   r   r   r   r    r     s   r   )1rB   loggingrk   PILr   ior   Zpytuber   Z	termcolorr   django.viewsr   django.confr   django.httpr   django.shortcutsr	   r
   Zapps.process.modelsr   r   r   r   r   apps.process.utilsr   r   r   Zapps.process.tasksr   celery.resultr   apps.subscriptions.utilsr   r   r   r   r   	getLogger__file__rJ   r!   rZ   r|   r}   r   r   r   r   r   r    <module>   s,   
yeNP