o
    McM                     @   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   7/var/www/html/docker_usevoice/src/apps/process/views.pyis_ajax   s   r!   c              	   C   sT  |dks|dks|dks|dks|dkrddd}|S |dkrt t|||d}	|	  z
tjj|	| d}
W n tjyI   t|	|| tjd}
Y nw ||	j	 }t
|d	}|| W d    n1 sdw   Y  t|rt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}|S tj |
_tj||
_|
  |	j	dd}|S || }t jj|d}tjj|d}
|j!|kr|j"s~t
|d}|| W d    n	1 sw   Y  t|ret||_"|  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}|S tj |
_tj||
_|
  |j	d|jd}|S tj#|
_tjd|	j	 |
_|
  dddS tj#|
_tj||
_|
  dd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_id	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mediarD   destinationconvert_tasktask_responser5   r   r   r    normal_upload!   s   (








r]   c                 C   s   zt jj|dd d  }W n t jy!   t || tjd}Y nw |jr[|jd kr[|jd kr[t || |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y   td| d dd| dd Y W S w tj d}tjdstd tjd| ddd}	tj|st | |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  t1y } zd|_'|  d(d)dW  Y d }~S d }~ww )*N)
youtube_id   )r^   r,   r.   )
r^   r,   r-   authorr+   rB   
audio_pathrF   r&   r.   r1   z=inserted Video is already downloaded and it will be proccesedr3   r$   z.mp4r8   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)output_pathfilenameT)
only_audioz.mp3)rg   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+   ra   r-   r`   rB   rF   r   rA   r0   r   rH   rI   rJ   r,   r   VideoUnavailablerK   rL   r   
MEDIA_ROOTrC   rD   existsmakedirsrequestsmkdirstreamsorder_bydescfirstr*   downloadr)   systemremover   contentrE   r(   r&   rG   r   	Exception)rP   rQ   video_idrV   rY   	new_mediarX   videora   responsestreamaudioer   r   r    youtube_upload   s~   


,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 rd}t
j|s>t
| |j	d dkrt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rt|jr|j	d}|j	d}t||||}t|S dd|d  dd}t|S dddd}t|S d S )Nr   r&   file_durationr:   upload_typenormal	file_sizeMbP?rR   rg   r(   rT   rU   rV   zParts: youtuber|   z:current User has reached the limit of plan video duration.r#   rc   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   rK   rL   r   floatPOSTrC   rD   ro   rp   r   FILESreadr]   r   emailr   r   r   )r   r   r2   r   rP   r   has_reached_limitdata_durationrQ   	data_sizerR   rS   r(   rT   rU   rV   durationr|   r   r   r    post  sH   








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   sB  |j jstdS t|rtd |j }i }t|}t| d}tj	|s,t
| |jd dkrt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rt|jr|jd}|jd}t||||}t|S d S )Nr   zRecieve from Enhancement viewsr:   r   r   r   r   rR   rg   r(   rT   rU   rV   r   r   r|   )r,   r   r	   r!   rK   rL   r   rC   rD   ro   rp   r   r   r   r   r   subscriptionplan	plan_typer]   r   r   r   r   r   )r   r   r2   r   rP   r   r   rQ   r   rR   rS   r(   rT   rU   rV   r   	user_planr|   r   r   r    r   T  s:   









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   )1rC   loggingrq   PILr   ior   pytuber   	termcolorr   django.viewsr   django.confr   django.httpr   django.shortcutsr	   r
   apps.process.modelsr   r   r   r   r   apps.process.utilsr   r   r   apps.process.tasksr   celery.resultr   apps.subscriptions.utilsr   r   r   r   r   	getLogger__file__rK   r!   r]   r   r   r   r   r   r   r   r    <module>   s.    
yeNP