
    Djo3                        d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ  ej        e          Z ed
           G d de                      ZdS )as  
CloudKit-backed NoteDataSource implementation.

Provides an in-memory datasource for a single Note that can answer:
  - get_attachment_uti(identifier) -> Optional[str]
  - get_mergeable_gz(identifier)   -> Optional[bytes]
  - (optional) get_primary_asset_url/get_thumbnail_url/get_title

Population is performed by feeding CloudKit records into `add_attachment_record`.
    )annotationsN)	dataclassfield)DictOptional)CKRecord   )ExportConfig)NoteDataSourceT)slotsc                      e Zd ZU  ee          Zded<    ee          Zded<    ee          Zded<    ee          Z	ded<    ee          Z
ded<   d	Zd
ed<   ddZddZddZddZddZddZddZd	S ) CloudKitNoteDataSource)default_factoryzDict[str, str]_utizDict[str, bytes]_mergeable_gz_primary_asset_url_thumbnail_url_titleNzOptional[ExportConfig]_config
identifierstrreturnOptional[str]c                6    | j                             |          S N)r   getselfr   s     j/home/thesage/.hermes/venv/lib/python3.11/site-packages/pyicloud/services/notes/rendering/ck_datasource.pyget_attachment_utiz)CloudKitNoteDataSource.get_attachment_uti$   s    y}}Z(((    Optional[bytes]c                6    | j                             |          S r   )r   r   r   s     r   get_mergeable_gzz'CloudKitNoteDataSource.get_mergeable_gz'   s    !%%j111r!   c                6    | j                             |          S r   )r   r   r   s     r   get_primary_asset_urlz,CloudKitNoteDataSource.get_primary_asset_url+   s    &**:666r!   c                6    | j                             |          S r   )r   r   r   s     r   get_thumbnail_urlz(CloudKitNoteDataSource.get_thumbnail_url.   s    "&&z222r!   c                6    | j                             |          S r   )r   r   r   s     r   	get_titlez CloudKitNoteDataSource.get_title1   s    {z***r!   urlNonec                &    |r|sd S || j         |<   d S r   r   )r   r   r+   s      r   set_primary_asset_urlz,CloudKitNoteDataSource.set_primary_asset_url6   s)     	 	F.1
+++r!   recr   c                l    |j         }d5d}d6d}d }dD ]C}t          |                    |          pdd	d           }t          |t                    r|r|} nD|j        pd }|s|sd S g }	|r|	                    |           |r||	vr|	                    |           |r||	vr|	                    |           d }
|                    d
          p|                    d          }t          |t                    r|r|}
n>|                    d          }t          |t          t          f          r ||          nd }
|
r|	D ]}|
 j
        |<   |
