
    fc                         d dl Zd dlmc mZ d dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlZ ej                  d ej                                dZdZdZdZd Z G d	 d
e      Zy)    N)RB	rhythmboxi:	  ff56d530598d65c1a4088e57da7be2f9z"https://ws.audioscrobbler.com/2.0/)z\(disc *[0-9]+\)z\(cd *[0-9]+\)z\[disc *[0-9]+\]z\[cd *[0-9]+\]z - disc *[0-9]+$z - cd *[0-9]+$z disc *[0-9]+$z cd *[0-9]+$c                  2   t         j                  j                  t        j                         dd      } t         j                  j                  |       dk(  ryt        j                         }|j                  |        	 |j                  dd      dk7  S #  Y yxY w)NaudioscrobblersessionsFzLast.fmusername )
ospathjoinr   user_data_direxistsconfigparserRawConfigParserreadget)session_filer   s     ?/usr/lib/x86_64-linux-gnu/rhythmbox/plugins/artsearch/lastfm.pyuser_has_accountr   >   sy    R--/1A:NGGNN< E)	((*	|
,,y*
-
34	s   =B Bc                   *    e Zd Zd Zd Zd Zd Zd Zy)LastFMSearchc                      y )N )selfs    r   __init__zLastFMSearch.__init__L   s        c           	         |}t         D ]8  }t        j                  |t        j                        }|j	                  d|      }: |j                          t        d|d|d|d       t        dz   }|d k7  r%|dt        j                  j                  |      z  z   }|d k7  r%|dt        j                  j                  |      z  z   }|d k7  r%|dt        j                  j                  |      z  z   }|d	t        z  z   }t        d
|z         |S )Nr
   zsearching for (z, )z?method=album.getinfo&z
artist=%s&z	album=%s&zmbid=%s&z
api_key=%szlast.fm query url = %s)DISC_NUMBER_REGEXSrecompile
IGNORECASEsubstripprintAPI_URLurllibparse
quote_plusAPI_KEY)r   artistalbum
album_mbid
orig_albumexppurls           r   
search_urlzLastFMSearch.search_urlO   s    * c	zz3&155"e5 ++-zBC**#t^	|v||66v>?	?3
d]	{fll55e<=	=34	zV\\44Z@A	A3lW$$# 3&'	*r   c                 r   |t        d       | j                          y t        j                  |      }g }|j	                  d      D ]e  }|j
                  t        d       |j
                  j                  }|j                          |dk7  sGt        d|z         |j                  |       g t        |      dkD  rk|j                         }| j                  j                  | j                  t        j                  j                   |       | j#                  | j$                         y | j                          y )Nzlast.fm query returned nothingimagezgot useless image tagr
   zfound image url: %sr   )r&   search_nextdomparseStringgetElementsByTagName
firstChilddatar%   appendlenpopstore	store_uricurrent_keyr   ExtDBSourceTypeSEARCHcallbackcallback_args)r   r;   parsed
image_urlstagr2   s         r   album_info_cbzLastFMSearch.album_info_cbf   s    	\	)*	??4 & *((1 	c	nn	
!"			399;	Ri	
#
%&c	 	_q		3::(("*<*<*C*CSI==##$r   c                    t        | j                        dk(  r| j                  | j                         y | j                  j	                  d      \  }}}t
        j                  j                  d|      | _        || j                  j                  d|       | j                  |||      }t        j                         }|j                  || j                         y )Nr   r-   r,   )r=   searchesrD   rE   r>   r   ExtDBKeycreate_storagerA   	add_fieldr3   rbLoaderget_urlrI   )r   r,   r-   r.   r2   ls         r   r6   zLastFMSearch.search_next   s    1==##$	 $ 1 1! 465*[[//?$h/z2#iik!))C##$r   c                    |t        j                          t        z
  kD  rt        d        ||       y t               dk(  rt        d        ||       y |j	                  d      }|j                  d      }|j                  d      }t        t        d |            }|dt        d	      fv rd }|d k(  st        |      d
k(  rt        d        ||       y g | _        |D ]   }	| j                  j                  |	||g       " | j                  j                  d||g       || _        || _        || _        | j!                          y )Nzwe already tried this oneFz(can't search: no last.fm account detailsr-   r,   zmusicbrainz-albumidc                 "    | d dt        d      fvS )Nr
   Unknown)_)xs    r   <lambda>z%LastFMSearch.search.<locals>.<lambda>   s    !D"a	l+C"C r   r
   rU   r   zcan't search: no useful detailszVarious Artists)timeREPEAT_SEARCH_PERIODr&   r   	get_fieldget_field_valuesget_infolistfilterrV   r=   rK   r<   r?   rD   rE   r6   )
r   key	last_timer?   rD   argsr-   artistsr.   as
             r   searchzLastFMSearch.search   s,   $))+ 445	$%T?	5 	34T?	
--
 %  *'||12*CWMN'
r1Y<  5
d]c'la'	*+T?	$- 0a==E:./0--)5*=>$*$-$r   N)__name__
__module____qualname__r   r3   rI   r6   re   r   r   r   r   r   K   s    .<%  r   r   )urllib.parser(   xml.dom.minidomr7   minidomr!   r   r   rY   rO   gi.repositoryr   gettextinstall
locale_dirrZ   r+   r'   r    r   objectr   r   r   r   <module>rq      sl   6    	  	  	   ]R]]_ - !  -
.
	 iF ir   