a
    }hGk                     @   sv   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mZ d dl	m
Z
mZmZ d dlmZmZmZ G dd dZdS )    N)close_old_connections)BASE_DIRCONSOLE_NAME_LIST)	new_printset_sbc_status	has_image)xbox360_graph	ps4_graphMenuc                   @   s   e Zd Zdd Zd"ddZedddZd	d
 Zdd Zdd Z	d#ddZ
dd Zdd Zdd Zdd Zd$ddZd%ddZd d! ZdS )&	MenuUtilsc                 C   s4   ddl m} || _| jj| _| jj| _| jj| _d S )Nr   )PublicMoves)utils.public_movesr   public_movesfifa_account
sbc_workerps4_buttons)selfpublic_moves_instancer    r   CC:\Users\Administrator\Downloads\futplus_django\utils\menu_utils.py__init__   s
    

zMenuUtils.__init__Nc                 C   sR   |d u r"| j jdv rtg}ntg}|jD ]$}||vr(|| | j||d q(|S )N)xbox360xboxs)menus)r   platformr   r	   nodesappendget_all_menus)r   menur   itemr   r   r   r      s    

zMenuUtils.get_all_menus)returnc                 C   s$   | j jD ]}|j|kr|  S qd S )N)r   r   name)r   	item_namer   r   r   r   select_menu_items_by_name"   s    
z#MenuUtils.select_menu_items_by_namec                 C   sJ   g }|D ]<}|j rg }|j D ]}||j q||j||jd q|S )N)r!   r   specials)r   r   r!   r$   )r   r   Zlist_1r   Zlist_2noder   r   r   make_menu_dict'   s    
zMenuUtils.make_menu_dictc                 C   s   | j jD ]}| | qdS )ul   همه تصاویر مرجع را یک بار لود می‌کند و در حافظه نگه می‌داردN)r   r   _load_menu_images)r   r   r   r   r   load_all_templates1   s    zMenuUtils.load_all_templatesc              	   C   s   t jtd| jj d|j d}t j|rFt	|tj
| jj|j< |jD ]J}t jtd| jj d|j d}t j|rLt	|tj
| jj|j< qL|jD ]}| | qd S )Nutils/
_controls/.png)ospathjoinr   r   r   r!   existscv2imreadIMREAD_GRAYSCALEr   image_cachemultiple_images	file_namer   r'   )r   r   Zimg_path
image_itemZsub_menur   r   r   r'   6   s    "
"
zMenuUtils._load_menu_imagesc           
      C   s   |d u rg }||vr||g }|dkr0||g7 }||kr<|S d}|D ]}|d |krD| |}qD|dkr|| d D ]4}|| d  |}| |||||}	|	rt|	  S qtd S )Nr7   r!   r   )index	find_path)
r   graphstartendr-   
node_indexr8   childr%   newpathr   r   r   r9   G   s$    

zMenuUtils.find_pathc                 C   s  d}|}g }|  |||}zt|dkr.|W S W n   Y n0 |rf|||d d|d g |d }qd}d}	d }
g }|D ]B}|d D ]4}||kr|d }|d |}|d }	|d	}
qqz|dkrt| jd
||d dS d|
v r||v r||v r||kr||||k rF|||| }|||d|g |}n@||||kr|||| }|||d|g |}q|||	d|g |	}qd S )Nr      in   r7    r   r!   r$   zpath:z -- no path founddont_need_enterrightleftout)r9   lenr   r8   getr   r   )r   r:   r;   r<   Zlen_find_pathZ
temp_startr-   	temp_pathr=   parentparent_specialsZparent_nodesr   r%   Z
moves_needr   r   r   get_path_   sJ    

(zMenuUtils.get_pathc                 C   s"  |S |t |k r|| rd}|| d dkr |d t |k r ||d  d dkr || d ||d  d kr||| d ||d  d d|| d ||d  d  g n>||| d ||d  d d||d  d || d  g d}|d7 }|r|||  |d7 }q|S )	Nr   r@   rB   rG   rA      rF   rE   )rH   r   )r   the_pathcountnew_pathZmust_insertr   r   r   fix_path   s,      

zMenuUtils.fix_pathc              
   C   s6   |  |||}| |}t| jd|d|d|d|	 |S )Nzthe path = z -- fixed path = z	 start = z end = )rM   rR   r   r   )r   r:   r;   r<   rO   Z
fixed_pathr   r   r   map_path   s    
zMenuUtils.map_pathc              
   C   s~   | j j  tjtjtd| jj	 d| drv| j j
tjtd| jj	 d| ddddrfdS t| jd d	S dS d S )
Nr)   r*   r+   screen_shot_tmp.jpg?	thresholdTzstate control failedF)r   screen_utilsget_screen_shotr,   r-   r/   r.   r   r   r   r   r   )r   stater   r   r   control_state   s    (zMenuUtils.control_stateTc                 C   s   |r| j j  td}t|tj}| j jD ]}d|jv r@q0|j	D ]}|j
| j jv rF| j j|j
 }|jrr|jnd}|jr|jnd}|}	|r|\}
}}}||
|||f }	| j j||	|rF|j    S qFq0dS )uR   تشخیص صفحه فعلی با استفاده از MenuImage، ROI و thresholdrT   rD   NrU   F)r   rX   rY   r0   r1   cvtColorCOLOR_BGR2GRAYr   r$   r4   r5   r3   roirW   Zhas_image_2r!   )r   get_new_screen_shotframeZ
gray_framer   r6   Z	ref_imager^   rW   Zframe_to_checky1y2x1x2r   r   r   just_find_state   s&    