pd                                }|dk    }|dv }|                    d          p|dv }|                    d          }t          |t          t          f          r|r|	D ]}t          |           j        |<   |                    d          } ||          }|r|	D ]}| j        |<   |r_t           fd|	D                       sD|                    d          } ||rt          |d	d           nd           }|r|	D ]}| j        |<   |rt           fd|	D                       s||                    d          }	 |rt          |d	d           nd }t          |t           t"          f          r$|r" ||d                   }|r|	D ]}| j        |<   n# t$          $ r Y nw xY wt           fd|	D                       s|r|                    d          }	 |rt          |d	d           nd }t          |t           t"          f          r]|rZ|                    d          }|rt          |d	d           nd }d}	  j        rSt           j        dd           r=t	           j        j                                                                                  }n# t$          $ r d}Y nw xY w|dv rdnd}d }t          |t           t"          f          rst-          |          t-          |          k    rSt/          |          D ]C\  }}	 t1          |          } n# t$          $ r d } Y nw xY w| |k    r |||                   }|r nD|s|D ]}! ||!          }|r n|r|	D ]}| j        |<   n# t$          $ r Y nw xY wt           fd |	D                       sF|rD|                    d!          }" ||"rt          |"d	d           nd           }|r|	D ]}| j        |<   	 |                    d          }#|#rt          |#d	d           nd }$t          |$t           t"          f          r$|$r" ||$d                   }%|%r|	D ]}|% j        |<   n# t$          $ r Y nw xY w|                    d"          }&t          |&t          t          f          rF|&rDt           fd#|	D                       s) |t          |&                    }'|'r|	D ]}|' j        |<   |                    d$          |                    d%          |                    d&          |                    d'          |                    d(          |                    d)          |                    d*          |                    d+          g}(d,})|(D ]X}*d }+t          |*t          t          f          r ||*          }+nt          |*t                    r|*}+|+rd-})|	D ]}|+ j        |<    nY|)sg|re j                            |	r|	d         nd          },|,s.|                    d.          }-t          |-t                    r|-r|-},|,r|	D ]}|, j        |<   |                    d/          }. ||.          }/|/r"|	D ]}|/ j        |<   | j        vr
|/ j        |<    	 t8                              d0d1d0|j        |t=          |
          t           fd2|	D                       d34           d S # t$          $ r Y d S w xY w)7NvalOptional[bytes | bytearray]r   r   c                Z    | d S 	 |                      dd          S # t          $ r Y d S w xY w)Nzutf-8replace)decode	Exception)r2   s    r   _text_from_byteszFCloudKitNoteDataSource.add_attachment_record.<locals>._text_from_bytes?   sG    {tzz'9555   tts    
**c                   | dS 	 t          | t                    r0|                     d          }t          |t                    r|r|ndS t	          | dd          }t          |t                    r|r|ndS # t
          $ r Y dS w xY w)zBest-effort extractor for CloudKit asset token downloadURL.

            Accepts a mapping (dict-like) or an object with attribute `downloadURL`.
            Returns the URL string if present and non-empty.
            NdownloadURL)
