Meego рд╣реИрд░рдордЯрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╡рд┐рдХрд╛рд╕

рдпрд╣ рдкреЛрд╕реНрдЯ "рд╕реНрдорд╛рд░реНрдЯ рдлреЛрди рдлреЙрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ" рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реА рд╣реИ ред

рдЫрд╡рд┐
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдореЗрдмрд╛рдЧреЛ рд╣рд░рдорд╛рдЯрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ QtCompords рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╣реЗрдмреНрд░реЛрд╕реЛрд╕рд┐рдЯреА рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рдо Ubuntu One рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдЯ рдПрдбрд┐рдЯрд░ рд▓рд┐рдЦреЗрдВрдЧреЗред



рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдЦрд░реЛрдВрдЪ рдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рдореЗрдВ рдореИрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЦреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдПрдХ рдЪреБрд░реЛрдЯ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЖрд░реНрдорд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреВрдореВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдпрдерд╛рд╕рдВрднрд╡ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рдХрд░реАрдм рд╣реИрдВред рдпрд╣ рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд▓рд╕ рдПрдкреНрдЯреАрдЯреНрдпреВрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬреЛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдЬрдм рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рд▓рд┐рдЦрд╛ рдЬрд╛рдПред

рдЦрд░реЛрдВрдЪ рдмреЙрдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ



рд╕реНрдХреНрд░реИрдЪрдмреЙрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реВрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
# ./harmattan-sdk-setup.py 

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ sbox рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред
рд╣рдо рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реИрдЪрдмреЙрдХреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ:
 $ /scratchbox/login 

рдпрджрд┐ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рдПрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
 [sbox-HARMATTAN_ARMEL: ~] > 

рдпрджрд┐ рд▓реЙрдЧрд┐рди рдХрд╕рдо рдЦрд╛рддрд╛ рд╣реИ, рддреЛ run_me_first.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рд╕реНрдХреНрд░реИрдЪрдмреЙрдХреНрд╕ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рд▓рдХреНрд╖реНрдп рдХреЛ sb_menu рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░реИрдЪрдмреЙрдХреНрд╕ рдЙрдкрдпреЛрдЧ рдЧрд╛рдЗрдб рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Cmake рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛



рдПрдХ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреНрдпреВрдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реЗрдореАрдХ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрдореАрдХ рдХреЛ рд╕рд┐рдореНрдмрд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдк рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред Cmake рдЖрд░рд╛рдо рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕рдВрднрд╡рддрдГ Android рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ iOS рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдЖрд╢реНрд░рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореБрдЦреНрдп рд╕рдм рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП git рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА cmake рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рд╡реЗ рд╕рднреА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореБрдЦреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдЪрд▓реА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдХрд┐ рд╣рд░рд╛рдордЯрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдирд╣реАрдВ рд╣реИред

3 рд╡рд╛рдБ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕реВрдЪреА:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╣рд░рдорд╛рдЯрди рд╢рд▓рдЬрдо рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдХреНрдпреВрдХрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╕реЗрдореАрдХ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 [sbox-HARMATTAN_ARMEL: ~] > apt-get install libqca2-dev cmake 

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реАрдореЗрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдвреВрдВрдв рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрд╡рдпрдВ рдлрд╝рд╛рдЗрд▓ рдХрд░ рд╕рдХрддреА рд╣реИред
 include(FindLibraryWithDebug) if(QCA2_INCLUDE_DIR AND QCA2_LIBRARIES) # in cache already set(QCA2_FOUND TRUE) else(QCA2_INCLUDE_DIR AND QCA2_LIBRARIES) if(NOT WIN32) find_package(PkgConfig) pkg_check_modules(PC_QCA2 QUIET qca2) set(QCA2_DEFINITIONS ${PC_QCA2_CFLAGS_OTHER}) endif(NOT WIN32) find_library_with_debug(QCA2_LIBRARIES WIN32_DEBUG_POSTFIX d NAMES qca HINTS ${PC_QCA2_LIBDIR} ${PC_QCA2_LIBRARY_DIRS} ${QT_LIBRARY_DIR}) find_path(QCA2_INCLUDE_DIR QtCrypto HINTS ${PC_QCA2_INCLUDEDIR} ${PC_QCA2_INCLUDE_DIRS} ${QT_INCLUDE_DIR}} PATH_SUFFIXES QtCrypto) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(QCA2 DEFAULT_MSG QCA2_LIBRARIES QCA2_INCLUDE_DIR) mark_as_advanced(QCA2_INCLUDE_DIR QCA2_LIBRARIES) endif(QCA2_INCLUDE_DIR AND QCA2_LIBRARIES) 

рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдЙрд╕реА рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред Pgkconfig рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╣рд░рдорд╛рдЯрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рд╣рдо $ QTDIR рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред рдпрджрд┐ cmake рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдорд┐рд▓реА, рддреЛ рдпрд╣ QCA2_INCLUDE_DIR QCA2_LIBRARIES рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдирд╣реАрдВ рд╣реИред
Cmake рдореЗрдВ рдЪрд░ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдпрд╛ рд╡рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 if(WIN32) .... elseif(APPLE) ... elseif(LINUX) ... endif() 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реАрдореЗрдХ рдХреЛ рд╣рд░рдорд╛рдЯрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди -DHARMATTAN = ON рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде cmake рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ HARMATTAN рд╡реИрд░рд┐рдПрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 if(HARMATTAN) add_definitions(-DMEEGO_EDITION_HARMATTAN) #  ,         . endif() 

рдЗрди рд╕рдорд╛рди рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ GUI рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 if(HARMATTAN) set(CLIENT_TYPE meego) message(STATUS "Using meego harmattan client") else() set(CLIENT_TYPE desktop) list(APPEND QML_MODULES QtDesktop) message(STATUS "Using desktop client") endif() set(QML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qml/${CLIENT_TYPE}") ... install(DIRECTORY ${QML_DIR} DESTINATION ${SHAREDIR}/qml) 

рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, рдХреНрдпреВрдПрдордбреАрдПрд╕рдХреЗ рдХреЗ рд╕рд╛рде рд╣рд╛рд░реНрдореЗрдЯрди рдХреНрд╡рд┐рдХ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди -DHARMATTAN рд╕реНрд╡рд┐рдЪ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рд╕реНрдХреНрд░реИрдЪрдмреЙрдХреНрд╕ рдореЗрдВ, рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

C ++ рдкреНрд▓рдЧрдЗрди Tomboy рдиреЛрдЯреНрд╕ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ



рдореИрдВрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХреНрдпреВрдПрд▓рдПрдо рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдпрд╛рдд рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрд╣ рдЬреАрдпреВрдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ Outh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ QOauth рдкрд░ рдмрд╕ рдЧрдпрд╛, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╣реИрдмреЗ рдкрд░ рдПрдХ рд▓реЗрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рджрдмрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдкрддреЗ рдкрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП https рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:
 UbuntuOneApi::UbuntuOneApi(QObject *parent) : QObject(parent), m_manager(new QNetworkAccessManager(this)), m_oauth(new QOAuth::Interface(this)) { ... connect(m_manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), SLOT(onAuthenticationRequired(QNetworkReply*,QAuthenticator*))); } ... void UbuntuOneApi::requestToken(const QString &email, const QString &password) { m_email = email; m_password = password; QUrl url("https://login.ubuntu.com/api/1.0/authentications"); url.addQueryItem(QLatin1String("ws.op"), QLatin1String("authenticate")); url.addQueryItem(QLatin1String("token_name"), QLatin1Literal("Ubuntu One @ ") % m_machineName); qDebug() << url.toEncoded(); QNetworkRequest request(url); QNetworkReply *reply = m_manager->get(request); reply->setProperty("email", email); reply->setProperty("password", password); connect(reply, SIGNAL(finished()), SLOT(onAuthReplyFinished())); } ... void UbuntuOneApi::onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *auth) { auth->setUser(reply->property("email").toString()); auth->setPassword(reply->property("password").toString()); } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдкреНрд░рдорд╛рдгрд┐рдд рд╕рдВрдХреЗрдд, QNetworkAccessManager рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдпрд╛рдж рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рд╣реИред
рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрд╕рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░ рдореЗрдВ рдЖрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЯреЛрдХрди рдФрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдореЗрдВ k8json рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  QNetworkReply *reply = static_cast<QNetworkReply*>(sender()); QVariantMap response = Json::parse(reply->readAll()).toMap(); if (response.isEmpty()) { emit authorizationFailed(tr("Unable to recieve token")); } m_token = response.value("token").toByteArray(); m_tokenSecret = response.value("token_secret").toByteArray(); m_oauth->setConsumerKey(response.value("consumer_key").toByteArray()); m_oauth->setConsumerSecret(response.value("consumer_secret").toByteArray()); QUrl url("https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/" + reply->property("email").toString()); connect(get(url), SIGNAL(finished()), SLOT(onConfirmReplyFinished())); 