zMenuUtils.just_find_stateFc              
   C   s  |d u rg }t | jd|d|d| |D ]}||dkr&d}| d }t| dkrlt| d }	nd}	| jjd	v rd
}	d}
td d}d}|dkr<| j	
  | j	j  td t | jd | j  td | j  td | j	
  | j	jddddr<|
dkr<t | jd | j  td | j	
  | j	jtjtd| jj d| dd|	drL|sL|dkr| j	jtjtd| jj dd|	drt| jd t | jd | j  td | j	
  | j	jtjtd| jj dd|	drXt | jd | j  td | j  td | j  td | j  td | j  td | j  td | j  td |  dkrt | jdd|   | j  td | j  td t | jd  tdD ]8}td! | j  td | j  td qtdq&n|dkr| j	jtjtd| jj d"d|	ds| j	jtjtd#d|	dr| j  td nD|dkr|
d dkr|  s| j  td n|
d$krq&|
d7 }
|
d% dkr8|	d&8 }	t | jd'|	 |d(kr4d}nd(}|
d)krDq&|rV| j  nd|r|dkr|| j  td n| j   td |d*kr| j  td n
| j  td qq&|S )+Nzfind menu iconz tag : z multiple_images : r7   r   r@   rB   gffffff?)r   r   g333333?downFZfifa_22z finding game info , press square   ztransfer_list_cards_tmp.jpgrT   rU   rV   z5finding game info press square not work , press crossr)   r*   r+   z_controls/view_in_queue.pngzgame update needz%_controls/resume_update_games_all.pngz'resume update games found , press cross
   ps4_mainzFbugs hapend , its must go to main menu but not goes , press two circlez state z2waiting in main page for 600 sec to download done.<   z_controls/fifa_22_ea_sports.pngz,utils/xbox_public/game_options_ea_sports.png      g?z'will reduce threshold. new threshold = up-   Zultimate_active)!r   r   findsplitrH   floatr   timesleepr   rY   transfer_list_utilsZ get_transfer_list_cards_positionr   squarer   crossr,   r-   r.   r   r   r   rf   psre   circlerangerE   rF   	Exceptionr1rm   )r   need_right_leftr$   tagr4   use_r1_and_l1use_up_and_downspecialZpicrW   
temp_countZuse_up_and_down_arrowZcontinue_erroriieer   r   r   find_menu_icon   s
   












	





































zMenuUtils.find_menu_iconc                 C   s  | j   | j  rq qq d}|  }|r<t| jd| |S | j   t| jd | j  t	d |d d dkrt| jd | j
  t	d |d7 }t| jd| |dkr| jjdkrt| jd	 | j  t	d
 |dkrt| jd | j  t	d
 | j
  t	d |dkrXt| jd zHdd l}|d}|D ],}|jdkrLt| jd |   qzqLW n   t| jdt  Y n0 | j  t	d
 | j   | j tjtddrX| j tjtddrXt| jd | j j }|rX|ddu rXt| jd ttdkrL| j j  t	d | j j  |dkrt| jd | j j   | j!"  d| j!_#| j!$  t%dqd S )Nr   zfind_state , current : zneed to press circler@   rN   zneed to press crosszfind state count =   z1in 25 try and 0 credit , press option , to check rB      zin 29 try , press ps and crossrg   (   z,trying in 40 try , close xbox friends windowXboxu   Friends ‎- Xboxzclosing xbox friends windowz%error on close xbox friends window : z(utils/xbox_public/remote_my_libarary.pngrT   z'utils/xbox_public/cloud_gaming_icon.pngz5seems account is out of remote play , try to open appstatus_boolTz+xbox app opened so need to login to accountrn   zTI cant find my way at all. I will put console on rest mode and reopen ps remote playzcan not find way)&r   rY   errorsre   r   r   r   rx   rr   rs   rv   creditoptionrw   pygetwindowgetWindowsWithTitletitleclose	traceback
format_excr   r,   r-   r.   r   console_login_utilsxboxs_go_to_apprI   rH   r   login_with_startlogin_to_accountput_on_rest_moder   refresh_from_db	must_donesaverz   )r   rP   rZ   gwwinswinopen_xbox_appr   r   r   
find_state  s    





















zMenuUtils.find_state)N)Nr7   )T)NFF)__name__
__module____qualname__r   r   r
   r#   r&   r(   r'   r9   rM   rR   rS   r[   re   r   r   r   r   r   r   r      s"   


,
F  
 Ar   )r,   rr   r   r0   	django.dbr   futplus.settingsr   r   sbc.public_methodsr   r   r   utils.graph_corer   r	   r
   r   r   r   r   r   <module>   s   