isinstancedictr   r   getattrr7   )objr+   s     r   
_asset_urlz@CloudKitNoteDataSource.add_attachment_record.<locals>._asset_urlG   s     {tc4(( I''-00C",S#"6"6H3H33DHc=$77(c22DsDssD   tts   AA7 +A7 7
BB)AttachmentIdentifierattachmentIdentifier
Identifier valueUTIAttachmentUTIUTIEncrypted z
public.url)zcom.adobe.pdfz
public.pdfzcom.apple.paper.doc.pdfzpublic.image>
   
public.bmp
public.gif
public.jpg
public.pngpublic.heicpublic.heifpublic.jpegpublic.tiffpublic.webpcom.apple.paperMergeableDataEncryptedPrimaryAssetc              3  *   K   | ]}|j         v V  d S r   r.   .0kr   s     r   	<genexpr>z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>   +      !M!M1!t'>">!M!M!M!M!M!Mr!   FallbackPDFc              3  *   K   | ]}|j         v V  d S r   r.   rV   s     r   rY   z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>   rZ   r!   PaperAssetsr   c              3  *   K   | ]}|j         v V  d S r   r.   rV   s     r   rY   z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>   +      >>A1//>>>>>>r!   PreviewImagesPreviewAppearanceslightpreview_appearance)dark1trueyesr	   c              3  *   K   | ]}|j         v V  d S r   r.   rV   s     r   rY   z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>   r_   r!   FallbackImageURLStringEncryptedc              3  *   K   | ]}|j         v V  d S r   r.   rV   s     r   rY   z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>   s+      CCT44CCCCCCr!   TitleEncryptedSummaryEncryptedLocalizedTitleEncryptedAltTextEncryptedTokenContentIdentifierEncryptedTitleSummaryAltTextFT	URLStringMediazckds.add_attachment_recordnotesc              3  *   K   | ]}|j         v V  d S r   )r   rV   s     r   rY   z?CloudKitNoteDataSource.add_attachment_record.<locals>.<genexpr>;  s+      (O(OQd.@)@(O(O(O(O(O(Or!   )	componentoprecord_namer   has_utihas_mergeable)extra)r2   r3   r   r   )r   r   )fieldsr=   	get_fieldr;   r   
recordNameappend	get_valuebytes	bytearrayr   lower
startswithr   r   anylisttupler7   r   rc   striplen	enumerateintr   r   r   LOGGERdebugbool)0r   r0   r~   r8   r?   identkeyrawrec_namekeysuti_val	uti_plainuti_encrX   uti_l
is_url_uti
is_pdf_utiis_image_utimdpa_valr+   fp_fldpa_list_fldtokenspi_fldapp_fldappspref	pref_codeselectedidxappcodetokenfb_fldpi2_fldtokens2thumburl_encdec
titles_tryfound_titletv	dec_titleurl_valurl_raw	media_val	thumb_urls0   `                                               r   add_attachment_recordz,CloudKitNoteDataSource.add_attachment_record;   s   	 	 	 		 	 	 	$  $Q 	 	C&**3//52wEEC#s##  >)T 	X 	F  	KK 	",,KK!!! 	",,KK!!! "&$$U++Pv/?/?/P/P	i%% 	) 	GG&&~66G gy'9::  ))) 
  	' ' '&	!B%%''l*
XX
''77 
5 E
 <
 677b5),-- 	2" 	2 2 2(-b		"1%% !!.11j   	1 1 1-0'**
  	5c!M!M!M!M!M!M!MMM 	5%%m44F*vOWVWd;;;4PPC 5 5 5A14D+A.. 
	c!M!M!M!M!M!M!MMM 
	 **=99K@KUgt<<<QUftUm44 = =$*VAY//C =!% = =A9<D3A66   
 >>>>>>>>> '	< '	%%o66F%;AK$777tftUm44 !B !B$../CDDG>EO77GT:::4D"D'< XG L*>- - X $'t|'F#G#G#M#M#O#O#U#U#W#WD$ ' ' '&'%)-I%I%IqI.2H!$u66 	*3t99F;S;S(1$ * *HC,'*3xx#, , , ,'+,#y00+5:fSk+B+B#+ !*$)E# &%+ & &E'1z%'8'8H' & %& B!% B BA9AD3A66   >>>>>>>>> 	5< 	5%%o66F*vOWVWd;;;4PPC 5 5 5A14D+A..		&&77G9@Jggw555dG'D%=11 7g 7"
71:.. 7! 7 716+A.. 	 	 	D	 ""#788w	 233	5	5 CCCCdCCCCC	5
 #"5>>22C 5 5 5A14D+A.. -../00677/00>??W%%Y''Y''

  	 	BI"ui011 ,,R00		B$$ 	 " / /A%.DKNN	  	-z 	--11T2I$q''rJJG & **;77gs++ & &%G - - -A%,DKNN
 $$W--	Jy))	 	; ; ;)2#A&D3331:D+A.	LL,!(6#&>"'#G}}%((O(O(O(O$(O(O(O%O%O   
 
 
 
 
  	 	 	DD	s   AK/ /
K<;K<4A!S AO1 0S 1P =S ?P  AS Q.-S .Q=:S <Q==AS 
SS6A*V! !
V.-V.A`% %
`32`3)r   r   r   r   )r   r   r   r"   )r   r   r+   r   r   r,   )r0   r   r   r,   )__name__
__module____qualname__r   r<   r   __annotations__r   r   r   r   r   r    r$   r&   r(   r*   r/   r   rC   r!   r   r   r      sP         5666D6666&+eD&A&A&AMAAAA).t)D)D)DDDDD%*U4%@%@%@N@@@@"U4888F8888&*G****) ) ) )2 2 2 27 7 7 73 3 3 3+ + + +
2 2 2 2
D D D D D Dr!   r   )__doc__
__future__r   loggingdataclassesr   r   typingr   r   pyicloud.common.cloudkitr   optionsr
   renderer_ifacer   	getLoggerr   r   r   rC   r!   r   <module>r      s   	 	 # " " " " "  ( ( ( ( ( ( ( ( ! ! ! ! ! ! ! ! - - - - - - ! ! ! ! ! ! * * * * * *		8	$	$ d d d d d^ d d d d dr!   