рдЕрдЧрд▓рд╛ рдХрджрдо рдЗрд╕ рддрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рднреЗрдЬрдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЯреЛрдХрди рдорд┐рд▓рд╛ рд╣реИ (рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ)ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдЬрд╡рд╛рдм рдареАрдХ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
 void UbuntuOneApi::onConfirmReplyFinished() { QNetworkReply *reply = static_cast<QNetworkReply*>(sender()); QByteArray data = reply->readAll(); if (data.contains("ok")) { emit hasTokenChanged(); 

рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╢рдмреНрдж рдЙрддреНрддрд░ рдореЗрдВ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ, рдЖрдк рдЦреБрд╢реА рд╕реЗ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯреЛрдХрди рдЕрдВрддрддрдГ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛! Tomboy рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдиреЛрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдм рддрдХ, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрд╛ рд╣реВрдВ рдФрд░, рдЕрдкрдиреЗ рджрд╛рдВрддреЛрдВ рдХреЛ рдкреАрд╕рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡реЗрдмрдХрд┐рдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрдЯрди рд╣реЛрддрд╛ рд╣реИ "рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдиреЛрдЯреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ"ред рд╣рдо рдЗрд╕ рд╡реЗрдмрдХрд┐рдЯ рдХреЛ рд╣рдорд╛рд░реЗ QNetworkAccessManager рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рдкреЙрдЗрдВрдЯрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╝реАрдорддреА рдХреБрдХреАрдЬрд╝ рдХрд╛ рдорд╛рд▓рд┐рдХ рдмрди рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ DOM рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред
  QWebFrame *frame = page()->mainFrame(); QWebElement email = frame->findFirstElement("#id_email"); email.setAttribute("value", m_email); QWebElement pass = frame->findFirstElement("#id_password"); pass.setAttribute("value", m_password); QWebElement submit = frame->findFirstElement("#continue"); submit.setFocus(); 

рдкреНрд░рд╛рдкреНрдд рдХреБрдХреАрдЬрд╝ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рд╣рдо рдмрд╣реБрдд рдШреБрд╕рдкреИрда рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
 void Notes::onWebAuthFinished(bool success) { if (success) { QNetworkCookieJar *jar = m_api->manager()->cookieJar(); QList<QNetworkCookie> cookies = jar->cookiesForUrl(m_apiRef); QSettings settings; settings.beginWriteArray("cookies", cookies.count()); for (int i = 0; i != cookies.count(); i++) { settings.setArrayIndex(i); settings.setValue("cookie", cookies.at(i).toRawForm()); } settings.endArray(); sync(); } } 

рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╣реЗрдбрд░ рдореЗрдВ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ QOauth рдХрд╛рдо рдЖрддрд╛ рд╣реИред
 QNetworkReply *UbuntuOneApi::get(const QUrl &url) { QByteArray header = m_oauth->createParametersString(url.toEncoded(), QOAuth::GET, m_token, m_tokenSecret, QOAuth::HMAC_SHA1, QOAuth::ParamMap(), QOAuth::ParseForHeaderArguments); QNetworkRequest request(url); request.setRawHeader("Authorization", header); return m_manager->get(request); } 

рдЕрдм рдПрдХ рд╣рд▓реНрдХреЗ рджрд┐рд▓ рдХреЗ рд╕рд╛рде, рдЖрдк tomboy api рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
Qml рд╕реЗ рдХрд╛рд░реНрдп рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ QObject рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ QObjectListModel рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрдЭреЗ qt рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдУрдВ рдХреЗ рдЦреБрд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдорд┐рд▓рд╛ред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдЯ рдХрд╛ рдЕрдкрдирд╛ рдПрдХ рдЧрд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрд╛рдирдХрд░ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреНрдпреВрдЯреА рдХреА рдХреНрд╡рд┐рдб рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдирдП рдиреЛрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗред
 Note::Note(Notes *notes) : QObject(notes), m_notes(notes), m_status(StatusNew), m_isMarkedForRemoral(false) { QUuid uid = QUuid::createUuid(); m_guid = uid.toString(); m_createDate = QDateTime::currentDateTime(); } 

рдиреЛрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рдХреНрд░рд┐рдпрд╛рдПрдВ:

рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдкреАрдЖрдИ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ, рдиреЛрдЯреЛрдВ рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рд╣рдо рд╕рд┐рдВрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдиреЛрдЯ рдореЗрдВ рд╣реА рд╣рдо рддрд░реАрдХреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рд╣рдЯрд╛рдПрдВрдЧреЗред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рд╢реАрд░реНрд╖рдХ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдЧреБрдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:
 class Note : public QObject { Q_OBJECT Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) Q_PROPERTY(QString content READ content WRITE setContent NOTIFY textChanged) Q_PROPERTY(int revision READ revision NOTIFY revisionChanged) Q_PROPERTY(Status status READ status NOTIFY statusChanged) Q_PROPERTY(QDateTime createDate READ createDate NOTIFY createDateChanged) ... 

рдиреЛрдЯ рд╕реНрдЯреЗрдЯрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ qml рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  Q_ENUMS(Status) public: enum Status { StatusNew, StatusActual, StatusOutdated, StatusSyncing, StatusRemoral }; 

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдЬрд┐рдХ рдореИрдХреНрд░реЛ Q_ENUMS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЕрдм qml рдХреЛрдб рдореЗрдВ рдЖрдк рдЙрдирдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  State { name: "syncing" when: note.status === Note.StatusSyncing 

рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдкрдардиреАрдп рдФрд░ рддреЗрдЬред рдлрд┐рд░ рднреА, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддрд╛рд░ рдирд╣реАрдВ!
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, QObjectListModel рдореЗрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реЗ рдореЙрдбрд▓ рддрддреНрд╡ рдХреЛ рдирд╛рдо рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд░реЛрд▓ рдиреЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред
 NotesModel::NotesModel(QObject *parent) : QObjectListModel(parent) { QHash<int, QByteArray> roles; roles[ObjectRole] = "note"; setRoleNames(roles); } 


рдФрд░ рдЕрдм рдореИрдВ рдЦреБрдж рд╣реА qml рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреНрдпреВрдПрдордПрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ QDeclarativeExtensionPlugin рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рдФрд░ рдЗрд╕рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░рдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ред
 void QmlBinding::registerTypes(const char *uri) { Q_ASSERT(uri == QLatin1String("com.ubuntu.one")); qmlRegisterType<UbuntuOneApi>(uri, 1, 0, "Api"); qmlRegisterType<ProgressIndicatorBase>(uri, 1, 0, "ProgressIndicatorBase"); qmlRegisterUncreatableType<Notes>(uri, 1, 0, "Notes", tr("Use Api.notes property")); qmlRegisterUncreatableType<Account>(uri, 1, 0, "Account", tr("Use Api.account property")); qmlRegisterUncreatableType<Note>(uri, 1, 0, "Note", tr("")); qmlRegisterUncreatableType<NotesModel>(uri, 1, 0, "NotesModel", tr("")); } Q_EXPORT_PLUGIN2(qmlbinding, QmlBinding) 

рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЧреМрд░ рдХрд┐рдпрд╛ рдФрд░ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдпреВрд░рд┐рдпрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ? рдФрд░ рдпрд╣ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣реА рд╣реИ, рдХреНрдпреВрдЯреА рдореЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рджрд┐рдЦреЗрдЧрд╛:
 $QML_IMPORTS_DIR/com/ubuntu/one/ 

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Qt рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ qmldir рдлрд╝рд╛рдЗрд▓ рд╣реЛ, рдЬреЛ рдмрд╛рдЗрдирд░реА рдкреНрд▓рдЧрдЗрдиреНрд╕, qml рдФрд░ js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИред
 plugin qmlbinding 


Meego рд╣реИрд░рдордЯрди рдХреЗ рд▓рд┐рдП qml рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕



Meego рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдореБрдЦреНрдп рдмрд╣реБрдордд рдкреЗрдЬрд╕реНрдЯреИрдХрд╡рд┐рдВрдбреЛ рддрддреНрд╡ рд╣реИ, рдЬреЛ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдПрдХ рдвреЗрд░ рд╣реИред рдкреГрд╖реНрда рдХреЛ рдкреБрд╢ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЙрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХрд╛ рдЕрдкрдирд╛ рдЯреВрд▓рдмрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреЗрдЬ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 import QtQuick 1.1 import com.nokia.meego 1.0 import com.ubuntu.one 1.0 //    notes API PageStackWindow { id: appWindow initialPage: noteListPage Api { //,  API id: api Component.onCompleted: checkToken() onHasTokenChanged: checkToken() function checkToken() { if (!hasToken) loginPage.open(); else api.notes.sync(); } } ... 

рдЕрдм рд╣рдо рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдорд╛рдирдХ рдЯреВрд▓рдмрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдиреЛрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ:
 ... LoginPage { id: loginPage onAccepted: api.requestToken(email, password); } NoteListPage { id: noteListPage notes: api.notes } NoteEditPage { id: noteEditPage } AboutPage { id: aboutPage } ToolBarLayout { id: commonTools visible: true ToolIcon { iconId: "toolbar-add" onClicked: { noteEditPage.note = api.notes.create(); pageStack.push(noteEditPage); } } ToolIcon { platformIconId: "toolbar-view-menu" anchors.right: (parent === undefined)? undefined: parent.right onClicked: (menu.status === DialogStatus.Closed)? menu.open(): menu.close() } } Menu { id: menu visualParent: pageStack MenuLayout { MenuItem { text: qsTr("About") onClicked: {menu.close(); pageStack.push(aboutPage)} } MenuItem { text: qsTr("Sync") onClicked: api.notes.sync(); } MenuItem { text: api.hasToken ? qsTr("Logout") : qsTr("Login") onClicked: { if (api.hasToken) api.purge(); else loginPage.open(); } } } } 


рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рдкреЗрдЬ рдХреИрд╕рд╛ рд╣реИ, рдиреЛрдЯ рд▓рд┐рд╕реНрдЯрдкреЗрдЬ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдЯрд▓рд┐рд╕реНрдЯрдкреЗрдЬ.рдХреИрдо рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ:
 import QtQuick 1.1 import com.nokia.meego 1.0 import com.ubuntu.one 1.0 Page { id: noteListPage property QtObject notes: null tools: commonTools //  ,   main.qml PageHeader { //  .           id: header text: qsTr("Notes:") } ListView { id: listView anchors.top: header.bottom anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom anchors.margins: 11 clip: true focus: true model: notes.model delegate: ItemDelegate { title: note.title //      subtitle: truncate(note.content, 32) onClicked: { noteEditPage.note = note; pageStack.push(noteEditPage); //    } function truncate(str, n, suffix) { str = str.replace(/\r\n/g, ""); if (suffix === undefined) suffix = "..."; if (str.length > n) str = str.substring(0, n) + suffix; return str; } } } ScrollDecorator { flickableItem: listView } } 

рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕рд╛ рдкреНрдпрд╛рд░рд╛ рдкреГрд╖реНрда рд╣реИ:


рд▓реЙрдЧрд┐рди рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╢реАрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬреЛ рдКрдкрд░ рд╕реЗ рдкреЙрдк рд╣реЛрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдВрдЧреА рдЬрд╛рддреА рд╣реИред
 import QtQuick 1.0 import com.nokia.meego 1.0 import "constants.js" as UI //     - js   .      namespace'  qml'. Sheet { id: loginPage property alias email: loginInput.text //.   ,           loginInput.text property alias password: passwordInput.text content: Column { // sheet' anchors.topMargin: UI.MARGIN_DEFAULT anchors.horizontalCenter: parent.horizontalCenter Image { id: logo source: "images/UbuntuOneLogo.svg" } Text { id: loginTitle width: parent.width text: qsTr("Email:") font.pixelSize: UI.FONT_DEFAULT_SIZE color: UI.LIST_TITLE_COLOR } TextField { id: loginInput width: parent.width } Text { id: passwordTitle width: parent.width text: qsTr("Password:") font.pixelSize: UI.FONT_DEFAULT_SIZE color: UI.LIST_TITLE_COLOR } TextField { id: passwordInput width: parent.width echoMode: TextInput.Password } } acceptButtonText: qsTr("Login") rejectButtonText: qsTr("Cancel") } 

рдпрд╣ рд╕рдм рд╡реИрднрд╡ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдмреИрдХ рдмрдЯрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдиреЛрдЯреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред рдХреЙрдордирдЯреВрд▓ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреВрд▓рдмрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  ToolBarLayout { id: aboutTools visible: true ToolIcon { iconId: "toolbar-back" onClicked: { pageStack.pop() } } } 


рд▓реЙрдиреНрдЪрд░ рдЖрдЗрдХрди



рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдиреНрдЪ рдЖрдЗрдХрди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА linuxoids .desktop рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред
 [Desktop Entry] Name=ubuntuNotes Name[ru]=ubuntuNotes GenericName=ubuntuNotes GenericName[ru]=ubuntuNotes Comment=Notes editor with sync Comment[ru]=    Exec=/usr/bin/single-instance /opt/ubuntunotes/bin/ubuntuNotes %U Icon=/usr/share/icons/hicolor/80x80/apps/ubuntuNotes.png StartupNotify=true Terminal=false Type=Application Categories=Network;Qt; 

Exec рд╕реЗрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдЗрд╕ рддрд░рд╣ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдИ рдмрд╛рд░ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕реБрдВрджрд░ рдЫрдк рд╣реЛ, рддреЛ рд╣рдо рдЗрдирд╡реЙрдХрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 Exec=/usr/bin/invoker --splash=/usr/share/apps/qutim/declarative/meego/qutim-portrait.png --splash-landscape=/usr/share/apps/qutim/declarative/meego/qutim-landscape.png --type=e /usr/bin/qutim 

рдмреЗрд╢рдХ, рд╕рднреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рд╕реБрдВрджрд░ рдЖрдЗрдХрди рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧ рдорд┐рд▓реЗрдЧрд╛ред

рдбрд┐рдмреЗрдЯ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБ



рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ dpkg-buildpackage рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдмрд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП debian_harmattan рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ рдкрд╣рд▓реЗ, рд╕рд┐рдорд▓рд┐рдВрдХ debian_harmattan> рдбреЗрдмрд┐рдпрди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдЦрдВрдб рдбреЗрдмрд┐рдпрди рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╣реИрдмрд░ рдХреЗ рдХрдИ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:
 Source: ubuntunotes Section: user/network Priority: extra Maintainer: Aleksey Sidorov <gorthauer87@ya.ru> Build-Depends: debhelper (>= 5),locales,cmake, libgconf2-6,libssl-dev,libxext-dev,libqt4-dev,libqca2-dev,libqca2-plugin-ossl, libqtm-dev Standards-Version: 3.7.2 Package: ubuntunotes Section: user/network Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends},libqca2-plugin-ossl Description: TODO XSBC-Maemo-Display-Name: ubuntuNotes XSBC-Bugtracker: https://github.com/gorthauer/ubuntu-one-qml Package: ubuntunotes-dbg Section: debug Priority: extra Architecture: any Depends: ${misc:Depends}, qutim (= ${binary:Version}) Description: Debug symbols for ubuntuNotes Debug symbols to provide extra debug info in case of crash. 

рдЪреИрдВрдЬ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рдВрд╕ рдкреИрдХреЗрдЬ рд╕реЗ рдбреАрдИрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
 $ dch - i 

рдирд┐рдпрдо рдлрд╝рд╛рдЗрд▓, debhelper'ov рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд╣реБрдд рд╕рд░рд▓ рдереА:
 #!/usr/bin/make -f %: dh $@ override_dh_auto_configure: dh_auto_configure -- -DCMAKE_INSTALL_PREFIX=/opt/ubuntunotes -DHARMATTAN=ON override_dh_auto_install: dh_auto_install --destdir=$(CURDIR)/debian/ubuntunotes 

рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рднреА рддреБрдЪреНрдЫ рд╣реИ:
 $ ln -s ./debian_harmattan ./debian $ dpkg-buildpackage -b 


рдирд┐рд╖реНрдХрд░реНрд╖



рдЕрдм рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреЗрдЬ рдФрд░ рдЙрддреНрддрд░рджрд╛рдпреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд╡-рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдЧрд┐рдердм рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рд┐рдд рдбреЗрдм рдкреИрдХреЗрдЬ рднреА рд╣реИ ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╣рд╛рд░реНрдореЗрдЯрди рдХреЗ рддрд╣рдд рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рд╣реЗрдмреИрдХрд╛рд╕рд┐рдЯреА рдХреЛ рд╕реАрдореЗрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдХрдИ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреА рд╣реИред

Source: https://habr.com/ru/post/In133974/


All Articles