
    aib                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S SKrS SKrS SKJr  S	rS
rSrSrSr Sr!Sr"\" \#5      RI                  5       RJ                  r&\&S-  r'\&S-  r(Sr)\" SS9 " S S5      5       r*\" SS9 " S S5      5       r+\" SS9 " S S5      5       r,S-S jr-S.S jr.S/S jr/S0S jr0      S1S jr1S2S  jr2S3S! jr3S4S" jr4S5S# jr5S6S$ jr6S7S% jr7S8S& jr8 " S' S(5      r9S9S) jr:S:S* jr;S;S<S+ jjr<\=S,:X  a  \>" \<" 5       5      eg)=    )annotationsN)	dataclass)datetimetimezone)Path)EmptyQueue)Any)ttkg     @g     @z@g     @   g9b@FM
   zstations.jsonz	alarm.wav)z.https://api.wheretheiss.at/v1/satellites/25544z'http://api.open-notify.org/iss-now.jsonT)frozenc                  V    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rS\S
'   Srg)Station*   strnamelocationfloatlatitude	longitudeurl notes N)__name__
__module____qualname____firstlineno____annotations__r   __static_attributes__r       0/home/nsa/iss_radio_monitor/iss_radio_monitor.pyr   r   *   s%    
IMO	HE3Or#   r   c                  f    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   Srg)IssSnapshot4   r   r   r   altitude_km	speed_kmhcoverage_radius_kmint	timestampr   providerzdict[str, Any]raw_payloadr   Nr   r   r   r    r!   r"   r   r#   r$   r&   r&   4   s/    ONMr#   r&   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)StationObservation@   r   stationr   distance_km	margin_kmboolin_ranger   Nr/   r   r#   r$   r1   r1   @   s    Nr#   r1   c                    [         R                  " U R                  SS95      n/ nU HQ  nUR                  [	        US   US   [        US   5      [        US   5      US   UR                  SS	5      S
95        MS     U$ )Nzutf-8)encodingr   r   r   r   r   r   r   )r   r   r   r   r   r   )jsonloads	read_textappendr   r   get)pathrawstationsitems       r$   load_stationsrC   H   s    
**T^^W^5
6C H&\j)tJ/0[ 12Khhw+		
  Or#   c                   [         R                  " U 5      [         R                  " U5      pT[         R                  " U5      [         R                  " U5      pvXd-
  nXu-
  n	[         R                  " US-  5      S-  [         R                  " U5      [         R                  " U5      -  [         R                  " U	S-  5      S-  -  -   n
S[        -  [         R
                  " [         R                  " U
5      5      -  $ )N   )mathradianssincosEARTH_RADIUS_KMasinsqrt)lat1lon1lat2lon2lat1_radlon1_radlat2_radlon2_rad	delta_lat	delta_lonas              r$   haversine_kmrX   Y   s    d+T\\$-?hd+T\\$-?h#I#IQ1$
((8
txx1
1DHHY]4Kq4P
P	Q  499Q<!888r#   c                t    [        SU 5      n [        R                  " [        [        U -   -  5      n[        U-  $ )N        )maxrF   acosrJ   )r(   central_angles     r$   radio_horizon_kmr^   e   s1    c;'KIIo;1NOPM]**r#   c                \   / n[          GHT  n U R                  U[        S9nUR                  5         UR	                  5       nSU;   a  [        UR                  S[        5      5      n[        UR                  S[        R                  " 5       5      5      n[        UR                  S[        5      5      n[        [        US   5      [        US   5      UU[        U5      USUS	9s  $ S
U;   ap  US   n[        n[        UR                  S[        R                  " 5       5      5      n[        [        US   5      [        US   5      U[        [        U5      USUS	9s  $ GMW     [        SSR                  U5      -   5      e! [         a"  n	UR                  U SU	 35         S n	A	GM  S n	A	ff = f)N)timeoutwheretheissaltituder,   velocityr   r   zwheretheiss.at)r   r   r(   r)   r*   r,   r-   r.   zopen-notifyiss_positionzopen-notify.orgz: zNu am putut citi pozitia ISS.

)API_URLSr>   REQUEST_TIMEOUTraise_for_statusr:   r   DEFAULT_ISS_ALTITUDE_KMr+   timeDEFAULT_ISS_SPEED_KMHr&   r^   	Exceptionr=   RuntimeErrorjoin)
sessionerrorsr   responsedatarb   r,   speedrd   excs
             r$   fetch_iss_snapshotru   k   s   Fx!	+{{3{@H%%'==?D# *6M!NOdiik BC	dhhz3HIJ""4
#34#D$56 (#'7'A'- $	 	 ##N32diik BC	""<
#;<#L$=> (3'7'A'. $	 		 $' F 8499V;LL
MM  	+MMSEC5/**	+s   CE?'A3E??
F+	F&&F+c           
        / nU Hf  n[        U R                  U R                  UR                  UR                  5      nU R                  U-
  nUR	                  [        UUUUS:  S95        Mh     UR                  S S9  U$ )Nr   )r3   r4   r5   r7   c                <    U R                   (       + U R                  4$ N)r7   r4   )rB   s    r$   <lambda>#evaluate_stations.<locals>.<lambda>   s    DMM(94;K;K'Lr#   )key)rX   r   r   r*   r=   r1   sort)snapshotrA   observationsr3   distancemargins         r$   evaluate_stationsr      s     .0L	
 ,,x7$ 1		
   LMr#   c                   SnSnSn[         R                  " [        U 5      S5       nUR                  S5        UR	                  S5        UR                  U5        U H  u  pV[        X-  5      n[        U5       Hm  nUS:X  a  Sn	O;[        U[        R                  " S[        R                  -  U-  X-  -  5      -  5      n	UR                  [        R                  " S	U	5      5        Mo     M     S S S 5        g ! , (       d  f       g = f)
NiD  ))g     @{Gz?rZ   g?)g     @r   r   )g     @g)\(?i6  w   rE   rZ   r   z<h)waveopenr   setnchannelssetsampwidthsetframerater+   rangerF   rH   piwriteframesrawstructpack)
r?   sample_ratesegments	amplitudewav_file	frequencydurationframe_countindexsamples
             r$   build_alarm_wavr      s    KH I	3t9c	"ha a k*#+Ik45K{+#F !((1tww;#:e>Q#RSTF ''D&(AB , $,	 
#	"	"s   CC88
Dc                F    U R                  5       (       d  [        U 5        U $ rx   )existsr   )r?   s    r$   ensure_alarm_filer      s    ;;==Kr#   c                   S Hu  n[         R                  " U5      (       d  M   US:X  a  US[        U 5      /nOU[        U 5      /n [        R                  " U[        R
                  [        R
                  S9    g   g! [         a     M  f = f)N)paplayaplayplayr   z-qstdoutstderrTF)shutilwhichr   
subprocessPopenDEVNULLOSError)r?   commandargss      r$   play_alarm_soundr      s    .||G$$fT3t9-DSY'D	!))!))
  /    		s   2A==
B
Bc                    [         R                  " S5      (       d  g [        R                  " SSSX/[        R                  [        R                  S9  g! [
         a     gf = f)Nznotify-sendFz-unormalr   T)r   r   r   r   r   r   )titlemessages     r$   send_desktop_notificationr      s\    <<&&D(E;%%%%	

  s   6A 
A"!A"c                l    U S:  a  SOSnUS:  a  SOSn[        U 5      S SU S[        U5      S SU 3$ )	Nr   NSEWz.2f z, )abs)r   r   
lat_suffix
lon_suffixs       r$   format_coordsr      sG     A3J!QCJ(mC *RIs/C1ZLQQr#   c                    [         R                  " U [        R                  S9R	                  5       R                  S5      $ )N)tzz%d.%m.%Y %H:%M:%S)r   fromtimestampr   utc
astimezonestrftime)r,   s    r$   format_local_timer      s2    !!)=HHJSS r#   c                   U Vs/ s H  o"R                   (       d  M  UPM     nnU(       a  US   OS nS[        U R                  U R                  5       3SU R                  S S3SU R
                  S S3SU R                   3S	[        U R                  5       3/nU(       aS  US   nUR                  S
UR                  R                   SUR                  S SUR                  R                   35        O>U(       a7  UR                  SUR                  R                   SUR                  S S35        SR                  U5      $ s  snf )Nr   zISS: zAltitudine: .1f kmzRaza radio estimata: .0fzSursa: zActualizat: zRecomandat: z (z km) -> zCea mai apropiata statie: z km)re   )r7   r   r   r   r(   r*   r-   r   r,   r=   r3   r   r4   r   rn   )r}   r~   rB   activenearestlinesbests          r$   summarize_snapshotr      s<   +=|t}}d|F=!-l1o4G
h//1C1CDEF
x++C04
 ; ;C@D
(##$%
(););<=>E ay4<<,,-R0@0@/EXdllN^N^M_`	
 
()=)=(>bATATUX@YY]^	
 99U% >s
   EEc                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jr      SS jrSS jr      SS jrSS jrSS jrSS jrSS jrSrg)IssRadioMonitorAppi  c                   Xl         X l        [        R                  " 5       U l        U R                  R
                  R                  SS05        [        5       U l        SU l	        SU l
        S U l        [        5       U l        S U l        / U l        [!        ["        5      U l        [&        R(                  " [*        S9U l        [&        R.                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l        [&        R2                  " SS9U l         [&        R2                  " SS9U l!        [&        R2                  " S	S9U l"        [&        R2                  " S
S9U l#        U RI                  5         U R                   RK                  SU RL                  5        g )N
User-Agentz*ISS-Radio-Monitor/1.0 (+tkinter; requests)F)valueOpritNecunoscuta-z$Nu exista inca o statie recomandata.r   z/Apasa 'Porneste monitorizarea' pentru a incepe.   )'rootrA   requestsSessionro   headersupdater	   queue
monitoringfetch_in_progressafter_idsetcurrent_in_rangelast_snapshotlast_observationsr   
ALARM_FILE
alarm_filetkIntVarDEFAULT_INTERVAL_SECONDSinterval_var
BooleanVarauto_open_var	StringVarmonitor_state_variss_position_variss_altitude_variss_speed_variss_coverage_varprovider_varupdated_varrecommendation_varrecommendation_url_var
status_var	_build_uiafter_process_queue)selfr   rA   s      r$   __init__IssRadioMonitorApp.__init__  s|   	 '')##GH	
 .3W
!&$(*-%15;=+J7II,DE]]7!#G!< "= A "3 7\\4 "3 7LLs3<<c2"$,,8#
 ')ll&<#,,C
 			T001r#   c           	       ^  T R                   R                  S5        T R                   R                  S5        T R                   R                  SS5        [        R
                  " T R                   SS9nUR                  [        R                  SS9  [        R                  " US	S
S9nUR                  [        R                  S9  [        R                  " USS9nUR                  [        R                  SS9  [        R
                  " U5      nUR                  [        R                  SS9  [        R                  " UST R                  S9T l        T R                  R                  [        R                  S9  [        R                  " UST R                   [        R"                  S9T l        T R$                  R                  [        R                  SS9  [        R                  " UST R&                  S9nUR                  [        R                  SS9  [        R                  " UST R(                  S9nUR                  [        R                  SS9  [        R                  " UST R*                  S9nUR                  [        R                  SS9  [        R                  " USS9R                  [        R                  SS9  [        R,                  " USS ST R.                  S!S"9nUR                  [        R                  S9  [        R0                  " US#T R2                  S$9n	U	R                  [        R                  S%S9  [        R4                  " US&S'S(9n
U
R                  [        R                  S)9  [        R
                  " U
5      nUR                  [        R                  S)9  UR7                  S*S*S+9  UR7                  S,S*S+9  S-T R8                  4S.T R:                  4S/T R<                  4S0T R>                  4S1T R@                  4S2T RB                  4S3T RD                  44n[G        U5       Ho  u  nu  pUS4:  a  S5OS6nUS4:  a  UOUS4-
  n[        R                  " X S73S9RI                  UUS8S9S6S:9  [        R                  " XS;9RI                  UUS*-   S8S<S6S:9  Mq     [        R4                  " US=S'S(9nUR                  [        R                  S>S9  [        R                  " UT RJ                  S?[        R                  S@9R                  [        R                  S9  [        R                  " UT RL                  SASBSC9nUR                  [        R                  SDS9  URO                  SEU 4SF j5        [        R4                  " USGS'S(9nUR                  [        R                  S>S9  [        R                  " UT RP                  S?[        R                  S@9R                  [        R                  S9  [        R4                  " USHS'S(9nUR                  [        R                  SS>SI9  SJn[        RR                  " UUSKSLSM9T l*        SNSOSPSQSRSSSJ.nSTSUSVSWSXSYSJ.nU HL  nT RT                  RW                  UUU   S9  T RT                  RY                  UUU   [        R                  SZ9  MN     T RT                  R[                  S[S\S]9  T RT                  R[                  S^S_S]9  [        R\                  " U[        R^                  T RT                  R`                  S`9nT RT                  Rc                  URd                  Sa9  T RT                  R                  [        R                  [        R                  SSb9  UR                  [        Rf                  [        Rh                  Sc9  T RT                  RO                  SdU 4Se j5        T R                   Rk                  SfT Rl                  5        g )gNzISS Radio Monitor1180x760i  i     )paddingT)fillexpandz!Monitor ISS pentru statii SDR VHF)TkDefaultFont   bold)textfont)anchorz7Frecventa urmarita: 145.800 MHz FM (ARISS voice / SSTV))r  )   r   )r  pady)r   r   )r   r	  zPorneste monitorizarea)r  r   )sideOpreste)r  r   state)   r   )r
  padxzActualizeaza acumzDeschide statia recomandatazDeschide statia selectatazInterval (sec):)r  r     iX     )from_to	incrementtextvariablewidthz$Deschide automat browserul la alerta)r  variable)r  r   zStare curentar   )r  r   )r   r   )weight   MonitorizarezPozitie ISS
AltitudineVitezaz
Raza radioz
Sursa date
Actualizatr  r   rE   :r   )r   r  )rowcolumnstickyr  r	  )r  )r      zStatie recomandata)r   r   i`  )r  
wraplengthjustifybluehand2)r  
foregroundcursor)r  r   z
<Button-1>c                $   > TR                  5       $ rx   )open_recommended_eventr   s    r$   ry   .IssRadioMonitorApp._build_ui.<locals>.<lambda>  s    d>S>S>Ur#   zJurnal / starezStatii SDR urmarite)r   r  r	  )r   r   statusr   r   r   headingsbrowse)columnsshow
selectmodeStatieLocatieStatuszDistanta ISS (km)zMarja fata de raza (km)URL      Z   x      iJ  )r  r  r7   z#e8f6ec)
background	out_rangez#f8f8f8)orientr   )yscrollcommand)r
  r   r  )r
  r   z
<Double-1>c                $   > TR                  5       $ rx   )open_selected_stationr*  s    r$   ry   r,    s    D4N4N4Pr#   WM_DELETE_WINDOW)7r   r   geometryminsizer   Framer   r   BOTHLabelr   XButtonstart_monitoringstart_buttonLEFTstop_monitoringDISABLEDstop_buttonrefresh_nowr)  rA  Spinboxr   Checkbuttonr   
LabelFramecolumnconfigurer   r   r   r   r   r   r   	enumerategridr   r   bindr   Treeviewtreeheadingr  tag_configure	ScrollbarVERTICALyview	configurer   RIGHTYprotocolon_close)r   mainheadlinesubtitlecontrolsrefresh_buttonopen_recommended_buttonopen_selected_buttoninterval_box	auto_open
info_frame	info_gridfields	row_index
label_textr  r  current_rowrecommendation_framerecommendation_linkstatus_frametable_framer0  r.  widths	scrollbars   `                         r$   r   IssRadioMonitorApp._build_ui5  s   		+,		:&		#s#yyB/		rwwt	,994.

 	RTT"99J
 	RTT099T?244g.JJ)))

 	BGG,::((++	
 	2778$$$

 	v6"%**.))#

 	 $$"''$?"zz,.. 

 	!!rwwV!<		(!2388bggG8T{{**
 	rww'OO7''
	
 	BGG'2^^DK
RTT"IIj)	BDD!!!!A!.!!!A!. T334D1124001t))*40014,,-4++,
 2;61B-I-
#a-QQF'01}))a-KIIiA&67<< =  IIi7<<z =  2C$  #~~+R 
 	!!rtt'!:		 00GG		

 $bdd$
!ii 44	
 	  6 :  /UV~~d1A2Nrtt'2		GG		

 $bdd$
nnT0ErRbggdAMLL	
	 !+/
 
 FIIf8F+;<IIV6&>"$$G  			
yA			BMMTYY__
	 			9==9		BGG"''$?BHH2440		|%PQ		-t}}=r#   c                :    U R                   R                  U5        g rx   )r   r   )r   r   s     r$   
set_statusIssRadioMonitorApp.set_status  s    G$r#   c                j   U R                   (       a  g SU l         [        5       U l        U R                  R                  S5        U R                  R                  [        R                  S9  U R                  R                  [        R                  S9  U R                  S5        U R                  S5        g )NTPornitr  z5Monitorizarea a pornit. Verific pozitia ISS periodic.r   )r   r   r   r   rK  configr   rN  rO  NORMALr{  _schedule_fetchr   s    r$   rJ  #IssRadioMonitorApp.start_monitoring  s    ?? #""8,  r{{ 3bii0OPQr#   c                   SU l         [        5       U l        U R                  R                  S5        U R                  R                  [        R                  S9  U R                  R                  [        R                  S9  U R                  b,  U R                  R                  U R                  5        S U l
        U R                  S5        g )NFr   r  zMonitorizarea a fost oprita.)r   r   r   r   rK  r  r   r  rO  rN  r   r   after_cancelr{  r  s    r$   rM  "IssRadioMonitorApp.stop_monitoring  s     #""7+  ryy 1bkk2==$II""4==1 DM67r#   c                    U R                   b,  U R                  R                  U R                   5        S U l         U R                  S5        g Nr   )r   r   r  r  r  s    r$   rP  IssRadioMonitorApp.refresh_now  s7    ==$II""4==1 DMQr#   c                |    U R                   (       a  g U R                  R                  XR                  5      U l        g rx   )r   r   r   _start_fetch_threadr   )r   delay_mss     r$   r  "IssRadioMonitorApp._schedule_fetch  s(    !!		2J2JKr#   c                    S U l         U R                  (       a  g SU l        [        R                  " U R                  SS9nUR                  5         g )NT)targetdaemon)r   r   	threadingThread_fetch_cyclestart)r   threads     r$   r  &IssRadioMonitorApp._start_fetch_thread  s>    !!!%!!):):4Hr#   c                    [        U R                  5      n[        XR                  5      nU R                  R                  SX445        g ! [         a0  nU R                  R                  S[        U5      45         S nAg S nAff = f)Nr}   error)ru   ro   r   rA   r   putrl   r   )r   r}   r~   rt   s       r$   r  IssRadioMonitorApp._fetch_cycle  sg    	0)$,,7H,X}}ELJJNNJ(@AB 	0JJNNGSX.//	0s   AA 
B&B  Bc                l     U R                   R                  5       u  pSU l        US:X  ah  Uu  p4U R                  X45        U R                  (       aA  [        S[        U R                  R                  5       5      5      S-  nU R                  U5        OiUS:X  ac  U R                  U5        U R                  (       aA  [        S[        U R                  R                  5       5      5      S-  nU R                  U5        M  ! [         a     Of = fU R                  R                  SU R                  5        g )NFr}   r  i  r  r   )r   
get_nowaitr   _apply_snapshotr   r[   r+   r   r>   r  r{  r   r   r   r   )r   message_typepayloadr}   r~   r  s         r$   r   !IssRadioMonitorApp._process_queue#  s    	(,

(=(=(?%).&:--4*H((@#&q#d.?.?.C.C.E*F#G$#N,,X6!W,OOG,#&q#d.?.?.C.C.E*F#G$#N,,X6   				T001s   C=C? ?
DDc                z   Xl         X l        U R                  R                  [	        UR
                  UR                  5      5        U R                  R                  UR                  S S35        U R                  R                  UR                  S S35        U R                  R                  UR                  S S35        U R                  R                  UR                  5        U R                  R                  [!        UR"                  5      5        U Vs/ s H  o3R$                  (       d  M  UPM     nnU R'                  U5        U(       a  US   nU R(                  R                  SUR*                  R,                   SUR*                  R.                   SUR0                  S S	[2        S
 S[4         S35        U R6                  R                  UR*                  R8                  5        OU(       a  US   nU R(                  R                  SUR*                  R,                   SUR*                  R.                   SUR0                  S S35        U R6                  R                  UR*                  R8                  5        O6U R(                  R                  S5        U R6                  R                  S5        U R;                  [=        X5      5        U Vs1 s H  o3R*                  R,                  iM     nnXpR>                  -
  nU(       a"  U R@                  (       a  U RC                  XH5        Xpl        g s  snf s  snf )Nr   r   r   z km/hr   z)ISS este in raza de actiune. Recomandat: z din z+. Distanta curenta fata de subpunctul ISS: z km. Acordeaza pe .3f MHz .zRMomentan niciuna dintre statiile urmarite nu este in raza. Cea mai apropiata este z, la z km.zNu exista statii configurate.r   )"r   r   r   r   r   r   r   r   r(   r   r)   r   r*   r   r-   r   r   r,   r7   _refresh_tabler   r3   r   r   r4   FREQUENCY_MHZMODEr   r   r{  r   r   r   _trigger_alert)	r   r}   r~   rB   r   r   r   current_idsnew_idss	            r$   r  "IssRadioMonitorApp._apply_snapshot7  s    &!-!!-0A0A8CUCU"VW!!X%9%9#$>c"BC("4"4S!9?@!!X%@%@$ES"IJh//0.x/A/ABC#/A<4==$<AL)!9D##''#||001t||7L7L6M N<<@<L<LS;Q R  -c2%vQ@ ''++DLL,<,<="1oG##''**1//*>*>)?u??++,E'2E2Ec1J$P
 ''++GOO,?,?@##''(GH''++B/*8BC5;<VT||((V< 5 55t0 += B4 =s   L30L3L8c                   U R                  5       nU R                  R                  " U R                  R                  5       6   U H  nUR                  (       a  SOSnUR                  (       a  SOSnU R                  R                  S[        R                  UR                  R                  UR                  R                  UR                  R                  UUR                  S UR                  S UR                  R                  4U4S9  M     U(       a<  U R                  R                  U5      (       a  U R                  R                  U5        g U(       a3  U R                  R                  US	   R                  R                  5        g g )
Nr7   r=  IN RAZAdeparter   r   z+.0f)iidvaluestagsr   )_selected_station_namerY  deleteget_childrenr7   insertr   ENDr3   r   r   r4   r5   r   r   selection_set)r   r~   selected_stationrB   tagr-  s         r$   r  !IssRadioMonitorApp._refresh_tabled  s)   668		$))0023 D $*;C"&--YYFIILL%%LL%%LL))'',~~d+LL$$ V   !" 		 0 01A B BII##$45II##LO$;$;$@$@A r#   c           
        US   nSnSUR                   R                   SUR                   R                   S[        S S[         SUR                   R
                   3
n[        U R                  5        [        XE5        U R                  R                  S	UR                   R                   S
35         U R                  R                  5         U R                  R                  UR                   R
                  5        U R                   R#                  5       (       a*  [$        R&                  " UR                   R
                  SS9  g g ! [        R                   a     N`f = f)Nr   zISS in raza unei statii SDRzStatie recomandata: z

Locatie: z
Asculta pe r  r  z
URL: z%ALERTA: ISS a intrat in raza statiei z. Deschide linkul recomandat.rE   new)r3   r   r   r  r  r   r   r   r   r   r   r   clipboard_clearclipboard_appendr   TclErrorr   r>   
webbrowserr   )r   r   r  r   r   r   s         r$   r  !IssRadioMonitorApp._trigger_alert}  s,    ay-"4<<#4#4"5 6--. /',E$ 8LL$$%' 	 	)!%13||  !!>@	
	II%%'II&&t||'7'78 !!##OODLL,,!4 $ {{ 		s   2A	E EEc                R    U R                   R                  5       nU(       a  US   $ S $ r  )rY  	selection)r   r  s     r$   r  )IssRadioMonitorApp._selected_station_name  s%    II'')	(y|2d2r#   c                    U R                  5       nU(       d  g U R                   H4  nUR                  U:X  d  M  [        R                  " UR
                  SS9    g    g NrE   r  )r  rA   r   r  r   r   )r   selectedr3   s      r$   rA  (IssRadioMonitorApp.open_selected_station  sE    ..0}}G||x'3 %r#   c                    U R                   R                  5       R                  5       nU(       a  [        R                  " USS9  g g r  )r   r>   stripr  r   )r   r   s     r$   r)  #IssRadioMonitorApp.open_recommended  s5    ))--/557OOCQ' r#   c                    SU l         U R                  b,  U R                  R                  U R                  5        S U l        U R                  R                  5         U R                  R                  5         g )NF)r   r   r   r  ro   closedestroyr  s    r$   rc  IssRadioMonitorApp.on_close  sP    ==$II""4==1 DM		r#   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rK  rA   r   rO  rY  r   N)r   ztk.TkrA   list[Station]returnNone)r  r  )r   r   r  r  )r  r+   r  r  )r}   r&   r~   list[StationObservation]r  r  )r~   r  r  r  )r   r  r  zset[str]r  r  )r  z
str | None)r   r   r   r    r   r   r{  rJ  rM  rP  r  r  r  r   r  r  r  r  rA  r)  rc  r"   r   r#   r$   r   r     s    "2Hx>t%	 	8 L
02(+,#+,3K+,	+,ZB25.59A5	523(
r#   r   c                   [         R                  " 5       nUR                  R                  SS05        [	        U5      n[        X 5      n[        [        X#5      5        [        5         U Hq  nUR                  (       a  SOSn[        UR                  R                  S SUS SUR                  S S	UR                  S
 SUR                  R                   3	5        Ms     g)Nr   zISS-Radio-Monitor/1.0 (+cli)r  r  24z | 8z7.0fz km | marja z+7.0fz km | r   )r   r   r   r   ru   r   printr   r7   r3   r   r4   r5   r   )rA   ro   r}   r~   rB   r-  s         r$   run_oncer    s     GOOL*HIJ!'*H$X8L	
X
45	G"mm||  $Cqz%\$..1Gv|| "	
  r#   c                    [         R                  " SS9nUR                  S[        [        5      SS9  UR                  SSSS	9  UR                  U 5      $ )
NzfMonitorizeaza ISS si alerteaza cand intra in raza unor statii SDR VHF care pot receptiona 145.800 MHz.)descriptionz--stations-filez#Fisier JSON cu statiile de urmarit.)defaulthelpz--once
store_truez0Face o singura verificare in terminal, fara GUI.)actionr  )argparseArgumentParseradd_argumentr   STATIONS_FILE
parse_args)argvparsers     r$   r  r    sk    $$7F M"2  
 ?  
 T""r#   c                "   [        U =(       d    [        R                  SS  5      n[        [	        UR
                  5      5      nUR                  (       a  [        U5      $ [        R                  " 5       n[        X25        UR                  5         g)Nr   r   )r  sysr  rC   r   stations_fileoncer  r   Tkr   mainloop)r  r   rA   r   s       r$   rd  rd    sa    d*chhqrl+DT$"4"456Hyy!!557Dt&MMOr#   __main__)r?   r   r  r  )
rM   r   rN   r   rO   r   rP   r   r  r   )r(   r   r  r   )ro   zrequests.Sessionr  r&   )r}   r&   rA   r  r  r  )r?   r   r  r  )r?   r   r  r   )r?   r   r  r6   )r   r   r   r   r  r6   )r   r   r   r   r  r   )r,   r+   r  r   )r}   r&   r~   r  r  r   )rA   r  r  r+   )r  z	list[str]r  zargparse.Namespacerx   )r  zlist[str] | Noner  r+   )?
__future__r   r  r:   rF   r   r   r   r  r  rj   r   r  dataclassesr   r   r   pathlibr   r   r   r	   typingr
   r   tkinterr   r   rJ   ri   rk   r   r  r  rg   __file__resolveparentPROJECT_DIRr  r   rf   r   r&   r1   rC   rX   r^   ru   r   r   r   r   r   r   r   r   r   r  r  rd  r   
SystemExitr   r#   r$   <module>r     s   "       
     ! '          8n$$&--o-;&
 $   $      $  "	9+%NP%20C6(R,^ ^B"#( z
TV
 r#   