modem-manager-gui-0.0.19.1/src/settings.c000664 001750 001750 00000011407 13261703575 017770 0ustar00alexalex000000 000000 /* * settings.c * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include "settings.h" settings_t gmm_settings_open(gchar *appname, gchar *filename) { settings_t settings; gchar *confpath; if ((appname == NULL) || (filename == NULL)) return NULL; /*Form path using XDG standard*/ confpath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_config_dir(), appname, NULL); if (g_mkdir_with_parents(confpath, 0755) != 0) { g_warning("Can't create program settings directory"); g_free(confpath); return NULL; } g_free(confpath); settings = g_new(struct _settings, 1); settings->filename = g_build_filename(g_get_user_config_dir(), appname, filename, NULL); settings->keyfile = g_key_file_new(); /*Do not show any error messages here*/ g_key_file_load_from_file(settings->keyfile, settings->filename, G_KEY_FILE_NONE, NULL); return settings; } gboolean gmm_settings_close(settings_t settings) { gchar *filedata; gsize datasize; GError *error; if (settings == NULL) return FALSE; if ((settings->filename == NULL) || (settings->keyfile == NULL)) return FALSE; error = NULL; filedata = g_key_file_to_data(settings->keyfile, &datasize, &error); if (filedata != NULL) { if (!g_file_set_contents(settings->filename, filedata, datasize, &error)) { g_warning("No data saved to file"); g_error_free(error); error = NULL; } } else { g_warning("No data saved to file"); g_error_free(error); error = NULL; } g_free(filedata); g_free(settings->filename); g_key_file_free(settings->keyfile); g_free(settings); return TRUE; } gboolean gmm_settings_set_string(settings_t settings, gchar *key, gchar *value) { if ((settings == NULL) || (key == NULL) || (value == NULL)) return FALSE; g_key_file_set_string(settings->keyfile, "settings", key, value); return TRUE; } gchar *gmm_settings_get_string(settings_t settings, gchar *key, gchar *defvalue) { gchar *value; GError *error; if ((settings == NULL) || (key == NULL)) return g_strdup(defvalue); error = NULL; value = g_key_file_get_string(settings->keyfile, "settings", key, &error); if ((value == NULL) && (error != NULL)) { g_error_free(error); return g_strdup(defvalue); } else { return g_strdup(value); } } gboolean gmm_settings_set_boolean(settings_t settings, gchar *key, gboolean value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_boolean(settings->keyfile, "settings", key, value); return TRUE; } gboolean gmm_settings_get_boolean(settings_t settings, gchar *key, gboolean defvalue) { gboolean value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean gmm_settings_set_int(settings_t settings, gchar *key, gint value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_integer(settings->keyfile, "settings", key, value); return TRUE; } gint gmm_settings_get_int(settings_t settings, gchar *key, gint defvalue) { gint value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_integer(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean gmm_settings_set_double(settings_t settings, gchar *key, gdouble value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_double(settings->keyfile, "settings", key, value); return TRUE; } gdouble gmm_settings_get_double(settings_t settings, gchar *key, gdouble defvalue) { gdouble value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } modem-manager-gui-0.0.19.1/src/settings.h000664 001750 001750 00000003314 13261703575 017773 0ustar00alexalex000000 000000 /* * settings.h * * Copyright 2012 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __SETTINGS_H__ #define __SETTINGS_H__ struct _settings { gchar *filename; GKeyFile *keyfile; }; typedef struct _settings *settings_t; settings_t gmm_settings_open(gchar *appname, gchar *filename); gboolean gmm_settings_close(settings_t settings); gboolean gmm_settings_set_string(settings_t settings, gchar *key, gchar *value); gchar *gmm_settings_get_string(settings_t settings, gchar *key, gchar *defvalue); gboolean gmm_settings_set_boolean(settings_t settings, gchar *key, gboolean value); gboolean gmm_settings_get_boolean(settings_t settings, gchar *key, gboolean defvalue); gboolean gmm_settings_set_int(settings_t settings, gchar *key, gint value); gint gmm_settings_get_int(settings_t settings, gchar *key, gint defvalue); gboolean gmm_settings_set_double(settings_t settings, gchar *key, gdouble value); gdouble gmm_settings_get_double(settings_t settings, gchar *key, gdouble defvalue); #endif /* __SETTINGS_H__ */ modem-manager-gui-0.0.19.1/help/zh_CN/000775 001750 001750 00000000000 13261703575 017123 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/its/000775 001750 001750 00000000000 13261703575 017273 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/figures/startup-window.png000664 001750 001750 00000077066 13261703575 023505 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxyxE_=W&\ 7 !r*PAY]ן׮.XeEDEnpp'$!Cݿ?ޙd['OWSU{@@ AX~̼Rq@ kF 6s}jύ*uJompzjmٳgq\ѤImWCo k 'j/%%%vt:mڴAөu/vJKKnW/AXnSPh_K zj3|rrrر#UV>|m۶U[Pz]Z kx<q\4mIpUMr(//A ǡC8~8͚5cݺuQ\\[vW_}ӧHOOgtY vO<>ϔe,Yݻ),,$11o~X&6lѣϲsN֮]G/:=|0| ϟb`4iڴ)#GM6>q|衇رcҨQn233=w}gy>}T[ÇC=pB1L,X rtHıc\9@P{lnbcch4ffy؟7o͛7Gj-[pq222¶.˲8!qu(<@E9qV{߳~zMFVVv;w&++^{׫-[ƚ5kZtڕ%Kس<^xYb_p>qꫯHOO'11l{96nH׮])++cݺu|zzKJJW^ :-Zp!^{5}._4fΜ9ղl2VZbK.,ZHQmjiܸqP]o>HTTyyyG^^ 4 mU!qԾrt:)޾};Ν9wyos.>>Ӊ媖}(//ߧ'ƒv8zzgΜ PVVZZw%իG~~~8UW:p&))<Ν;{ٿ?;v {k|$Ijv'O|yY`͚5gb$}ܹs9s SLa̙̜9ԾbSNݛ7ңGuVn>jb4iժqqqѪU+F#VCmYi۶- nL8f͚1sL5js=GiiO8Á$Ihڰ\.>cN<믿Nƍ6mgϞO>Q7֩}ذa6mW^lݺuU S};fAjBRR'N@ Z̘1LÆ }zquȑ#y7Xf HΝ;{壏>bŊ u]ҨQ#N:Ő!C[q\={Ǐh"UN!PDu`[.|r 0`~!˗/4 ȑ#ٽ{7GeĉtAOǐ!CxٰaGP_ y]ZVj%::ڥKȌ38q"fRX,t:4M ݻ^jx|:.;Xp!cǎGmۖYf!˲m8>R#]y YaÆXրCJJ }SO=E(((o橧b>n+U>x1%%%HD-|+QƆmK >Zl @^^^SԩST4f$I$'',\xuj$$$`2x<N'V/"r8(;jOlZZ7""us T%\8q ǎ"11$dYf˖-L4 拉Hp$:u~. NYYx|bA \ȲӧIMMƹsHOOrG+m?993i=&&Ѩ Iw:HNN*&\.bccL@ /ӥKt:7ovobٮv(ZR pݜ>}ub2BNn'MT}wVKLL x@LL|.+daÆtR~}xFŋv0JԫW/䎸v]g &&&䮽׃혩Np@ rDEE1gF#$t:)--ULjp8HJJ`0KDD&Z-n[uas84hЀv{XuXm/ZԩSW;@riժfK.QXXBI:uHHHP7_/@ ͆F!66unY5Vk\Oc@ @P]<o:Y=@ F4@ +h @ WTlm,@  '\ @ hi/@ ~}$IB@ Wи@ @ $I@ WrIFҏ9q<L?q"@ "lw+WtRƎK=2~ LBff&f͚rJf55""|6mxޣjeӕ])5  \ZRG@ GFxUx<{6m͛nt:A .7D?OF餴(5 @ v"IRxСCzvʐ!Cj0e&NҥK1ͤ1f4hƍYv-eeeL&=Sm1 ÔEBBSUzgϞ_J۷o#˲nxbvލnGEUOb v;;wfĈA+@ m'|tڕDnF6mĨQ뙙oR~}N>weҤI,Yjѣ{xΝ$I̛7Ţ<;Ů]xw'33^z yС%%%>}7>Nǂ (++W_U)q5Lm~8͟?Ɯ9s$S|r N߁3gիy @ *L̞={ѣn={m6ufc۶m;Ʉl&>>:u`XTEEEݻQFp80 :~'ѣ(++_~dgghh4dggs9n7%ʄ 3fz,[ 9r$v+/r龜L:Ufغu+\.N'> ;vjoĈ>Zo۶q@ Ԍ*'fnٲxn\.:ubܹܹݻsEdY&.. RŋDGGxSm*a#""Á&>>_~˗pB5jСCiٲePpBp͆jU(}\I~;vgyFOe&O^$ ˅`Z @  UNxobСhBxxꩧNgϞ8(=Wf֬Y4lؐ?O5rP?~z1m4dY橧bL4 ܹs+VJw/ YIرcYp!_ZԩS+*;w_fѽ{w  @ ~{$IB6N:/_|A\\$Z p@ +kFHߍ׊ʊ + H  vr,<O%MƵ} \x @ .n~[@ $Ih.gkuAiӦ[N)@p {zAt]RQ @pe=@ $m@ Nj/'@ jm}||Վ@ @?pG@ bp@  BeN>ӧn7n˅0$ VNCբjQOOOQFW9@ +Nx(N:Evv6:u:ua(;U*@r1$I"==*R @p%'<''NGݺu6Cvv6gϞb\h4ԭ[ƍӪU+j .pĉj:tr1.]Azz:mڴcǎZQfzTYBx<)((䐗bvc4ILL$55֭[ӲeK0 W;" Iy_ hƍhZׯҘngΝܹSm`( \=Jvv6׏_/e\<}}|׬]Z1bZlj">B UsY~N:$Iԭ[$bbb0Hb`6ϧur-pO<&y7}Q^hDGG4ٰa7|3]tx*{/2z .i&t:?0їZF~~>;{{,XpYL&?^KT =ЬC,^]vq7dBAQ\\q83N1@ӑF!O hڵ$$$T?Fs_r l&)RTT~*:N^z%_M֭[_f*B#4@P5ż{n^W_U^ѣܹQFqw\\eDxѶknݺ tQ0L+w8NynvTWKQ*rtM֭ꫯ^z>ϻr˫nl;͛W4$!!P =ЬptPҨ\uŹs1ctMMk:gۍn'>>T[nu^*y+emVL@m,*ny:uDF|1t Fî](//, 0uAV.#ypɸqҼ(gF:vX$\q.WPڪG8TG3I^O@ _4 GHFHKK#66ۍl&''\G%MP45kFYYYvUHFQ˘z=:u_v_D]AcIIIoȉ'8zb&Sב$ iԨQs=4ڵkINN&11Q=7k,ԩM7ݤ 4f4P+NZ+Fa3JdmŋtGy爉R}N|ڴiV; WѣAӇo܀ajfuex<BŋSTTt]P:4lؐ4hX,\J6jxm۶\.kKFAGDD2b3-[0f:w|u<=>h4,X೚PAp}]۷K.A;vh$rQnJfv/c=vٹsgaoo:uXf ={"WbТE֭[ٻwo@V_| ܯBMx< 4[nVK۶mx}vZZmg)DFF ~= IRG§~yΝi۶mP7`;x ۷ou0`@HoMehF$Iꚼ.Vkvk.ڵkfӦMjڢY04 ƍCՒŋx{]:ԩSڵ6mXʲFo]vDGGMVV.]RzDf͸曩_>c>ϊFw1xuB5Yi֬N3`Zn77p{ nyL T Ial[Ν;SvЩS:t̛7B'Ne˖iӆVlmjՊ7ҥK4MRY׿yz|m+tԉ#GnZbҥ_={/mڴ rUσײP]6lM0x<v;.K}!5L׮ftp:ٵC0dY?111HKر#v pIe p#GuVNN())a$֭[iCn˅Q5/K:t`ΝjW+ $J2f˖-4iӉPgx+}*m۶]ww܁ 33I߿?up=\.8pહ2uTnoPի}4W{S׽AeY&>>?CXJ㯇T>;t:'NT(ZxU=¡:)[PPb o_͓O>IFFYYYcƌA;wȄ ;vwyŋǨQj̟?sѨQ#ONNqqqݻVʞ={n(//iӦt֍"̙Ñ#Gj4oޜiݺ5 ߟロX,X@QQz"**Jm\4Xc2a-[O< 8y$&TYSv U~#h?>. ѣy'>|xz1@K=ǏW{HdYf 0ٳgoxGԥؼy3=z`ȑ>=# 8p[nyΝ?`0:uТE u4nܘO?3g\V\~J;NuHTut8zKj>{iBB۷o;.\ɓ'HIIaz뭜8q)Soc٘0aڃhBک(w8ۗݻIzon7,Cc0@z(ٖ[9nZ4""B}NNN]vߟzUG3obccy0Ȳb?V{ VnY0XhZgp CRRqqqe5Zŋ/&MBѰrJN<_͸qڵ+}ӦMofժUh.KWsQ^^$I=Cqq1Wl6i޼9ZF#$// ?#ϟgt֍Ν;rJiTT[lv~x<8N"""sͫVJKKY|9|͚5ӬZٳgӨQ#JKKYr%EEE5үv)5-PݴiS}Q^~}yOScPVXѣGq\ѩS' @LLLҪP| 2$]dYjIAev;'NtRVVܹsiժ7pjo߾O|7ҤI222ő#G* )̙.vI֭[̙37n~98NΜ9`M64/T'?aÆQZZJVV?3;wnݺL<~2nf>h4hPvѣG)--EeWKeiڴ)v"))s!2#`CAO3qD} 9uF˖-2dK.&syPUZtɒ% <'N`W^ m8yvy} GfƌFm}_,/^񐘘ŋ @:<$&&ҲeKV嫯R]<={$&&ӧOI8vSRR?w7|SU}W/J}p8ѣCqqukfp̙3rxر:3;;mѸqcOyTJ+ǎcҤI,[LCJcrCKqqqƪ~< 2ǎҥKۇdjSi4~3sJ1,{= ³>KBB.\`՜8q܏R| :a={Ѩ|?h={6&QFw\|ղ޺tڕwh4*})iiix<RSSIS`M*ja680i$Nʲeԡj歏w`ӚnW󲷖m(rrr2e 'Ndҥf3f 4`Ϟ=̚5 1c`4={6eee|g:t^O׮]2dHޡtjDEEt:t >þ}ضmZIX+o߾h4>#GХKRSSR'.YFżdꫯ)--%99Ǔw}ǿ/.^`M69*u }(uu8N(++[oUVn.\jx<֯_O.]p:=zTU\\*Tr{f3Nbʔ)7+VPXXHff&}PM>o?FRpYh4,\Whbx5f**k9? nSTTDDD#GT]eBPyN:`ܸq >}̟8o?cL>=7vZ0Lߟ{'`ڂ$IhiKDQQviժ;vDѐIaa!O>̙e4zhV+fBӣGU7]לNgWoEEE~j UX,L>"6n@),,j{ҦMMiժU={_~O?I&K甔j*ƍǼyx75d}.\>xx7rQn] ElnVUkSUISePE0mׯОlf<,_ٳg_v@p-LIԊRFnڴ[2b5MܴiSz͙3gD2vؠFШb־}x)--r-~}ѭ[7u2ȑ# U>GөǏuş2͕Jʏ? /!C%Jo`С|k֬Ft:}]֭… y駙6mZ oF#M6l۶^zk*=Tݞ<AF_y Gp*5 >>im@)x}h6zh5S_Ol{2j(uСCCÆ h4:t"##qݤ׿;3DիGYYQzyƓ2i95-K6m۶1vXL&fxŮSNs%t:?0?sXV RW@FTTq[nn.>zIi+K 9ھc ʪ4KEEEAGP* J{'1  &5Ah@0SP-O2_[C'wL:uh͹spAG#F+߻1rx7$ϳxbzŭު6m((gee?вeK:uī /}{?7;JFlAAwW\\,L:'2(2]tO?`ZiժOmh4qRYsUFmxJkM&V?:y?L@(@BSe-ЪABLLܸ*}yueHdYҥKtY/h41At:6mOS*f<.]RiYRv'Wk.֬YCnn:Zͯyw*/JRuwܡnvd6q:4mڔ: I6l7焛WQ@8T_Un7ƍGqJJJd2l2F6Y5kV*/Ov <K]TW:u0e/_… iԨÆ S|j+넇T>~?Z8y9rdCjPQa?3L=?#}oV?=# {A(=IKKS撒~U5\M?СCiF7&dVJ@~iQʺr?RTIJJꮍM4ARTTDvv6vbtMH_/^̞={pjϷRo>|IBBƧeIkΝ;G&M|+++gĉy ˔)S|J@̉e<Zd~gǴaÆhZGiYˣ͛#9<'W\W&~F&2O?OCICCq5Qʢ2wcKFؾ};=PVUK/JتPviӦ r %K0cƌTDQtKv9{,K㏫5[艊Gr/1͔QVVViP(P3tRΟ?}ݧtڕO>#Gp9~u ;`ǎG%==Ih߾=fn7ڵCQZZze`0лwo 5Lnn./^T{!X,>| \󥥥eeeUAYy'YhSNbO~~n2j1~xlСC>Cq\SuR'F;ۚ*Ν;?t:zYU(w}0v1 ӇbРAjIUeiӦ[|[M\\~:&I!..|7xŰaׯ_"ɕmۖիWۤ /T7ZG$cr@Xn͚5S&EU*YX ͛7W, C Qvu֡h7͛7oVxJE$bccy|e0*++V򛋋#22RmL(= :t:˫gϪquEu7st: ҃p8t 0'۶m#33wuwUҬ|Vz%Ib޽hZ6l~[Iz-(Jo,D"e1e ^ŋ`zxU$"##1cu֭@%W))),]aÆawΟ'6m3mٸ?~@Դ,)-nSKnd2qŀ,} gaȑݻ3g~7nL˖-$'NpIRSSiݺڻO?!IcРA\.f̘ӧ}iiiL2%hܼ `yM?VVZSxג$1k,;qu7R7nϺ'%]ol IDATRn/S8yd2(YVl6[E(m9N}X,.AmbΜ95haR(P{?96PRrg]vzNp\0{y(C vvSPP0ze5߰a6l dС<ۅFᩧ5yǎ+x xoM>!CUOJBP)HP:*\/b2h޼9999AHgjC6m`x/ԩ:Y5غ,DjP+h"V\ŋՆe 7@SoתP< Q@#.%PTTDNN:9cǎrwRPP}^4 K,!!!m۶_jU Vz)tEdd$;wV6͵l{?#F0x`9޽{9s VFC||fq>$F^akײP͂ _oI@:dddzjbbbZ|Ȳ̙3gLIݻꇺw^^|E4 s!==uEkU`HDNؾ};V5`駟a M7Dݺu6lZ&"8޽{Y|9t:<&2=z8RcuWIؤ/0 vmc=5J˖-9~x؍P@6 V@m[g ӹ馛_j{753flt-R=>S.\W_} nޛkYpfK7ul%o64hk׮h4R~}dYrҤIgou̞=Fӧ=zv עhҤ z+?C@WH&%%XFO#fQ\\L~~>eeeJ=PtϞ=/{bBeͻɲY~}@Yk]HR{7}рhڀ)=}^׫ 4hPʮرcjæh쭹~ra̙_#F\#5CeV+ ` l+xSp5h4̝;x_W^yO]jӻu'C^xi֬$3j(Xv-?0 Y kYP9X4aN>͡Cؽ{7;v`ǎ޽Cq;~8 eg"eL(-1oپ~򫨴K$Eb$ee#1{k1}}<̽~ιgrstꦃN߾}>*Iev }C??p /PVo K~mTvm׸we]f}? 4(tP$III_Y'5a„"Gvv^x5郙6MM4.&t;'//OUGYgxY~UUYqniӦ>}jժt蹻+&&F'Nӧ ŭ*$NԩS\o;*X4hP{'ǀKٳe1b}E.?PKҁ]tixի??~#.Nll^|G 5jhڴiUjW(JUe>W~pٯY.r)88X:|6oެ늛E֪Jr!͚5:PR>}_~6ňkJ2gOj۶m jϞ=[<==_!l% ͛\S-͚5ӿBo:q℮/RV-nZ6l89}~WhĉBPGY/222m۶iڰavڥӧO+;;PWPmV;wTZZy_)wT^5%kXXؤvcvQnpڵKCuQl'NUV^F}v>KŌQ~| ;9}UUCIu 7ɓJHH(teݒujС '&&FG}@jմxb]uU+q;wO?6Q_]s5ӧKIrrvڥ[o%ٺuϟoz")44T~jԨQm)EZreҸq4p@M>]6MSVVV"8^^^s|_Cyyy:p>#=z뭷T^ o.]FxBBΜ9}StW:-YfiÆ Un4rH#֎-mٌ ͙3G6lЙ3g\G$W4|p߿Μ9iӦ)&&Fu-=yxx]]]ռysFٳg駟.u?|gZlΝkK~Μ9Cj(r?}eܸqƍ7n.C̬Wƍ')>3fД)S4g%$$nvzNNNv5f+uY 4(q%w<'((8Nps+z?.26G}Z6MڴiSeYooo[򊵾88qš~QkJ_;vTtttI-\i٬#Enׁ4uT߿_\III_&Mf͚ȑ##Fh7a=쳊Tݺu5`RG{m=^z ׂ >ZڶHgwyդI̜AAAeZ.~QFٻwﮞ={^m` a._֭[W9t9D.8`FaD8`FeP-[BoJTq+}Tuwu$q.ZC СCqWrr԰aCqݻs=_~ER``n }Z:tbbb{nM8Q5R˖-%I}6l뮻Niiiڰa}]%$$hʔ)OæMtA5h,TUDx9=zTQQQըQ#M4I͚5ݧ~Z7|-[ɓ'K]4c )55UժUS-4|pmV|O-[WRRI/1c;ٳg5g}JHHP:uԭ[7=-rJҫW"S>C3gΨG?Ӻ̙NGgΜyiƍ}SJt=k/yGSllO2?ɓrssS׮]UZ5ٳG۷oѣg)<<\TرCv]O?cǎ$C=8hB}/ hΝ3g\\7ʕڻwuԩS'7xC)))"##?wIvv$nݺEoҥ:{jժ>}TxExFFO*55U#ժU뢜{mi̘1Zhf̘={?$lRvRRRvޭN:)((HǏΝ;O?) @}vy{{+77WjԨV\8l6]}rwwוW^={_~QLLڷo_mܼy6ol}ً/VJJ$[~~~ņիGCcƌ)x^^.\(I4h<<<*4@UsA"|Xlo#Iִ IKZ=zTjXs̽^xAR~;"̙3z'uV5h@3fPÆ ߗ$ 0ۡ<T5F#ѣ:sj׮-Qnn ɓ'uQկ_fVW\-ZHGŋ -d[Niiiڹsged٬o߾51q$<""B 4P\\>uE:x~7_^z _p֬Y-[C?)Dڵ{uql6]uUN2l٢Xyxx:[JyExZZۧZjIʟjX'$׭+}}}o>ըQ1iرc5yd`e&Og}VO?{瀀hB̙3jڴj֬))9sjƍZr<==U~}=,(nNxHH6nܨ+33S5kTϞ=u[S)0v]˗/w`<ϟ?_tM7vڅTEQFٻw^hZDe۷o?@l6k݆ouBWT׫Zj:qℂԼyuۊ+n:s?y\]]<Qsuuɓ'Mm&36%11QuQVVl6<(UP2~~RbYy:QYYMdeٔhj3Qvvrrrd"?_9#?W...ɑnSpZjrqqQ횁ROr$eedj n>oj395kTjjdUvm5 [򔕖'L5 UڵOMMr)U׮]u7(~ME^ꟼn*ؑ&Mhǎ󓿿&T[it/_\={VgΜQ&MLmf!cƌ&O\aÆiӦ;vl/$$D6l㣎;jԨQ^SNծ]M6YR*IZZ GᄈNصkW岳uI2224m4[Nnnn8pZzJ[~}g]aT&L=zTh޾Wl6yzz]v]19,=B/yyytzw^͝;W۷oWFFWvmС$iϞ=zWgIR5duz_4nX5nZZz2,Xk֭[ռysU PӲV\\BCCP̨k;vU}B.Mvv+{3ESLQӦMgyF'Nԫ*Il޽zꥉ'yܗ^zI 6ѣG?7Ht[_k:|>s%%%i Rddd)V*Sd6^eo_y+Z5m4=S3gN\~Υ<ߗiG];O<:u(--M7oڵkաCeeeGՠAꫯf)66VNc_UV$I~ԩ tIjӦjԨݻwԩS̴>xfffN:ݻwFjӦM,cǎQF ,YDW^y5kt 馛t7jڴi?l_W0`v\}駊Tnt7kѢEN;Y=Sѣ_coVvuСC%#F($$Dnnn^.m߾zv߿5jTn:ٳG?p=zT۶mӀ$|r ?IDATS 4?C኏mҥ۷n=NJyRӧk2du-]+I:vΜ9Cjݺnٲe˵3t뭷*,,LU\\8ݻW sGBqqqQ~[eggkٲeM6MǏG}>LTtt8~}]]VNҴi4a_^ .T\)S%Khܹ:-7hZjsYݻW%1ߺuueΊ?5}tM6mRSS+4^eo_y;ٳgd(TqF͝;WR 6h~<ڹsfΜu瞳>(=yd/믿/i%=\?+n޼Y 4Ж-[۷ooi.mݒrJEGGk͚5jܸx XBoVZ矗t^z?ЯjݷtR;Mڸq-Z hǎD*ɹߧD߿_z*qۂUvmM4I֭ӟYr{֚5kx9rDaaapIkZ!v8p@ԢE =k/Ħ)22R/")oNNz衴4}Wz'___w}믝ƈS4>}Zh-vZEDD(""B;wV^^<==5gխ[W/z!CNVfMW_}^zSh感f͚>wSt%KuZdn&yzzHoZh#Gz INGЂuĉBL:?u A 4l0=Ӛ0aBǫ+x+W,r~{Y#euqv5hРL-%=Wr`c~uXXl٢իꫯVΝꫯ*--MvҸqʴnQޗ _2`1B?l٢B?~9.Ho<)*kԨ!I:q$ p|u$իgMOIHH / &wo˵~⋥N7hZjbcc4׭[WpB]ֺ}wN`yn4sL}7k5~Bto|rM2E3f8_5ڷonF_RTTy+VpZvɒ%ٳ9Ro>iӦE˗*{*{)+Q͠ l69rc ǥ=Wo!,,L[nՖ-[ZjN:ZhWn%uWDe~_Zjk/ԷoBӴ~9#]֟'թSGM6ʕ+˵u]we]j֭g2":t蠀7NW]uz쩗_~YND~(vcǎ~PFFSQk___]wu5kRRRt {!>H3fkmCU쑰I&O?… pBkĻᆱkǏkӦM߿]]]uM7iܹJJJґ#G}yߴiudȑ#5kӶg޾WG/.uM7饗^ұcdu!%$$O:u֛iӦRSSW_YSOX_K*uQߗku-zv~9sW牔*Տ?XgVbbv222sNkx͛7~={V}Zn]h ߯ݻkȑ%+''GsU޽u 7h͚5N,hĉRcǎzʼE]_Tjj]ZgtK?*֥K"Ǭ^#ԩ4xҥj޼ZlYh{1]veC=}:P111{եKEEE}z'*<^eo_iWy#u=ܣÇ+""B~iCƏ+RCUO*))IOnoȑ#շo_ܢxxxm۶rww>_B)mQߗ^zرcjӦMSr:y睺;uW[פ}k}iРA֭nvm۶Mo\]]UZ52dv;Cv]SL)5;plFw]{v]STTg P`ŊZnG\Rٺ/.R(OԣGjĉhժU>ֲeKmݺ.VLG #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp0"0 #Èp07VXq!dIR-.vu10 #Èp0"0̭Ew޿k;*t$r1֩SΝ;G7nN>wyG&LPVVrssu1]~咤 hĈڿ.\4Jn6#GZcTVMC Qu)=ZsZ~zw$\*jݎ4c M4{ⓖUV[nݿUQDxiNvZ~Z76["\Lyzz*..N..Mog$ɊiӦYiڴi7n7o.IJNNVJJJXf͛zȺ_\222W8 *HxIN)nkѶmԹsgmܸQ]tҥKK}nVVRSSUV->???iݭZŋ˴lEuA͜9S6Mmڴ?+f*''G_ӧOk޼yfSNԯ_?9rDPڵ%???k޽{kǎ#<+$)%%E|=ծ][V@@$-WffƏ/wwwM:q'UUNG)nIq<=|ؚ/ޥKYr^^^ +6mڨe˖jڴo?2334K/d-PIRf͔Pcڱc0˓xQr)R8e'UIWdIq<<GرfϞͲSԡC^+6s4{l}'1b|||\+_ufĉua۷O ,P``\s^^^SݽB; *t o|+𔧇Gu)22RW_}um۶9Ts]\\t}ցᡐȬnڵkպu K 6Ԗ-[$I}eddɓjԨz;SrwwWV|rk٤$yzzANlٲ[wwwkN}vz|p͛7Ocǎ:wHEEE)::Z/>yEi튈PƍKܖݻkرԩSK,*5>t2-m^֨NS(?JeӶ):"\8nnn⒙T(—Mȩ(ǝg+zJ+W׬QC+; #G*~RPoаv\ *tBGaD8`FaD8`&Iz;K)j>O3IENDB`modem-manager-gui-0.0.19.1/po/es.po000664 001750 001750 00000112630 13261704760 016557 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Yoel CM , 2014-2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Spanish (http://www.transifex.com/ethereal/modem-manager-gui/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "SMS no leídos" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Mensajes no leídos" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Error al añadir un contacto" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Eliminar contacto" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "¿Realmente desea eliminar el contacto?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Error eliminando el contacto" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Contacto no eliminado del dispositivo" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Contacto no seleccionado" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Contactos del Modem" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "Contactos de GNOME" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "Contactos de KDE" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "email" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Grupo" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Error abriendo el dispositivo" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersión:%s Puerto:%s Tipo:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Seleccionado" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Dispositivo" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "El modem esta conectado ahora. Por favor, desconéctelo para escanear." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Error del dispositivo" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operador" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "número para enviar SMS inválido\nSolo pueden usarse números de entre\n2 a 20 dígitos " #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Texto de SMS inválido\nEscriba el texto a enviar" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Número incorrecto o dispositivo no disponible" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Desconocido" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Aplicación" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protocolo" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Estado" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Buffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Puerto" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Destino" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tráfico: %s, el limite es: %s\nTiempo: %s, el limite es: %s\nPor favor revise los parámetros introducidos y vuelva a intentarlo." #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Valores de tráfico y tiempo erróneos" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tráfico: %s, el limite es: %s\nPor favor, revise los parámetros introducidos e inténtelo de nuevo" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Valor de tráfico limite inválido." #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tiempo: %s, el limite es: %s Tiempo: %s, el limite es: %s Por favor revise los parámetros introducidos y vuelva a intentarlo." #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Valor de tiempo limite inválido." #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "segundos" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "velocidad RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "velocidad TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parametro" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Valor" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Datos recibidos" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Datos enviados" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Velocidad recibida" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Velocidad enviada" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Tiempo de sesión" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Tráfico restante" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Tiempo restante" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/man/uk/000775 001750 001750 00000000000 13261703575 016364 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/packages/debian/modem-manager-gui.install000664 001750 001750 00000000230 13261703575 025050 0ustar00alexalex000000 000000 usr/bin usr/lib usr/share/applications usr/share/icons usr/share/locale usr/share/man usr/share/metainfo usr/share/modem-manager-gui usr/share/polkit-1 modem-manager-gui-0.0.19.1/resources/pixmaps/scan-tb.png000664 001750 001750 00000004516 13261703575 022730 0ustar00alexalex000000 000000 PNG  IHDR szzsRGBbKGD pHYs  tIME -686IDATXÕolTU;i a]KRg**&vݺ`JL˲M6Mv1Y1D jEXi0.ܡ-h;Rc3PIn{}}h4D"l8 ø0R[n]SJ~JӴiN2<>.&&&H&g~_M<]OP u`kk+<⺮0R|>T,d2LӼ{(s]ߺuRJ ԏ:^Y4&&&ӧR7iB,R)Y~=pxAtb u]/,s<\)uiilldʕ,YqHR$ n޼I>_QB500 ,}<WIjBMpXwb :;;K'9I K)uݵx D"?c-H>Kee%J)fff8y$ׯ_ Bחի|!Jb&RJ (Jj`WBQ^@48|0n::::z{{ǏSYYI]]匏8㠔L˲nH$ar9s6nH__>V,erTWW+u(@ ,g  4O>Q!ϳqFdhh۶r =iRyf,¶mlۦBJCa„R@ eY(ضm`s'x]ym/_F4CJ?m^,ky<>gϞ7 ͢ l&Ӄ8۷;wx9d22G:˲4 u]mVX/N1 qhhh_`0H]]nҥK gmیy۳Dz,V`R 0ֆR>)%۷o穧駟Ʋ,vލ8 Ή@ T* (q\#eYEJIUUVB4bΝ\p۶Bk.ZZZ,\.' :.]²,jjjRz߾}YlFB\Guhii)%lc;wR266F8DZc/H$_d2I*҂d2r\Iԁau[rrr9*++ĉH)|8泥ݻwS^^?Ϻuشi7oFu,Tfr ^{2z҅']R",fggYlsssTUU|rFFFr ىb\x-[j*H)ٳgǎ}!drr=Px$]F33{w|;-wH$! 4͟Xc_9sܲa虮4mH񶹹O>-k}, Bhhh`0h[5H$˗lvv^7B1w B8뷚RcDǃo3!DR)e˖Ǐ1"*X4##BBJ"ZnjjBccGѹKQJ/A>"ʴ" MCKK 8x2LI@Db1&<מ \}>!躎A gs C)/Oe hGGGFLĉ' D,<On޼Y2cvI&Bs@D"ضmF_ 0== "{mOu,--!ͮ񿳵qݻ(v8pe w‚3p^/3l(EǏ3ιG[h~UUm2ÇBgg'oߎx4>|˲V"bːRp?S]] )eBD"C`Yp=twwcϞ=SSS`h^ֲ,p)LnZYY2r9>H)anݺz4448)=v񠿿tڱc4MiQg۹'ODMM t]Ǎ7PQQgOiuoF*B0DWWWB^W~:r\R˲{n簉FXXXs}}}HӸ~:<:::P[[8Aحi6{crqiqTVVsιtk.9rsssF4 yvVJ 8Ͳ7sNabbիpsgY8ޫ^|>0p5TWWٳ, J.ŋi(R6mڄ.(`&4jcZZZrkY^zuX^^Foo锬n @Nit<a @6uxQ6eDZ˲Vy^߽{0Ԅ@ 7fN0skWgU)s7Lě7o@DR"9LRlX szR`FA:M&C,'fMƾM\fy)5_bBDdc(zJ)#5 D"`V)Ŋ.UNr . V kU4CKp^}b5MC"(] eˉ_o=D4#c 7ou4C"pWJaǎ8ŲCB|fPgEKK &''1FO5rCDDd9D"mD4QO,!ɼM![O- @QLNN !BD $B( Source: https://linuxonly.ru/page/modem-manager-gui Files: * Copyright: 2012-2018 Alex License: GPL-3.0+ Files: appdata/modem-manager-gui.appdata.xml.in Copyright: 2012-2018 Alex License: CC0-1.0 Files: appdata/its/appdata.its appdata/its/appdata.loc Copyright: 2013 Richard Hughes License: GPL-2.0+ Comment: available in package appdata-tools >= 0.18 or from: http://people.freedesktop.org/~hughsient/appdata/ Files: polkit/its/polkit.its polkit/its/polkit.loc Copyright: 2008-2011 Red Hat, Inc. License: LGPL-2.0+ Comment: available in package policykit-1 >= 0.105 Files: help/* Copyright: 2012-2018 Alex 2013-2014 Mario Blättermann License: CC-BY-SA-3.0 Files: resources/modem-manager-gui.png resources/modem-manager-gui.svg resources/modem-manager-gui-symbolic.svg Copyright: 2008 Yogesh Kanitkar License: CC0-1.0 Files: resources/pixmaps/*-tb.png Copyright: 2010 Michal Konstantynowicz / shokunin License: CC0-1.0 Files: resources/pixmaps/sms-*.png Copyright: 2008 LlubNek License: CC0-1.0 Files: resources/pixmaps/message-*.png Copyright: 2013 Umidjon Almasov License: GPL-3.0+ Files: resources/pixmaps/signal-*.png Copyright: 2011 Andre Felipe J Souza License: GPL-2.0 Comment: available in the Dreamlinux Icon Theme for XFCE/Gnome http://dreamlinux.info/ Files: resources/sounds/message.ogg Copyright: 2012 Kastenfrosch License: CC0-1.0 Files: debian/* Copyright: 2012 Alex 2013-2018 Graham Inggs License: GPL-3.0+ License: GPL-3.0+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: GPL-2.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". License: GPL-2.0 This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". License: LGPL-2.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2". License: CC0-1.0 Statement of Purpose . The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). . Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. . For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. . 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: . i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer (s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. . 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and a ssociated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. . 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. . 4. Limitations and Disclaimers. . a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. License: CC-BY-SA-3.0 CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. . License . THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. . BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. . 1. Definitions "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. . 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. . 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: . to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; to Distribute and Publicly Perform the Work including as incorporated in Collections; and, to Distribute and Publicly Perform Adaptations. . For the avoidance of doubt: Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. . The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. . 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: . You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. . 5. Representations, Warranties and Disclaimer . UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. . 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. . 7. Termination . This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. . 8. Miscellaneous . Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. modem-manager-gui-0.0.19.1/resources/pixmaps/message-received.png000664 001750 001750 00000002115 13261703575 024602 0ustar00alexalex000000 000000 PNG  IHDR-bKGD pHYsVnVn Ѱ(tIME )c AIDAT8˅hU?{ޭ]732 .u$GF * a*iAeGȲ0i斻^w޻{nӉ9p|GzT*5ZaO?'{Fv{vvo"BA.]$\N٬dY[,^k_cۖζ%|^.^(.\.sI{{|aLsaG^ ߌO$% CeCEc^Yt(Ͽ-pϮm3Zx|An[k.quSa9q$Η_c;ncJ===TTT`UAHk뢹eڱ/mH}}NX,Eab} Search for available networks. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

Network Search

Modem Manager GUI can be used to search available mobile networks. Click on the Scan button in the toolbar.

Network search window of Modem Manager GUI.

If one mobile network appears more than once in the list, this mobile network use different broadcasting standards. It is obvioius that you can't scan mobile networks using broadcasting standards that your modem doesn't support.

modem-manager-gui-0.0.19.1/help/C/figures/ussd-window.png000664 001750 001750 00000107076 13261703575 022754 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxyxE?=W&WHS@QEFEA9(!OqU<{ZD%(. \"@k9۽3$˜9s8rڵ_~4oޜ}iӦ x(D] W,SVVQFHtt4jEYYY@ $&&={p!7n̊+P;dzmٺu+_5Ǐ 55СCͧ~O?hG񺧢(_m6rrrHHH[nԺ Aسg 55z-[|rn7;wkHqU}O8}4VLF6l-[J޽{9x )))'\QMlb iS{rݻ9|0 Ў{^j*&O޽{С{^cժUy-o;_zɳ<,[(^bccYd /n+_5$$$3<Ú5kر#%%%X~編pu<@ӦMٳg^r/^LJJ 111ddd0s*Yh| V[okª ^=5\P/7o#""3gΐÙ3g8s tH'6m. Illx͜:ukӧټy׾XN'.Jխ2ǫ+E̞=5kvYnfWE>T& ݮ5D \ԫW:~ztӇtmYd dĉ|W,Y;(6l#Gɓ<ӧO#I[FQZl޽{ٿ?_vA7n-fp5p1>L.]k~tBݺu(..ke׮] 7ܠ]Oxby222$gݺu 21cpq Tmٓ7xá4#//$Y0rHs {ބO Etb6۾}; ,gN:={~MҮ];͎ riׅ"_v3uTOL„ ^TW~N0L6/0j(nvBgWu*p433"##1U)j n/k.zٳ4h;eHvv6fKNAAPޠ-\}*'++kh4wԩ~ P)))deeiF<9ԩS iڶmӧӓDΜ9éS}w;w:W{Z +I4vk'Nȇ~[o#<ܹsiܸ1O>$V`!&nf͚ʼn'4iSNeԩ3YP]Vӽ{w֬YCΝ*ɇjb6i޼9111мysf3ClbۅTEUV$''0`|ԫWk@ݺu}jرc(ѣGթSXf \;+Pߵk0|po߮Vfil"Gҙ*{@&(ƒ>H^*C}?};P2VClb[z=$p84 ?~<7fԩ4hЀgyb$Cr9z(:\s 'Oɓ|':ՕnWfڵt֍7bŊ T&b٨WbWILLAbWL2|ׯŅ-Æ 7o%++ Iزe Pn`}|G,YlPWر# 4رc 8n ɓ'9tz6v*<vߓɾ}_"O>̘1ŋ_0cذal۶0~xڶmc^h/ {<^GSZZJddױ~iLϯPV+N=$SNa4)--`0ky9E?̼y5j;wUVL6 EQ)lCՌ e.rȍ@ 2P0ׯOii=zVZ̙3?6m#ЪU+m￟";رcyW4yٳg石n:6l@XXɌ9\\+orĉXPT9 ˗/3vfϞ͂ Xz5;wDQ֭=zt YYp6;N&Mڵ+EEEu)j&$aXWPPĉ)(( """H~6m1-PJb4iӦWKu?~qѶm[7n;w [L>t]w)~߃(**B$6m_*:::dYѬY3Μ9x t<228L&PnP{IDRRQQQ(Bnn.k뉏b`4eIii)(R! JfMII!<<"Μ9s^Fڵ9ZHz^(i E"!!DEaL0_TKg IqqqDEEinSRR%'66+&:i/pq4fq)RSS+]bOJJfy Zl6kctB?a„N" III@ Ett)^|EnV ֭#//֭[ob.uU^l!PnǏSvm,K5Y 뉊Lo2҂@pqX,ԯ_~Iݺu{:t(:y*Fuк\.?N:uk۵u{%ȯ֊!La #""3gb6$ Iqqf"Abb"&L°X,qZ^zDEEaCjj|l@ `\.ǎIϧ\.p∏ #\ @pAlt:VE㻴n$U^1S @ *,_5M @ a @ a @ /m,@ ..@ \dtִ@ Iq(@ EƠN4.@ .<$p@ brIQ=ʈ#p:ÇC!e/5}R'E @A(K.e…5Ν;$L4tL&7fҥ_Va0jZ¼lْgy5z(]3_]Pϝ;ҩ%i@ \z$I*7+Ce~'5jĺuB6 v#E^^^R|QW_yNJ̗|W7=2@ $I{nx饗x'8q׎vk~WIJJ歷`ԨQ <ƍ3i$fϞd>={`4ر#Ds&MYp!0rHի5kX|9%%%X,z]wUee:h4=?{O^kUy饗*gϞJ(^~΂ ضmno!C`4Ucdv;:t`С+@ 0 _n;v$!!뮻k2|pxzz:YYYԭ[Ǐ#2.&L/d2QZZʁyxg͚$I̞=ժ{Z8֭[yw'==^x|̙믿N۶m)**@M|G ΝKII vLMbovA4gl63gD$^}U/^̠ASӷk.fΜzٲew}$m@ 403??۷ӹsgn7]veӦMDƦM5j|bccjj2*eeeرÇp80L<lذ#FPRRB^@ӡԩSnRSSI)cǎeȑڶh"JKKٹs'Æ nc20`@E4璞W_}U;fظq#iii\.N'w?s@yCM6@ At`뉍krѾ}{f͚Ŗ-[ԩ(BLL . @R @dd$,T ӎt:nX^|E/^̼yhР<͚5"{͛7+&fQZZ{_MÆ l$Ξ=KJJ YYY$&&VHL$:n&dY/dԩL:5'??otBBBfggQY%=4c jժu]V%@ 8Tᅮӵ_8qD/FQ233'#J.CUA!0,SVVFvv6wȑ#9sՊl6@rr2-ZYfDDD`2.u/+D$!=C?X|fܤyT?33ALL CYf眆Ek֬ASnݠvl–-[0zEJJ˅"33YѣGZPe=Tɓ'ٰaǎC$j׮Mbb"QQQf$ItbZ'++lj׮͍7-rUZ"ʘ@ 7D2dsϝ~sr 7p뭷"2,W( FgϲvZ, O?.1D&ZHjժ;wzs҇`$22Bj; Cr,X֭[HNNbPE|Qנ(,,d8FyUL2&|y뭷o /=A^ì_g}-ZT+=WWΗ/_N||<\.>cFyk ǜ_RWcC{vѣFk\'wȁزe Ço8Ĉ2&ooݺ˷v[/l5&MбcG*OS;N"##iѢ_ޒʨ}_u~"""X,1T9Ny󪏯hԩuy+++.뫵 <ǮD=ԩSL2n6-tn7vXqW|xE2Y|TM6Uo`dѴoߞ x-{1ʹoN֭[)++ 8(Ӈ> Lv+輲Ʀwީ>dYcŊѼy B(*eH$t:ׄ2f3 4 %%hn79rLG5M())_)))4nܘuv $ NKFڷo_v; xTViӦ fÇsN9ʘ@p#IÕgyJ>3DEEqkufҴ`00gJKK62>NǪUSwuQ{r5א, 8(QZZJ||<=z`j*ÉfŊY:ЪU!2{n6o \:W=olٲeߠ1EQdĈHr ?}l޼ꌛHzLenJ֭YvfRSm =t:F^̙3,XY3f ?PT~}G}.g=رclݺ-[zX*N[nuDFF޽{)((Ќuшbqp ԭ[~uy+22ȏ?Ȁ 5EQhܸ1No^n7^{-;vmeL #IU\/qqqvu]]g&''Gi֬-[dO͛7g…NW\p|u^N8@߮P p۳~-,r-[A_dYe˖~w\{}5k[/K}Be֗իWvZf3,cq\Pnr|ː?=8Nz)t:?۷o'<<ѣGc4$ ֮]$Ii:8uEEElْG}Yfyg( QQQH ۗN:Ѯ];v;sѣ^ƍ|8z9sp)4hΝ;9r111tkBii)۷o'&&ݮ壬Fqm̙3ٿ?z&MЯ_?>޽{swܹsˣ[nDDDhvk׮%K0j(Ǝ Ex;vWՑI>#}3g. ˆ#xgϞtI&޺nE?d2-voԩS̘1_~Xaɓt>}+WriM^ݵ~WeL&iӦvmzCDGGc6Qy}NMOOi)ϟ{G).. ?=$&&Cvv6ׯY`慜0a:KrQ;FMǎϘ,oW Ay9[d rCӧQQQʫJUŖ'\HB a?X,^S-(ng8NJJJ5k͛7kٓ+WLÆ IKKcƌ^F'߿BUʗ_~dBe>ŋ/tPq:枳O1999| 4bA_]6'Nߦn}z=T#\%ΝN'o/_nU8p('AFغu+:u EQp8AC5܃A(G?~ŕVرcL4ѣGdrrrHOO租~ ߲qW矣?2[t:c̘18: <:fi:T V>sn'//0 OR\\?=z4gϞA'/?0o_yU}v 5IЅj={V sus4oޜvڡHOO'''\̷11bL6 HΝIMMvbٲeAWa˖-l6E!)) łnk)++Zٳ@ bQ5 ,\SRXXV@9sIʄbl6t:9z(6M}d߾}E5 vp8Dp8lV#JRݾ};׿Xh:.N|Ғ%Kߋ-J]sݔVh$IBre-Ժω'ر#eee^aZY V :U)_mݺuʫγS Ti`fII6g\:N]v-7ndСZU~oԨݻwĉ5jTe:uUll,%%%@y<ƍIKKw}@y-ܢ lQEl66mĨQX,K|||QuSpݕ.;sudU_y8p6z\ƨ/&m۶?o/4#2 }]j׮ͼyx'mjtKԮ]7|>Gdd$V'>X>:Suy5RoGW^ڋSVVƎ;>|6t`ׯN^|q$''.]@:u())a߾} ˫OQT.kk|VX 0 <!2y`mjDDDhfeffRVV楏>F:dbsi~a͠L'e)///PLZqL&iرZ{ ThOVk@> >+KxO΃`E Wg@PS9E4\.o$qi,X@nݸ馛4#P><{eÆ 4k֌+syyF*={Vp7qDxNս{w>̾}())oʊҤ~Vv8&Mŋ7o 4`РAڠPuOQbbbxWX,k+C,++#223grui ExLR :}[^^ӧO7yݻwg?~V E'Mڵ6(|n_hw_=C3|˷P:Laa!~)_}ƍx(RKce9iZxy|e0Tު@ܠU{(DEEi4S(Ю];E/@1tPKq:L<٫ީQȲFխK(L~dffjUo~u#sN%W-o/eP~bG8N5jD۶m$իW{9 TPtRU#2#X]s݌=ګ)11¢E>|WEaڴiS2 <ZU3,"QUV)$ e% {=#Z|wHJJbذavAyO2qDiٲ%}ݬ\R~<6l@۶mQE̘1@M1h޼9F۷ctObb"$q)6l%nZlɍ7ވ,|L2@`:s7jsϪx'o`2>}:N~<jAe:Rz˫ZAWmڴaƌԭ[$χn 9 ?ٳxx+Kݺu999$&&j].Ջ> ؾ};Z.+C5z^~vܙ-[( gΜ!''&MCQV-̙ӧ1L^\{rSN<P@kOxHRjZUԙaM߾}z!]\Hg^Hg盰0nf-ZDYYyyy|7#uz8p[bX岲2t߿ƌg}Ɛ!CHMME$ڴiCvv6nZn`RFBFDD`Zٷos=gݪKk())ѣfZnngX,իDŽ ׯcǎ yƍG ?>k֬zV+6M I0"X]S# &M2ε^_Wm`fyBk,3j(V^),,ʝB_}wv}RQVG@E0Wg@PS9%%%LvV,Yƍ^ՙšCVDDqٌnÇSRRG]3fvZjѶm[f̘ 0j(ϟ/j%>>^zyҥ .AVQ1rHϟ믿jVZ3(²e˴)))t:z0m1O_M/dffkQRRBDD_=O>_]%%%jOԩCvvWT?$^x~WӦM9YYeGy%K0}tJKKk׮tU[nn.)--l6ӢE F/=iݺ5iiiSgzR S{O$YQm :_eŊ4nX>PTΔ)S]vO/:߉'xx1ڹ2yg*Ml RmgNG\\,/_PPL 1j((( ##>}T|Tz[mY۷oTum^^zBy,'{lEs] |(1jb… 4w}իWөS'vZ.oƵ^˘1chժUCr_xQݺ^Q ]`۱X,ՙ^w^} sO2l0vԩSٹs'\s ͚5C$>ѣGINNEwG$zEq\L2Ǐ{)))L4)`< Ouʚ;}7^g{-IӦMGz<UѣUT'ʴ6*P} ,Y,mRl6[E0s:U"c IDAT~v 53gr:%Zaqth^mգzou%{FIv*rB^XAQGq{Pn|LVcn[ @:_z5Wk"I<=7nרPt.˲`Ci]R ?E,ݯ_\G֭WQ6OԴZ/N'OLgX?B&,k=j {ҫW/n\.}Rݺ_'Bӫ?RSSJ MOObп^}U֭[V\^`08y$ǎzI7oڵ+qqqk^t9h*+7uI3Re.]b{2=[o1p@ xW>R騲"nS )E˖-诋19c:u )WܳKҳ?۷SsB&M8rHP}@Wl,] h0 Ʃ\EQ.RJUP0}Cr2`ώ;8qt:bcciذ!ڵ^zZرc^(,,/OFiIP1 p_1^5 !IUXWŜml^tv9!z0ߟ˗c6[.C~iذ3orJZht?~#Fx-'r9! 6䦛nbÆ ~CbƌDFFRV-1^Ff,JJJ0

t׮]y`Buͳ)ªUXjs /.*Ը2&ʑ*,[2j( z+Wuo4Uyz{ /t`Sus5d߾}̜9]ƥʐ!CEQ(--O>,[ 9tPOtz$25k{/:/2}eڵ|gː'zP_2$2ݺu'qHIIIad2ߒaÆUwTTQٳm۶??m6É'^n/}: hs!g(2&;vcUL&MT{[$n\Mff|eeem5jޝGUOVȂ,FV"uE)YP EPS@R-dQbVM!%E,Ղ "%$!f:23wBrz> {9gΝyϝ3^J*}WJ?r)M2E^( ㏗Izjc>mذa;k]ʛ{j4mڴ~ iR={TbbU yf?{JU@jԺukmڴI999گ_?g@kϝ()l6UZU͛7֭[{ѳgOuڵCu<?~\M4{km yl]}ՕDDD衇ɓ'uرK)5kռy>;fͲ1ѿK.ŋ]A(ZhG}Tї\kɵ+Wg}_~e-YuƓ@SN<_I233uV=#gZCVڰa6mt]}VR5nX|/v`ppBFׯ_?oWي~Tre˖ڣt>իUV-ըQu#;v͛}vW%l馛ԴiS=\r9-yCjC|޽{8B.]榛nR&Mtw+::ur0YhQهp,EFFjڻwԩq`S6Ӛ9/1a5lPz+EvL5mTgIEG \нoHH7߬&Mܹs\p%v'PXXL5mT? v?µU%)//O]TB8.{:sLEW\K"I]"IǏz 35jTz;wĜp8B8`!03Kpim߾]'OD:uʭhիWO{)/pB9̻pըQCիW/Uo^L~~٣*UvVW*!á`EGG6Ο?'N^z /\7u]W.uٳ/F[j婰PSժUev;rFPPΞ=B'ԢE EFF*//\Mdd6m?VE/pfRJ WPP!nWaaany@*U(Zp8TR%nE" ᑑ $@qv-l6J/\pSͼs8 /UTd.B QPP8 nf3rP4G+ri]J%ptPZAAA ^J[3(Vd-m/Ka&G/V<\O(/<;vP|| Wk_ʑJ}$|ݚ0aeFo߾]׺9?T*~}@رCVJJG'Oӵm6effꫯuݻw}:tFwyG111ݻwr><}{`ܱc~iUTc{Gm;5jH֭Snno߮~ZKdγǔE%iΝ={Jj׮~e˖o vJNGy-X@^yKx_|*WK aÆj޼mjʔ)pfҁ'(33SGVZԱcGK駟ԢE l6m۶MC a yjkI:u]z]vv]XXM((zgիW/lڱcrrrȹ{2Rrek߾}.\ hȐ!}(99oV&M>^\}gϞ֭`9eeeiÆ gj׮]6m֮]={ɓr80akYͦ|v/_W~j4vX%''?V ԧO2Q(xRR$i풤۷חIELgeer M6{f<3`}N`b#Vxi+<(??_'OT44kԨv!u0((H'O̙35uT:~ 䱎3[:UZծP婰0v_3'[oU>}h"=îN>#h;98q5O̥9Ro/I͚5Sf͔˗7ٳ5vmh:urڵk?ڡ=.I۷T{);;[;vTaA<P@ysrrJ<39rUcǎs/y03;GEEgϞzgp8t 7H.\Zjֱlvykw0STF }\ZlŋٳSNi͒V}_l>}㇆111RRRRp8t1-]O8͛7+//O!!!GV1r-//5ϩ@yyyl Qbb?+33Sg}.]Xzfi͚5={ׯKj֬֬Y5koܸqƍ7s7SS4iR.SPM(>'-""B͛7… 'OO?X3:t ?z>#9rDv]gΜѲetwpRJz[oСC;vt̠ =裚;wuAo&Nϫzj۶k!ChΜ96ljԨ~X{)pHEiŊ_~a͝;׵ tRےuWVM;wɓUPPܣ^VfiӦzH7HFӧGQXXz.]TCxl6M6@CT˛3$?>']zpշo_Ĩ{z뭷. ժUS>}*??_ zWTIرcHu]0ak1ch9rt׫s%ppnJ6rHG||5jdy>T1!33SvRBB*W.(v|۶m.m*** ޽{{0((5m؝n8wxxeUPP0?޵%Iaaa<籭P}'WHcm`l69E,sdQfs=??z>_v];wTjjj`G¯% ,Qҩ}6]n_*KZ777>g .~^^׋G˻jz:‹!pkAidWJNE۟2~~_O>1ɀ9C8G@Y0%Js$^.~% p+f 7wfK튮?VF/۩ Jr=n=Qg =C.Bx1.d9:bEY ^^LHHvrss]9C_ppV։ԉ'TZ5fĉ xNxE"*ͦ(88X9nb;6-ujƍ{UFrcq6mڤu*88z]o^fSƍqFVtuUe˖,B넇+&&FCV7oU~}(<Hrq?y^ymVCO>@RMGllsJɽ͛-/#I}}ݧHGr֭>}O> 0!l2wQJ4g?isI"""\9̴$3FkV5fs3fƌhrOTLI_MP:{]9L&o߾]sw}PJ}vڵk+==T}ݒM6s}]wY^O>JJJ$o^qqqlݻ7SQp H?&Me˴qFIK/$I߿2221cf)==]!!!0`eƌN˗/ׄ l28p@cǎ-feCxoٲ#Kgoڴ{=͞=[} 2uzC+8˿[~A˺I@9:Tt]իe IDATap0B8`O?ׅ Loc*//BGَg_e~,,mRhEx+6[-q{{+a] uh~ғO>ʕ+Mjر馛ʼe)//OGݻ0q2d7n,I /mۖX?~[;wTHHWڵ]ˬZJ ,ѣGUZ5;VqqqOFF=kܸq/T|}_).77WӦMSjjBBBԳgO <˟8qBSL֭[ 6(88r;1 .eZkAEJJJ/Mޥ&WYc;SFRmJcWB+Z(==]WVZ4qIJW ѣ|riŊ[4rȋu/==kpF͛+%%E˖-Sʕ="99Yɓ [n)ih9{o>-[L׊+bŊR/ogy}ѕ8&Q1y-(Iyv҅ tw6\iҥ /PU撧+11QwvݷtR[j߾y>}}-髯ң>8 8P{uduUqqqܹ>c RF\Gzvl6ԩS=zTzGHuU;wt-3k,9R~Tzuխ[ף}VR=W_9^v{1nZOݻw[nС&MLr+-\P֭ hFI5w\]V7|ƌիWkΜ9JIIQݺu5uTu"##K={J:l5jȵު]vX@&>*iLN6MG_W}ڳgM8Z$uA{x_r>Ka >\cǎU>}\{$iɮ18|eddh…'M$ݮ+Ww6"11QԶm\-_\͛7w׾N-[Sjj?J*XV^ ܕf_ t[cZiiwV+ĸ-q;__߇~f_Wdd>?JVBiUY/ΝҥKu[*׸hV'Nƙ}jT+##C\ǫA RLLor,;|pUZUaaaJJJҏ?(hCPP٣,URc>gFn:yꫯ*--M|~[j׮O>D_|f͚[_/AAA1cuJHHӧ5~xIE;$߿_}>C8p@3f(gСR*Uϭ9rw#GhԨQmݺry0''GRQpwRvvE7V֪ۘU4j(EGG+**JO>K?$驧RTTjժkժUX\Rp8_k׮-_\'Okvo YYYJOOװa5kmeee)##CCUTTn=rԮ];7v]_~wZ׾ƍufAUv<ׂf_ d=zTRf\]>mo0nfZ}(8ǁo߾}I&QF~'ociUY7C=~a_yƝ}͟@ʰvo}ge?q.kYٗFZnԺuk#14hڵkx=:wvEXY6&&wDD.\B]>}RSSթS' 4H[lTͦ jȐ!Zr+VZU 6TPPׯ~Z%aÆ)!!AZnU!C5jh(aJr 7vn}>Lo233!v{cɣGp_~JHHPBB&N3gn[Gk׮'NX.](99YL%$$x,3o^EGZfrssƺCgv<ׂf_ d줦e˖ o/uҷXGe7nNmc;{Fu^.HdžҌ#o -k]Jq mwV|3蒧T\YڼyƍSݵrJjڴitћ[ z{Ok֬Qf\G*,,t9P޽{իW/+**JIIIo$aGFF-4.kAAֆBݺu1m׮]jذa,M }T|L֬YSGiݺu[FFƑ#Gx7BCC_kʕj׮Eg={RSSNplcz:Ú_ǝ/NM4QݺuC+VP.]\aʾkժ%ͦXn6z/"""$I%i2vRSSoanc Dqƙ>R|7N-ZbJVK3)mbԴiS >\/ɓ'-k\HV'Vƙ}ju\.\К5k\*''GVuA|Y$7|\*22<۷kΖnΝ;5k,ŭ \8ٳg{)Рvڊg}?^˗/w$88X;w֬Y3gh…~OOX.uF^;cǎ?Ν;oWFT4g˻j߾x :uJRQXr~X2̙,?~\-RbbbN:O>ѺuJN:n:͜9Ҩ(nZggΝ%}?q/^|Q9III_׫[n0""B;v̙3ua9ݻ7k_=ZO:uTjU-YDv]Լy.Z9{mۦ-Zܞfeaܖ4Dqƙ>R_~Y7n6>?% WeGVtU5kŋkkJHV'Voժ!y:ȑ#zW$}3fLXM8Q;v,@-IAAϟ:衇ڵk=~QD񅅅zձcGiF'NT5b:7oO>^&Lpf"@Xy-'44T/֬Yx ѣE;믿}:nՋiXG$ƭ7V^'g_V^7*>>u HHWeGkZtΜ9<_KeXiXW+ȑ#jѢE~elbJ@.bt5p8޽Wtu)ƍSV"ky^kQA龻VիW]+r0aUtZ|iӦr͹;]}C`Zۗ $M ֋/Њ5'*\Zܗ✎r+&;O{W̔t?뺯_ڋ\mW^jZo۱zZ>Rbbbccqƀ B3Lhܸqz饗J\駟X%=8jllԮ];?Wƍ+==]aaa%vo!>))Iu8wz-͜9Sʴ-a);սvZeeey,~mڴIIIIe[S\CRRR>LzˡW]v… ѣ=D<~EVKe.];Crrrr4c uQڵӴi<uX5o\sΕ$9sFcǎUBBz~c;e׮]ڵ>cW{xo^?N>miٳzնm[uI~^v{1nZOP;7Tn>}hΝׯ_G}տ{(ԩS4h]O?-iii]rW_4 0U\,3g(::(jPPwe˖_|GyD4m4=zT_kϞ=-I~ӕ_]N4Iv]+W;C+Vx_lذAÇرcէOIRj4uT}WuqM>ҺɓKj… =INNܹsvZ|3fV^9s(%%EuԩS][IaΞ=KI&?|mbb-_\'OkՠA)&&FԷ~ki]wꝕt 6LQQQYﯕ+Wz3rHUZUaaa޽9QFyܷuVZW6MSLaoԮ];-_\d_ZnOvvV^qƩnݺljРjժZfMJJҏ?p?IESJ:f͚x ۱2^5juYw.~/3~xկ__Ç豘jJK.UӦMtRuQڽ{N~~vٳg5zh 0@[$;vL|XC{-/իW$aٳڶmZhPޔx!J*y]v5knFh>|N0AjR~Ç{cڸq]gHY`$饗^PΝ5|pu%ܹskʔ)ј1c4ejĉرuK:ӈz⋪TԿhB[ooj֬K'+}Ç뮻Z_~Yk֬Q||^x72NǏwܡ+>>^&LйsjkLL!C(!!AK,x믿}:2_>bF鈏W*.OCݻwСC]𻜌7NZ*`oJMMr.[$''+??_mڴ誔;tbgG.m۶Upp^|EVtuJOVt+BJJJEW00F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #"% IDATap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`!0F #ap0B8`XիWWd=kF$5jԨ\RSSF #a!;wW=+Z g (թ 7o|}իUSn*Y@!,-1:{\0Bܤ* qz$۴`lp)(%M;IKO$Hdp\c {Ci;~qhX$ (ԩS:tZl#FguizB>|X7ڻxb_nn;99ƆL&OOo޼IGGLNNuVviiiטL&˗8n7єa}qwEww7n֬Y>Z[[yDGGSTTĢEf\Koo/*f3555'""""Wډ?VYFVV?ȑ#6|***HHH ..߁#bbbJ.A~~>\ti1ccc\pF"##;w> >644t:)))ŋe޽ܿɓ'g;<۶m#-- N}gZ˦M߉'""""IPExNج`Ŋ\. ډ?/y=Jff&MMM n'## ֯_O}}"pKSSW\H<SSSrr@L&?/^%KPTTRk R_#|zr t拓[-VK7nHnn.k׮ x8]]]ӊ^.]:ܰ0 y)}}}X,}'apRRRBeXr%>޽{3sݼ{UV}v1$''s X˅j%&&fZܤYfҸ|2a~ol6&&& (N{""""2t' CONTRIBUTORS: Graham Inggs ARTISTS: Yogesh Kanitkar Michal Konstantynowicz / shokunin LlubNek Umidjon Almasov TRANSLATORS: Arabic - Eslam Maolaoy Bengali (Bangladesh) - Md. Emruz Hossain Reazul Iqbal German - Mario Blättermann Spanish - Yoel CM French - L'Africain Hungarian - Skuzzy Indonesian - Ade Malsasa Akbar Arif Budiman etc session master windi anto Rendiyono Wahyu Saputro Italian - Matteo Seclì Lithuanian - Mantas Kriaučiūnas Polish - Swift Geek mucha090 Wiktor Jezioro Portuguese (Brazil) - Rafael Ferreira Rafael Fontenelle Russian - Alex Slovak (Slovakia) - Jozef Gaal Turkish - Ahmet Sezgin Duran İbrahim Ethem Göl Ozancan Karataş ReYHa Ukrainian - Игорь Гриценко Роман Лепіш Yarema aka Knedlyk Uzbek - Umidjon Almasov Chinese - 周磊 modem-manager-gui-0.0.19.1/resources/pixmaps/message-sent.png000664 001750 001750 00000002125 13261703575 023766 0ustar00alexalex000000 000000 PNG  IHDR-bKGD pHYsVnVn Ѱ(tIME "tȴIDAT8}MlTUuZZāHK`BQ&]Q&  AJ$1&l1 P$Җ)cyof=.CNrrϽ_O+V:>sfBU1JS'?|?='ځgεvZs޾}[Ljξ}# />U7_Λ1(0r96lxi5M'ZfjT% C(|l6kW~s?卛.465S, R,ueww/]֭osEb?xf,XY8-Êʱy8CE J\By?|wYd{z֑p}ߟL&Yf ]tvtdƦKLeI,#\ell41c y''JQ[[KeeP'*bT%hnn (J*qfW^L?}+m@)4̽ A.!A!/fpdQܝsz5*a:+yu\Jo1@>rPSjEϴs !׋9x aI]a#"յqSRfħlAU:;g9Q99Z[iI`DiKAQY"M)+nݹE]]K/w}e۲mQGxuyjD~KP!@u.VD2A+?%{?dMl Ąf\EDs% K*k*QEEK.+sF}@4fZ1IENDB`modem-manager-gui-0.0.19.1/000775 001750 001750 00000000000 13261747174 015175 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/pl_PL.po000664 001750 001750 00000002657 13261703575 020054 0ustar00alexalex000000 000000 # # Translators: # Wiktor Jezioro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Wiktor Jezioro \n" "Language-Team: Polish (Poland) (http://www.transifex.com/ethereal/modem-manager-gui/language/pl_PL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Włącz i uruchom usługi zarządzania modemem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Użyj usługi zarządzania modemem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "" modem-manager-gui-0.0.19.1/man/pt_BR/000775 001750 001750 00000000000 13261703575 016753 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/scripts/000775 001750 001750 00000000000 13261703575 017450 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/trafficdb.h000664 001750 001750 00000006073 13261703575 020064 0ustar00alexalex000000 000000 /* * trafficdb.h * * Copyright 2012-2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __TRAFFICDB_H__ #define __TRAFFICDB_H__ enum _mmgui_trafficdb_session_state { MMGUI_TRAFFICDB_SESSION_STATE_UNKNOWN = 0, MMGUI_TRAFFICDB_SESSION_STATE_NEW, MMGUI_TRAFFICDB_SESSION_STATE_OLD }; struct _mmgui_trafficdb { const gchar *filepath; gboolean sessactive; gboolean sessinitialized; gboolean monthendstomorrow; gboolean yearendstomorrow; time_t presdaytime; time_t nextdaytime; time_t sesstime; guint sessstate; guint64 dayrxbytes; guint64 daytxbytes; guint dayduration; guint64 sessrxbytes; guint64 sesstxbytes; guint64 sessduration; guint64 monthrxbytes; guint64 monthtxbytes; guint64 monthduration; guint64 yearrxbytes; guint64 yeartxbytes; guint64 yearduration; }; typedef struct _mmgui_trafficdb *mmgui_trafficdb_t; struct _mmgui_day_traffic { /*Day statistics*/ guint64 daytime; guint64 dayrxbytes; guint64 daytxbytes; guint dayduration; /*Last session statistics*/ guint64 sesstime; guint64 sessrxbytes; guint64 sesstxbytes; guint sessduration; }; typedef struct _mmgui_day_traffic *mmgui_day_traffic_t; struct _mmgui_traffic_update { guint64 fullrxbytes; guint64 fulltxbytes; guint64 fulltime; guint deltarxbytes; guint deltatxbytes; guint deltaduration; }; typedef struct _mmgui_traffic_update *mmgui_traffic_update_t; time_t mmgui_trafficdb_get_new_day_timesatmp(time_t currenttime, gboolean *monthsend, gboolean *yearsend); mmgui_trafficdb_t mmgui_trafficdb_open(const gchar *persistentid, const gchar *internalid); gboolean mmgui_trafficdb_close(mmgui_trafficdb_t trafficdb); gboolean mmgui_trafficdb_traffic_update(mmgui_trafficdb_t trafficdb, mmgui_traffic_update_t update); gboolean mmgui_trafficdb_session_new(mmgui_trafficdb_t trafficdb, time_t starttime); gboolean mmgui_trafficdb_session_close(mmgui_trafficdb_t trafficdb); gboolean mmgui_trafficdb_session_get_day_traffic(mmgui_trafficdb_t trafficdb, mmgui_day_traffic_t daytraffic); gboolean mmgui_trafficdb_day_traffic_write(mmgui_trafficdb_t trafficdb, mmgui_day_traffic_t daytraffic); GSList *mmgui_trafficdb_get_traffic_list_for_month(mmgui_trafficdb_t trafficdb, guint month, guint year); void mmgui_trafficdb_free_traffic_list_for_month(GSList *trafficlist); mmgui_day_traffic_t mmgui_trafficdb_day_traffic_read(mmgui_trafficdb_t trafficdb, time_t daytime); #endif /* __SMSDB_H__ */ modem-manager-gui-0.0.19.1/src/plugins/meson.build000664 001750 001750 00000000600 13261703575 021600 0ustar00alexalex000000 000000 if ofono.found() ofonoplugin_c_sources = [ 'ofonohistory.c' ] ofonoplugin_c_args = [ ] ofonoplugin = shared_module('mmgui-ofono-history', ofonoplugin_c_sources, c_args: ofonoplugin_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'ofono', 'plugins'), dependencies : [glib, gobject, gio, gmodule, gdbm, rt]) endif modem-manager-gui-0.0.19.1/src/sms-page.h000664 001750 001750 00000004253 13261703575 017652 0ustar00alexalex000000 000000 /* * sms-page.h * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __SMS_PAGE_H__ #define __SMS_PAGE_H__ #include #include "../resources.h" #include "main.h" /*SMS*/ gboolean mmgui_main_sms_get_message_list_from_thread(gpointer data); gboolean mmgui_main_sms_get_message_from_thread(gpointer data); gboolean mmgui_main_sms_handle_new_day_from_thread(gpointer data); gboolean mmgui_main_sms_send(mmgui_application_t mmguiapp, const gchar *number, const gchar *text); void mmgui_main_sms_remove(mmgui_application_t mmguiapp); void mmgui_main_sms_remove_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_sms_new(mmgui_application_t mmguiapp); void mmgui_main_sms_new_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_sms_answer(mmgui_application_t mmguiapp); void mmgui_main_sms_answer_button_clicked_signal(GObject *object, gpointer data); gboolean mmgui_main_sms_list_fill(mmgui_application_t mmguiapp); void mmgui_main_sms_load_contacts_from_system_addressbooks(mmgui_application_t mmguiapp); void mmgui_main_sms_restore_settings_for_modem(mmgui_application_t mmguiapp); void mmgui_main_sms_restore_contacts_for_modem(mmgui_application_t mmguiapp); #if RESOURCE_SPELLCHECKER_ENABLED gboolean mmgui_main_sms_spellcheck_init(mmgui_application_t mmguiapp); #endif void mmgui_main_sms_list_init(mmgui_application_t mmguiapp); void mmgui_main_sms_list_clear(mmgui_application_t mmguiapp); #endif /* __SMS_PAGE_H__ */ modem-manager-gui-0.0.19.1/resources/pixmaps/sms-tb.png000664 001750 001750 00000003303 13261703575 022577 0ustar00alexalex000000 000000 PNG  IHDR szzsRGBbKGD pHYs  tIME )}CIDATXåMlU3 @c@{Ć DBJB!BYd k ‡|]ŀ,b`ك=r7I~zHX@Pi;0a6,.ZJetll안jkkJ5 PO:1v҉^( q]---lٲk-p$g!Jy\1fp& >rٳGDDȜgzv~}cnMf0^/"6mywgZ˗<$5xFD7oL>֕Rr5=KԔonnV y֚ׯcy?( foQJ?vddc ZkED8!+20=޽{dY/^q&?Xr%f,PIx"qR*uJO*jڵORV3Toh* J0 U}}=uP<P.T*qpkmlu]8@hIR1d 0v\.(/]`GmmLLL064<<ٳgؿ?<{ONoo/\NN:---޽ p :HH{6UAWs۶mѣJ%&&&N8WT*$U!tG,O:v4uD"wŭ[ꢶ rR)03 |C1>>^Z~A˭aHĂZkz{{9~8{իq.( (Jri\B:F)WN >J)\ pZ" ,Yɓ'-6PTPJ1>>N}}=lذUVU雚#aZ[[bŊd}oݺƇKAtR&&&=uuu}e˖׬Y&0 .p]O\Zw4뢵j:@TZth"/_^:.)5"4f\vc\Vrd2 &Zkǡt:͓'O&;Z8i8s ;waH+7n܈뺸y8ܸq/_Vߪb=?N?qx^Ç?$R8CGGGd6 d$b9Ӹt>* w׺X,VM^IEɑa԰9r$nBɽY.Kc0LHrd2;FMMMYЉ8~aU}$JxSϟ?{V'州}W3Z?|κ@Ne ʓy^ՙ1X,VGPRa'Ӻ hDDf,CXl"ncvLkXc mmmc>0P򩢀CƘ /64_OrADVcܿ'³ 8|f9=79c(fxIENDB`modem-manager-gui-0.0.19.1/appdata/de.po000664 001750 001750 00000007656 13261703575 017552 0ustar00alexalex000000 000000 # # Translators: # ajs124 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: ajs124 \n" "Language-Team: German (http://www.transifex.com/ethereal/modem-manager-gui/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Modemspezifische Funktionen eines EDGE/3G/4G-Breitbandmodems steuern" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Einfache grafische Oberfläche, die zu den Systemdiensten Modemmanager, Wader und oFono kompatibel ist und modemspezifische Funktionen eines EDGE/3G/4G-Breitbandmodems steuern kann." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Sie können mit Modem Manager GUI das Guthaben Ihrer SIM-Karte überprüfen, SMS-Nachrichten senden oder empfangen, den Netzwerkverkehr überwachen und vieles mehr." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Derzeitige Funktionsmerkmale:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "Mobile Breitbandverbindungen erstellen und steuern" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "SMS-Nachrichten senden und empfangen und die Nachrichten in einer Datenbank speichern" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "USSD-Codes senden und Antworten empfangen (auch in interaktiven Sitzungen)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Geräteinformationen anzeigen: Anbietername, Gerätemodus, IMEI, IMSI, Signalstärke" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Nach verfügbaren mobilen Netzwerken suchen" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Statistiken für mobilen Netzwerkverkehr anzeigen und Begrenzungen festlegen" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Bitte beachten Sie, dass einige Funktionsmerkmale aufgrund von Einschränkungen verschiedener Systemdienste oder selbst unterschiedlicher Versionen der laufenden Systemdienste nicht verfügbar sein könnten." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "Breitbandgeräteübersicht" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/resources/pixmaps/cont-tb.png000664 001750 001750 00000003223 13261703575 022741 0ustar00alexalex000000 000000 PNG  IHDR szzsRGBbKGD pHYs  tIME 7${?IDATXíW_TUsܹ;n` ,`̚H)%" Z YlP*!/ ҃ERxHAʸXȂ8s׃{nw[tc9} OX|B@.{U)J/RgSrι|\MD?ٶeYFFFpE%x* md``lYGGXݻwiffE]u#!ĕK`rm122uAk udجH$p=|2l~CqvZWX8#E [bHW\aDF4chhNi{Vϴ455Ťz7Dh͚5oRۋa7obffREsMOO3)回]@,CCC,.۱|:#s={JeIҥKZ?y/urS 64}˖-d2-sq (-L>|!8 |>?_, è Fqro߆aQ>mR />d2R6qۥ`rrJ)twwcǎp]<3g",ciT=<˽J%[nEЊ.\cժU@ww7$paACZ9MT 7P*VwP@V֭[sٳ'rFJ Rd^D6J1GܸR s;wl509OYP՚tK)8exƶmAж0DZE",(&c#Z:2@iTkµrJ߿s^G1۷Jh1"Jvc0 #7 C avϟ)zǏֺ0 aKJjz8p붝1֯dbMs3HL7nEl)qh%~_H9krx * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __PROVIDERSDB_H__ #define __PROVIDERSDB_H__ #include enum _mmgui_providers_db_entry_usage { MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET = 0, MMGUI_PROVIDERS_DB_ENTRY_USAGE_MMS, MMGUI_PROVIDERS_DB_ENTRY_USAGE_OTHER }; struct _mmgui_providers_db_entry { gchar country[3]; gchar *name; gchar *apn; GArray *id; guint tech; guint usage; gchar *username; gchar *password; gchar *dns1; gchar *dns2; }; typedef struct _mmgui_providers_db_entry *mmgui_providers_db_entry_t; struct _mmgui_providers_db { GMappedFile *file; guint curparam; gchar curcountry[3]; gchar *curname; gboolean gotname; GArray *curid; mmgui_providers_db_entry_t curentry; GSList *providers; }; typedef struct _mmgui_providers_db *mmgui_providers_db_t; mmgui_providers_db_t mmgui_providers_db_create(void); void mmgui_providers_db_close(mmgui_providers_db_t db); GSList *mmgui_providers_get_list(mmgui_providers_db_t db); const gchar *mmgui_providers_provider_get_country_name(mmgui_providers_db_entry_t entry); guint mmgui_providers_provider_get_network_id(mmgui_providers_db_entry_t entry); #endif /* __PROVIDERSDB_H__ */ modem-manager-gui-0.0.19.1/po/ru.po000664 001750 001750 00000161216 13261710625 016577 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alex , 2012-2015,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian (http://www.transifex.com/ethereal/modem-manager-gui/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Непрочитанные SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Непрочитанные сообщения" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "%s является некорректным значением\nОно не будет сохранено и, следовательно, не будет использоваться при активации соединения" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "Новое соединение" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "Имя APN" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "IP-адрес первого DNS-сервера" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "IP-адрес второго DNS-сервера" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Соединение" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Ошибка добавления контакта" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Удаление контакта" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Действительно хотите удалить контакт?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Ошибка удаления контакта" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Контакт не удалён из адресной книги устройства" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Контакт не выбран" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Контакты из адресной книги модема" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "Контакты GNOME" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "Контакты KDE" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Основное имя" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Основной номер" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "EMail" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Группа" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Дополнительное имя" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Дополнительный номер" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Ошибка открытия устройства" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nПрошивка:%s Порт:%s Тип:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Выбранное" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Устройство" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Активировать" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "Деактивровать" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "Соединение с %s..." #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "Отключение от %s..." #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Не поддерживается" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Ошибка в ходе инициализации" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Невозможно запустить необходимые системные службы без авторизации." #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Не удается начать взаимодействие с доступными системными службами" #: ../src/main.c:506 msgid "Success" msgstr "Успешно завершено" #: ../src/main.c:511 msgid "Failed" msgstr "Ошибка" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Превышено время ожидания" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Прервать" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "Разблокировка..." #: ../src/main.c:796 msgid "Enabling device..." msgstr "Активация устройства..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "В системе не найдено устройств" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Модем не готов. Пожалуйста дождитесь окончания процесса подготовки модема к работе..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "Модем должен быть активирован для соединения с Интернет. Пожалуйста активируйте модем." #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "Модем должен быть зарегистрирован в мобильной сети для соединения с Интернет. Пожалуйста подождите..." #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "Модем должен быть разблокирован для соединения с сетью Интернет. Пожалуйста, введите PIN-код." #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "Менеджер соединений не позволяет управлять соединениями с сетью Интернет." #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Модем должен быть активирован для чтения и отправки новых SMS. Пожалуйста, активируйте модем." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Модем должен быть зарегистрирован в домашней сети для приема и отправки SMS. Пожалуйста, подождите..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Модем должен быть разблокирован для приема и отправки SMS. Пожалуйста, введите PIN-код." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Система управления модемом не поддерживает функции для работы с сообщениями SMS." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Система управления модемом не поддерживает функции для отправки сообщений SMS." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Модем должен быть активирован для отправки запросов USSD. Пожалуйста, активируйте модем." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Модем должен быть зарегистрирован в домашней сети для отправки запросов USSD. Пожалуйста, подождите..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Модем должен быть разблокирован для отправки запросов USSD. Пожалуйста, введите PIN-код." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Система управления модемом не поддерживает функции для отправки запросов USSD." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Модем должен быть активирован для сканирования доступных сетей. Пожалуйста, активируйте модем." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Модем должен быть разблокирован для сканирования доступных сетей. Пожалуйста, введите PIN-код." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Система управления модемом не поддерживает функции для сканирования доступных мобильных сетей." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Модем в данный момент подключен. Разорвите сетевое соединение для начала сканирования." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Модем должен быть активирован для работы с его списком контактов. Пожалуйста, активируйте модем." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Модем должен быть разблокирован для работы с его списком контактов. Пожалуйста, введите PIN-код." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Система управления модемом не поддерживает функции для работы со списком контактов модема." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Система управления модемом не поддерживает функции для редактирования списка контактов модема." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "Ввести PIN-код" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "SIM-карта заблокирована с помощью PUK-кода. Обратитесь в отдел технической поддержки мобильного оператора." #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "Кажется, SIM-карта неработоспособна. Обратитесь в отдел технической поддержки мобильного оператора." #: ../src/main.c:1322 msgid "Enable" msgstr "Активировать" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Устройства" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Статус" #: ../src/main.c:1600 msgid "S_can" msgstr "С_ети" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Трафик" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "К_онтакты" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Окно Modem Manager GUI скрыто" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Используйте иконку в трее или пункт меню сообщений для восстановления состояния окна" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Возникла ошибка при показе справки" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s не подключен" #: ../src/main.c:2056 msgid "Show window" msgstr "Показать окно" #: ../src/main.c:2062 msgid "New SMS" msgstr "Написать SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Выход" #: ../src/main.c:2680 msgid "_Quit" msgstr "В_ыход" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Действия" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Настройки" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Правка" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "По_мощь" #: ../src/main.c:2697 msgid "_About" msgstr "_О программе " #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Параметры" #: ../src/main.c:2714 msgid "Help" msgstr "Содержание" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "О программе" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "Не удается найти файлы модулей MMGUI. Пожалуйста убедитесь в корректности установки приложения" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Ошибка создания графического интерфейса" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Модули систем управления модемами:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Модуль" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Описание" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Модули систем управления соединениями:\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Ошибка сегментирования по адресу: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Трассировка стека:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Не показывать окно при запуске" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Использовать указанный модуль системы управления модемами" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Использовать указанный модуль системы управления соединениями" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Вывести список всех доступных модулей и выйти" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- инструмент для управления специфическими функциями модемов стандартов EDGE/3G/4G" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Ошибка разбора параметра команданой строки: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Не установлено" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Сканирование сетей..." #: ../src/scan-page.c:46 msgid "Device error" msgstr "Ошибка устройства" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Доступность: %s Стандарт: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Ошибка сканирования сетей" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Оператор" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Принято %u новых сообщений SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Принято новое сообщение SMS" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Сообщения от: " #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Номер для отправки SMS некорректен\nДопустимы номера длиной от 2 до 20 знаков\nбез цифр и специальных символов" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Текст SMS некорректен\nНеобходимо набрать текст сообщения" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "Отправка сообщения SMS на номер \"%s\"..." #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Неверный номер или устройство не готово" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Сохранение SMS..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Действительно желаете удалить сообщения (%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Удаление сообщений" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Некоторые сообщения не были удалены (%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Входящие" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Этот каталог содержит ваши входящие сообщения SMS.\nВы можете ответить на сообщение при помощи кнопки 'Ответ'." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Отправленные" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Этот каталог содержит ваши исходящие сообщения SMS." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Черновики" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Этот каталог содержит черновики ваших сообщений SMS.\nВыберите сообщение и нажмите кнопку 'Ответ' для начала редактирования." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Входящие\nПринятые сообщения" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Исходящие\nОтправленные сообщения" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Черновики\nЧерновики сообщений" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Отключено" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f КБит/с" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f КБит/с" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g МБит/с" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g МБит/с" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g ГБит/с" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g ГБит/с" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u сек" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u сек" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g КБ" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g КБ" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g МБ" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g МБ" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g ГБ" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g ГБ" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g ТБ" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g ТБ" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Сегодня, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Неизвестно" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Вчера, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Доступна" #: ../src/strformat.c:248 msgid "Current" msgstr "Активная сеть" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Недоступна" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Не зарегистрирован" #: ../src/strformat.c:288 msgid "Home network" msgstr "Домашняя сеть" #: ../src/strformat.c:290 msgid "Searching" msgstr "Поиск сети" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "В регистрации отказано" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Неизвестное состояние" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Роуминг" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f мин." #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f час." #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f дн." #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f нед." #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f сек." #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u мин., %u сек." #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Задача отменена" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Истек период активации службы Systemd" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "Не удалось активировать службу" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Работоспособность службы зависит от службы, которую не удалось активировать" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Служба пропущена" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Неизвестная ошибка" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "Неизвестный статус активации" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Неизвестный тип интерфейса" #: ../src/traffic-page.c:246 msgid "Day" msgstr "День" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Принятые данные" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Отправленные данные" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Время сессии" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Приложение" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Протокол" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Состояние" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Буфер" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Порт" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Целевой адрес" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Доступный трафик исчерпан" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Доступное время исчерпано" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафик: %s, установленное ограничение: %s\nВремя сессии: %s, установленное ограничение: %s\nПроверьте введённые данные и попробуйте еще раз" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Некорректные ограничения трафика и времени" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафик: %s, установленное ограничение: %s\nПроверьте введённые данные и попробуйте еще раз" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Некорректное ограничение трафика" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Время сессии: %s, установленное ограничение: %s\nПроверьте введённые данные и попробуйте еще раз" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Некорректное ограничение времени сессии" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Не подключен" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Предел" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Отключено" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "КБит/с" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "сек" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Приём" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Передача" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Параметр" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Значение" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Сессия" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Принятые данные" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Переданные данные" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Скорость приёма" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Скорость передачи" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Время сессии" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Остаток трафика" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Остаток времени" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Месяц" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Общее время" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Год" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Трафик закончился... Самое время отдохнуть \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Время закончилось... Прекрасных снов -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Стандартная команда" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "Запрос USSD некорректен\nЗапрос не должен превышать 160 символов,\nдолжен начинаться с '*' и заканчиваться '#'" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "Отправка запроса USSD %s..." #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "Отправка ответа в рамках сессии USSD %s..." #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Ошибка отправки запроса USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Неправильный запрос USSD или устройство не готово" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Сессия USSD завершена. Вы можете отправить новый запрос" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Некорректный запрос USSD" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nСессия USSD активна. Ожидается ответ...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nОтвет не получен..." #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Команда" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Начать работу!" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Служба" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Закрыть" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Активация..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Успешно" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Приветствие" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "Несмотря на название, приложение Modem Manager GUI поддерживает различные системы управления модемами и соединениями. Пожалуйста, выберите те системы, с которыми вы планируете работать. В том случае если вы сомневаетесь в выборе, просто ничего не меняйте." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Система управления модемами" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Система управления соединениями" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Приветствие Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Активировать службы на постоянной основе" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Активация служб" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI использует специальные системные службы для взаимодействия с модемами и сетевым стеком. Пожалуйста дождитесь окончания процесса активации необходимых служб." #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Просмотр доступных устройств и выбор используемого CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Устройства" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "Приём и отправка сообщений SMS CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "Отправка запросов USSD CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Просмотр информации об активном устройстве CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Статус" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Сканирование существующих мобильных сетей CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Сети" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Мониторинг сетевого трафика CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Трафик" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Просмотр адресной книги модема и системных адресных книг CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Контакты" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Редактировать" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "Открыть менеджер соединений CTRL+E" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "Активировать или деактивировать соединение CTRL+A" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Отправить новое сообщение SMS CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Новое сообщение" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Удалить выбранное сообщение CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Удалить сообщение" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Ответить на выбранное сообщение CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Ответ" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Запрос" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Отправить" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "Отправить запрос ussd CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "Отредактировать список команд USSD CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Оборудование" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Стандарт" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Уровень сигнала" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Код оператора" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Регистрация" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Сеть" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "Позиционирование 3GPP\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "Позиционирование GPS\nДолгота/Широта" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Позиционирование" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Сканировать доступные мобильные сети CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Начать сканирование сетей" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Создать соединение" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Установить объём трафика и время до отсоединения CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Установить ограничения" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Просмотреть список активных сетевых соединений CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Соединения" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Просмотреть ежедневную статистику потребления трафика CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Статистика" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Скорость передачи данных" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Добавить новый контакт в адресную книгу модема CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Новый контакт" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Удалить контакт из адресной книги модема CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Удалить контакт" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Отправить сообщение SMS на номер выделенного контакта CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Отправить SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Copyright 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Программа для управления специфическими функциями EDGE/3G/4G модемов" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Домашняя страница" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Русский: Alex " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Активные соединения" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Завершить работу выбранного приложения при помощи сигнала SIGTERM CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Завершить приложение" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Добавить новое мобильное широкополосное соединение" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "Добавить соединение" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Удалить выбранное соединение" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "Удалить соединение" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Название" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Соединение" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "Идентификатор сети" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "Разрешить роуминг" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Номер доступа" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Имя пользователя" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Пароль" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Аутентификация" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Ошибка" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Спросить снова" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Выход или минимизация?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Что следует сделать при закрытии окна программы?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Просто выйти" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Минимизировать в трей или в меню сообщений" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Новое SMS сообщение" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Сохранить" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Номер" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "Введите PIN-код для разблокировки модема" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "PIN-код" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Использовать звуки событий" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Скрывать окно в трей при его закрытии" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Сохранять размеры и положение окна" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Добавить приложение в список для автоматического запуска" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Поведение" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Поведение" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Объединять сообщения" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Раскрывать каталоги" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Помещать старые сообщения в верх списка" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Представление" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Период существования" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Отправлять сообщение о доставке, если это возможно" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Параметры сообщения" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "Используйте %n для подстановки номера отправителя и %t для подстановки текста сообщения (например, zenity --info --title=%n --text=%t)." #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "Пользовательская команда" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Скорость приёма" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Скорость передачи" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "Направление движения" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "Справа налево" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "Слева направо" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Трафик" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Графики" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Предпочтительные модули" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Активация устройства" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Отправка SMS" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Отправка запроса USSD" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Сканирование сетей" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "Таймауты операций" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Модули" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "Активные страницы" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "Страницы" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Вопрос" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Ограничения" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "Использовать ограничение трафика" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Использовать ограничение времени" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "МБ" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "ГБ" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "ТБ" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Сообщение" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Действие" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Показать сообщение" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Разорвать соединение" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Время" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Минуты" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Часы" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Статистика" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Выбранный период сбора данных" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Январь" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Февраль" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Март" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Апрель" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Май" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Июнь" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Июль" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Август" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Сентябрь" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Октябрь" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Ноябрь" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Декабрь" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "Команды USSD" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Добавить новую команду USSD CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Добавить" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Удалить выбранную команду USSD CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Удалить" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "Принудительно конвертировать кодировку ответа USSD из GSM7 в UCS2 (используется для модемов Huawei) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Конвертировать кодировку" modem-manager-gui-0.0.19.1/po/tr.po000664 001750 001750 00000135245 13261705266 016606 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ahmet Sezgin Duran , 2013 # Alex , 2013 # İbrahim Ethem Göl , 2013 # Ozancan Karataş , 2015 # ReYHa , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Turkish (http://www.transifex.com/ethereal/modem-manager-gui/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Okunmamış SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Okunmamış mesajlar" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "İsimsiz bağlantı" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "APN adı" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "İlk DNS server IP adresi" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "İkinci DNS server IP adresi" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Bağlantı" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Kişi eklenirken hata" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Kişiyi sil" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Kişiyi silmeyi gerçekten istiyor musunuz?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Kişi silinirken hata" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Kişi aygıttan silinemedi" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Kişi seçilmedi" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Modem kişileri" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME kişileri" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE kişileri" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Ad" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "İlk numara" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "E-posta" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Grup" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "İkinci ad" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "İkinci numara" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Aygıt açılırken hata" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nSürüm:%s Bağlantı noktası:%s Tür:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Seçildi" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Aygıt" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Etkinleştir" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "Durdur" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "Bağlanıyor%s" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "Bağlantı düşüyor %s" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Desteklenmeyen" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Başlatılırken hata" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Gerekli sistem hizmetleri doğru kimlik bilgileri olmadan başlatılamaz" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Kullanılabilir sistem hizmetleri ile iletişim kurulamadı" #: ../src/main.c:506 msgid "Success" msgstr "Başarılı" #: ../src/main.c:511 msgid "Failed" msgstr "Başarısız" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Zaman aşımı" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Durdur" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Aygıt etkinleştiriliyor..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Sistemde aygıt bulunamadı" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Modem işlem için hazır değil. Lütfen modem hazırlanırken bekleyin..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "İnternete bağlanmak için modem kilitsiz olmalıdır.Lütfen Pin kodu giriniz." #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "Ağ yöneticisi internet bağlantı yönetim işlevini desteklemiyor." #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "SMS okumak ve yazmak için modem etkinleştirilmelidir. Lütfen modemi etkinleştirin." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "SMS almak ve göndermek için modem mobil ağa kaydettirilmelidir. Lütfen bekleyin..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "SMS almak ve göndermek için modemin kilidi açılmalıdır. Lütfen PIN kodunu girin." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Modem yöneticisi SMS işleme işlevlerini desteklemiyor." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Modem yöneticisi SMS mesajları göndermeyi desteklemiyor." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "USSD isteği göndermek için modem etkinleştirilmelidir. Lütfen modemi etkinleştirin." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "USSD isteği göndermek için modem mobil ağa kaydettirilmelidir. Lütfen bekleyin..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "USSD isteği göndermek için modemin kilidi açılmalıdır. Lütfen PIN kodunu girin." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Modem yöneticisi USSD istekleri göndermeyi desteklemiyor." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Kullanılabilir ağları taramak için modem etkinleştirilmelidir. Lütfen modemi etkinleştirin." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Kullanılabilir ağları taramak için modemin kilidi açılmalıdır. Lütfen PIN kodunu girin." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Modem yöneticisi kullanılabilir mobil ağ taramasını desteklemiyor." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Modem şu an bağlı. Lütfen taramak için bağlantıyı kesin." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Kişileri dışa aktarmak için modem etkinleştirilmelidir. Lütfen modemi etkinleştirin." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Kişileri dışa aktarmak için modemin kilidi açılmalıdır. Lütfen PIN kodunu girin." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Modem yöneticisi modem kişilerini işleme işlevlerini desteklemiyor." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Modem yöneticisi modem kişilerini düzenleme işlevlerini desteklemiyor." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Aygıtlar" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Bilgi" #: ../src/main.c:1600 msgid "S_can" msgstr "_Tara" #: ../src/main.c:1605 msgid "_Traffic" msgstr "Tra_fik" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "Kişile_r" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Modem Manager GUI penceresi gizlendi" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Pencereyi yeniden görüntülemek için tepsi simgesi ya da mesajlaşma menüsü kullan" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Yardım içerikleri görüntülenirken hata" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s bağlantı kesildi" #: ../src/main.c:2056 msgid "Show window" msgstr "Pencereyi görüntüle" #: ../src/main.c:2062 msgid "New SMS" msgstr "Yeni SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Çık" #: ../src/main.c:2680 msgid "_Quit" msgstr "Çı_k" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Eylemler" #: ../src/main.c:2689 msgid "_Preferences" msgstr "A_yarlar" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Düzenle" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "Yardı_m" #: ../src/main.c:2697 msgid "_About" msgstr "_Hakkında" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Ayarlar" #: ../src/main.c:2714 msgid "Help" msgstr "Yardım" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Hakkında" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "MMGUI modülleri bulunamıyor. Lütfen uygulamanın doğru şekilde yüklendiğini denetleyin" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Arabirim oluşturma hatası" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Modem yönetim modülleri:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modül" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Açıklama" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Bağlantı yönetim modülleri:\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Arıza bölümlendirme adresi: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Yığın izleyicisi:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Başlangıçta pencere görüntüleme" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Belirtilen modem yönetim modülünü kullan" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Belirtilen bağlantı yönetim modülünü kullan" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Kullanılabilir tüm modülleri listele ve çık" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- belirli EDGE/3G/4G modem işlevlerini denetleme aracı" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Komut satırı seçenek ayrıştırması başarısız: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Tanımlanmamış" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Ağlar taranıyor..." #: ../src/scan-page.c:46 msgid "Device error" msgstr "Aygıt hatası" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Kullanılabilirlik: %s Erişim tekniği: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Ağlar taranırken hata" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "İşletmeci" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u yeni SMS mesajı alındı" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Yeni SMS mesajı alındı" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Mesaj göndericileri: " #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "SMS numarası geçerli değil\nYalnızca 2 basamaklı 20 sayıdan oluşan\nve harf ve sembol içermeyen numaralar kullanılır" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "SMS metni geçerli değil\nLütfen göndermek için birşeyler yazın" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "SMS \"%s\" numarasına gönderiliyor..." #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Numara yanlış ya da aygıt hazır değil" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "SMS kaydediliyor..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Mesajları gerçekten silmek istiyor musunuz (%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Mesajları sil" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Bazı mesajlar silinemedi (%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Gelen" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Bu klasör sizin aldığınız SMS mesajları içindir.\n'Yanıtla' düğmesini kullanarak seçilen mesajı yanıtlayabilirsiniz." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Gönderilen" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Bu klasör gönderdiğiniz SMS mesajları içindir." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Taslaklar" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Bu klasör SMS mesaj taslaklarınız içindir.\nMesaj seçin ve düzenlemeye başlamak için 'Yanıtla' düğmesini tıklatın." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Gelen\nGelen mesajlar" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Gönderilen\nGönderilen mesajlar" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Taslaklar\nMesaj taslakları" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Devre dışı" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u san" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u san" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Bugün, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Bilinmeyen" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Dün, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Kullanılabilir" #: ../src/strformat.c:248 msgid "Current" msgstr "Geçerli" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Yasaklanmış" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Kayıtlı değil" #: ../src/strformat.c:288 msgid "Home network" msgstr "Ev ağı" #: ../src/strformat.c:290 msgid "Searching" msgstr "Aranıyor" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Kayıt engellendi" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Bilinmeyen durum" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Dolaşım ağı" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f dakika" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f saat" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f gün" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f hafta" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f san" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u dak, %u san" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Görevden vazgeçildi" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Sistem zaman aşımına uğradı" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "Hizmet etkinleştirmesi başarısız" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Hizmete bağlı hizmet zaten başarısız" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Hizmet atlandı" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Bilinmeyen hata" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "Bilinmeyen etkinleştirme hatası" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Bilinmeyen varlık türü" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Gün" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Alınan veriler" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Gönderilen veriler" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Oturum zamanı" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Uygulama" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokol" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Durum" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Arabellek" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Bağlantı noktası" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Hedef" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Trafik sınırı aşıldı" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Zaman sınırı aşıldı" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafik: %s, ayarlanan sınır: %s\nZaman: %s, ayarlanan sınır: %s\nLütfen girilen değerleri denetleyin ve bir kere daha deneyin" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Yanlış trafik ve zaman sınırı değerleri" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafik: %s, ayarlanan sınır: %s\nLütfen girilen değerleri denetleyin ve bir kere daha deneyin" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Yanlış trafik sınırı değeri" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Zaman: %s, ayarlanan değer: %s\nLütfen girilen değerleri denetleyin ve bir kere daha deneyin" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Yanlış zaman sınırı değeri" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Bağlantı kesildi" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Sınır" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Devre dışı" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "san" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "İndirme hızı" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Gönderme hızı" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parametre" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Değer" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Oturum" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Alınan veriler" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Gönderilen veriler" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Alma hızı" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "İletme hızı" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Oturum zamanı" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Trafik sonlandırma" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Kalan zaman" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Ay" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Toplam zaman" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Yıl" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Trafik sınırı aşıldı... Dinlenme zamanı \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Zaman sınırı aşıldı... Uyumaya gidin -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Örnek komut" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "USSD isteği doğru değil\nİstek 160 sembol uzunluğunda olmalıdır\n'*' ile başlar ve '#' ile sonlanır" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "%s USSD isteği gönderiliyor..." #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "%s USSD yanıtı gönderiliyor..." #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "USSD gönderilirken hata" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Yanlış USSD isteği ya da aygıt hazır değil" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "USSD oturumu sonlandırıldı. Yeni istek gönderebilirsiniz" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Yanlış USSD isteği" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nUSSD oturumu etkin. Girişiniz bekleniyor...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nYanıt alınmamış..." #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Komut" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Haydi Başlayalım!" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Hizmet" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Kapat" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Etkinleştirme..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Başarılı" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Hoşgeldiniz" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "O ada rağmen, Modem Manager GUI farklı uçları destekler. Lütfen kullanımınıza uygun uçları seçin. Emin değilseniz, birşeyleri hemen değiştirmeyin." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Modem yöneticisi" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Bağlantı yöneticisi" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Modem Manager GUI'ye hoşgeldiniz" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Etkinleştirdikten sonra hizmetleri etkinleştir" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Hizmetleri etkinleştir" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI modemler ve ağ yığını ile iletişim kurmak için belirli özel sistem hizmetleri kullanır. Lütfen gereken sistem hizmetleri etkinleştirilene kadar bekleyin." #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Kullanılabilir aygıtları görüntüle ve seç CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Aygıtlar" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "SMS mesajları gönder ve al CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "USSD istekleri gönder CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Etkin aygıt bilgilerini görüntüle CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Bilgi" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Varolan mobil ağları tara CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Tara" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Ağ trafiğini gözlemle CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Trafik" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Sistem ve modem rehberini görüntüle CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Kişiler" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Düzenle" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "Bağlantı editörünü açın CTRL+E" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "Etkin veya etkinleşmemiş bağlantı CTRL+A" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Yeni SMS mesajı gönder CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Yeni" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Seçilen mesajı sil CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Sil" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Seçilen mesajı yanıtla CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Yanıtla" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "İstek" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Gönder" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "ussd isteği gönder CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "USSD komutlar listesini düzenle CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Donatım" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Kip" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Sinyal düzeyi" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "İşletmeci kodu" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Kayıt" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "3GPP Konumu\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "GPS konumu\nBoylam/Enlem" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Konum" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Kullanılabilir mobil ağları tara CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Taramaya başla" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Bağlantı oluştur" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Bağlantının kesileceği toplam trafiği ya da zaman sınırını ayarla CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Sınırı ayarla" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Etkin ağ bağlantılarını listede görüntüle CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Bağlantılar" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Günlük trafik istatistiklerini görüntüle CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "İstatistikler" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "İletim hızı" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Modem rehberine yeni kişi ekle CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Yeni kişi" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Modem rehberinden kişi sil CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Kişiyi sil" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Seçilen kişiye SMS mesajı gönder CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "SMS gönder" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Telif hakkı 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Belirli EDGE/3G/4G modem işlevlerini denetleme aracı" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Anasayfa" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Türkçe: Ozancan Karataş " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Etkin bağlantılar" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Seçilen uygulamayı SIGTERM sinyal kullanarak sonlandır CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Uygulamayı sonlandır" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Yeni geniş bant bağlantı ekle" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "Bağlantı ekle" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Seçilen bağlantıyı sil" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "Bağlantı sil" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Ad" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Bağlantı" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "Ağ kimliği" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "Dolaşım serbest" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Erişim numarası" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Kullanıcı adı" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Parola" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Kimlik doğrulama" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Hata" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Bana yeniden sor" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Çıkılsın ya da küçültülsün mü?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Uygulama penceresini nasıl kapatmak istersiniz?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Şimdi kapat" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Tepsiye ya da mesajlaşma menüsüne küçült" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Yeni SMS mesajı" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Kaydet" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Numara" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Etkinlikler için sesleri kullan" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Kapatıldığında pencereyi tepsiye gizle" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Pencere şeklini ve yerleşimini kaydet" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Programı otomatik başlatma listesine ekle" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Davranış" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Davranış" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Mesajları birleştir" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Klasörleri genişlet" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Eski mesajları üste yerleştir" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Sunum" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Geçerlilik sonu" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Olabiliyorsa iletim raporu gönder" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Mesaj parametreleri" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "Yaygın komutlar" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "İndirme Hızı görsel rengi" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Gönderme Hızı görsel rengi" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "Taşıma yönü" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "Soldan sağa" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "Sağdan sola" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Trafik" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Görseller" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Yeğlenen uç" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Aygıtı etkinleştir" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "SMS mesajı gönder" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "USSD isteği gönder" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Ağları tara" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "İşlemlerin zaman aşımı" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Modüller" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "Aktif sayfalar" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "Sayfalar" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Soru" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Trafik sınırları" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "Trafik sınırını etkinleştir" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Zaman sınırını etkinleştir" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Mesaj" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Eylem" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Mesajı görüntüle" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Bağlantıyı kes" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Zaman" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Dakika" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Saat" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Trafik istatistikleri" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Seçilen istatistik dönemi" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Ocak" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Şubat" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Mart" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Nisan" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Mayıs" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Haziran" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Temmuz" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Ağustos" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Eylül" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Ekim" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Kasım" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Aralık" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "USSD komutları" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Yeni USSD komutu ekle CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Ekle" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Seçilen USSD komutunu sil CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Sil" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "USSD yanıtlama kodlamasını GSM7'den UCS2'ye değiştirmeye zorla (Huawei modemler için yararlıdır) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Mesaj kodlamasını değiştir" modem-manager-gui-0.0.19.1/src/sms-page.c000664 001750 001750 00000240740 13261703575 017650 0ustar00alexalex000000 000000 /* * sms-page.c * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "modem-settings.h" #include "notifications.h" #include "ayatana.h" #include "strformat.h" #include "mmguicore.h" #include "smsdb.h" #include "contacts-page.h" #include "../resources.h" #include "settings.h" #include "sms-page.h" #include "encoding.h" #include "main.h" #if RESOURCE_SPELLCHECKER_ENABLED #include #endif enum _mmgui_main_smslist_columns { MMGUI_MAIN_SMSLIST_ICON = 0, MMGUI_MAIN_SMSLIST_SMS, MMGUI_MAIN_SMSLIST_ID, MMGUI_MAIN_SMSLIST_FOLDER, MMGUI_MAIN_SMSLIST_ISFOLDER, MMGUI_MAIN_SMSLIST_COLUMNS }; enum _mmgui_main_new_sms_validation { MMGUI_MAIN_NEW_SMS_VALIDATION_VALID = 0x00, MMGUI_MAIN_NEW_SMS_VALIDATION_WRONG_NUMBER = 0x01, MMGUI_MAIN_NEW_SMS_VALIDATION_WRONG_TEXT = 0x02 }; enum _mmgui_main_new_sms_dialog_result { MMGUI_MAIN_NEW_SMS_DIALOG_CLOSE = 0, MMGUI_MAIN_NEW_SMS_DIALOG_SEND, MMGUI_MAIN_NEW_SMS_DIALOG_SAVE }; enum _mmgui_main_sms_source { MMGUI_MAIN_SMS_SOURCE_MODEM = 0, MMGUI_MAIN_SMS_SOURCE_GNOME, MMGUI_MAIN_SMS_SOURCE_KDE, MMGUI_MAIN_SMS_SOURCE_HISTORY, MMGUI_MAIN_SMS_SOURCE_CAPTION, MMGUI_MAIN_SMS_SOURCE_SEPARATOR }; enum _mmgui_main_sms_completion { MMGUI_MAIN_SMS_COMPLETION_NAME = 0, MMGUI_MAIN_SMS_COMPLETION_NUMBER, MMGUI_MAIN_SMS_COMPLETION_SOURCE, MMGUI_MAIN_SMS_COMPLETION_COLUMNS }; enum _mmgui_main_sms_list { MMGUI_MAIN_SMS_LIST_NAME = 0, MMGUI_MAIN_SMS_LIST_NUMBER, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_LIST_COLUMNS }; struct _sms_selection_data { mmgui_application_t mmguiapp; gulong messageid; }; typedef struct _sms_selection_data *sms_selection_data_t; static void mmgui_main_sms_notification_show_window_callback(gpointer notification, gchar *action, gpointer userdata); static void mmgui_main_sms_select_entry_from_list(mmgui_application_t mmguiapp, gulong entryid, gboolean isfolder); static void mmgui_main_sms_get_message_list_hash_destroy_notify(gpointer data); static void mmgui_main_sms_new_dialog_number_changed_signal(GtkEditable *editable, gpointer data); static enum _mmgui_main_new_sms_dialog_result mmgui_main_sms_new_dialog(mmgui_application_t mmguiapp, const gchar *number, const gchar *text); static void mmgui_main_sms_list_selection_changed_signal(GtkTreeSelection *selection, gpointer data); static void mmgui_main_sms_list_row_activated_signal(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data); static void mmgui_main_sms_add_to_list(mmgui_application_t mmguiapp, mmgui_sms_message_t sms, GtkTreeModel *model, gboolean expand); static gboolean mmgui_main_sms_autocompletion_select_entry_signal(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data); static void mmgui_main_sms_autocompletion_model_fill(mmgui_application_t mmguiapp, guint source); static void mmgui_main_sms_menu_model_fill(mmgui_application_t mmguiapp, guint source); static void mmgui_main_sms_menu_data_func(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data); static gboolean mmgui_main_sms_menu_separator_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data); static gchar *mmgui_main_sms_list_select_entry_signal(GtkComboBox *combo, const gchar *path, gpointer user_data); static void mmgui_main_sms_load_numbers_history(mmgui_application_t mmguiapp); static void mmgui_main_sms_add_number_to_history(mmgui_application_t mmguiapp, gchar *number); static gchar *mmgui_main_sms_get_first_number_from_history(mmgui_application_t mmguiapp, gchar *defnumber); static gchar *mmgui_main_sms_get_name_for_number(mmgui_application_t mmguiapp, gchar *number); /*SMS*/ static void mmgui_main_sms_notification_show_window_callback(gpointer notification, gchar *action, gpointer userdata) { sms_selection_data_t seldata; seldata = (sms_selection_data_t)userdata; if (seldata == NULL) return; if (gtk_widget_get_sensitive(seldata->mmguiapp->window->smsbutton)) { /*Select received message*/ mmgui_main_sms_select_entry_from_list(seldata->mmguiapp, seldata->messageid, FALSE); /*Open SMS page*/ gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(seldata->mmguiapp->window->smsbutton), TRUE); /*Show window*/ gtk_window_present(GTK_WINDOW(seldata->mmguiapp->window->window)); } g_free(seldata); } static void mmgui_main_sms_select_entry_from_list(mmgui_application_t mmguiapp, gulong entryid, gboolean isfolder) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter folderiter, msgiter; GtkTreeIter *firstfolderiter, *entryiter; GtkTreePath *path; gboolean foldervalid, msgvalid; gulong curid; guint curfolder; gboolean curisfolder; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->smslist)); if ((model == NULL) || (selection == NULL)) return; firstfolderiter = NULL; entryiter = NULL; foldervalid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &folderiter); while ((foldervalid) && (entryiter == NULL)) { /*Folders*/ gtk_tree_model_get(model, &folderiter, MMGUI_MAIN_SMSLIST_ID, &curid, MMGUI_MAIN_SMSLIST_FOLDER, &curfolder, MMGUI_MAIN_SMSLIST_ISFOLDER, &curisfolder, -1); if (curisfolder) { /*First folder*/ if (firstfolderiter == NULL) { firstfolderiter = gtk_tree_iter_copy(&folderiter); } if (isfolder) { /*Save folder iterator*/ if (curfolder == entryid) { entryiter = gtk_tree_iter_copy(&folderiter); } } else if (gtk_tree_model_iter_has_child(model, &folderiter)) { /*Messages*/ if (gtk_tree_model_iter_children(model, &msgiter, &folderiter)) { do { gtk_tree_model_get(model, &msgiter, MMGUI_MAIN_SMSLIST_ID, &curid, MMGUI_MAIN_SMSLIST_FOLDER, &curfolder, MMGUI_MAIN_SMSLIST_ISFOLDER, &curisfolder, -1); /*Save message iterator*/ if ((!curisfolder) && (curid == entryid)) { entryiter = gtk_tree_iter_copy(&msgiter); } msgvalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &msgiter); } while ((msgvalid) && (entryiter == NULL)); } } } foldervalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &folderiter); } /*Unselect all rows as multiple selection mode enabled*/ gtk_tree_selection_unselect_all(selection); if (entryiter != NULL) { /*Message found - select it*/ gtk_tree_selection_select_iter(selection, entryiter); path = gtk_tree_model_get_path(model, entryiter); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(mmguiapp->window->smslist), path, NULL, TRUE, 0.5, 0.0); gtk_tree_path_free (path); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->smslist), "cursor-changed", NULL); gtk_tree_iter_free(entryiter); if (firstfolderiter != NULL) { /*'Incoming' folder placement - forget it*/ gtk_tree_iter_free(firstfolderiter); } } else if (firstfolderiter != NULL) { /*Select 'Incoming' folder if message isn't found*/ gtk_tree_selection_select_iter(selection, firstfolderiter); path = gtk_tree_model_get_path(model, firstfolderiter); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(mmguiapp->window->smslist), path, NULL, TRUE, 0.5, 0.0); gtk_tree_path_free (path); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->smslist), "cursor-changed", NULL); gtk_tree_iter_free(firstfolderiter); } } static void mmgui_main_sms_get_message_list_hash_destroy_notify(gpointer data) { /*Free unique sender name hash table entries*/ if (data != NULL) g_free(data); } static void mmgui_main_sms_execute_custom_command(mmgui_application_t mmguiapp, mmgui_sms_message_t message) { gint argcp, i, p; gchar **argvp; gboolean tplfound; GString *arg; GError *error; if ((mmguiapp == NULL) || (message == NULL)) return; /*Custom command*/ if (g_strcmp0(mmguiapp->options->smscustomcommand, "") != 0) { if (g_shell_parse_argv(mmguiapp->options->smscustomcommand, &argcp, &argvp, NULL)) { for (i = 0; i < argcp; i++) { /*First search for known templates*/ tplfound = FALSE; for (p = 0; argvp[i][p] != '\0'; p++) { if (argvp[i][p] == '%') { if ((argvp[i][p + 1] == 'n') || (argvp[i][p + 1] == 't')) { tplfound = TRUE; break; } } } /*Then replace templates if found*/ if (tplfound) { arg = g_string_new(NULL); for (p = 0; argvp[i][p] != '\0'; p++) { if (argvp[i][p] == '%') { if (argvp[i][p + 1] == 'n') { g_string_append(arg, mmgui_smsdb_message_get_number(message)); } else if (argvp[i][p + 1] == 't') { g_string_append(arg, mmgui_smsdb_message_get_text(message)); } p++; } else { g_string_append_c(arg, argvp[i][p]); } } g_free(argvp[i]); argvp[i] = g_string_free(arg, FALSE); } } /*Finally exucute custom command*/ error = NULL; #if GLIB_CHECK_VERSION(2,34,0) if (!g_spawn_async(NULL, argvp, NULL, G_SPAWN_SEARCH_PATH_FROM_ENVP, NULL, NULL, NULL, &error)) { #else if (!g_spawn_async(NULL, argvp, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error)) { #endif g_debug("Error spawning external command: %s\n", error->message); g_error_free(error); } g_strfreev(argvp); } } } gboolean mmgui_main_sms_get_message_list_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; GSList *messages, *iterator; mmgui_sms_message_t message; sms_selection_data_t seldata; guint nummessages, addedsender; gchar *notifycaption, *currentsender; GHashTable *sendernames; GHashTableIter sendernamesiter; gpointer sendernameskey, sendernamesvalue; GString *senderunames; enum _mmgui_notifications_sound soundmode; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; messages = mmguicore_sms_enum(mmguiappdata->mmguiapp->core, (gboolean)GPOINTER_TO_UINT(mmguiappdata->data)); if (messages == NULL) return FALSE; /*No new messages available yet*/ nummessages = 0; /*Hash table for unique sender names*/ sendernames = g_hash_table_new_full(g_str_hash, g_str_equal, mmgui_main_sms_get_message_list_hash_destroy_notify, NULL); seldata = NULL; for (iterator=messages; iterator; iterator=iterator->next) { message = iterator->data; if (!mmgui_smsdb_message_get_read(message)) { /*Add message to database*/ mmgui_smsdb_add_sms(mmguicore_devices_get_sms_db(mmguiappdata->mmguiapp->core), message); /*Add message to list*/ mmgui_main_sms_add_to_list(mmguiappdata->mmguiapp, message, NULL, mmguiappdata->mmguiapp->options->smsexpandfolders); /*Add unique sender name into hash table*/ if (g_hash_table_lookup(sendernames, message->number) == NULL) { currentsender = g_strdup(mmgui_smsdb_message_get_number(message)); g_hash_table_insert(sendernames, currentsender, currentsender); } /*Message selection structure*/ if (seldata == NULL) { seldata = g_new0(struct _sms_selection_data, 1); seldata->mmguiapp = mmguiappdata->mmguiapp; seldata->messageid = mmgui_smsdb_message_get_db_identifier(message); } /*New message received*/ nummessages++; } /*Execute custom command*/ mmgui_main_sms_execute_custom_command(mmguiappdata->mmguiapp, message); /*Delete message*/ mmguicore_sms_delete(mmguiappdata->mmguiapp->core, mmgui_smsdb_message_get_identifier(message)); /*Free message*/ mmgui_smsdb_message_free(message); } /*Free list*/ g_slist_free(messages); /*Form notification caption based on messages count*/ if (nummessages > 1) { notifycaption = g_strdup_printf(_("Received %u new SMS messages"), nummessages); } else if (nummessages == 1) { notifycaption = g_strdup(_("Received new SMS message")); } else { g_hash_table_destroy(sendernames); if (seldata != NULL) { g_free(seldata); } g_free(mmguiappdata); g_debug("Failed to add messages to database\n"); return FALSE; } /*Form list of unique senders for message text*/ senderunames = g_string_new(_("Message senders: ")); /*Number of unique messages*/ addedsender = 0; /*Iterate through hash table*/ g_hash_table_iter_init(&sendernamesiter, sendernames); while (g_hash_table_iter_next(&sendernamesiter, &sendernameskey, &sendernamesvalue)) { if (addedsender == 0) { g_string_append_printf(senderunames, " %s", (gchar *)sendernameskey); } else { g_string_append_printf(senderunames, ", %s", (gchar *)sendernameskey); } addedsender++; } senderunames = g_string_append_c(senderunames, '.'); /*Show notification/play sound*/ if (mmguiappdata->mmguiapp->options->usesounds) { soundmode = MMGUI_NOTIFICATIONS_SOUND_MESSAGE; } else { soundmode = MMGUI_NOTIFICATIONS_SOUND_NONE; } /*Ayatana menu*/ mmgui_ayatana_set_unread_messages_number(mmguiappdata->mmguiapp->ayatana, mmgui_smsdb_get_unread_messages(mmguicore_devices_get_sms_db(mmguiappdata->mmguiapp->core))); /*Notification*/ mmgui_notifications_show(mmguiappdata->mmguiapp->notifications, notifycaption, senderunames->str, soundmode, mmgui_main_sms_notification_show_window_callback, seldata); /*Free resources*/ g_free(notifycaption); g_hash_table_destroy(sendernames); g_string_free(senderunames, TRUE); g_free(mmguiappdata); return FALSE; } gboolean mmgui_main_sms_get_message_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; guint messageseq; mmgui_sms_message_t message; gchar *notifycaption, *notifytext; enum _mmgui_notifications_sound soundmode; sms_selection_data_t seldata; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; messageseq = GPOINTER_TO_UINT(mmguiappdata->data); message = mmguicore_sms_get(mmguiappdata->mmguiapp->core, messageseq); if (message == NULL) return FALSE; /*Add message to database*/ mmgui_smsdb_add_sms(mmguicore_devices_get_sms_db(mmguiappdata->mmguiapp->core), message); /*Add message to list*/ mmgui_main_sms_add_to_list(mmguiappdata->mmguiapp, message, NULL, mmguiappdata->mmguiapp->options->smsexpandfolders); /*Remove message from device*/ mmguicore_sms_delete(mmguiappdata->mmguiapp->core, mmgui_smsdb_message_get_identifier(message)); /*Form notification*/ notifycaption = g_strdup(_("Received new SMS message")); notifytext = g_strdup_printf("%s: %s", mmgui_smsdb_message_get_number(message), mmgui_smsdb_message_get_text(message)); /*Show notification/play sound*/ if (mmguiappdata->mmguiapp->options->usesounds) { soundmode = MMGUI_NOTIFICATIONS_SOUND_MESSAGE; } else { soundmode = MMGUI_NOTIFICATIONS_SOUND_NONE; } /*Message selection structure*/ seldata = g_new0(struct _sms_selection_data, 1); seldata->mmguiapp = mmguiappdata->mmguiapp; seldata->messageid = mmgui_smsdb_message_get_db_identifier(message); /*Ayatana menu*/ mmgui_ayatana_set_unread_messages_number(mmguiappdata->mmguiapp->ayatana, mmgui_smsdb_get_unread_messages(mmguicore_devices_get_sms_db(mmguiappdata->mmguiapp->core))); /*Execute custom command*/ mmgui_main_sms_execute_custom_command(mmguiappdata->mmguiapp, message); /*Notification*/ mmgui_notifications_show(mmguiappdata->mmguiapp->notifications, notifycaption, notifytext, soundmode, mmgui_main_sms_notification_show_window_callback, seldata); /*Free resources*/ g_free(notifycaption); g_free(notifytext); g_free(mmguiappdata); mmgui_smsdb_message_free(message); return FALSE; } gboolean mmgui_main_sms_handle_new_day_from_thread(gpointer data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeIter folderiter, msgiter; gboolean foldervalid, msgvalid; gulong curid; guint curfolder; gboolean curisfolder; mmgui_sms_message_t message; smsdb_t smsdb; time_t timestamp; gchar *markup; gchar timestr[200]; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); smsdb = mmguicore_devices_get_sms_db(mmguiapp->core); if ((model == NULL) || (smsdb == NULL)) return FALSE; foldervalid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &folderiter); while (foldervalid) { /*Folders*/ gtk_tree_model_get(model, &folderiter, MMGUI_MAIN_SMSLIST_ID, &curid, MMGUI_MAIN_SMSLIST_FOLDER, &curfolder, MMGUI_MAIN_SMSLIST_ISFOLDER, &curisfolder, -1); if (gtk_tree_model_iter_has_child(model, &folderiter)) { /*Messages*/ if (gtk_tree_model_iter_children(model, &msgiter, &folderiter)) { do { gtk_tree_model_get(model, &msgiter, MMGUI_MAIN_SMSLIST_ID, &curid, MMGUI_MAIN_SMSLIST_FOLDER, &curfolder, MMGUI_MAIN_SMSLIST_ISFOLDER, &curisfolder, -1); message = mmgui_smsdb_read_sms_message(smsdb, curid); if (message != NULL) { /*Current time*/ timestamp = mmgui_smsdb_message_get_timestamp(message); /*New markup string*/ markup = g_strdup_printf(_("%s\n%s"), mmgui_smsdb_message_get_number(message), mmgui_str_format_sms_time(timestamp, timestr, sizeof(timestr))); /*Update markup string*/ gtk_tree_store_set(GTK_TREE_STORE(model), &msgiter, MMGUI_MAIN_SMSLIST_SMS, markup, -1); /*Free resources*/ g_free(markup); mmgui_smsdb_message_free(message); } msgvalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &msgiter); } while (msgvalid); } } foldervalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &folderiter); } return FALSE; } static void mmgui_main_sms_new_dialog_number_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_data_t appdata; const gchar *number; GtkTextBuffer *buffer; gboolean newnumvalid; gint bufferchars; gint *smsvalidflags; gint newsmsvalidflags; GtkTextIter start, end; gchar *text; gchar messagecountertext[32]; guint symbolsleft, nummessages; appdata = (mmgui_application_data_t)data; if (appdata == NULL) return; smsvalidflags = (gint *)appdata->data; /*Validate SMS number*/ number = gtk_entry_get_text(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry)); newnumvalid = mmguicore_sms_validate_number(number); /*Validate text and count symbols*/ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(appdata->mmguiapp->window->smstextview)); if (buffer != NULL) { bufferchars = gtk_text_buffer_get_char_count(buffer); gtk_text_buffer_get_bounds(buffer, &start, &end); text = gtk_text_buffer_get_text(buffer, (const GtkTextIter *)&start, (const GtkTextIter *)&end, TRUE); if (text != NULL) { mmgui_encoding_count_sms_messages((const gchar *)text, &nummessages, &symbolsleft); memset(messagecountertext, 0, sizeof(messagecountertext)); g_snprintf(messagecountertext, sizeof(messagecountertext), "%u/%u", symbolsleft, nummessages); gtk_label_set_text(GTK_LABEL(appdata->mmguiapp->window->newsmscounterlabel), messagecountertext); g_free(text); } } else { bufferchars = 0; } /*Validation flags*/ newsmsvalidflags = MMGUI_MAIN_NEW_SMS_VALIDATION_VALID; if (!newnumvalid) { newsmsvalidflags &= MMGUI_MAIN_NEW_SMS_VALIDATION_WRONG_NUMBER; } if (bufferchars == 0) { newsmsvalidflags &= MMGUI_MAIN_NEW_SMS_VALIDATION_WRONG_TEXT; } if (((!newnumvalid) || (bufferchars == 0)) && ((*smsvalidflags == MMGUI_MAIN_NEW_SMS_VALIDATION_VALID) || (*smsvalidflags != newsmsvalidflags))) { #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CAPS_LOCK_WARNING); #endif if (!newnumvalid) { gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, _("SMS number is not valid\nOnly numbers from 2 to 20 digits without\nletters and symbols can be used")); } else if (bufferchars == 0) { gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, _("SMS text is not valid\nPlease write some text to send")); } gtk_widget_set_sensitive(appdata->mmguiapp->window->newsmssendtb, FALSE); gtk_widget_set_sensitive(appdata->mmguiapp->window->newsmssavetb, FALSE); *smsvalidflags = newsmsvalidflags; } else if ((newnumvalid) && (bufferchars > 0)) { #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CAPS_LOCK_WARNING); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(appdata->mmguiapp->window->smsnumberentry), GTK_ENTRY_ICON_SECONDARY, NULL); gtk_widget_set_sensitive(appdata->mmguiapp->window->newsmssendtb, TRUE); gtk_widget_set_sensitive(appdata->mmguiapp->window->newsmssavetb, TRUE); *smsvalidflags = newsmsvalidflags; } } static enum _mmgui_main_new_sms_dialog_result mmgui_main_sms_new_dialog(mmgui_application_t mmguiapp, const gchar *number, const gchar *text) { struct _mmgui_application_data appdata; GtkTextBuffer *buffer; gint response; gulong editnumsignal, edittextsignal; gint smsvalidflags; enum _mmgui_main_new_sms_dialog_result result; if (mmguiapp == NULL) return MMGUI_MAIN_NEW_SMS_DIALOG_CLOSE; smsvalidflags = MMGUI_MAIN_NEW_SMS_VALIDATION_VALID; appdata.mmguiapp = mmguiapp; appdata.data = &smsvalidflags; editnumsignal = g_signal_connect(G_OBJECT(mmguiapp->window->smsnumberentry), "changed", G_CALLBACK(mmgui_main_sms_new_dialog_number_changed_signal), &appdata); if (number != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->smsnumberentry), number); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->smsnumberentry), "changed"); } buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->smstextview)); if (buffer != NULL) { edittextsignal = g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(mmgui_main_sms_new_dialog_number_changed_signal), &appdata); if (text != NULL) { gtk_text_buffer_set_text(buffer, text, -1); g_signal_emit_by_name(G_OBJECT(buffer), "changed"); } } response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->newsmsdialog)); g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->smsnumberentry), editnumsignal); if (buffer != NULL) { g_signal_handler_disconnect(G_OBJECT(buffer), edittextsignal); } gtk_widget_hide(mmguiapp->window->newsmsdialog); switch (response) { case 0: result = MMGUI_MAIN_NEW_SMS_DIALOG_CLOSE; break; case 1: result = MMGUI_MAIN_NEW_SMS_DIALOG_SEND; break; case 2: result = MMGUI_MAIN_NEW_SMS_DIALOG_SAVE; break; default: result = MMGUI_MAIN_NEW_SMS_DIALOG_CLOSE; break; } return result; } void mmgui_main_sms_new_send_signal(GtkToolButton *toolbutton, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; gtk_dialog_response(GTK_DIALOG(mmguiapp->window->newsmsdialog), MMGUI_MAIN_NEW_SMS_DIALOG_SEND); } void mmgui_main_sms_new_save_signal(GtkToolButton *toolbutton, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; gtk_dialog_response(GTK_DIALOG(mmguiapp->window->newsmsdialog), MMGUI_MAIN_NEW_SMS_DIALOG_SAVE); } gboolean mmgui_main_sms_send(mmgui_application_t mmguiapp, const gchar *number, const gchar *text) { GtkTextBuffer *buffer; GtkTextIter start, end; gchar *resnumber, *restext; enum _mmgui_main_new_sms_dialog_result result; mmgui_sms_message_t message; gchar *statusmsg; if ((mmguiapp == NULL) || (number == NULL) || (text == NULL)) return FALSE; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->smstextview)); if (buffer == NULL) return FALSE; /*Open dialog for user interaction*/ result = mmgui_main_sms_new_dialog(mmguiapp, number, text); if ((result == MMGUI_MAIN_NEW_SMS_DIALOG_SEND) || (result == MMGUI_MAIN_NEW_SMS_DIALOG_SAVE)) { /*Get final message number and text*/ resnumber = (gchar *)gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->smsnumberentry)); gtk_text_buffer_get_bounds(buffer, &start, &end); restext = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); /*Send message*/ if (result == MMGUI_MAIN_NEW_SMS_DIALOG_SEND) { /*Start progress menubar*/ statusmsg = g_strdup_printf(_("Sending SMS to number \"%s\"..."), resnumber); mmgui_ui_infobar_show(mmguiapp, statusmsg, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, NULL, NULL); g_free(statusmsg); /*Send message*/ if (mmguicore_sms_send(mmguiapp->core, resnumber, restext, mmguiapp->options->smsvalidityperiod, mmguiapp->options->smsdeliveryreport)) { /*Form message*/ message = mmgui_smsdb_message_create(); mmgui_smsdb_message_set_number(message, resnumber); mmgui_smsdb_message_set_text(message, restext, FALSE); mmgui_smsdb_message_set_read(message, TRUE); mmgui_smsdb_message_set_folder(message, MMGUI_SMSDB_SMS_FOLDER_SENT); /*Add message to database*/ mmgui_smsdb_add_sms(mmguicore_devices_get_sms_db(mmguiapp->core), message); /*Add message to list*/ mmgui_main_sms_add_to_list(mmguiapp, message, NULL, mmguiapp->options->smsexpandfolders); /*Free message*/ mmgui_smsdb_message_free(message); /*Save last number*/ mmgui_main_sms_add_number_to_history(mmguiapp, resnumber); return TRUE; } else { /*Show menubar with error message*/ mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, _("Wrong number or device not ready")); return FALSE; } /*Save message*/ } else if (result == MMGUI_MAIN_NEW_SMS_DIALOG_SAVE) { /*Start progress menubar*/ mmgui_ui_infobar_show(mmguiapp, _("Saving SMS..."), MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, NULL, NULL); /*Form message*/ message = mmgui_smsdb_message_create(); mmgui_smsdb_message_set_number(message, resnumber); mmgui_smsdb_message_set_text(message, restext, FALSE); mmgui_smsdb_message_set_read(message, TRUE); mmgui_smsdb_message_set_folder(message, MMGUI_SMSDB_SMS_FOLDER_DRAFTS); /*Add message to database*/ mmgui_smsdb_add_sms(mmguicore_devices_get_sms_db(mmguiapp->core), message); /*Add message to list*/ mmgui_main_sms_add_to_list(mmguiapp, message, NULL, mmguiapp->options->smsexpandfolders); /*Free message*/ mmgui_smsdb_message_free(message); /*Save last number*/ mmgui_main_sms_add_number_to_history(mmguiapp, resnumber); /*Show result*/ mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); return TRUE; } } return FALSE; } void mmgui_main_sms_remove(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeSelection *selection; GList *selected; GList *listiter; gchar *pathstr; GtkTreeIter iter; GtkTreeRowReference *rowref; GtkTreePath *treepath; GList *rowreflist; guint rowcount; guint rmcount; gchar *questionstr; gchar *errorstr; gulong id; gboolean isfolder; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->smslist)); if ((model != NULL) && (selection != NULL)) { selected = gtk_tree_selection_get_selected_rows(selection, &model); if (selected != NULL) { /*Get selected iter and find messages*/ rowreflist = NULL; rowcount = 0; selected = g_list_reverse(selected); for (listiter = selected; listiter; listiter = listiter->next) { treepath = listiter->data; pathstr = gtk_tree_path_to_string(treepath); if (pathstr != NULL) { if (gtk_tree_model_get_iter_from_string(model, &iter, (const gchar *)pathstr)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); if (!isfolder) { rowref = gtk_tree_row_reference_new(model, treepath); rowreflist = g_list_prepend(rowreflist, rowref); rowcount++; } } g_free(pathstr); } } /*Work with collected row references*/ if ((rowcount > 0) && (rowreflist != NULL)) { questionstr = g_strdup_printf(_("Really want to remove messages (%u) ?"), rowcount); if (mmgui_main_ui_question_dialog_open(mmguiapp, _("Remove messages"), questionstr)) { rmcount = 0; for (listiter = rowreflist; listiter; listiter = listiter->next) { treepath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)listiter->data); if (treepath != NULL) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, treepath)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_ID, &id, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); if (!isfolder) { if (mmgui_smsdb_remove_sms_message(mmguicore_devices_get_sms_db(mmguiapp->core), id)) { /*Remove entry from list*/ gtk_tree_store_remove(GTK_TREE_STORE(model), &iter); /*Ayatana menu*/ mmgui_ayatana_set_unread_messages_number(mmguiapp->ayatana, mmgui_smsdb_get_unread_messages(mmguicore_devices_get_sms_db(mmguiapp->core))); /*Count message*/ rmcount++; } } } } } /*Show error message if some messages weren't removed*/ if (rmcount < rowcount) { errorstr = g_strdup_printf(_("Some messages weren\'t removed (%u)"), rowcount - rmcount); mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, errorstr); g_free(errorstr); } } g_list_foreach(rowreflist, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(rowreflist); g_free(questionstr); } } } } void mmgui_main_sms_remove_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_sms_remove(mmguiapp); } void mmgui_main_sms_new(mmgui_application_t mmguiapp) { gchar *lastnumber; guint smscaps; if (mmguiapp == NULL) return; if (mmguicore_devices_get_current(mmguiapp->core) == NULL) return; smscaps = mmguicore_sms_get_capabilities(mmguiapp->core); if (smscaps & MMGUI_SMS_CAPS_SEND) { /*Restore last number*/ lastnumber = mmgui_main_sms_get_first_number_from_history(mmguiapp, "8888"); /*Open 'New message' dialog*/ mmgui_main_sms_send(mmguiapp, lastnumber, ""); } } void mmgui_main_sms_new_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_sms_new(mmguiapp); } void mmgui_main_sms_answer(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeSelection *selection; GList *selected; GList *listiter; GtkTreePath *treepath; gchar *pathstr; GtkTreeIter iter; guint smscaps; gulong id; guint folder; gboolean isfolder; mmgui_sms_message_t message; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->smslist)); smscaps = mmguicore_sms_get_capabilities(mmguiapp->core); if ((model != NULL) && (selection != NULL) && (smscaps & MMGUI_SMS_CAPS_SEND)) { /*Get selected messages and select first one*/ selected = gtk_tree_selection_get_selected_rows(selection, &model); if (selected != NULL) { selected = g_list_reverse(selected); for (listiter = selected; listiter; listiter = listiter->next) { treepath = listiter->data; pathstr = gtk_tree_path_to_string(treepath); if (pathstr != NULL) { if (gtk_tree_model_get_iter_from_string(model, &iter, (const gchar *)pathstr)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_ID, &id, MMGUI_MAIN_SMSLIST_FOLDER, &folder, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); if (!isfolder) { message = mmgui_smsdb_read_sms_message(mmguicore_devices_get_sms_db(mmguiapp->core), id); if (message != NULL) { /*Open dialog*/ if (mmguicore_sms_validate_number(mmgui_smsdb_message_get_number(message))) { if (folder == MMGUI_SMSDB_SMS_FOLDER_DRAFTS) { mmgui_main_sms_send(mmguiapp, mmgui_smsdb_message_get_number(message), mmgui_smsdb_message_get_text(message)); } else { mmgui_main_sms_send(mmguiapp, mmgui_smsdb_message_get_number(message), ""); } break; } /*Free message*/ mmgui_smsdb_message_free(message); } } } g_free(pathstr); } } } } } void mmgui_main_sms_answer_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_sms_answer(mmguiapp); } static void mmgui_main_sms_list_selection_changed_signal(GtkTreeSelection *selection, gpointer data) { mmgui_application_t mmguiapp; mmgui_sms_message_t sms; guint smscaps; GtkTreeModel *model; GList *selected; GList *listiter; gchar *pathstr; GtkTextIter starttextiter, endtextiter; GtkTextBuffer *textbuffer; time_t timestamp; gchar timestr[200]; GtkTreeIter iter; GtkTreeRowReference *rowref; GtkTreePath *treepath; GList *msgreflist, *folderreflist; guint msgcount, foldercount, folder; gulong id, lastid; gboolean isfolder, numchecked, canremove, cananswer; gchar *msgnumber; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->smstext)); smscaps = mmguicore_sms_get_capabilities(mmguiapp->core); if (textbuffer != NULL) { /*Clear text*/ gtk_text_buffer_get_bounds(textbuffer, &starttextiter, &endtextiter); gtk_text_buffer_delete(textbuffer, &starttextiter, &endtextiter); } if ((model != NULL) && (selection != NULL) && (textbuffer != NULL)) { selected = gtk_tree_selection_get_selected_rows(selection, &model); if (selected != NULL) { /*Get selected iter and find messages and folders*/ msgreflist = NULL; msgcount = 0; folderreflist = NULL; foldercount = 0; canremove = FALSE; cananswer = FALSE; selected = g_list_reverse(selected); for (listiter = selected; listiter; listiter = listiter->next) { treepath = listiter->data; pathstr = gtk_tree_path_to_string(treepath); if (pathstr != NULL) { if (gtk_tree_model_get_iter_from_string(model, &iter, (const gchar *)pathstr)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); rowref = gtk_tree_row_reference_new(model, treepath); if (isfolder) { folderreflist = g_list_prepend(folderreflist, rowref); foldercount++; } else { msgreflist = g_list_prepend(msgreflist, rowref); msgcount++; } } g_free(pathstr); } } lastid = 0; /*Show messages using collected row references*/ if ((msgcount > 0) && (msgreflist != NULL)) { numchecked = FALSE; msgnumber = NULL; for (listiter = msgreflist; listiter; listiter = listiter->next) { treepath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)listiter->data); if (treepath != NULL) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, treepath)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_ID, &id, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); if (!isfolder) { sms = mmgui_smsdb_read_sms_message(mmguicore_devices_get_sms_db(mmguiapp->core), id); if (sms != NULL) { /*Message heading*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert_with_tags(textbuffer, &endtextiter, mmgui_smsdb_message_get_number(sms), -1, mmguiapp->window->smsheadingtag, NULL); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n", -1); /*Timestamp*/ timestamp = mmgui_smsdb_message_get_timestamp(sms); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert_with_tags(textbuffer, &endtextiter, mmgui_str_format_sms_time(timestamp, timestr, sizeof(timestr)), -1, mmguiapp->window->smsdatetag, NULL); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n\n", -1); /*Message text*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, mmgui_smsdb_message_get_text(sms), -1); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n", -1); /*Test if sender number is available*/ if (smscaps & MMGUI_SMS_CAPS_SEND) { if (!numchecked) { if (mmguicore_sms_validate_number(mmgui_smsdb_message_get_number(sms)) && (smscaps & MMGUI_SMS_CAPS_SEND)) { msgnumber = g_strdup(mmgui_smsdb_message_get_number(sms)); cananswer = TRUE; } numchecked = TRUE; } else { if (cananswer) { if (mmgui_smsdb_message_get_number(sms) != NULL) { if (!g_str_equal(msgnumber, mmgui_smsdb_message_get_number(sms))) { cananswer = FALSE; } } else { cananswer = FALSE; } } } } canremove = TRUE; /*Set read flag if not set before*/ if (!mmgui_smsdb_message_get_read(sms)) { if (mmgui_smsdb_set_message_read_status(mmguicore_devices_get_sms_db(mmguiapp->core), id, TRUE)) { gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MMGUI_MAIN_SMSLIST_ICON, mmguiapp->window->smsreadicon, -1); } /*Ayatana menu*/ mmgui_ayatana_set_unread_messages_number(mmguiapp->ayatana, mmgui_smsdb_get_unread_messages(mmguicore_devices_get_sms_db(mmguiapp->core))); } /*Save last message ID*/ lastid = id; /*Free SMS message*/ mmgui_smsdb_message_free(sms); } } } } } g_list_foreach(msgreflist, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(msgreflist); if (msgnumber != NULL) { g_free(msgnumber); } /*Save selected message identifier*/ if (lastid != 0) { mmgui_modem_settings_set_boolean(mmguiapp->modemsettings, "sms_is_folder", FALSE); mmgui_modem_settings_set_int64(mmguiapp->modemsettings, "sms_entry_id", lastid); } } /*Enable Answer and remove buttons if needed*/ gtk_widget_set_sensitive(mmguiapp->window->answersmsbutton, cananswer); gtk_widget_set_sensitive(mmguiapp->window->removesmsbutton, canremove); /*Show folders descriptions using collected row references*/ if ((foldercount > 0) && (folderreflist != NULL)) { /*Show tips only if no messages selected*/ if (lastid == 0) { for (listiter = folderreflist; listiter; listiter = listiter->next) { treepath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)listiter->data); if (treepath != NULL) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, treepath)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMSLIST_FOLDER, &folder, MMGUI_MAIN_SMSLIST_ISFOLDER, &isfolder, -1); if (isfolder) { /*Folder selected*/ switch (folder) { case MMGUI_SMSDB_SMS_FOLDER_INCOMING: /*Folder heading*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert_with_tags(textbuffer, &endtextiter, _("Incoming"), -1, mmguiapp->window->smsheadingtag, NULL); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n", -1); /*Folder description*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, _("This is folder for your incoming SMS messages.\nYou can answer selected message using 'Answer' button."), -1); break; case MMGUI_SMSDB_SMS_FOLDER_SENT: /*Folder heading*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert_with_tags(textbuffer, &endtextiter, _("Sent"), -1, mmguiapp->window->smsheadingtag, NULL); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n", -1); /*Folder description*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, _("This is folder for your sent SMS messages."), -1); break; case MMGUI_SMSDB_SMS_FOLDER_DRAFTS: /*Folder heading*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert_with_tags(textbuffer, &endtextiter, _("Drafts"), -1, mmguiapp->window->smsheadingtag, NULL); gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, "\n", -1); /*Folder description*/ gtk_text_buffer_get_end_iter(textbuffer, &endtextiter); gtk_text_buffer_insert(textbuffer, &endtextiter, _("This is folder for your SMS message drafts.\nSelect message and click 'Answer' button to start editing."), -1); break; default: break; } } } } } } g_list_foreach(folderreflist, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(folderreflist); /*Save selected folder identifier*/ if (lastid == 0) { mmgui_modem_settings_set_boolean(mmguiapp->modemsettings, "sms_is_folder", FALSE); mmgui_modem_settings_set_int64(mmguiapp->modemsettings, "sms_entry_id", id); } } } } } static void mmgui_main_sms_list_row_activated_signal(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_sms_answer(mmguiapp); } static void mmgui_main_sms_add_to_list(mmgui_application_t mmguiapp, mmgui_sms_message_t sms, GtkTreeModel *model, gboolean expand) { GtkTreeIter iter, child; GtkTreePath *expandpath; time_t timestamp; gchar *markup; gchar timestr[200]; GdkPixbuf *icon; guint folder; if ((mmguiapp == NULL) || (sms == NULL)) return; /*Get model if needed*/ if (model == NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); } /*Get message timestamp*/ timestamp = mmgui_smsdb_message_get_timestamp(sms); /*Format caption*/ markup = g_strdup_printf(_("%s\n%s"), mmgui_smsdb_message_get_number(sms), mmgui_str_format_sms_time(timestamp, timestr, sizeof(timestr))); /*Choose icon*/ if (mmgui_smsdb_message_get_read(sms)) { icon = mmguiapp->window->smsreadicon; } else { icon = mmguiapp->window->smsunreadicon; } /*Create iterators*/ expandpath = NULL; switch (mmgui_smsdb_message_get_folder(sms)) { case MMGUI_SMSDB_SMS_FOLDER_INCOMING: folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; gtk_tree_model_get_iter(model, &iter, mmguiapp->window->incomingpath); if ((expand) && (!gtk_tree_model_iter_has_child(model, &iter))) { expandpath = mmguiapp->window->incomingpath; } break; case MMGUI_SMSDB_SMS_FOLDER_SENT: folder = MMGUI_SMSDB_SMS_FOLDER_SENT; gtk_tree_model_get_iter(model, &iter, mmguiapp->window->sentpath); if ((expand) && (!gtk_tree_model_iter_has_child(model, &iter))) { expandpath = mmguiapp->window->sentpath; } break; case MMGUI_SMSDB_SMS_FOLDER_DRAFTS: folder = MMGUI_SMSDB_SMS_FOLDER_DRAFTS; gtk_tree_model_get_iter(model, &iter, mmguiapp->window->draftspath); if ((expand) && (!gtk_tree_model_iter_has_child(model, &iter))) { expandpath = mmguiapp->window->draftspath; } break; default: folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; gtk_tree_model_get_iter(model, &iter, mmguiapp->window->incomingpath); if ((expand) && (!gtk_tree_model_iter_has_child(model, &iter))) { expandpath = mmguiapp->window->incomingpath; } break; } /*Place new message on top or append to list*/ if (mmguiapp->options->smsoldontop) { gtk_tree_store_append(GTK_TREE_STORE(model), &child, &iter); } else { gtk_tree_store_insert(GTK_TREE_STORE(model), &child, &iter, 0); } /*Finally add message*/ gtk_tree_store_set(GTK_TREE_STORE(model), &child, MMGUI_MAIN_SMSLIST_ICON, icon, MMGUI_MAIN_SMSLIST_SMS, markup, MMGUI_MAIN_SMSLIST_ID, mmgui_smsdb_message_get_db_identifier(sms), MMGUI_MAIN_SMSLIST_FOLDER, folder, MMGUI_MAIN_SMSLIST_ISFOLDER, FALSE, -1); /*Free markup string*/ g_free(markup); /*Expand list with first message if needed*/ if (expandpath != NULL) { gtk_tree_view_expand_to_path(GTK_TREE_VIEW(mmguiapp->window->smslist), expandpath); } } gboolean mmgui_main_sms_list_fill(mmgui_application_t mmguiapp) { GSList *smslist; GtkTreeModel *model; GtkTreeIter iter; gint i; GSList *iterator; mmgui_application_data_t appdata; gchar *foldercomments[3] = {_("Incoming\nIncoming messages"), _("Sent\nSent messages"), _("Drafts\nMessage drafts")}; const guint folderids[3] = {MMGUI_SMSDB_SMS_FOLDER_INCOMING, MMGUI_SMSDB_SMS_FOLDER_SENT, MMGUI_SMSDB_SMS_FOLDER_DRAFTS}; GtkTreePath **folderpath[3] = {&mmguiapp->window->incomingpath, &mmguiapp->window->sentpath, &mmguiapp->window->draftspath}; GdkPixbuf **foldericon[3] = {&mmguiapp->window->smsrecvfoldericon, &mmguiapp->window->smssentfoldericon, &mmguiapp->window->smsdraftsfoldericon}; if (mmguiapp == NULL) return FALSE; if (mmguicore_devices_get_current(mmguiapp->core) != NULL) { smslist = mmgui_smsdb_read_sms_list(mmguicore_devices_get_sms_db(mmguiapp->core)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); if (model != NULL) { /*Detach and clear model*/ g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->smslist), NULL); gtk_tree_store_clear(GTK_TREE_STORE(model)); /*Add folders*/ for (i = 0; i < 3; i++) { gtk_tree_store_append(GTK_TREE_STORE(model), &iter, NULL); gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MMGUI_MAIN_SMSLIST_ICON, *foldericon[i], MMGUI_MAIN_SMSLIST_SMS, foldercomments[i], MMGUI_MAIN_SMSLIST_ID, 0, MMGUI_MAIN_SMSLIST_FOLDER, folderids[i], MMGUI_MAIN_SMSLIST_ISFOLDER, TRUE, -1); *(folderpath[i]) = gtk_tree_model_get_path(model, &iter); } /*Add messages*/ if (smslist != NULL) { for (iterator=smslist; iterator; iterator=iterator->next) { mmgui_main_sms_add_to_list(mmguiapp, (mmgui_sms_message_t)iterator->data, model, FALSE); } } /*Attach model*/ gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->smslist), model); g_object_unref(model); /*Expand folders if needed*/ if (mmguiapp->options->smsexpandfolders) { gtk_tree_view_expand_all(GTK_TREE_VIEW(mmguiapp->window->smslist)); } } /*Free resources*/ if (smslist != NULL) { mmgui_smsdb_message_free_list(smslist); } /*Get new messages from modem*/ appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = GUINT_TO_POINTER(mmguiapp->options->concatsms); g_idle_add(mmgui_main_sms_get_message_list_from_thread, appdata); } return FALSE; } void mmgui_main_sms_restore_settings_for_modem(mmgui_application_t mmguiapp) { gulong entryid; gboolean entryisfolder; if (mmguiapp == NULL) return; if (mmguiapp->modemsettings == NULL) return; /*Get settings*/ entryid = (gulong)mmgui_modem_settings_get_int64(mmguiapp->modemsettings, "sms_entry_id", 0); entryisfolder = mmgui_modem_settings_get_boolean(mmguiapp->modemsettings, "sms_is_folder", TRUE); /*Select last entry*/ mmgui_main_sms_select_entry_from_list(mmguiapp, entryid, entryisfolder); /*Add history entries to dropdown list model*/ mmgui_main_sms_load_numbers_history(mmguiapp); /*Restore modem contacts if available*/ mmgui_main_sms_restore_contacts_for_modem(mmguiapp); } void mmgui_main_sms_restore_contacts_for_modem(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; /*Add contacts from modem to autocompletion model*/ mmgui_main_sms_autocompletion_model_fill(mmguiapp, MMGUI_MAIN_CONTACT_MODEM); /*Add contacts from modem to dropdown list model*/ mmgui_main_sms_menu_model_fill(mmguiapp, MMGUI_MAIN_SMS_SOURCE_MODEM); } static void mmgui_main_sms_load_numbers_history(mmgui_application_t mmguiapp) { gchar **numbers; GSList *iterator; guint numcount, i; gchar *number, *fullname; GtkTreeIter iter; if (mmguiapp == NULL) return; numbers = mmgui_modem_settings_get_string_list(mmguiapp->modemsettings, "sms_numbers_history", NULL); if (numbers == NULL) return; mmguiapp->window->smsnumlisthistory = NULL; i = 0; numcount = 0; while (numbers[i] != NULL) { /*Limit the number of recent entries*/ if (numcount >= 5) { break; } /*Validate every entry*/ if (mmguicore_sms_validate_number(numbers[i])) { mmguiapp->window->smsnumlisthistory = g_slist_prepend(mmguiapp->window->smsnumlisthistory, g_strdup(numbers[i])); numcount++; } i++; } /*Free string list*/ g_strfreev(numbers); if (mmguiapp->window->smsnumlisthistory != NULL) { /*Add to dropdown list*/ for (iterator=mmguiapp->window->smsnumlisthistory; iterator; iterator=iterator->next) { number = iterator->data; fullname = mmgui_main_sms_get_name_for_number(mmguiapp, number); gtk_tree_store_insert(mmguiapp->window->smsnumlistmodel, &iter, NULL, 0); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, fullname, MMGUI_MAIN_SMS_LIST_NUMBER, number, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_HISTORY, -1); g_free(fullname); } /*Reverse linked list*/ mmguiapp->window->smsnumlisthistory = g_slist_reverse(mmguiapp->window->smsnumlisthistory); } } static void mmgui_main_sms_add_number_to_history(mmgui_application_t mmguiapp, gchar *number) { GtkTreeIter iter; guint contactsource; gchar *contactnum, *oldnumber, *fullname; gboolean valid; gchar **numbers; GSList *iterator; gsize length; guint i; if ((mmguiapp == NULL) || (number == NULL)) return; if ((mmguiapp->window->smsnumlisthistory == NULL) || ((mmguiapp->window->smsnumlisthistory != NULL) && (g_slist_length(mmguiapp->window->smsnumlisthistory) < 5))) { /*Just add string to linked list and dropdown list*/ /*Add to the beginning of linked list*/ mmguiapp->window->smsnumlisthistory = g_slist_prepend(mmguiapp->window->smsnumlisthistory, g_strdup(number)); /*Add to beginning of dropdown list*/ fullname = mmgui_main_sms_get_name_for_number(mmguiapp, number); gtk_tree_store_insert(mmguiapp->window->smsnumlistmodel, &iter, NULL, 0); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, fullname, MMGUI_MAIN_SMS_LIST_NUMBER, number, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_HISTORY, -1); g_free(fullname); } else { /*Add new entry and remove old one*/ iterator = g_slist_last(mmguiapp->window->smsnumlisthistory); oldnumber = iterator->data; /*Remove from linked list*/ mmguiapp->window->smsnumlisthistory = g_slist_remove(mmguiapp->window->smsnumlisthistory, oldnumber); /*Add to the beginning of linked list*/ mmguiapp->window->smsnumlisthistory = g_slist_prepend(mmguiapp->window->smsnumlisthistory, g_strdup(number)); /*Remove from dropdown list*/ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); while (valid) { gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, MMGUI_MAIN_SMS_LIST_SOURCE, &contactsource, MMGUI_MAIN_SMS_LIST_NUMBER, &contactnum, -1); if ((contactsource == MMGUI_MAIN_SMS_SOURCE_HISTORY) && (g_str_equal(contactnum, oldnumber))) { gtk_tree_store_remove(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &iter); g_free(contactnum); break; } g_free(contactnum); valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } g_free(oldnumber); /*Add to beginning of dropdown list*/ fullname = mmgui_main_sms_get_name_for_number(mmguiapp, number); gtk_tree_store_insert(mmguiapp->window->smsnumlistmodel, &iter, NULL, 0); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, fullname, MMGUI_MAIN_SMS_LIST_NUMBER, number, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_HISTORY, -1); g_free(fullname); } /*Save changed list*/ length = g_slist_length(mmguiapp->window->smsnumlisthistory); numbers = g_malloc0((length * sizeof(gchar *)) + 1); i = 0; for (iterator=mmguiapp->window->smsnumlisthistory; iterator; iterator=iterator->next) { contactnum = iterator->data; numbers[i] = g_strdup(contactnum); i++; } numbers[length] = NULL; mmgui_modem_settings_set_string_list(mmguiapp->modemsettings, "sms_numbers_history", numbers); g_strfreev(numbers); } static gchar *mmgui_main_sms_get_first_number_from_history(mmgui_application_t mmguiapp, gchar *defnumber) { if (mmguiapp != NULL) { if (mmguiapp->window->smsnumlisthistory != NULL) { /*Most recent number from list*/ return mmguiapp->window->smsnumlisthistory->data; } else { /*Hisory linked list doesn't contain numbers*/ return defnumber; } } else { /*Something wrong*/ return defnumber; } } static gchar *mmgui_main_sms_get_name_for_number(mmgui_application_t mmguiapp, gchar *number) { gchar *res; GSList *contacts[3]; guint contactscaps, i; GSList *iterator; mmgui_contact_t contact; if ((mmguiapp == NULL) || (number == NULL)) return NULL; contacts[0] = NULL; contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (contactscaps & MMGUI_CONTACTS_CAPS_EXPORT) { contacts[0] = mmguicore_contacts_list(mmguiapp->core); } contacts[1] = NULL; if (mmgui_addressbooks_get_gnome_contacts_available(mmguiapp->addressbooks)) { contacts[1] = mmgui_addressbooks_get_gnome_contacts_list(mmguiapp->addressbooks); } contacts[2] = NULL; if (mmgui_addressbooks_get_kde_contacts_available(mmguiapp->addressbooks)) { contacts[2] = mmgui_addressbooks_get_kde_contacts_list(mmguiapp->addressbooks); } i = 0; res = NULL; while ((i < 3) && (res == NULL)) { if (contacts[i] != NULL) { for (iterator=contacts[i]; iterator; iterator=iterator->next) { contact = iterator->data; if (contact->number != NULL) { if (g_str_equal(number, contact->number)) { res = g_strdup_printf("%s (%s)", contact->name, number); break; } } if (contact->number2 != NULL) { if (g_str_equal(number, contact->number2)) { res = g_strdup_printf("%s (%s)", contact->name, number); break; } } } } i++; } if (res == NULL) { res = g_strdup(number); } return res; } static gboolean mmgui_main_sms_autocompletion_select_entry_signal(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { mmgui_application_t mmguiapp; gchar *number; mmguiapp = (mmgui_application_t)user_data; gtk_tree_model_get(model, iter, MMGUI_MAIN_SMS_COMPLETION_NUMBER, &number, -1); if (number != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->smsnumberentry), number); g_free(number); } return TRUE; } static void mmgui_main_sms_autocompletion_model_fill(mmgui_application_t mmguiapp, guint source) { GSList *contacts; guint contactscaps; GtkTreeIter iter; GSList *iterator; mmgui_contact_t contact; if (mmguiapp == NULL) return; if (mmguiapp->addressbooks == NULL) return; if (mmguiapp->window->smscompletionmodel == NULL) return; contacts = NULL; if (source == MMGUI_MAIN_CONTACT_GNOME) { /*Contacts from GNOME addressbook*/ if (mmgui_addressbooks_get_gnome_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_gnome_contacts_list(mmguiapp->addressbooks); } } else if (source == MMGUI_MAIN_CONTACT_KDE) { /*Contacts from KDE addressbook*/ if (mmgui_addressbooks_get_kde_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_kde_contacts_list(mmguiapp->addressbooks); } } else if (source == MMGUI_MAIN_CONTACT_MODEM) { /*Contacts from modem*/ contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (contactscaps & MMGUI_CONTACTS_CAPS_EXPORT) { contacts = mmguicore_contacts_list(mmguiapp->core); } } if (contacts != NULL) { for (iterator=contacts; iterator; iterator=iterator->next) { contact = iterator->data; /*Add first number*/ if (mmguicore_sms_validate_number(contact->number)) { gtk_list_store_append(GTK_LIST_STORE(mmguiapp->window->smscompletionmodel), &iter); gtk_list_store_set(GTK_LIST_STORE(mmguiapp->window->smscompletionmodel), &iter, MMGUI_MAIN_SMS_COMPLETION_NAME, contact->name, MMGUI_MAIN_SMS_COMPLETION_NUMBER, contact->number, MMGUI_MAIN_SMS_COMPLETION_SOURCE, source, -1); } /*Add second number if exists*/ if (mmguicore_sms_validate_number(contact->number2)) { gtk_list_store_append(GTK_LIST_STORE(mmguiapp->window->smscompletionmodel), &iter); gtk_list_store_set(GTK_LIST_STORE(mmguiapp->window->smscompletionmodel), &iter, MMGUI_MAIN_SMS_COMPLETION_NAME, contact->name, MMGUI_MAIN_SMS_COMPLETION_NUMBER, contact->number2, MMGUI_MAIN_SMS_COMPLETION_SOURCE, source, -1); } } } } static void mmgui_main_sms_menu_model_fill(mmgui_application_t mmguiapp, guint source) { GSList *contacts; guint contactscaps; GtkTreeIter iter, contiter; GSList *iterator; gchar *fullname; mmgui_contact_t contact; if (mmguiapp == NULL) return; if (mmguiapp->addressbooks == NULL) return; if (mmguiapp->window->smsnumlistmodel == NULL) return; contacts = NULL; if (source == MMGUI_MAIN_SMS_SOURCE_GNOME) { /*Contacts from GNOME addressbook*/ if (mmgui_addressbooks_get_gnome_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_gnome_contacts_list(mmguiapp->addressbooks); if (contacts != NULL) { if (mmguiapp->window->smsnumlistgnomepath == NULL) { gtk_tree_store_append(mmguiapp->window->smsnumlistmodel, &iter, NULL); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, _("GNOME contacts"), MMGUI_MAIN_SMS_LIST_NUMBER, NULL, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_CAPTION, -1); mmguiapp->window->smsnumlistgnomepath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } else { gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, mmguiapp->window->smsnumlistgnomepath); } } } } else if (source == MMGUI_MAIN_SMS_SOURCE_KDE) { /*Contacts from KDE addressbook*/ if (mmgui_addressbooks_get_kde_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_kde_contacts_list(mmguiapp->addressbooks); if (contacts != NULL) { if (mmguiapp->window->smsnumlistkdepath == NULL) { gtk_tree_store_append(mmguiapp->window->smsnumlistmodel, &iter, NULL); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, _("KDE contacts"), MMGUI_MAIN_SMS_LIST_NUMBER, NULL, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_CAPTION, -1); mmguiapp->window->smsnumlistkdepath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } else { gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, mmguiapp->window->smsnumlistkdepath); } } } } else if (source == MMGUI_MAIN_SMS_SOURCE_MODEM) { /*Contacts from modem*/ contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (contactscaps & MMGUI_CONTACTS_CAPS_EXPORT) { contacts = mmguicore_contacts_list(mmguiapp->core); if (contacts != NULL) { if (mmguiapp->window->smsnumlistmodempath == NULL) { gtk_tree_store_append(mmguiapp->window->smsnumlistmodel, &iter, NULL); gtk_tree_store_set(mmguiapp->window->smsnumlistmodel, &iter, MMGUI_MAIN_SMS_LIST_NAME, _("Modem contacts"), MMGUI_MAIN_SMS_LIST_NUMBER, NULL, MMGUI_MAIN_SMS_LIST_SOURCE, MMGUI_MAIN_SMS_SOURCE_CAPTION, -1); mmguiapp->window->smsnumlistmodempath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } else { gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, mmguiapp->window->smsnumlistmodempath); } } } } if (contacts != NULL) { for (iterator=contacts; iterator; iterator=iterator->next) { contact = iterator->data; /*Add first number*/ if (mmguicore_sms_validate_number(contact->number)) { fullname = g_strdup_printf("%s (%s)", contact->name, contact->number); gtk_tree_store_append(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &contiter, &iter); gtk_tree_store_set(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &contiter, MMGUI_MAIN_SMS_LIST_NAME, fullname, MMGUI_MAIN_SMS_LIST_NUMBER, contact->number, MMGUI_MAIN_SMS_LIST_SOURCE, source, -1); g_free(fullname); } /*Add second number if exists*/ if (mmguicore_sms_validate_number(contact->number2)) { fullname = g_strdup_printf("%s (%s)", contact->name, contact->number2); gtk_tree_store_append(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &contiter, &iter); gtk_tree_store_set(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &contiter, MMGUI_MAIN_SMS_LIST_NAME, fullname, MMGUI_MAIN_SMS_LIST_NUMBER, contact->number2, MMGUI_MAIN_SMS_LIST_SOURCE, source, -1); g_free(fullname); } } } } static void mmgui_main_sms_menu_data_func(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { gboolean sensitive; sensitive = !gtk_tree_model_iter_has_child(tree_model, iter); g_object_set(cell, "sensitive", sensitive, NULL); } static gboolean mmgui_main_sms_menu_separator_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { gint source; gtk_tree_model_get(model, iter, MMGUI_MAIN_SMS_LIST_SOURCE, &source, -1); if (source == MMGUI_MAIN_SMS_SOURCE_SEPARATOR) { return TRUE; } else { return FALSE; } } static gchar *mmgui_main_sms_list_select_entry_signal(GtkComboBox *combo, const gchar *path, gpointer user_data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeIter iter; gchar *number; mmguiapp = (mmgui_application_t)user_data; model = gtk_combo_box_get_model(combo); gtk_tree_model_get_iter_from_string(model, &iter, path); gtk_tree_model_get(model, &iter, MMGUI_MAIN_SMS_LIST_NUMBER, &number, -1); if (number == NULL) { number = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->smsnumberentry))); } return number; } #if RESOURCE_SPELLCHECKER_ENABLED void mmgui_main_sms_new_disable_spellchecker_signal(GtkToolButton *toolbutton, gpointer data) { mmgui_application_t mmguiapp; const gchar *langcode; gchar *langname; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (mmguiapp->window->newsmsspellchecker == NULL) return; if (gtk_spell_checker_get_from_text_view(GTK_TEXT_VIEW(mmguiapp->window->smstextview)) != NULL) { /*Detach spellchecker*/ g_object_ref(mmguiapp->window->newsmsspellchecker); gtk_spell_checker_detach(mmguiapp->window->newsmsspellchecker); gmm_settings_set_boolean(mmguiapp->settings, "spell_checker_enabled", FALSE); gtk_label_set_text(GTK_LABEL(mmguiapp->window->newsmslanguagelabel), _("Disabled")); } else { /*Attach spellchecker*/ gtk_spell_checker_attach(mmguiapp->window->newsmsspellchecker, GTK_TEXT_VIEW(mmguiapp->window->smstextview)); g_object_unref(mmguiapp->window->newsmsspellchecker); gmm_settings_set_boolean(mmguiapp->settings, "spell_checker_enabled", TRUE); langcode = gtk_spell_checker_get_language(mmguiapp->window->newsmsspellchecker); langname = gtk_spell_checker_decode_language_code(langcode); gtk_label_set_text(GTK_LABEL(mmguiapp->window->newsmslanguagelabel), langname); g_free(langname); } } static void mmgui_main_sms_spellcheck_menu_activate_signal(GtkMenuItem *menuitem, gpointer data) { mmgui_application_data_t appdata; gchar *langname; appdata = (mmgui_application_data_t)data; if (appdata == NULL) return; if (gtk_spell_checker_get_from_text_view(GTK_TEXT_VIEW(appdata->mmguiapp->window->smstextview)) == NULL) { /*First attach spell checker if disabled*/ gtk_spell_checker_attach(appdata->mmguiapp->window->newsmsspellchecker, GTK_TEXT_VIEW(appdata->mmguiapp->window->smstextview)); g_object_unref(appdata->mmguiapp->window->newsmsspellchecker); gmm_settings_set_boolean(appdata->mmguiapp->settings, "spell_checker_enabled", TRUE); } /*Then set language*/ langname = gtk_spell_checker_decode_language_code((const gchar *)appdata->data); gtk_spell_checker_set_language(appdata->mmguiapp->window->newsmsspellchecker, appdata->data, NULL); gmm_settings_set_string(appdata->mmguiapp->settings, "spell_checker_language", appdata->data); gtk_label_set_text(GTK_LABEL(appdata->mmguiapp->window->newsmslanguagelabel), langname); g_free(langname); } gboolean mmgui_main_sms_spellcheck_init(mmgui_application_t mmguiapp) { GList *languages, *iterator; mmgui_application_data_t appdata; gint i, localenum; gchar *locale, *locpart, *userlang, *langname, *langcode; GtkWidget *langmenuentry; gboolean langset; /*Create spell checker*/ mmguiapp->window->newsmsspellchecker = gtk_spell_checker_new(); /*Change toolbar button*/ mmguiapp->window->newsmslanguagelabel = gtk_label_new(_("Disabled")); gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(mmguiapp->window->newsmsspellchecktb), mmguiapp->window->newsmslanguagelabel); gtk_label_set_ellipsize(GTK_LABEL(mmguiapp->window->newsmslanguagelabel), PANGO_ELLIPSIZE_END); gtk_widget_show(mmguiapp->window->newsmslanguagelabel); /*Fill combo box with languages*/ languages = gtk_spell_checker_get_language_list(); if (languages != NULL) { /*Create menu widget*/ mmguiapp->window->newsmslangmenu = gtk_menu_new(); /*Get current locale*/ locale = getenv("LANG"); if (locale != NULL) { locale = g_strdup(locale); locpart = strchr(locale, '.'); /*Drop encoding part if any*/ if (locpart != NULL) { locpart[0] = '\0'; } } else { locale = g_strdup("en_US"); } /*Get selected language*/ userlang = gmm_settings_get_string(mmguiapp->settings, "spell_checker_language", locale); langset = FALSE; localenum = -1; i = 0; for (iterator = languages; iterator != NULL; iterator = iterator->next) { /*Get language code and name*/ langcode = (gchar *)iterator->data; langname = gtk_spell_checker_decode_language_code((const gchar *)langcode); /*Create menu entry*/ langmenuentry = gtk_menu_item_new_with_label(langname); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->newsmslangmenu), langmenuentry); /*Set signal*/ appdata = g_new(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = g_strdup(langcode); g_signal_connect(G_OBJECT(langmenuentry), "activate", G_CALLBACK(mmgui_main_sms_spellcheck_menu_activate_signal), appdata); mmguiapp->window->newsmscodes = g_slist_prepend(mmguiapp->window->newsmscodes, appdata); /*Set default language*/ if (g_str_equal(langcode, userlang)) { gtk_spell_checker_set_language(mmguiapp->window->newsmsspellchecker, langcode, NULL); if (gmm_settings_get_boolean(mmguiapp->settings, "spell_checker_enabled", TRUE)) { gtk_label_set_text(GTK_LABEL(mmguiapp->window->newsmslanguagelabel), langname); } gtk_widget_set_sensitive(mmguiapp->window->newsmsspellchecktb, TRUE); langset = TRUE; } /*Try to get locale-specific number*/ if ((!langset) && (localenum == -1)) { if (g_str_equal(langcode, locale)) { localenum = i; } } /*Free language name*/ g_free(langname); i++; } /*Set first language or locale*/ if (!langset) { if (localenum != -1) { langcode = (gchar *)g_list_nth_data(languages, localenum); } else { langcode = (gchar *)g_list_nth_data(languages, 0); } langname = gtk_spell_checker_decode_language_code((const gchar *)langcode); gtk_spell_checker_set_language(mmguiapp->window->newsmsspellchecker, langcode, NULL); if (gmm_settings_get_boolean(mmguiapp->settings, "spell_checker_enabled", TRUE)) { gtk_label_set_text(GTK_LABEL(mmguiapp->window->newsmslanguagelabel), langname); } gtk_widget_set_sensitive(mmguiapp->window->newsmsspellchecktb, TRUE); g_free(langname); } /*Show menu*/ gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(mmguiapp->window->newsmsspellchecktb), mmguiapp->window->newsmslangmenu); gtk_widget_show_all(mmguiapp->window->newsmslangmenu); /*Activate spell checker*/ gtk_spell_checker_attach(mmguiapp->window->newsmsspellchecker, GTK_TEXT_VIEW(mmguiapp->window->smstextview)); if (!gmm_settings_get_boolean(mmguiapp->settings, "spell_checker_enabled", TRUE)) { /*Attach and detach spell checker*/ g_object_ref(mmguiapp->window->newsmsspellchecker); gtk_spell_checker_detach(mmguiapp->window->newsmsspellchecker); } /*Free resources*/ g_list_foreach(languages, (GFunc)g_free, NULL); g_list_free(languages); g_free(userlang); g_free(locale); } return TRUE; } #else void mmgui_main_sms_new_disable_spellchecker_signal(GtkToolButton *toolbutton, gpointer data) { } #endif void mmgui_main_sms_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkTreeViewColumn *column; GtkTreeStore *store; GtkTextBuffer *textbuffer; if (mmguiapp == NULL) return; column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, _("SMS")); renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_set_attributes(column, renderer, "pixbuf", MMGUI_MAIN_SMSLIST_ICON, NULL); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_set_attributes(column, renderer, "markup", MMGUI_MAIN_SMSLIST_SMS, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->smslist), column); store = gtk_tree_store_new(MMGUI_MAIN_SMSLIST_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_ULONG, G_TYPE_UINT, G_TYPE_BOOLEAN); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->smslist), GTK_TREE_MODEL(store)); g_object_unref(store); /*Create textview formatting tags*/ textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->smstext)); mmguiapp->window->smsheadingtag = gtk_text_buffer_create_tag(textbuffer, "smsheading", "weight", PANGO_WEIGHT_BOLD, "size", 15 * PANGO_SCALE, NULL); mmguiapp->window->smsdatetag = gtk_text_buffer_create_tag(textbuffer, "xx-small", "scale", PANGO_SCALE_XX_SMALL, NULL); /*Open message signal*/ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->smslist)); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(mmgui_main_sms_list_selection_changed_signal), mmguiapp); /*Answer message signal*/ g_signal_connect(G_OBJECT(mmguiapp->window->smslist), "row-activated", G_CALLBACK(mmgui_main_sms_list_row_activated_signal), mmguiapp); /*New SMS entry autocompletion*/ mmguiapp->window->smscompletion = gtk_entry_completion_new(); /*Search for names*/ gtk_entry_completion_set_text_column(mmguiapp->window->smscompletion, MMGUI_MAIN_SMS_COMPLETION_NAME); /*Attach to entry widget*/ gtk_entry_set_completion(GTK_ENTRY(mmguiapp->window->smsnumberentry), mmguiapp->window->smscompletion); /*Create model for contacts from addressbooks*/ mmguiapp->window->smscompletionmodel = gtk_list_store_new(MMGUI_MAIN_SMS_COMPLETION_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_entry_completion_set_model(mmguiapp->window->smscompletion, GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel)); /*Select autocompletion entry*/ g_signal_connect(G_OBJECT(mmguiapp->window->smscompletion), "match-selected", G_CALLBACK(mmgui_main_sms_autocompletion_select_entry_signal), mmguiapp); /*Dropdown list*/ mmguiapp->window->smsnumlistgnomepath = NULL; mmguiapp->window->smsnumlistkdepath = NULL; mmguiapp->window->smsnumlistmodempath = NULL; /*Dropdown SMS numbers list model*/ mmguiapp->window->smsnumlistmodel = gtk_tree_store_new(MMGUI_MAIN_SMS_LIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); /*Cell renderer*/ renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(mmguiapp->window->smsnumbercombo), renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(mmguiapp->window->smsnumbercombo), renderer, "markup", 0, NULL); /*Functions for separator and unsensible entries*/ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(mmguiapp->window->smsnumbercombo), renderer, mmgui_main_sms_menu_data_func, mmguiapp, NULL); gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(mmguiapp->window->smsnumbercombo), mmgui_main_sms_menu_separator_func, mmguiapp, NULL); /*Set combo box model*/ gtk_combo_box_set_model(GTK_COMBO_BOX(mmguiapp->window->smsnumbercombo), GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel)); /*Select dropdown entry signal*/ g_signal_connect(G_OBJECT(mmguiapp->window->smsnumbercombo), "format-entry-text", G_CALLBACK(mmgui_main_sms_list_select_entry_signal), mmguiapp); } void mmgui_main_sms_load_contacts_from_system_addressbooks(mmgui_application_t mmguiapp) { /*Autocompletion*/ mmgui_main_sms_autocompletion_model_fill(mmguiapp, MMGUI_MAIN_CONTACT_GNOME); mmgui_main_sms_autocompletion_model_fill(mmguiapp, MMGUI_MAIN_CONTACT_KDE); /*Dropdown list*/ mmgui_main_sms_menu_model_fill(mmguiapp, MMGUI_MAIN_SMS_SOURCE_GNOME); mmgui_main_sms_menu_model_fill(mmguiapp, MMGUI_MAIN_SMS_SOURCE_KDE); } void mmgui_main_sms_list_clear(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTextBuffer *buffer; GtkTextIter siter, eiter; GtkTreeIter iter, catiter; GtkTreePath *refpath; GtkTreeRowReference *reference; GSList *reflist, *iterator; gboolean validcont, validcat; guint contactsource; gchar *pathstr; if (mmguiapp == NULL) return; /*Clear SMS list*/ model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->smslist)); if (model != NULL) { gtk_tree_store_clear(GTK_TREE_STORE(model)); } /*Clear SMS text field*/ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->smstext)); if (buffer != NULL) { gtk_text_buffer_get_bounds(buffer, &siter, &eiter); gtk_text_buffer_delete(buffer, &siter, &eiter); } /*Set sensitivity of SMS control buttons*/ gtk_widget_set_sensitive(mmguiapp->window->removesmsbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->answersmsbutton, FALSE); /*Remove modem contacts from autocompletion model*/ if (mmguiapp->window->smscompletionmodel != NULL) { reflist = NULL; /*Iterate through model and save references*/ validcont = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), &iter); while (validcont) { gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), &iter, MMGUI_MAIN_SMS_COMPLETION_SOURCE, &contactsource, -1); /*Save references only on modem contacts*/ if (contactsource == MMGUI_MAIN_SMS_COMPLETION_SOURCE) { refpath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), &iter); if (refpath != NULL) { reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), refpath); if (reference != NULL) { reflist = g_slist_prepend(reflist, reference); } } } validcont = gtk_tree_model_iter_next(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), &iter); } /*Remove contacts*/ if (reflist != NULL) { for (iterator = reflist; iterator != NULL; iterator = iterator->next) { refpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)iterator->data); if (refpath) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smscompletionmodel), &iter, refpath)) { gtk_list_store_remove(GTK_LIST_STORE(mmguiapp->window->smscompletionmodel), &iter); } } } /*Clear resources allocated for references*/ g_slist_foreach(reflist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(reflist); } } /*Clear contacts from dropdown list*/ if ((mmguiapp->window->smsnumlistmodempath != NULL) && (mmguiapp->window->smsnumlistmodel != NULL)) { pathstr = gtk_tree_path_to_string(mmguiapp->window->smsnumlistmodempath); if (pathstr != NULL) { reflist = NULL; /*Iterate through model and save references*/ validcat = gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &catiter, pathstr); while (validcat) { if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &catiter)) { validcont = gtk_tree_model_iter_children(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, &catiter); while (validcont) { gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, MMGUI_MAIN_SMS_LIST_SOURCE, &contactsource, -1); /*Save references only on modem contacts*/ if (contactsource == MMGUI_MAIN_SMS_SOURCE_MODEM) { refpath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); if (refpath != NULL) { reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), refpath); if (reference != NULL) { reflist = g_slist_prepend(reflist, reference); } } } validcont = gtk_tree_model_iter_next(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } } validcat = gtk_tree_model_iter_next(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &catiter); } /*Remove contacts*/ if (reflist != NULL) { for (iterator = reflist; iterator != NULL; iterator = iterator->next) { refpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)iterator->data); if (refpath) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, refpath)) { gtk_tree_store_remove(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &iter); } } } /*Clear resources allocated for references*/ g_slist_foreach(reflist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(reflist); } g_free(pathstr); } } /*Clear history contacts from dropdown list*/ if (mmguiapp->window->smsnumlistmodel != NULL) { reflist = NULL; /*Iterate through model and save references*/ validcat = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); while (validcat) { gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, MMGUI_MAIN_SMS_LIST_SOURCE, &contactsource, -1); if (contactsource == MMGUI_MAIN_SMS_SOURCE_HISTORY) { refpath = gtk_tree_model_get_path(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); if (refpath != NULL) { reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), refpath); if (reference != NULL) { reflist = g_slist_prepend(reflist, reference); } } } validcat = gtk_tree_model_iter_next(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter); } /*Remove contacts*/ if (reflist != NULL) { for (iterator = reflist; iterator != NULL; iterator = iterator->next) { refpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)iterator->data); if (refpath) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(mmguiapp->window->smsnumlistmodel), &iter, refpath)) { gtk_tree_store_remove(GTK_TREE_STORE(mmguiapp->window->smsnumlistmodel), &iter); } } } /*Clear resources allocated for references*/ g_slist_foreach(reflist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(reflist); } } /*Free history list*/ if (mmguiapp->window->smsnumlisthistory != NULL) { g_slist_foreach(mmguiapp->window->smsnumlisthistory, (GFunc)g_free, NULL); g_slist_free(mmguiapp->window->smsnumlisthistory); } } modem-manager-gui-0.0.19.1/src/trafficdb.c000664 001750 001750 00000073673 13261703575 020071 0ustar00alexalex000000 000000 /* * trafficdb.c * * Copyright 2012-2015 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include "trafficdb.h" #define TRAFFICDB_DAY_XML "\n\t%" G_GUINT64_FORMAT "\n\t%" G_GUINT64_FORMAT "\n\t%" G_GUINT64_FORMAT "\n\t%u\n\t%" G_GUINT64_FORMAT "\n\t%" G_GUINT64_FORMAT "\n\t%" G_GUINT64_FORMAT "\n\t%u\n\n\n" enum _mmgui_trafficdb_xml_elements { TRAFFICDB_XML_PARAM_DAY_TIME = 0, TRAFFICDB_XML_PARAM_DAY_RX, TRAFFICDB_XML_PARAM_DAY_TX, TRAFFICDB_XML_PARAM_DAY_DURATION, TRAFFICDB_XML_PARAM_SESSION_TIME, TRAFFICDB_XML_PARAM_SESSION_RX, TRAFFICDB_XML_PARAM_SESSION_TX, TRAFFICDB_XML_PARAM_SESSION_DURATION, TRAFFICDB_XML_PARAM_NULL }; static gint mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_NULL; static guint mmgui_trafficdb_get_month_days(guint month, guint year); static guint mmgui_trafficdb_get_year_days(guint year); static time_t mmgui_trafficdb_truncate_day_timesatmp(time_t currenttime); static time_t mmgui_trafficdb_get_month_begin_timestamp(guint month, guint year); static time_t mmgui_trafficdb_get_month_end_timestamp(guint month, guint year); static time_t mmgui_trafficdb_get_year_begin_timestamp(guint year); static time_t mmgui_trafficdb_get_year_end_timestamp(guint year); static mmgui_day_traffic_t mmgui_trafficdb_xml_parse(gchar *xml, gsize size); static void mmgui_trafficdb_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); static void mmgui_trafficdb_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error); static void mmgui_trafficdb_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error); #define MMGUI_TRAFFICDB_WEEK_END 6 #define MMGUI_TRAFFICDB_WEEK_BEGIN 0 #define MMGUI_TRAFFICDB_LEAP_YEAR_DAYS 366 #define MMGUI_TRAFFICDB_NORMAL_YEAR_DAYS 365 #define MMGUI_TRAFFICDB_LEAP_YEAR_FEBRUARY_DAYS 29 static guint mmgui_trafficdb_month_days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; static guint mmgui_trafficdb_get_month_days(guint month, guint year) { guint days; if (month > 11) return 0; if ((month == 1) && ((year % 4) == 0)) { days = MMGUI_TRAFFICDB_LEAP_YEAR_FEBRUARY_DAYS; } else { days = mmgui_trafficdb_month_days[month]; } return days; } static guint mmgui_trafficdb_get_year_days(guint year) { if ((year % 4) == 0) { return MMGUI_TRAFFICDB_LEAP_YEAR_DAYS; } else { return MMGUI_TRAFFICDB_NORMAL_YEAR_DAYS; } } time_t mmgui_trafficdb_get_new_day_timesatmp(time_t currenttime, gboolean *monthsend, gboolean *yearsend) { struct tm *ltime; time_t restime; if (monthsend != NULL) *monthsend = FALSE; if (yearsend != NULL) *yearsend = FALSE; ltime = localtime((const time_t *)¤ttime); g_debug("Current timesatamp: [%u] %s", (guint)currenttime, ctime(¤ttime)); /*Day of week*/ if ((ltime->tm_wday + 1) > MMGUI_TRAFFICDB_WEEK_END) { /*Next week*/ ltime->tm_wday = MMGUI_TRAFFICDB_WEEK_BEGIN; } else { /*Next day*/ ltime->tm_wday++; } /*Year*/ if ((ltime->tm_yday + 1) >= mmgui_trafficdb_get_year_days(ltime->tm_year)) { /*Next year*/ ltime->tm_year++; ltime->tm_yday = 0; if (monthsend != NULL) *monthsend = TRUE; if (yearsend != NULL) *yearsend = TRUE; } else { /*Next day*/ ltime->tm_yday++; } /*Month*/ if ((ltime->tm_mday + 1) > mmgui_trafficdb_get_month_days(ltime->tm_mon, ltime->tm_year)) { /*New month*/ if ((ltime->tm_mon + 1) > 11) { /*New year*/ ltime->tm_mon = 0; if (monthsend != NULL) *monthsend = TRUE; if (yearsend != NULL) *yearsend = TRUE; } else { /*Next month*/ ltime->tm_mon++; if (monthsend != NULL) *monthsend = TRUE; } ltime->tm_mday = 1; } else { /*Next day in month*/ ltime->tm_mday++; } /*Hours, minutes, seconds*/ ltime->tm_hour = 0; ltime->tm_min = 0; ltime->tm_sec = 0; restime = mktime(ltime); g_debug("New day timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } static time_t mmgui_trafficdb_truncate_day_timesatmp(time_t currenttime) { struct tm *ltime; time_t restime; ltime = localtime((const time_t *)¤ttime); g_debug("Non-truncated timestamp: [%u] %s", (guint)currenttime, ctime(¤ttime)); /*Hours, minutes, seconds*/ ltime->tm_hour = 0; ltime->tm_min = 0; ltime->tm_sec = 0; restime = mktime(ltime); g_debug("Truncated timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } static time_t mmgui_trafficdb_get_month_begin_timestamp(guint month, guint year) { struct tm ltime; time_t restime; /*Year, month, day*/ ltime.tm_year = year - 1900; ltime.tm_mon = month; ltime.tm_mday = 1; /*Hours, minutes, seconds*/ ltime.tm_hour = 0; ltime.tm_min = 0; ltime.tm_sec = 0; restime = mktime(<ime); g_debug("Month begin timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } static time_t mmgui_trafficdb_get_month_end_timestamp(guint month, guint year) { struct tm ltime; time_t restime; /*Year, month, day*/ ltime.tm_year = year - 1900; ltime.tm_mon = month; ltime.tm_mday = mmgui_trafficdb_get_month_days(month, year); /*Hours, minutes, seconds*/ ltime.tm_hour = 23; ltime.tm_min = 59; ltime.tm_sec = 59; restime = mktime(<ime); g_debug("Month end timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } static time_t mmgui_trafficdb_get_year_begin_timestamp(guint year) { struct tm ltime; time_t restime; /*Year, month, day*/ ltime.tm_year = year - 1900; ltime.tm_mon = 0; ltime.tm_mday = 1; /*Hours, minutes, seconds*/ ltime.tm_hour = 0; ltime.tm_min = 0; ltime.tm_sec = 0; restime = mktime(<ime); g_debug("Year begin timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } static time_t mmgui_trafficdb_get_year_end_timestamp(guint year) { struct tm ltime; time_t restime; /*Year, month, day*/ ltime.tm_year = year - 1900; ltime.tm_mon = 11; ltime.tm_mday = mmgui_trafficdb_get_month_days(11, year); /*Hours, minutes, seconds*/ ltime.tm_hour = 23; ltime.tm_min = 59; ltime.tm_sec = 59; restime = mktime(<ime); g_debug("Year end timestamp: [%u] %s", (guint)restime, ctime(&restime)); return restime; } mmgui_trafficdb_t mmgui_trafficdb_open(const gchar *persistentid, const gchar *internalid) { mmgui_trafficdb_t trafficdb; const gchar *newfilepath; const gchar *newfilename; gchar filename[64]; const gchar *oldfilename; time_t currenttime; if (persistentid == NULL) return NULL; /*Form path using XDG standard*/ newfilepath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_data_dir(), "modem-manager-gui", "devices", persistentid, NULL); if (newfilepath == NULL) return NULL; /*If directory structure not exists, create it*/ if (!g_file_test(newfilepath, G_FILE_TEST_IS_DIR)) { if (g_mkdir_with_parents(newfilepath, S_IRUSR|S_IWUSR|S_IXUSR|S_IXGRP|S_IXOTH) == -1) { g_warning("Failed to make XDG data directory: %s", newfilepath); } } /*Form file name*/ newfilename = g_build_filename(newfilepath, "traffic.gdbm", NULL); g_free((gchar *)newfilepath); if (newfilename == NULL) return NULL; /*If file already exists, just work with it*/ if ((!g_file_test(newfilename, G_FILE_TEST_EXISTS)) && (internalid != NULL)) { /*Form old-style file path*/ memset(filename, 0, sizeof(filename)); g_snprintf(filename, sizeof(filename), "traffic-%s.gdbm", internalid); oldfilename = g_build_filename(g_get_home_dir(), ".config", "modem-manager-gui", filename, NULL); if (oldfilename != NULL) { /*If file exists in old location, move it*/ if (g_file_test(oldfilename, G_FILE_TEST_EXISTS)) { if (g_rename(oldfilename, newfilename) == -1) { g_warning("Failed to move file into XDG data directory: %s -> %s", oldfilename, newfilename); } } } g_free((gchar *)oldfilename); } trafficdb = g_new(struct _mmgui_trafficdb, 1); currenttime = time(NULL); trafficdb->filepath = newfilename; trafficdb->presdaytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); trafficdb->nextdaytime = mmgui_trafficdb_get_new_day_timesatmp(currenttime, &trafficdb->monthendstomorrow, &trafficdb->yearendstomorrow); trafficdb->sessactive = FALSE; trafficdb->sessinitialized = FALSE; trafficdb->sessstate = MMGUI_TRAFFICDB_SESSION_STATE_UNKNOWN; trafficdb->dayrxbytes = 0; trafficdb->daytxbytes = 0; trafficdb->dayduration = 0; trafficdb->sesstime = 0; trafficdb->sessrxbytes = 0; trafficdb->sesstxbytes = 0; trafficdb->sessduration = 0; trafficdb->monthrxbytes = 0; trafficdb->monthtxbytes = 0; trafficdb->monthduration = 0; trafficdb->yearrxbytes = 0; trafficdb->yeartxbytes = 0; trafficdb->yearduration = 0; return trafficdb; } gboolean mmgui_trafficdb_close(mmgui_trafficdb_t trafficdb) { if (trafficdb == NULL) return FALSE; if (trafficdb->sessactive) { /*Close current session*/ mmgui_trafficdb_session_close(trafficdb); } if (trafficdb->filepath != NULL) { /*Free file path*/ g_free((gchar *)trafficdb->filepath); } g_free(trafficdb); return TRUE; } gboolean mmgui_trafficdb_traffic_update(mmgui_trafficdb_t trafficdb, mmgui_traffic_update_t update) { time_t currenttime, pastdaytime; gint sessdeltatime; mmgui_day_traffic_t pasttraffic; struct _mmgui_day_traffic traffic; if ((trafficdb == NULL) || (update == NULL)) return FALSE; if ((!trafficdb->sessactive) || (trafficdb->sessstate == MMGUI_TRAFFICDB_SESSION_STATE_UNKNOWN)) return FALSE; currenttime = time(NULL); /*Initialization*/ if (!trafficdb->sessinitialized) { /*Count time interval between day begin time and session start time*/ sessdeltatime = difftime(trafficdb->presdaytime, trafficdb->sesstime); /*New session (first session of a day started day before or second session of a day)*/ if (trafficdb->sessstate == MMGUI_TRAFFICDB_SESSION_STATE_NEW) { /*If session was started before day begin, corrections needed*/ if (sessdeltatime > 0.0) { /*Past day session*/ pastdaytime = mmgui_trafficdb_truncate_day_timesatmp(trafficdb->sesstime); pasttraffic = mmgui_trafficdb_day_traffic_read(trafficdb, pastdaytime); if (pasttraffic != NULL) { pasttraffic->sessrxbytes = update->fullrxbytes; pasttraffic->sesstxbytes = update->fulltxbytes; pasttraffic->sessduration = sessdeltatime; /*Write to database*/ if (!mmgui_trafficdb_day_traffic_write(trafficdb, pasttraffic)) { g_debug("Failed to write traffic statistics to database\n"); } g_free(pasttraffic); } /*Current session*/ trafficdb->sesstime = trafficdb->presdaytime; trafficdb->sessrxbytes = 0; trafficdb->sesstxbytes = 0; trafficdb->sessduration = update->fulltime - sessdeltatime; /*Count statistics values*/ trafficdb->monthduration += trafficdb->sessduration; trafficdb->yearduration += trafficdb->sessduration; } else { /*Set session initial values*/ trafficdb->sessrxbytes = update->fullrxbytes; trafficdb->sesstxbytes = update->fulltxbytes; trafficdb->sessduration = update->fulltime; /*Count statistics values*/ trafficdb->monthrxbytes += update->fullrxbytes; trafficdb->monthtxbytes += update->fulltxbytes; trafficdb->monthduration += update->fulltime; trafficdb->yearrxbytes += update->fullrxbytes; trafficdb->yeartxbytes += update->fulltxbytes; trafficdb->yearduration += update->fulltime; } } else if (trafficdb->sessstate == MMGUI_TRAFFICDB_SESSION_STATE_OLD) { /*Old session*/ /*If session was started before day begin, do not do anything*/ if (sessdeltatime <= 0.0) { /*Update with actual information*/ trafficdb->sessrxbytes = update->fullrxbytes; trafficdb->sesstxbytes = update->fulltxbytes; trafficdb->sessduration = update->fulltime; } } trafficdb->sessinitialized = TRUE; } else { /*Already initialized session*/ /*Write traffic statistics at the end of the day*/ if (currenttime > trafficdb->nextdaytime) { /*Write current statistics*/ memset(&traffic, 0, sizeof(traffic)); traffic.daytime = trafficdb->presdaytime; traffic.dayrxbytes = trafficdb->dayrxbytes; traffic.daytxbytes = trafficdb->daytxbytes; traffic.dayduration = trafficdb->dayduration; traffic.sesstime = trafficdb->sesstime; traffic.sessrxbytes = trafficdb->sessrxbytes; traffic.sesstxbytes = trafficdb->sesstxbytes; traffic.sessduration = trafficdb->sessduration; /*Write to database*/ if (!mmgui_trafficdb_day_traffic_write(trafficdb, &traffic)) { g_debug("Failed to write traffic statistics to database\n"); } /*Correct values*/ /*Year and month statistics values*/ if (trafficdb->monthendstomorrow) { trafficdb->monthrxbytes = update->deltarxbytes; trafficdb->monthtxbytes = update->deltarxbytes; trafficdb->monthduration = update->deltarxbytes; } if (trafficdb->yearendstomorrow) { trafficdb->yearrxbytes = update->deltarxbytes; trafficdb->yeartxbytes = update->deltarxbytes; trafficdb->yearduration = update->deltarxbytes; } /*Current session*/ trafficdb->dayrxbytes = 0; trafficdb->daytxbytes = 0; trafficdb->dayduration = 0; trafficdb->sessrxbytes = update->deltarxbytes; trafficdb->sesstxbytes = update->deltatxbytes; trafficdb->sessduration = update->deltaduration; trafficdb->presdaytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); trafficdb->nextdaytime = mmgui_trafficdb_get_new_day_timesatmp(currenttime, &trafficdb->monthendstomorrow, &trafficdb->yearendstomorrow); } else { /*Count statistics values*/ trafficdb->monthrxbytes += update->deltarxbytes; trafficdb->monthtxbytes += update->deltatxbytes; trafficdb->monthduration += update->deltaduration; trafficdb->yearrxbytes += update->deltarxbytes; trafficdb->yeartxbytes += update->deltatxbytes; trafficdb->yearduration += update->deltaduration; /*Count current values*/ trafficdb->sessrxbytes += update->deltarxbytes; trafficdb->sesstxbytes += update->deltatxbytes; trafficdb->sessduration += update->deltaduration; } } return TRUE; } gboolean mmgui_trafficdb_session_new(mmgui_trafficdb_t trafficdb, time_t starttime) { time_t currenttime, daytime; mmgui_day_traffic_t traffic; GDBM_FILE db; datum key, data; gchar dayid[64]; time_t monthbegtime, monthendtime, yearbegtime, yearendtime, curdaytime; struct tm timestruct; guint64 currxbytes, curtxbytes, curduration; if (trafficdb == NULL) return FALSE; if (trafficdb->sessactive) { //Close current session mmgui_trafficdb_session_close(trafficdb); } currenttime = time(NULL); daytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); traffic = mmgui_trafficdb_day_traffic_read(trafficdb, daytime); if (traffic) { /*Restore available session data*/ if (starttime == traffic->sesstime) { trafficdb->sessstate = MMGUI_TRAFFICDB_SESSION_STATE_OLD; trafficdb->sesstime = traffic->sesstime; trafficdb->dayrxbytes = traffic->dayrxbytes; trafficdb->daytxbytes = traffic->daytxbytes; trafficdb->dayduration = traffic->dayduration; trafficdb->sessrxbytes = traffic->sessrxbytes; trafficdb->sesstxbytes = traffic->sesstxbytes; trafficdb->sessduration = traffic->sessduration; } else { trafficdb->sessstate = MMGUI_TRAFFICDB_SESSION_STATE_NEW; trafficdb->sesstime = starttime; trafficdb->dayrxbytes = traffic->dayrxbytes + traffic->sessrxbytes; trafficdb->daytxbytes = traffic->daytxbytes + traffic->sesstxbytes; trafficdb->dayduration = traffic->dayduration + traffic->sessduration; trafficdb->sessrxbytes = 0; trafficdb->sesstxbytes = 0; trafficdb->sessduration = 0; } g_free(traffic); } else { /*No sessions started today*/ trafficdb->sessstate = MMGUI_TRAFFICDB_SESSION_STATE_NEW; trafficdb->sesstime = starttime; trafficdb->dayrxbytes = 0; trafficdb->daytxbytes = 0; trafficdb->dayduration = 0; trafficdb->sessrxbytes = 0; trafficdb->sesstxbytes = 0; trafficdb->sessduration = 0; } /*Set common values*/ trafficdb->presdaytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); trafficdb->nextdaytime = mmgui_trafficdb_get_new_day_timesatmp(currenttime, &trafficdb->monthendstomorrow, &trafficdb->yearendstomorrow); trafficdb->sessactive = TRUE; trafficdb->sessinitialized = FALSE; /*Year and month values*/ trafficdb->yearrxbytes = 0; trafficdb->yeartxbytes = 0; trafficdb->yearduration = 0; trafficdb->monthrxbytes = 0; trafficdb->monthtxbytes = 0; trafficdb->monthduration = 0; localtime_r((const time_t *)¤ttime, ×truct); monthbegtime = mmgui_trafficdb_get_month_begin_timestamp(timestruct.tm_mon, timestruct.tm_year + 1900); monthendtime = mmgui_trafficdb_get_month_end_timestamp(timestruct.tm_mon, timestruct.tm_year + 1900); yearbegtime = mmgui_trafficdb_get_year_begin_timestamp(timestruct.tm_year + 1900); yearendtime = mmgui_trafficdb_get_year_end_timestamp(timestruct.tm_year + 1900); db = gdbm_open((gchar *)trafficdb->filepath, 0, GDBM_READER, 0755, 0); if (db != NULL) { /*Get data from database if possible*/ key = gdbm_firstkey(db); if (key.dptr != NULL) { do { memset(dayid, 0, sizeof(dayid)); strncpy(dayid, key.dptr, key.dsize); curdaytime = (time_t)strtoull(dayid, NULL, 10); if ((difftime(yearendtime, curdaytime) >= 0.0) && (difftime(curdaytime, yearbegtime) > 0.0)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { traffic = mmgui_trafficdb_xml_parse(data.dptr, data.dsize); if (curdaytime == trafficdb->presdaytime) { /*Active session correction*/ currxbytes = trafficdb->dayrxbytes + trafficdb->sessrxbytes; curtxbytes = trafficdb->daytxbytes + trafficdb->sesstxbytes; curduration = trafficdb->dayduration + trafficdb->sessduration; } else { /*Database values*/ currxbytes = traffic->dayrxbytes + traffic->sessrxbytes; curtxbytes = traffic->daytxbytes + traffic->sesstxbytes; curduration = traffic->dayduration + traffic->sessduration; } /*Year statistics*/ trafficdb->yearrxbytes += currxbytes; trafficdb->yeartxbytes += curtxbytes; trafficdb->yearduration += curduration; /*Month statistics*/ if ((difftime(monthendtime, curdaytime) >= 0.0) && (difftime(curdaytime, monthbegtime) > 0.0)) { trafficdb->monthrxbytes += currxbytes; trafficdb->monthtxbytes += curtxbytes; trafficdb->monthduration += curduration; } } } key = gdbm_nextkey(db, key); } while (key.dptr != NULL); } gdbm_close(db); } return TRUE; } gboolean mmgui_trafficdb_session_close(mmgui_trafficdb_t trafficdb) { time_t currenttime, daytime; struct _mmgui_day_traffic traffic; if (trafficdb == NULL) return FALSE; if (!trafficdb->sessactive) return FALSE; currenttime = time(NULL); daytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); /*Write current statistics*/ memset(&traffic, 0, sizeof(traffic)); traffic.daytime = daytime; traffic.dayrxbytes = trafficdb->dayrxbytes; traffic.daytxbytes = trafficdb->daytxbytes; traffic.dayduration = trafficdb->dayduration; traffic.sesstime = trafficdb->sesstime; traffic.sessrxbytes = trafficdb->sessrxbytes; traffic.sesstxbytes = trafficdb->sesstxbytes; traffic.sessduration = trafficdb->sessduration; /*Write to database*/ if (!mmgui_trafficdb_day_traffic_write(trafficdb, &traffic)) { g_debug("Failed to write traffic statistics to database\n"); } /*Zero values*/ trafficdb->nextdaytime = 0; trafficdb->sessactive = FALSE; trafficdb->sessinitialized = FALSE; trafficdb->sessstate = MMGUI_TRAFFICDB_SESSION_STATE_UNKNOWN; trafficdb->dayrxbytes = 0; trafficdb->daytxbytes = 0; trafficdb->dayduration = 0; trafficdb->sesstime = 0; trafficdb->sessrxbytes = 0; trafficdb->sesstxbytes = 0; trafficdb->sessduration = 0; return TRUE; } gboolean mmgui_trafficdb_session_get_day_traffic(mmgui_trafficdb_t trafficdb, mmgui_day_traffic_t traffic) { time_t currenttime; if ((trafficdb == NULL) || (traffic == NULL)) return FALSE; if (!trafficdb->sessactive) return FALSE; currenttime = time(NULL); traffic->daytime = mmgui_trafficdb_truncate_day_timesatmp(currenttime); traffic->dayrxbytes = trafficdb->dayrxbytes; traffic->daytxbytes = trafficdb->daytxbytes; traffic->dayduration = trafficdb->dayduration; traffic->sesstime = trafficdb->sesstime; traffic->sessrxbytes = trafficdb->sessrxbytes; traffic->sesstxbytes = trafficdb->sesstxbytes; traffic->sessduration = trafficdb->sessduration; return TRUE; } gboolean mmgui_trafficdb_day_traffic_write(mmgui_trafficdb_t trafficdb, mmgui_day_traffic_t daytraffic) { GDBM_FILE db; gchar dayid[64]; gint idlen; datum key, data; gchar *daytrafficxml; if ((trafficdb == NULL) || (daytraffic == NULL)) return FALSE; if (trafficdb->filepath == NULL) return FALSE; db = gdbm_open((gchar *)trafficdb->filepath, 0, GDBM_WRCREAT, 0755, 0); if (db == NULL) return FALSE; memset(dayid, 0, sizeof(dayid)); idlen = snprintf(dayid, sizeof(dayid), "%" G_GUINT64_FORMAT "", daytraffic->daytime); key.dptr = (gchar *)dayid; key.dsize = idlen; daytrafficxml = g_strdup_printf(TRAFFICDB_DAY_XML, daytraffic->daytime, daytraffic->dayrxbytes, daytraffic->daytxbytes, daytraffic->dayduration, daytraffic->sesstime, daytraffic->sessrxbytes, daytraffic->sesstxbytes, daytraffic->sessduration); data.dptr = daytrafficxml; data.dsize = strlen(daytrafficxml); if (gdbm_store(db, key, data, GDBM_REPLACE) == -1) { g_warning("Unable to write to database"); gdbm_close(db); g_free(daytrafficxml); return FALSE; } gdbm_sync(db); gdbm_close(db); g_free(daytrafficxml); return TRUE; } static gint mmgui_trafficdb_traffic_list_sort_compare(gconstpointer a, gconstpointer b) { mmgui_day_traffic_t day1, day2; day1 = (mmgui_day_traffic_t)a; day2 = (mmgui_day_traffic_t)b; if (day1->daytime < day2->daytime) { return -1; } else if (day1->daytime > day2->daytime) { return 1; } else { return 0; } } GSList *mmgui_trafficdb_get_traffic_list_for_month(mmgui_trafficdb_t trafficdb, guint month, guint year) { GDBM_FILE db; time_t begtime, endtime; time_t daytime; GSList *list; mmgui_day_traffic_t daytraffic; datum key, data; gchar dayid[64]; struct tm *timespec; gboolean currentstatscorrected; if (trafficdb == NULL) return NULL; if (trafficdb->filepath == NULL) return NULL; begtime = mmgui_trafficdb_get_month_begin_timestamp(month, year); endtime = mmgui_trafficdb_get_month_end_timestamp(month, year); list = NULL; currentstatscorrected = FALSE; db = gdbm_open((gchar *)trafficdb->filepath, 0, GDBM_READER, 0755, 0); if (db != NULL) { /*Get data from database if possible*/ key = gdbm_firstkey(db); if (key.dptr != NULL) { do { memset(dayid, 0, sizeof(dayid)); strncpy(dayid, key.dptr, key.dsize); daytime = (time_t)strtoull(dayid, NULL, 10); if ((difftime(endtime, daytime) >= 0.0) && (difftime(daytime, begtime) > 0.0)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { daytraffic = mmgui_trafficdb_xml_parse(data.dptr, data.dsize); if ((daytime == trafficdb->presdaytime) && (trafficdb->sessactive)) { /*Today statistics correction*/ daytraffic->dayrxbytes = trafficdb->dayrxbytes; daytraffic->daytxbytes = trafficdb->daytxbytes; daytraffic->dayduration = trafficdb->dayduration; daytraffic->sessrxbytes = trafficdb->sessrxbytes; daytraffic->sesstxbytes = trafficdb->sesstxbytes; daytraffic->sessduration = trafficdb->sessduration; currentstatscorrected = TRUE; } list = g_slist_prepend(list, daytraffic); } } key = gdbm_nextkey(db, key); } while (key.dptr != NULL); } gdbm_close(db); } /*If statistics for current day must be included*/ daytime = time(NULL); timespec = localtime((const time_t *)&daytime); if ((month == timespec->tm_mon) && (!currentstatscorrected)) { if ((trafficdb->dayduration + trafficdb->sessduration) > 0) { daytraffic = g_new(struct _mmgui_day_traffic, 1); daytraffic->daytime = trafficdb->presdaytime; daytraffic->dayrxbytes = trafficdb->dayrxbytes; daytraffic->daytxbytes = trafficdb->daytxbytes; daytraffic->dayduration = trafficdb->dayduration; daytraffic->sesstime = trafficdb->sesstime; daytraffic->sessrxbytes = trafficdb->sessrxbytes; daytraffic->sesstxbytes = trafficdb->sesstxbytes; daytraffic->sessduration = trafficdb->sessduration; list = g_slist_prepend(list, daytraffic); } } if (list != NULL) { list = g_slist_sort(list, mmgui_trafficdb_traffic_list_sort_compare); } return list; } void mmgui_trafficdb_free_traffic_list_for_month(GSList *trafficlist) { if (trafficlist == NULL) return; g_slist_foreach(trafficlist, (GFunc)g_free, NULL); g_slist_free(trafficlist); } mmgui_day_traffic_t mmgui_trafficdb_day_traffic_read(mmgui_trafficdb_t trafficdb, time_t daytime) { GDBM_FILE db; gchar dayid[64]; gint idlen; datum key, data; mmgui_day_traffic_t traffic; if (trafficdb == NULL) return NULL; if (trafficdb->filepath == NULL) return NULL; //Open database db = gdbm_open((gchar *)trafficdb->filepath, 0, GDBM_READER, 0755, 0); if (db == NULL) return NULL; traffic = NULL; memset(dayid, 0, sizeof(dayid)); idlen = snprintf(dayid, sizeof(dayid), "%" G_GUINT64_FORMAT "", (guint64)mmgui_trafficdb_truncate_day_timesatmp(daytime)); key.dptr = (gchar *)dayid; key.dsize = idlen; if (gdbm_exists(db, key)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { traffic = mmgui_trafficdb_xml_parse(data.dptr, data.dsize); } } gdbm_close(db); return traffic; } static mmgui_day_traffic_t mmgui_trafficdb_xml_parse(gchar *xml, gsize size) { mmgui_day_traffic_t traffic; GMarkupParser mp; GMarkupParseContext *mpc; GError *error = NULL; traffic = g_new(struct _mmgui_day_traffic, 1); traffic->daytime = 0; traffic->dayrxbytes = 0; traffic->daytxbytes = 0; traffic->dayduration = 0; traffic->sesstime = 0; traffic->sessrxbytes = 0; traffic->sesstxbytes = 0; traffic->sessduration = 0; mp.start_element = mmgui_trafficdb_xml_get_element; mp.end_element = mmgui_trafficdb_xml_end_element; mp.text = mmgui_trafficdb_xml_get_value; mp.passthrough = NULL; mp.error = NULL; mpc = g_markup_parse_context_new(&mp, 0, (gpointer)traffic, NULL); g_markup_parse_context_parse(mpc, xml, size, &error); if (error != NULL) { g_free(traffic); g_error_free(error); g_markup_parse_context_free(mpc); return NULL; } g_markup_parse_context_free(mpc); return traffic; } static void mmgui_trafficdb_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { if (g_str_equal(element, "daytime")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_DAY_TIME; } else if (g_str_equal(element, "dayrxbytes")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_DAY_RX; } else if (g_str_equal(element, "daytxbytes")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_DAY_TX; } else if (g_str_equal(element, "dayduration")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_DAY_DURATION; } else if (g_str_equal(element, "sesstime")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_SESSION_TIME; } else if (g_str_equal(element, "sessrxbytes")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_SESSION_RX; } else if (g_str_equal(element, "sesstxbytes")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_SESSION_TX; } else if (g_str_equal(element, "sessduration")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_SESSION_DURATION; } else { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_NULL; } } static void mmgui_trafficdb_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error) { mmgui_day_traffic_t daytraffic; daytraffic = (mmgui_day_traffic_t)data; if (mmgui_trafficdb_xml_parameter == TRAFFICDB_XML_PARAM_NULL) return; switch (mmgui_trafficdb_xml_parameter) { case TRAFFICDB_XML_PARAM_DAY_TIME: daytraffic->daytime = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_DAY_RX: daytraffic->dayrxbytes = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_DAY_TX: daytraffic->daytxbytes = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_DAY_DURATION: daytraffic->dayduration = (guint)strtoul(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_SESSION_TIME: daytraffic->sesstime = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_SESSION_RX: daytraffic->sessrxbytes = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_SESSION_TX: daytraffic->sesstxbytes = (guint64)strtoull(text, NULL, 10); break; case TRAFFICDB_XML_PARAM_SESSION_DURATION: daytraffic->sessduration = (guint)strtoul(text, NULL, 10); break; default: break; } } static void mmgui_trafficdb_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error) { if (!g_str_equal(element, "traffic")) { mmgui_trafficdb_xml_parameter = TRAFFICDB_XML_PARAM_NULL; } } modem-manager-gui-0.0.19.1/appdata/uk.po000664 001750 001750 00000011427 13261703575 017570 0ustar00alexalex000000 000000 # # Translators: # Yarema aka Knedlyk , 2014,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Yarema aka Knedlyk \n" "Language-Team: Ukrainian (http://www.transifex.com/ethereal/modem-manager-gui/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Менеджер модемів" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Алекс" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Контроль за EDGE/3G/4G специфічними функціями модему" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Простий графічний інтерфейс, узгоджений з Менеджером модемів, Wader і oFono системними сервісами, для контролю специфічними EDGE/3G/4G функціями модемів. " #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Ви можете перевірити баланс Вашої карти SIM, вислати або отримати повідомлення SMS, контролювати використання мобільного трафіку і багато іншого, використовуючи Менеджер модемів." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Поточні можливості:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "Створення і контроль з’єднань" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Висилання і отримання повідомлень SMS, зберігання повідомлень в базі даних " #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Висилання запитів USSD і читання відповідей (також з використанням інтерактивного сеансу)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Перегляд інформації пристрою: назва оператора, режим пристрою, IMEI, IMSI, півень сигналу " #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Сканування мобільних мереж" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Перегляд статистики мобільного трафіку і встановлення обмежень" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Зауважте, що деякі можливості можуть бути недоступними завдяки обмеженням на різні системні сервіси, або навіть використанням різних версій системних сервісів." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "Огляд широкосмугових пристроїв" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "Список SMS повідомлень" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "Обмеження трафіку" modem-manager-gui-0.0.19.1/src/providersdb.c000664 001750 001750 00000044525 13261703575 020462 0ustar00alexalex000000 000000 /* * providersdb.c * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include "providersdb.h" #include "mmguicore.h" #include "../resources.h" enum _mmgui_providers_db_params { MMGUI_PROVIDERS_DB_PARAM_COUNTRY = 0, MMGUI_PROVIDERS_DB_PARAM_PROVIDER, MMGUI_PROVIDERS_DB_PARAM_NAME, MMGUI_PROVIDERS_DB_PARAM_GSM, MMGUI_PROVIDERS_DB_PARAM_CDMA, MMGUI_PROVIDERS_DB_PARAM_NETWORK_ID, MMGUI_PROVIDERS_DB_PARAM_SID, MMGUI_PROVIDERS_DB_PARAM_APN, MMGUI_PROVIDERS_DB_PARAM_USAGE, MMGUI_PROVIDERS_DB_PARAM_USERNAME, MMGUI_PROVIDERS_DB_PARAM_PASSWORD, MMGUI_PROVIDERS_DB_PARAM_DNS, MMGUI_PROVIDERS_DB_PARAM_NULL }; /*enum _mmgui_providers_db_tech { MMGUI_PROVIDERS_DB_TECH_GSM = 0, MMGUI_PROVIDERS_DB_TECH_CDMA };*/ const gchar *mmgui_providersdb_countries[250][2] = { {"Afghanistan", "af"}, {"Åland Islands", "ax"}, {"Albania", "al"}, {"Algeria", "dz"}, {"American Samoa", "as"}, {"Andorra", "ad"}, {"Angola", "ao"}, {"Anguilla", "ai"}, {"Antarctica", "aq"}, {"Antigua and Barbuda", "ag"}, {"Argentina", "ar"}, {"Armenia", "am"}, {"Aruba", "aw"}, {"Australia", "au"}, {"Austria", "at"}, {"Azerbaijan", "az"}, {"Bahamas", "bs"}, {"Bahrain", "bh"}, {"Bangladesh", "bd"}, {"Barbados", "bb"}, {"Belarus", "by"}, {"Belgium", "be"}, {"Belize", "bz"}, {"Benin", "bj"}, {"Bermuda", "bm"}, {"Bhutan", "bt"}, {"Bolivia, Plurinational State of", "bo"}, {"Bonaire, Sint Eustatius and Saba", "bq"}, {"Bosnia and Herzegovina", "ba"}, {"Botswana", "bw"}, {"Bouvet Island", "bv"}, {"Brazil", "br"}, {"British Indian Ocean Territory", "io"}, {"Brunei Darussalam", "bn"}, {"Bulgaria", "bg"}, {"Burkina Faso", "bf"}, {"Burundi", "bi"}, {"Cambodia", "kh"}, {"Cameroon", "cm"}, {"Canada", "ca"}, {"Cabo Verde", "cv"}, {"Cayman Islands", "ky"}, {"Central African Republic", "cf"}, {"Chad", "td"}, {"Chile", "cl"}, {"China", "cn"}, {"Christmas Island", "cx"}, {"Cocos (Keeling) Islands", "cc"}, {"Colombia", "co"}, {"Comoros", "km"}, {"Congo", "cg"}, {"Congo, the Democratic Republic of the", "cd"}, {"Cook Islands", "ck"}, {"Costa Rica", "cr"}, {"Côte d'Ivoire", "ci"}, {"Croatia", "hr"}, {"Cuba", "cu"}, {"Curaçao", "cw"}, {"Cyprus", "cy"}, {"Czech Republic", "cz"}, {"Denmark", "dk"}, {"Djibouti", "dj"}, {"Dominica", "dm"}, {"Dominican Republic", "do"}, {"Ecuador", "ec"}, {"Egypt", "eg"}, {"El Salvador", "sv"}, {"Equatorial Guinea", "gq"}, {"Eritrea", "er"}, {"Estonia", "ee"}, {"Ethiopia", "et"}, {"Falkland Islands (Malvinas)", "fk"}, {"Faroe Islands", "fo"}, {"Fiji", "fj"}, {"Finland", "fi"}, {"France", "fr"}, {"French Guiana", "gf"}, {"French Polynesia", "pf"}, {"French Southern Territories", "tf"}, {"Gabon", "ga"}, {"Gambia", "gm"}, {"Georgia", "ge"}, {"Germany", "de"}, {"Ghana", "gh"}, {"Gibraltar", "gi"}, {"Greece", "gr"}, {"Greenland", "gl"}, {"Grenada", "gd"}, {"Guadeloupe", "gp"}, {"Guam", "gu"}, {"Guatemala", "gt"}, {"Guernsey", "gg"}, {"Guinea", "gn"}, {"Guinea-Bissau", "gw"}, {"Guyana", "gy"}, {"Haiti", "ht"}, {"Heard Island and McDonald Islands", "hm"}, {"Holy See (Vatican City State)", "va"}, {"Honduras", "hn"}, {"Hong Kong", "hk"}, {"Hungary", "hu"}, {"Iceland", "is"}, {"India", "in"}, {"Indonesia", "id"}, {"Iran, Islamic Republic of", "ir"}, {"Iraq", "iq"}, {"Ireland", "ie"}, {"Isle of Man", "im"}, {"Israel", "il"}, {"Italy", "it"}, {"Jamaica", "jm"}, {"Japan", "jp"}, {"Jersey", "je"}, {"Jordan", "jo"}, {"Kazakhstan", "kz"}, {"Kenya", "ke"}, {"Kiribati", "ki"}, {"Korea, Democratic People's Republic of", "kp"}, {"Korea, Republic of", "kr"}, {"Kuwait", "kw"}, {"Kyrgyzstan", "kg"}, {"Lao People's Democratic Republic", "la"}, {"Latvia", "lv"}, {"Lebanon", "lb"}, {"Lesotho", "ls"}, {"Liberia", "lr"}, {"Libya", "ly"}, {"Liechtenstein", "li"}, {"Lithuania", "lt"}, {"Luxembourg", "lu"}, {"Macao", "mo"}, {"Macedonia, the former Yugoslav Republic of", "mk"}, {"Madagascar", "mg"}, {"Malawi", "mw"}, {"Malaysia", "my"}, {"Maldives", "mv"}, {"Mali", "ml"}, {"Malta", "mt"}, {"Marshall Islands", "mh"}, {"Martinique", "mq"}, {"Mauritania", "mr"}, {"Mauritius", "mu"}, {"Mayotte", "yt"}, {"Mexico", "mx"}, {"Micronesia, Federated States of", "fm"}, {"Moldova, Republic of", "md"}, {"Monaco", "mc"}, {"Mongolia", "mn"}, {"Montenegro", "me"}, {"Montserrat", "ms"}, {"Morocco", "ma"}, {"Mozambique", "mz"}, {"Myanmar", "mm"}, {"Namibia", "na"}, {"Nauru", "nr"}, {"Nepal", "np"}, {"Netherlands", "nl"}, {"New Caledonia", "nc"}, {"New Zealand", "nz"}, {"Nicaragua", "ni"}, {"Niger", "ne"}, {"Nigeria", "ng"}, {"Niue", "nu"}, {"Norfolk Island", "nf"}, {"Northern Mariana Islands", "mp"}, {"Norway", "no"}, {"Oman", "om"}, {"Pakistan", "pk"}, {"Palau", "pw"}, {"Palestine, State of", "ps"}, {"Panama", "pa"}, {"Papua New Guinea", "pg"}, {"Paraguay", "py"}, {"Peru", "pe"}, {"Philippines", "ph"}, {"Pitcairn", "pn"}, {"Poland", "pl"}, {"Portugal", "pt"}, {"Puerto Rico", "pr"}, {"Qatar", "qa"}, {"Réunion", "re"}, {"Romania", "ro"}, {"Russian Federation", "ru"}, {"Rwanda", "rw"}, {"Saint Barthélemy", "bl"}, {"Saint Helena, Ascension and Tristan da Cunha", "sh"}, {"Saint Kitts and Nevis", "kn"}, {"Saint Lucia", "lc"}, {"Saint Martin (French part)", "mf"}, {"Saint Pierre and Miquelon", "pm"}, {"Saint Vincent and the Grenadines", "vc"}, {"Samoa", "ws"}, {"San Marino", "sm"}, {"Sao Tome and Principe", "st"}, {"Saudi Arabia", "sa"}, {"Senegal", "sn"}, {"Serbia", "rs"}, {"Seychelles", "sc"}, {"Sierra Leone", "sl"}, {"Singapore", "sg"}, {"Sint Maarten (Dutch part)", "sx"}, {"Slovakia", "sk"}, {"Slovenia", "si"}, {"Solomon Islands", "sb"}, {"Somalia", "so"}, {"South Africa", "za"}, {"South Georgia and the South Sandwich Islands", "gs"}, {"South Sudan", "ss"}, {"Spain", "es"}, {"Sri Lanka", "lk"}, {"Sudan", "sd"}, {"Suriname", "sr"}, {"Svalbard and Jan Mayen", "sj"}, {"Swaziland", "sz"}, {"Sweden", "se"}, {"Switzerland", "ch"}, {"Syrian Arab Republic", "sy"}, {"Taiwan, Province of China", "tw"}, {"Tajikistan", "tj"}, {"Tanzania, United Republic of", "tz"}, {"Thailand", "th"}, {"Timor-Leste", "tl"}, {"Togo", "tg"}, {"Tokelau", "tk"}, {"Tonga", "to"}, {"Trinidad and Tobago", "tt"}, {"Tunisia", "tn"}, {"Turkey", "tr"}, {"Turkmenistan", "tm"}, {"Turks and Caicos Islands", "tc"}, {"Tuvalu", "tv"}, {"Uganda", "ug"}, {"Ukraine", "ua"}, {"United Arab Emirates", "ae"}, {"United Kingdom", "gb"}, {"United States", "us"}, {"United States Minor Outlying Islands", "um"}, {"Uruguay", "uy"}, {"Uzbekistan", "uz"}, {"Vanuatu", "vu"}, {"Venezuela, Bolivarian Republic of", "ve"}, {"Viet Nam", "vn"}, {"Virgin Islands, British", "vg"}, {"Virgin Islands, U.S.", "vi"}, {"Wallis and Futuna", "wf"}, {"Western Sahara", "eh"}, {"Yemen", "ye"}, {"Zambia", "zm"}, {"Zimbabwe", "zw"}, {NULL, NULL} }; static gboolean mmgui_providers_db_xml_parse(mmgui_providers_db_t db); static void mmgui_providers_db_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); static void mmgui_providers_db_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error); static void mmgui_providers_db_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error); mmgui_providers_db_t mmgui_providers_db_create(void) { mmgui_providers_db_t db; GError *error; db = g_new(struct _mmgui_providers_db, 1); error = NULL; db->file = g_mapped_file_new(RESOURCE_PROVIDERS_DB, FALSE, &error); if ((db->file != NULL) && (error == NULL)) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_NULL; db->curname = NULL; db->gotname = FALSE; db->curid = NULL; db->curentry = NULL; db->providers = NULL; mmgui_providers_db_xml_parse(db); return db; } else { g_debug("File not opened: %s\n", error->message); g_free(db); return NULL; } } void mmgui_providers_db_close(mmgui_providers_db_t db) { if (db == NULL) return; //free parsed data g_mapped_file_unref(db->file); g_free(db); } GSList *mmgui_providers_get_list(mmgui_providers_db_t db) { if (db == NULL) return NULL; return db->providers; } const gchar *mmgui_providers_provider_get_country_name(mmgui_providers_db_entry_t entry) { gint i; if (entry == NULL) return ""; for (i = 0; mmgui_providersdb_countries[i][0] != NULL; i++) { if (g_strcmp0(mmgui_providersdb_countries[i][1], entry->country) == 0) { return mmgui_providersdb_countries[i][0]; } } return entry->country; } guint mmgui_providers_provider_get_network_id(mmgui_providers_db_entry_t entry) { guint value, mcc, mnc, mul, res; if (entry == NULL) return 0; if (entry->id == NULL) return 0; value = g_array_index(entry->id, guint, 0); if (entry->tech == MMGUI_DEVICE_TYPE_GSM) { /*GSM uses combined value of MCC and MNC*/ mcc = (value & 0xffff0000) >> 16; mnc = value & 0x0000ffff; mul = 1; while (mul <= mnc) { mul *= 10; } if (mnc < 10) { res = mcc * mul * 10 + mnc; } else { res = mcc * mul + mnc; } return res; } else { /*CDMA uses one value - SID*/ return value; } } static gint mmgui_providers_db_compare_entries(gconstpointer a, gconstpointer b) { mmgui_providers_db_entry_t aentry, bentry; gchar *acasefold, *bcasefold; gint res; if ((a == NULL) || (b == NULL)) return 0; aentry = (mmgui_providers_db_entry_t)a; bentry = (mmgui_providers_db_entry_t)b; acasefold = g_utf8_casefold(aentry->name, -1); bcasefold = g_utf8_casefold(bentry->name, -1); res = g_utf8_collate(acasefold, bcasefold); g_free(acasefold); g_free(bcasefold); return res; } static gboolean mmgui_providers_db_xml_parse(mmgui_providers_db_t db) { GMarkupParser mp; GMarkupParseContext *mpc; GError *error = NULL; if (db == NULL) return FALSE; if (db->file == NULL) return FALSE; /*Prepare callbacks*/ mp.start_element = mmgui_providers_db_xml_get_element; mp.end_element = mmgui_providers_db_xml_end_element; mp.text = mmgui_providers_db_xml_get_value; mp.passthrough = NULL; mp.error = NULL; /*Parse XML*/ mpc = g_markup_parse_context_new(&mp, 0, db, NULL); g_markup_parse_context_parse(mpc, g_mapped_file_get_contents(db->file), g_mapped_file_get_length(db->file), &error); if (error != NULL) { g_error_free(error); g_markup_parse_context_free(mpc); return FALSE; } g_markup_parse_context_free(mpc); /*Sort providers list*/ db->providers = g_slist_sort(db->providers, mmgui_providers_db_compare_entries); return TRUE; } static void mmgui_providers_db_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { mmgui_providers_db_t db; mmgui_providers_db_entry_t entry; guint netid, i; db = (mmgui_providers_db_t)data; if (db == NULL) return; if (g_str_equal(element, "country")) { if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "code")) { memset(db->curcountry, 0, sizeof(db->curcountry)); memcpy(db->curcountry, attr_values[0], 2); } } db->curparam = MMGUI_PROVIDERS_DB_PARAM_COUNTRY; } else if (g_str_equal(element, "provider")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_PROVIDER; } else if (g_str_equal(element, "name")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_NAME; } else if (g_str_equal(element, "gsm")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_GSM; } else if (g_str_equal(element, "cdma")) { entry = g_new0(struct _mmgui_providers_db_entry, 1); /*Usage*/ //entry->usage = MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET; /*Technology*/ entry->tech = MMGUI_DEVICE_TYPE_CDMA/*MMGUI_PROVIDERS_DB_TECH_CDMA*/; /*Country*/ memcpy(entry->country, db->curcountry, sizeof(entry->country)); /*Operator name*/ entry->name = NULL; /*Access point*/ entry->apn = NULL; /*Copy identifiers*/ if (db->curid != NULL) { entry->id = g_array_new(FALSE, TRUE, sizeof(guint)); for (i=0; icurid->len; i++) { netid = g_array_index(db->curid, guint, i); g_array_append_val(entry->id, netid); } } /*Store pointer for easy access*/ db->curentry = entry; /*Add pointer to list*/ db->providers = g_slist_prepend(db->providers, entry); db->curparam = MMGUI_PROVIDERS_DB_PARAM_CDMA; } else if (g_str_equal(element, "network-id")) { netid = 0; if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "mcc")) { netid |= (atoi(attr_values[0]) << 16) & 0xffff0000; } } if ((attr_names[1] != NULL) && (attr_values[1] != NULL)) { if (g_str_equal(attr_names[1], "mnc")) { netid |= atoi(attr_values[1]) & 0x0000ffff; } } if (netid != 0) { if (db->curentry == NULL) { if (db->curid == NULL) { db->curid = g_array_new(FALSE, TRUE, sizeof(guint)); } g_array_append_val(db->curid, netid); } else { if (db->curentry->id == NULL) { db->curentry->id = g_array_new(FALSE, TRUE, sizeof(guint)); } g_array_append_val(db->curentry->id, netid); } } db->curparam = MMGUI_PROVIDERS_DB_PARAM_NETWORK_ID; } else if (g_str_equal(element, "sid")) { netid = 0; if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "value")) { netid = (atoi(attr_values[0]) & 0xffffffff); } } if (netid != 0) { if (db->curentry == NULL) { if (db->curid == NULL) { db->curid = g_array_new(FALSE, TRUE, sizeof(guint)); } g_array_append_val(db->curid, netid); } else { if (db->curentry->id == NULL) { db->curentry->id = g_array_new(FALSE, TRUE, sizeof(guint)); } g_array_append_val(db->curentry->id, netid); } } db->curparam = MMGUI_PROVIDERS_DB_PARAM_SID; } else if (g_str_equal(element, "apn")) { if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "value")) { entry = g_new0(struct _mmgui_providers_db_entry, 1); /*Usage*/ //entry->usage = MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET; /*Technology*/ entry->tech = MMGUI_DEVICE_TYPE_GSM/*MMGUI_PROVIDERS_DB_TECH_GSM*/; /*Country*/ memcpy(entry->country, db->curcountry, sizeof(entry->country)); /*Operator name*/ entry->name = NULL; /*Access point*/ entry->apn = g_strdup(attr_values[0]); /*Copy identifiers*/ if (db->curid != NULL) { entry->id = g_array_new(FALSE, TRUE, sizeof(guint)); for (i=0; icurid->len; i++) { netid = g_array_index(db->curid, guint, i); g_array_append_val(entry->id, netid); } } /*Store pointer for easy access*/ db->curentry = entry; /*Add pointer to list*/ db->providers = g_slist_prepend(db->providers, entry); } } db->curparam = MMGUI_PROVIDERS_DB_PARAM_APN; } else if (g_str_equal(element, "usage")) { if (db->curentry != NULL) { if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "type")) { if (g_str_equal(attr_values[0], "internet")) { db->curentry->usage = MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET; } else if (g_str_equal(attr_values[0], "mms")) { db->curentry->usage = MMGUI_PROVIDERS_DB_ENTRY_USAGE_MMS; } else { db->curentry->usage = MMGUI_PROVIDERS_DB_ENTRY_USAGE_OTHER; } } } } db->curparam = MMGUI_PROVIDERS_DB_PARAM_USAGE; } else if (g_str_equal(element, "username")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_USERNAME; } else if (g_str_equal(element, "password")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_PASSWORD; } else if (g_str_equal(element, "dns")) { db->curparam = MMGUI_PROVIDERS_DB_PARAM_DNS; } else { db->curparam = MMGUI_PROVIDERS_DB_PARAM_NULL; } } static void mmgui_providers_db_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error) { mmgui_providers_db_t db; db = (mmgui_providers_db_t)data; if (db == NULL) return; if ((db->curparam == MMGUI_PROVIDERS_DB_PARAM_NULL) || (text[0] == '\n')) return; switch (db->curparam) { case MMGUI_PROVIDERS_DB_PARAM_NAME: if (db->curentry != NULL) { if (db->curentry->name != NULL) { g_free(db->curentry->name); } db->curentry->name = g_strdup(text); } else { if (db->curname != NULL) { g_free(db->curname); } db->curname = g_strdup(text); } break; case MMGUI_PROVIDERS_DB_PARAM_USERNAME: if (db->curentry != NULL) { db->curentry->username = g_strdup(text); } break; case MMGUI_PROVIDERS_DB_PARAM_PASSWORD: if (db->curentry != NULL) { db->curentry->password = g_strdup(text); } break; case MMGUI_PROVIDERS_DB_PARAM_DNS: if (db->curentry != NULL) { if (db->curentry->dns1 == NULL) { db->curentry->dns1 = g_strdup(text); } else if (db->curentry->dns2 == NULL) { db->curentry->dns2 = g_strdup(text); } } break; default: break; } } static void mmgui_providers_db_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error) { mmgui_providers_db_t db; gchar *planname; db = (mmgui_providers_db_t)data; if (db == NULL) return; if ((g_str_equal(element, "cdma")) || (g_str_equal(element, "apn"))) { if (db->curentry->name == NULL) { if (db->curname != NULL) { db->curentry->name = g_strdup(db->curname); } else { db->curentry->name = g_strdup("New provider"); } } else { if (db->curname != NULL) { if (!g_str_equal(db->curname, db->curentry->name)) { planname = db->curentry->name; db->curentry->name = g_strdup_printf("%s - %s", db->curname, planname); g_free(planname); } } } db->curentry = NULL; } else if (g_str_equal(element, "provider")) { if (db->curname != NULL) { g_free(db->curname); db->curname = NULL; } if (db->curid != NULL) { g_array_unref(db->curid); db->curid = NULL; } } } modem-manager-gui-0.0.19.1/resources/Makefile000664 001750 001750 00000002100 13261703575 020635 0ustar00alexalex000000 000000 include ../Makefile_h RESDIR = $(PREFIX)/share/modem-manager-gui ICONSPNGDIR = $(PREFIX)/share/icons/hicolor/128x128/apps ICONSSVGDIR = $(PREFIX)/share/icons/hicolor/scalable/apps ICONSSYMDIR = $(PREFIX)/share/icons/hicolor/symbolic/apps install: mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(RESDIR) cp -r pixmaps $(INSTALLPREFIX)$(DESTDIR)$(RESDIR) cp -r sounds $(INSTALLPREFIX)$(DESTDIR)$(RESDIR) cp -r ui $(INSTALLPREFIX)$(DESTDIR)$(RESDIR) mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(ICONSPNGDIR) cp modem-manager-gui.png $(INSTALLPREFIX)$(DESTDIR)$(ICONSPNGDIR) mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(ICONSSVGDIR) cp modem-manager-gui.svg $(INSTALLPREFIX)$(DESTDIR)$(ICONSSVGDIR) mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(ICONSSYMDIR) cp modem-manager-gui-symbolic.svg $(INSTALLPREFIX)$(DESTDIR)$(ICONSSYMDIR) uninstall: rm -rf $(INSTALLPREFIX)$(DESTDIR)$(RESDIR) rm -f $(INSTALLPREFIX)$(DESTDIR)$(ICONSPNGDIR)/modem-manager-gui.png rm -f $(INSTALLPREFIX)$(DESTDIR)$(ICONSSVGDIR)/modem-manager-gui.svg rm -f $(INSTALLPREFIX)$(DESTDIR)$(ICONSSYMDIR)/modem-manager-gui-symbolic.svg modem-manager-gui-0.0.19.1/resources/pixmaps/info-location.png000664 001750 001750 00000003623 13261703575 024140 0ustar00alexalex000000 000000 PNG  IHDR0.nޚlsBIT|d pHYsAm3tEXtSoftwarewww.inkscape.org<IDAThZmLT~ECVlkfZ7؈&ZTBb MZkkJش]CcnD[鯑l(4"~]A`޷?iw̠p$'9y{w jmmm1~r|,6lX`?ϙ3gO_. ,kᧀ`CrAg/I_$ H$IU ה 9d#"Hwvv &kH>.9Mrɩ ,"rD7$T655i,SwQ?P 8)&7{hhq}c$B.X Ña.]Z8Hb JyYO"R" OX%@l6^ 9@rĴg sC>{I^v/dMB)vIv,R y i0#3H~~u{@`*I;`~rE~:>Dq%3g\cpZMM;vLh\U'񪪪e666geeM4̵#%pB9ʇܹsRUUjr;{$ղdg$C[hwH]D^C~:2 PUXX^O}~Q__),+f*;qą#G7l x.Uգ$xˍ!ɽ;w2qP^]]ݷΟ?_F dqLMPXdwǎkjj՜PooocGGGVVVqPjt]])JLIcZOcPhyyy;WXm#:C`7o^իn[6ɛF;&$J3+*** 6HC.__nKco'' -(ii^ƏED_%y)^X=).#y߰ہG+|>| `u

};]lThLF.{ζWT1+n?6'"j ƿL>$pIUपޛ,w_*8xǩLMy!ɹ7888H_H72U5۶|Jj<G΀,jF /.abIENDB`modem-manager-gui-0.0.19.1/help/C/usage-traffic.page000664 001750 001750 00000004071 13261703575 021664 0ustar00alexalex000000 000000 Get statistics about network traffic. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

Network traffic

Modem Manager GUI collects mobile broadband traffic statistics and able to disconnect modem when traffic consumption or time of the session exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar.

Network traffic window has list with session, month and year traffic consumption information on the left and graphical representation of current network connection speed on the right.

Network traffic window of Modem Manager GUI.

Use Set limit button to set traffic or time limit for current session, Connections button to view list of active network connections and terminate applications consuming network traffic and Statistics button to view daily traffic consumption statistics for selected months.

Traffic statistics are collected only while Modem Manager GUI is running, so result values can be inaccurate and must be treated as reference only. The most accurate traffic statistics are collected by mobile operator.

modem-manager-gui-0.0.19.1/po/lt.po000664 001750 001750 00000110114 13261705116 016556 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Mantas Kriaučiūnas , 2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Lithuanian (http://www.transifex.com/ethereal/modem-manager-gui/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Neskaitytos SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Neskaitytos žinutės" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Vardas" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Pirmasis numeris" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "El. paštas" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Grupė" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Antrasis vardas" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Antrasis numeris" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Pasirinktas" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Įrenginys" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Nepalaikomas" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s atjungtas" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/src/scripts/95-mmgui-timestamp-notifier000664 001750 001750 00000001663 13261703575 024570 0ustar00alexalex000000 000000 #!/usr/bin/env python3 import sys import os import configparser import time #Wrong number of arguments passed if len(sys.argv) != 3: sys.exit(1) #We're not interested in other events if sys.argv[2] != 'up' and sys.argv[2] != 'down': sys.exit(0) #First try to create directory for our file filedir = os.path.join("var", "run", "modem-manager-gui") os.makedirs(filedir, 0o777, True) #Then create or open existing file filepath = os.path.join(filedir, "timestamps") config = configparser.ConfigParser() config.read(filepath) if not config.has_section('timestamps'): config.add_section('timestamps') #Add data to this file if sys.argv[2] == 'up': timestamp = int(time.time()) config.set('timestamps', sys.argv[1], str(timestamp)) elif sys.argv[2] == 'down': if config.has_option('timestamps', sys.argv[1]): config.remove_option('timestamps', sys.argv[1]) #And save it with open(filepath, 'w') as configfile: config.write(configfile) modem-manager-gui-0.0.19.1/help/fr/000775 001750 001750 00000000000 13261703575 016531 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/pl/meson.build000664 001750 001750 00000000344 13261703575 020523 0ustar00alexalex000000 000000 custom_target('man-pl', input: 'pl.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'pl', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/po/uz@Latn.po000664 001750 001750 00000127417 13261705350 017532 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Umidjon Almasov , 2013-2014 # Umidjon Almasov , 2013 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Latin) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Latn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Latn\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "O'qilmagan SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "O'qilmagan xabarlar" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Ulanish" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Aloqani qo'shish xatosi" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Aloqani o'chirish" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Rostdan aloqani o'chirishni istaysizmi?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Aloqani o'chirish xatosi" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Aloqa uskunadan o'chirilmagan" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Aloqa tanlanmagan" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Modem aloqalari" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME aloqalari" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE aloqalari" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Ismi" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Birinchi raqam" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Elektron pochta" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Guruh" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Familiyasi" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Ikkinchi raqam" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Uskuna ochish xatosi" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersiya:%s Port:%s Turi:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Tanlangan" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Uskuna" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Faollashtirish" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Qo'llab-quvvatlanmaydi" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Initsializatsiya xatosi" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Tizimda uskunalar topilmadi" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "SMS o'qish va yozish uchun modemni yoqish kerak. Iltimos, modemni yoqing." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "SMS qabul qilish va yuborish uchun modem mobil tarmoqda ro'yxatdan o'tish kerak. Iltimos, kutib turing..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "SMS qabul qilish va yuborish uchun modem qulflanmagan bo'lish kerak. Iltimos, PIN kodni kiriting." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Modem boshqaruvchisi SMS boshqarish xususiyatlarini qo'llab-quvvatlanmaydi." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Modem boshqaruvchisi SMS yuborishni qo'llab-quvvatlanmaydi." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "USSD yuborish uchun modemni yoqish kerak. Iltimos, modemni yoqing." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "USSD yuborish uchun modem mobil tarmoqda ro'yxatdan o'tish kerak. Iltimos, kutib turing..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "USSD yuborish uchun modem qulflanmagan bo'lish kerak. Iltimos, PIN kodni kiriting." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Modem boshqaruvchisi USSD so'rovlarni yuborishni qo'llab-quvvatlanmaydi." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Mavjud tarmoqlarni izlash uchun modemni yoqish kerak. Iltimos, modemni yoqing." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Mavjud tarmoqlarni izlash uchun modem qulflanmagan bo'lish kerak. Iltimos, PIN kodni kiriting." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Modem boshqaruvchisi mavjud mobil tarmoqlarni tekshirishni qo'llab-quvvatlanmaydi." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Modem hozir ulangan. Iltimos, tarmoqlarni izlash uchun uzib qo'ying." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Aloqalarni eksport qilish uchun modemni yoqish kerak. Iltimos, modemni yoqing." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Aloqalarni eksport qilish uchun modem qulflanmagan bo'lish kerak. PIN kodni kiriting." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Modem boshqaruvchisi modem aloqalarini boshqarish xususiyatlarini qo'llab-quvvatlanmaydi." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Modem boshqaruvchisi modem aloqalarini tahrirlash xususiyatlarini qo'llab-quvvatlanmaydi." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Qurilmalar" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Ma'lumot" #: ../src/main.c:1600 msgid "S_can" msgstr "T_ekshirish" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Trafik" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "_Aloqalar" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Modem Manager GUI oynasi yashirilgan" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Oynani yana ko'rsatish uchun trey ikonachasi yoki xabar menyusidan foydalaning" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s uzilgan" #: ../src/main.c:2056 msgid "Show window" msgstr "Oynani ko'rsatish" #: ../src/main.c:2062 msgid "New SMS" msgstr "Yangi SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Chiqish" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Chiqish" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Harakatlar" #: ../src/main.c:2689 msgid "_Preferences" msgstr "S_ozlashlar" #: ../src/main.c:2692 msgid "_Edit" msgstr "Tah_rirlash" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Yordam" #: ../src/main.c:2697 msgid "_About" msgstr "_Dastur haqida" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Moslamalar" #: ../src/main.c:2714 msgid "Help" msgstr "Yordam" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Haqida" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Interfeys tuzish xatosi" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Modem boshqarish modullari:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modul" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Tavsifi" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Segmentatsiya xatosining manzili: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Stekni kuzatish:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Ishga tushirilganda oyna ko'rsatilmasin" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- EDGE/3G/4G modemning maxsus vazifalarini boshqarish vositasi" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Buyruq satri parametrini tahlil qilish muvaffaqiyatsiz tugadi: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Aniqlanmagan" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Uskuna xatosi" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Mavjudligi: %s Standart: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Tarmoqlarni izlash xatosi" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operator" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u yangi SMS xabarlar olindi" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Yangi SMS xabar olindi" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Xabar yuboruvchilari: " #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "SMS raqami noto'g'ri\nFaqat 2 dan 20 gacha raqamlardan foydalanish\nmumkin, harflar va belgilardan foydalanish mumkin emas" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "SMS matni noto'g'ri\nIltimos, yuborish uchun matn kiriting" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Raqam noto'g'ri yoki uskuna tayyor emas" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Ushbu jild kiruvchi SMS xabarlari uchun.\n'Javob berish' tugmasini bosib tanlangan xabarga javob berish mumkin." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Ushbu jild yuborilgan SMS xabarlari uchun." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Ushbu jild qoralama SMS xabarlar uchun.\nO'zgartirish uchun xabarni tanlang va 'Javob berish' tugmasini bosing." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Kiruvchi\nKiruvchi xabarlar" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Yuborilgan\nYuborilgan xabarlar" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Qoralamalar\nQoralama xabarlar" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kb/s" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kb/s" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mb/s" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mb/s" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gb/s" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gb/s" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u soniya" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u soniya" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Bugun, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Noma'lum" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Kecha, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Mavjud" #: ../src/strformat.c:248 msgid "Current" msgstr "Joriy" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Taqiqlangan" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Ro'yxatdan o'tmagan" #: ../src/strformat.c:288 msgid "Home network" msgstr "Uy tarmog'i" #: ../src/strformat.c:290 msgid "Searching" msgstr "Qidirilmoqda" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Ro'yxatdan o'tish rad etilgan" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Noma'lum holat" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Rouming tarmog'i" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f daqiqa" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f soat" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f kun" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f hafta" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f soniya" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u daqiqa, %u soniya" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Kun" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Qabul qilingan ma'lumot" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Jo'natilgan ma'lumot" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Sessiya vaqti" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Dastur" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokol" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Holat" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Bufer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Mo'ljal" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Trafik limitidan oshirib yuborildi" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Vaqt limitidan oshirib yuborildi" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafik: %s, limit qo'yilgan: %s\nVaqt: %s, limit qo'yilgan: %s\nKiritilgan qiymatlarni tekshiring va qayta urinib ko'ring" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Trafik va vaqt limitlarining qiymatlari no'to'g'ri" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafik: %s, limit qo'yilgan: %s\nKiritilgan qiymatlarni tekshiring va qayta o'rinib ko'ring" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Trafik limitining qiymati noto'g'ri" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Vaqt: %s, limit qo'yilgan: %s\nKiritilgan qiymatlarni tekshiring va qayta o'rinib ko'ring" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Vaqt limitilimiti qiymati noto'g'ri" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Uzilgan" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Limit" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "O'chirilgan" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kb/s" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "soniya" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Qabul qilish tezligi" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Jo'natish tezligi" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parametr" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Qiymati" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Qabul qilingan" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Jo'natilgan" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Qabul qilish tezligi" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Jo'natish tezligi" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Sessiya vaqti" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Qolgan trafik" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Qolgan vaqt" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Trafik limiti oshirib yuborildi... Dam olish vaqti keldi \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Vaqt limiti oshirib yuborildi... Uxlang va yaxshi tushlar ko'ring -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Buyruq namunasi" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "USSD so'rovi noto'g'ri\nSo'rov 160 belgilardan oshmasligi,\n'*' bilan boshlanishi va '#' bilan tugashi lozim" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "USSD yuborish xatosi" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "USSD so'rovi noto'g'ri yoki uskuna tayyor emas" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "USSD sessiyasi tugatildi. Yangi so'rov yuborishingiz mumkin" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "USSD so'rovi noto'g'ri" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nUSSD sessiyasi faol. Ma'lumot kiritishingizni kutmoqda...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Buyruq" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Modem manager" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Ulanish boshqaruvchisi" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Mavjud uskunalarni ko'rish va tanlash CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Uskunalar" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "SMS xabarlarni yuborish va qabul qilish CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "USSD so'rovlarni yuborish CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Faol uskuna ma'lumotini ko'rish CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Ma'lumot" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Mavjud mobil tarmoqlarni izlash CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Tarmoqlar" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Tarmoq trafigini kuzatish CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Trafik" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Tizimning va modemning manzillar kitobini ko'rish CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Aloqalar" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Tahrirlash" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Yangi SMS xabar yuborish CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Yangi" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Tanlangan xabarni o'chirish CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "O'chirish" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Tanlangan xabarga javob berish CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Javob berish" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "So'rov" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Yuborish" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "USSD so'rov yuborish CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "USSD buyruqlar ro'yxatini tahrirlash CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Jihoz" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Usul" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Signal darajasi" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Operator kodi" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Ro'yxatdan o'tish" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Tarmoq" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "3GPP joylashuvi\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Joylashish" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Mavjud mobil tarmoqlarni izlash CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Tarmoqlarni izlash" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Ulanishni yaratish" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Uzish uchun trafik qiymatini yoki vaqt limitini qo'yish CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Limit qo'yish" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Faol tarmoq ulanishlar ro'yxatini ko'rish CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Ulanishlar" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Kunlik trafik statistikani ko'rish CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statistika" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Jo'natish tezligi" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Modemning manzillar kitobiga yangi aloqani qo'shish CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Yangi aloqa" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Manzillar kitobidan aloqani o'chirish CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Aloqani o'chirish" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Tanlangan aloqaga SMS xabar yuborish CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "SMS yuborish" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "EDGE/3G/4G modemning maxsus vazifalarini boshqarish vositasi" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Uy sahifasi" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "O'zbekcha: Umid Almasov " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Faol ulanishlar" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "SIGTERM signalidan foydalanib tanlangan dasturni yopish CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Dasturni yopish" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Xato" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Mendan qayta so'ralsin" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Chiqilsinmi yoki kichraytirilsinmi?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Oyna yopilganda dastur nima qilishini istaysiz?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Faqat chiqish" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Trey yoki xabarlar menyusiga kichraytirish" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Yangi SMS xabar" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Raqam" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Voqealar uchun ovozlardan foydalanish" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Oyna yopilganda uni treyga yashirish" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Oyna o'lchamlarini va joylashuvini saqlash" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Xulqi" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Xabarlarni birlashtirish" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Jildlarni ochish" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Eski xabarlarni yuqoriga qo'yish" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Qabul qilish tezligi grafigining rangi" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Jo'natish tezligi grafigining rangi" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Trafik" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Savol" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Trafik limiti" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Vaqt limitini qo'yish" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Xabar" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Harakat" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Xabar ko'rsatish" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Aloqani uzish" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Vaqt" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Daqiqa" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Soat" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Trafik statistikasi" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Tanlangan statistika davri" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Yanvar" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Fevral" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Mart" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Aprel" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "May" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Iyun" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Iyul" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Avgust" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Sentyabr" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Oktyabr" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Noyabr" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Dekabr" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Yangi USSD buyrug'ini qo'shish CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Qo'shish" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Tanlangan USSD buyrug'ini o'chirish CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "O'chirish" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "USSD javobining kodlash usulini GSM7 dan UCS2 ga o'zgartirish (Huawei modemlari uchun) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Xabarning kodlash usulini o'zgartirish" modem-manager-gui-0.0.19.1/po/hu.po000664 001750 001750 00000115626 13261705031 016564 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Skuzzy , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Hungarian (http://www.transifex.com/ethereal/modem-manager-gui/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Olvasatlan SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Olvasatlan üzenet" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Névjegy törlése" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Valóban törlöd a névjegyet?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Hiba a névjegy törlésekor" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Keresztnév" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "E-mail" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Csoport" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Hiba az eszköz megnyitásánál" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Kiválasztott" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Eszköz" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Nem támogatott" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "SMS olvasáshoz és íráshoz engedélyezni kell a modemet. Engedélyezd a modemet." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "SMS olvasáshoz és íráshoz a modemet regisztálni kell a mobil hálózatra. Kérlek várj..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "SMS fogadáshoz és küldéshez a modemet fel kell oldalni. Add meg a PIN kódot." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "A Modem manager nem támogatja az SMS kezelő funkciókat." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "A Modem manager nem támogatja az SMS küldést." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Eszköz" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Infó" #: ../src/main.c:1600 msgid "S_can" msgstr "K_eresés" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Használd a tálca ikont vagy az üzenet menüt az ablak újboli megjelenítéséhez" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Hiba a súgó tartalmának megjelenítésekor" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "Ablak megjelenítése" #: ../src/main.c:2062 msgid "New SMS" msgstr "Új SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Kilépés" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Beállítások" #: ../src/main.c:2714 msgid "Help" msgstr "Súgó" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Névjegy" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modul" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Leírás" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Ne jelenjen meg az ablak induláskor" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Eszköz hiba" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Hiba a hálózatok keresésekor" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u új SMS érkezett" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Új SMS érkezett" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Ma, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Ismeretlen" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Tegnap, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "Saját hálózat" #: ../src/strformat.c:290 msgid "Searching" msgstr "Keresés" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Regisztráció szükséges" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Ismeretlen státusz" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Roaming hálózat" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u perc, %u mp" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Nap" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Fogadott adat" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Küldött adat" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Folyamat idő" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokol" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Státusz" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Puffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Cél" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Elért forgalmi korlát" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Elért idő korlát" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Forgalom: %s, beállított korlát: %s\nIdő: %s, beállított korlát: %s\nEllenőrizd a beállított értékeket és próbáld újra" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Hibás forgalmi és idő korlát értékek" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Forgalom: %s, beállított korlát: %s\nEllenőrizd a beállított értékeket és próbáld újra" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Hibás forgalmi korlát érték" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Idő: %s, beállított korlát: %s\nEllenőrizd a beállított értékeket és próbáld újra" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Hibás idő korlát érték" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Szétkapcsolt" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Korlát" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Kikapcsolt" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "mp" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "RX sebesség" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "TX sebesség" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Paraméter" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Érték" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Letöltött adat" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Feltöltött adat" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Letöltési sebesség" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Feltöltési sebesség" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Folyamat ideje" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Hátralévő forgalom" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Hátralévő idő" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Példa utasítás" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Modem manager" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Connection manager" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Eszközök" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Infó" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Keresés" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Forgalom" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Névjegyek" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Mód" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Szignál szint" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Operátor kód" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Regisztráció" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Hálózat" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Pozíció" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Az elérhető mobil hálózatok keresése CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Keresés indítása" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Kapcsolat létrehozása" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Aktív hálózati kapcsolatok megjelenítése CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Kapcsolatok" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Napi statisztikák megjelenítése CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statisztikák" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Átviteli sebesség" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Új névjegy felvétele a modem címjegyzékébe CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Új névjegy" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Névjegy törlése a modem címjegyzékéből CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Névjegy törlése" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "SMS küldése a kiválasztott névjegynek CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "SMS küldés" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Honlap" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Aktív kapcsolatok" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "A kiválasztott aplikáció megszakítása SIGTERM szignállal CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Felhasználó" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Jelszó" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Hiba" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Kérdezz meg újra" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Új SMS üzenet" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "SMS küldése" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "USSD kérés küldése" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Hálózatok keresése" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Modulok" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Kérdés" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Forgalom korlát" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Idő korlát engedélyezése" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Üzenet" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Üzenet megjelenítése" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Szétkapcsolás" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Idő" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Percek" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Órák" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Forgalmi statisztikák" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Január" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Február" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/man/ar/meson.build000664 001750 001750 00000000344 13261703575 020512 0ustar00alexalex000000 000000 custom_target('man-ar', input: 'ar.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'ar', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/man/tr/000775 001750 001750 00000000000 13261703575 016372 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/pl/pl.po000664 001750 001750 00000007141 13261703575 017336 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Swift Geek , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (http://www.transifex.com/ethereal/modem-manager-gui/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "" #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Wypisz wszystkie dostępne moduły i wyjdź" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "" modem-manager-gui-0.0.19.1/resources/pixmaps/signal-0.png000664 001750 001750 00000006102 13261703575 023004 0ustar00alexalex000000 000000 PNG  IHDR}\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FmIDATxڴN@n[/$>7bD7OxPE,ɤv*hԿntјIѤIp|rm%AѠW$IURMTuZb UD\?0>E*VTӱj+*F5RaC DH RnZ@`0o*8c!"M1,.RQCxZlb:Zg(ϧBҐ&_ŏ2X&؈݅/?T,:Y'XoSb?e Ъ7QwsCC a_ӻ4CC$zIL n9vIT1ChRW) GXw ZxufVfڬ8!B lolR(SSs慈nA'oZnI''L^ꟓB}i8\<l Rn;A to'4#.A97qZ~8FxwR_: {*[Pgk[}DsCA1Y,6m‘(V|w4ks!j^𩬵՚Xh=h7ZyN2ϙuk[cIa^X h%p qa}M#2MS 3F$:^]ki4[|3ͽ6sƉ< SO_pbZctOm,%P-}dd Xl}`9vʚ 0D}e@u<97YzZX:['wܸ%{i/EМ6,e6_*LXgD;2S+`1C4lX4ˆo'v<뫬unm?Q۵LKs˽;?NSw w΃[e5譳+`uxxws'־7  s \_Xga.zƶ~؋nz~lbV[؞Lf.M7|}㝏E{"`7<Ãߠcg=άNVLG8 C&ى;7UVٯur?U2,:•vwX0] ~VSgeugwv5^9XLƍРfj95&׷^|mmgZ{*ܖv w +ۑ-;K--R࣑'Odd"8S>CIRDR:JA:$0/)"u]&3 e+,Ct:0ȓfIB1*pIrB'@ڡlB9QUjW6 QsU\T.0^EN &M/(K;0py34ڙ.Y TdT'%#ȚEZP %,#F+Aū÷ ҧ0pO,OOθ4n77ȈQLuD:U[r,: 3ZAw:AF<bB*j Д9a$zxwEusu{~?9wx|06r6vLJ bc /ݺN)7,>uЧ2Dhvt=+$")(SlvBM-JaR QĘ4h9%F[q:(V*xiP<ɋ Mx!'QC 3u5+q5n<3P]˽T@!jv @aNX#N)-A[ 4d2#7a͸嶺)L %_b89D}B3vYkbR㥝\XեR%R12M_XGکc;qW<]t:(Ehтc"J˄n\reZZ@GRWnY d "[Q4Y+FDpdpG7MJ" 8F 0_DZ*2bu:C҈gKNEq - Rv>,d@;痳xg ޓsjG-j#ᲀoV[kK`ݙLCxp]z苧F&d~y~}f♖Rguq̨b@i”f iټ%&O}F*ݣdP) ] Orr {jޒb|6`f/6َL d$2<جan2xIdL8a{c!m M!%־h?4-$Ƀwח666 |WNW(|+M}X5%&ӊtөt-{s=H+-=: *>cI7¿I{aimjjsx& #WkpOiA9_^^p||fg&ݲk<9i&D?,% w.᭭[{,;V Sɞğ%md/mf,bτJ<#9L׊ ~NOK4ahE[zx.;wE㑿Wiz# 4^/@kk?U=[A7) Tv5ͅp{-9{燁*@x5>߷|'.YIENDB`modem-manager-gui-0.0.19.1/man/pt_BR/meson.build000664 001750 001750 00000000355 13261703575 021120 0ustar00alexalex000000 000000 custom_target('man-pt_BR', input: 'pt_BR.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'pt_BR', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/resources/pixmaps/info-equipment.png000664 001750 001750 00000001676 13261703575 024345 0ustar00alexalex000000 000000 PNG  IHDR00WbKGD pHYs MtIME 9OKIDAThKh\e_Q[a@TQ\qBڅr#+AWUA-D֢R&jib8N839p}p9s).bCN,5+Cx{Xp;V<K cQ'& g3N*ؘ6a|x-IKbgN\BfnamU\̵eB[{q?D˱ GroL`E*G=(w[ PZ| os b :?_ Ve]g⼬֒၌ZQ.γ_cRLWF(7\Op,+;2E=9F1~˽VZ*nĎP?e87n2aaqm%e Mw } A|KŵqW(Ȧe>P1ϥxO&DzA(RT($ܚRsn lMx_4a;y.NE+il<ӳVB' ?~ } IENDB`modem-manager-gui-0.0.19.1/polkit/zh_CN.po000664 001750 001750 00000002712 13261703575 020037 0ustar00alexalex000000 000000 # # Translators: # 周磊 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: 周磊 \n" "Language-Team: Chinese (China) (http://www.transifex.com/ethereal/modem-manager-gui/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "使能和启动调制解调器管理服务" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "调制解调器管理服务未运行。您需要进行身份验证才能使能并启动这些服务。" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "使用调制解调器管理服务" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "调制解调器管理服务需要您的凭证。您需要进行身份验证才能使用此服务。" modem-manager-gui-0.0.19.1/help/uk/000775 001750 001750 00000000000 13261703575 016541 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/fr.po000664 001750 001750 00000002776 13261703575 017457 0ustar00alexalex000000 000000 # # Translators: msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: L'Africain \n" "Language-Team: French (http://www.transifex.com/ethereal/modem-manager-gui/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Activer et démarrer les services de gestion de modem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Les services de gestion du modem ne sont pas en cours d'exécution. Vous devez vous authentifier pour activer et démarrer ces services." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Utiliser le service de gestion des modems" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Le service de gestion du modem a besoin de vos informations d'identification. Vous devez vous authentifier pour utiliser ce service." modem-manager-gui-0.0.19.1/appdata/modem-manager-gui.desktop.in000664 001750 001750 00000000550 13261703575 024077 0ustar00alexalex000000 000000 [Desktop Entry] Name=Modem Manager GUI GenericName=Broadband modem management tool Comment=Control EDGE/3G/4G broadband modem specific functions Exec=modem-manager-gui Icon=modem-manager-gui Terminal=false Type=Application StartupNotify=true Categories=GTK;System;Utility;Network;TelephonyTools; Keywords=modem;manager;sms;ussd; X-GNOME-UsesNotifications=true modem-manager-gui-0.0.19.1/appdata/id.po000664 001750 001750 00000007613 13261703575 017547 0ustar00alexalex000000 000000 # # Translators: # Muhammad Ridwan , 2017 # Rendiyono Wahyu Saputro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Muhammad Ridwan \n" "Language-Team: Indonesian (http://www.transifex.com/ethereal/modem-manager-gui/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Alex" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Mengendalikan fungsi khusus modem broadband EDGE/3G/4G" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Antarmuka grafis simpel dan kompatibel dengan Modem manager, layanan sistem Wader dan oFono dapat mengendalikan fungsi khusus modem broadband EDGE/3G/4G." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Anda bisa mengecek saldo kartu SIM anda, mengirim atau menerima pesan SMS, mengendalikan konsumsi trafik mobile, dan lainnya menggunakan Modem Manager GUI." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Fitur saat ini:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "Buat dan kontrol koneksi mobile broadband" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Kirim dan terima pesan SMS dan simpan pesan dalam basis data" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Memulai permintaan USSD dan baca jawaban (juga menggunakan sesi interaktif)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Tampilkan informasi perangkat: nama operator, mode perangkat, IMEI, IMSI, dan tingkat sinyal" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Pindai jaringan selular yang tersedia" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Tampilkan statistik trafik selular dan tetapkan batas" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Harap dicatat bahwa ada beberapa fitur yang tidak tersedia karena keterbatasan dari layanan sistem yang berbeda atau versi layanan sistem yang digunakan." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "Ikhtisar perangkat broadband" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "Daftar pesan SMS" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "Kontrol trafik" modem-manager-gui-0.0.19.1/packages/debian/source/format000664 001750 001750 00000000014 13261703575 022700 0ustar00alexalex000000 000000 3.0 (quilt) modem-manager-gui-0.0.19.1/configure000775 001750 001750 00000012702 13261703575 017103 0ustar00alexalex000000 000000 #!/bin/sh # configure # # Copyright 2012-2018 Alex # 2013 Graham Inggs # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . prefix="/usr" libpath="/usr/lib" addlibsnames="" prefixchanged=false libpathchanged=false ofonoplugin=true spellchecker=1 indicator=1 cflags=$CFLAGS if [ "x$cflags" = x ] ; then cflags='-mtune=native -O3' fi for arg_iter in "$@"; do arg=${arg_iter%%=*} arg_value=${arg_iter#*=} case $arg in --help) echo "This script generates Modem Manager GUI configuration and build files. It also checks if all dependencies are fulfilled. Used without arguments, default settings are applied. Arguments are : --help : Display this message and exit. --prefix=PATH : Set PATH as file-system root for installation. --libdir=PATH : Set PATH as a directory for libraries. --cflags=PARAMETERS : Pass PARAMETERS to the compiler." exit 0;; --prefix) prefixchanged=true prefix=$(eval echo $arg_value);; --libdir) libpathchanged=true libpath=$(eval echo $arg_value);; --cflags) echo "Using : \"$arg_value\" as compilation options." cflags="$arg_value ";; esac done if $prefixchanged ; then if ! $libpathchanged ; then libpath="$prefix/lib" fi fi echo -n "Checking dependencies... " if ! pkg-config --exists 'gtk+-3.0 >= 3.4.0'; then echo "ERROR: Please install GTK+ version 3.4.0 or later with development headers." exit 1 fi if ! test -e "/usr/include/gdbm/gdbm.h"; then if ! test -e "/usr/include/gdbm.h"; then echo "ERROR: Please install GDBM library with development headers." exit 1 fi fi if ! pkg-config --exists 'ofono >= 1.9'; then echo "WARNING: oFono plugin won't be built. Please install oFono development package for version 1.9 or later if you want better oFono experience." ofonoplugin=false fi if ! pkg-config --exists 'gtkspell3-3.0 >= 3.0.3'; then echo "WARNING: Spell checking won't be supported. Please install gtkspell library version 3.0.3 or later with development headers if you want to use it." spellchecker=0 else if [ -z "$addlibsnames" ]; then addlibsnames="gtkspell3-3.0" else addlibsnames="${addlibsnames} gtkspell3-3.0" fi fi if ! pkg-config --exists 'appindicator3-0.1 >= 0.4.92'; then echo "WARNING: Indicator won't be supported. Please install appindicator library version 0.4.92 or later with development headers if you want to use it." indicator=0 else if [ -z "$addlibsnames" ]; then addlibsnames="appindicator3-0.1" else addlibsnames="${addlibsnames} appindicator3-0.1" fi fi echo done echo -n "Generating Makefile_h... " echo "#WARNING: Auto-generated file, edit with care. CFLAGS := $cflags LIBPATH := $libpath PREFIX := $prefix ADDLIBSNAMES := $addlibsnames OFONOPLUGIN := $ofonoplugin" > Makefile_h echo done echo -n "Generating resources.h... " echo "/* * resources.h * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* WARNING: Auto-generated file, edit with care. */ #ifndef __RESOURCES_H__ #define __RESOURCES_H__ #define RESOURCE_SCALABLE_ICONS_DIR \"$prefix/share/icons/hicolor/scalable/apps\" #define RESOURCE_SYMBOLIC_ICONS_DIR \"$prefix/share/icons/hicolor/symbolic/apps\" #define RESOURCE_PIXMAPS_DIR \"$prefix/share/modem-manager-gui/pixmaps\" #define RESOURCE_SOUNDS_DIR \"$prefix/share/modem-manager-gui/sounds\" #define RESOURCE_UI_DIR \"$prefix/share/modem-manager-gui/ui\" #define RESOURCE_MODULES_DIR \"$libpath/modem-manager-gui/modules\" #define RESOURCE_LOCALE_DIR \"$prefix/share/locale\" #define RESOURCE_LOCALE_DOMAIN \"modem-manager-gui\" #define RESOURCE_DESKTOP_FILE \"$prefix/share/applications/modem-manager-gui.desktop\" #define RESOURCE_PROVIDERS_DB \"$prefix/share/mobile-broadband-provider-info/serviceproviders.xml\" #define RESOURCE_SPELLCHECKER_ENABLED $spellchecker #define RESOURCE_INDICATOR_ENABLED $indicator #endif // __RESOURCES_H__" > resources.h echo done modem-manager-gui-0.0.19.1/src/preferences-window.h000664 001750 001750 00000002711 13261703575 021741 0ustar00alexalex000000 000000 /* * preferences-window.h * * Copyright 2015-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __PREFERENCES_WINDOW_H__ #define __PREFERENCES_WINDOW_H__ #include void mmgui_preferences_window_services_page_mm_modules_combo_changed(GtkComboBox *widget, gpointer data); void mmgui_preferences_window_services_page_cm_modules_combo_changed(GtkComboBox *widget, gpointer data); void mmgui_preferences_window_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data); gchar *mmgui_preferences_window_message_validity_scale_value_format(GtkScale *scale, gdouble value, gpointer data); gchar *mmgui_preferences_window_timeout_scale_value_format(GtkScale *scale, gdouble value, gpointer data); #endif /* __PREFERENCES_WINDOW_H__ */ modem-manager-gui-0.0.19.1/src/modules/Makefile000664 001750 001750 00000004460 13261703575 021075 0ustar00alexalex000000 000000 include ../../Makefile_h GCCMOD = gcc -fPIC GCCLMOD = gcc -shared INCMOD = `pkg-config --cflags glib-2.0` `pkg-config --cflags gmodule-2.0` `pkg-config --cflags gio-2.0` LIBMOD = `pkg-config --libs glib-2.0` `pkg-config --libs gmodule-2.0` `pkg-config --libs gio-2.0` LIBMOD1 = `pkg-config --libs glib-2.0` `pkg-config --libs gmodule-2.0` `pkg-config --libs gio-2.0` -lgdbm -lm LIBMOD2 = `pkg-config --libs glib-2.0` `pkg-config --libs gmodule-2.0` `pkg-config --libs gio-2.0` -lgdbm -lm LIBMOD5 = `pkg-config --libs glib-2.0` `pkg-config --libs gmodule-2.0` `pkg-config --libs gio-2.0` -lgdbm -lrt -lm OBJMOD1 = smsdb.o encoding.o dbus-utils.o mm06.o OBJMOD2 = smsdb.o encoding.o dbus-utils.o mm07.o OBJMOD3 = uuid.o nm09.o OBJMOD4 = pppd245.o OBJMOD5 = smsdb.o encoding.o historyshm.o vcard.o ofono109.o OBJMOD6 = uuid.o connman112.o LIBDIR = $(LIBPATH)/modem-manager-gui/modules/ all: mm06 mm07 nm09 pppd245 ofono109 connman112 #Modem Manager <= 0.6.2 mm06: $(OBJMOD1) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD1) $(LIBMOD1) -o libmodmm_mm06.so #Modem Manager >= 0.7.0 mm07: $(OBJMOD2) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD2) $(LIBMOD2) -o libmodmm_mm07.so #Network Manager >= 0.9.0 nm09: $(OBJMOD3) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD3) $(LIBMOD) -o libmodcm_nm09.so #PPPD >= 2.4.5 pppd245: $(OBJMOD4) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD4) $(LIBMOD) -o libmodcm_pppd245.so #oFono >= 1.9 ofono109: $(OBJMOD5) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD5) $(LIBMOD5) -o libmodmm_ofono109.so #Connman >= 1.12 connman112: $(OBJMOD6) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OBJMOD6) $(LIBMOD) -o libmodcm_connman112.so #Shared SMS database smsdb.o: ../smsdb.c $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ #Shared string encoding functions encoding.o: ../encoding.c $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ #Shared VCard format parser vcard.o: ../vcard.c $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ #Shared DBus functions dbus-utils.o: ../dbus-utils.c $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ .c.o: $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ install: mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(LIBDIR) cp *.so $(INSTALLPREFIX)$(DESTDIR)$(LIBDIR) uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(LIBDIR)/*.so clean: rm -f *.o rm -f *.so modem-manager-gui-0.0.19.1/po/000775 001750 001750 00000000000 13261711347 015604 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/appdata/LINGUAS000664 001750 001750 00000000073 13261711676 017632 0ustar00alexalex000000 000000 ar bn_BD de fr id lt pl pl_PL ru sk_SK tr uk uz@Latn zh_CN modem-manager-gui-0.0.19.1/help/bn_BD/000775 001750 001750 00000000000 13261703575 017066 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/preferences-window.c000664 001750 001750 00000076652 13261703575 021753 0ustar00alexalex000000 000000 /* * preferences-window.c * * Copyright 2015-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "../resources.h" #include "strformat.h" #include "main.h" #include "preferences-window.h" enum _mmgui_preferences_window_service_list { MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_ICON = 0, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_NAME, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_SERVICENAME, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBILITY, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_AVAILABLE, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COLUMNS }; static void mmgui_preferences_window_update_compatible_modules(mmgui_application_t mmguiapp, GtkComboBox *currentcombo, GtkComboBox *othercombo); static void mmgui_preferences_window_services_page_modules_combo_set_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data); static void mmgui_preferences_window_services_page_modules_combo_fill(GtkComboBox *combo, GSList *modules, gint type, mmguimodule_t currentmodule); static gboolean mmgui_main_application_is_in_autostart(mmgui_application_t mmguiapp); static gboolean mmgui_main_application_add_to_autostart(mmgui_application_t mmguiapp); static gboolean mmgui_main_application_remove_from_autostart(mmgui_application_t mmguiapp); static void mmgui_preferences_window_update_compatible_modules(mmgui_application_t mmguiapp, GtkComboBox *currentcombo, GtkComboBox *othercombo) { GtkTreeModel *model; GtkTreeIter iter; gchar *compatibility, *servicename; gchar **comparray; gboolean compatible, available; gint i; GtkTreePath *comppath; GtkTreeRowReference *compreference; if ((mmguiapp == NULL) || (currentcombo == NULL) || (othercombo == NULL)) return; model = gtk_combo_box_get_model(currentcombo); if (model != NULL) { if (gtk_combo_box_get_active_iter(currentcombo, &iter)) { /*Get current module compatibility string*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBILITY, &compatibility, -1); if (compatibility != NULL) { /*Get list of compatible service names*/ comparray = g_strsplit(compatibility, ";", -1); /*Iterate through other available modules*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(othercombo)); if (model != NULL) { compreference = NULL; if (gtk_tree_model_get_iter_first(model, &iter)) { do { /*Get other available module service name*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_AVAILABLE, &available, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_SERVICENAME, &servicename, -1); if (servicename != NULL) { /*Try to find this name in array of compatible service names*/ compatible = FALSE; if (available) { i = 0; while (comparray[i] != NULL) { if (g_str_equal(comparray[i], servicename)) { if (compreference == NULL) { comppath = gtk_tree_model_get_path(model, &iter); if (comppath != NULL) { compreference = gtk_tree_row_reference_new(model, comppath); gtk_tree_path_free(comppath); } } compatible = TRUE; break; } i++; } } /*Set flag*/ gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, compatible, -1); /*Free name*/ g_free(servicename); } else { /*Undefined is always compatible*/ if (compreference == NULL) { comppath = gtk_tree_model_get_path(model, &iter); if (comppath != NULL) { compreference = gtk_tree_row_reference_new(model, comppath); gtk_tree_path_free(comppath); } } gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); } } while (gtk_tree_model_iter_next(model, &iter)); } /*Try to select first compatible module if needed*/ if (compreference != NULL) { compatible = FALSE; servicename = NULL; /*If other selected module is compatible?*/ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(othercombo), &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, &compatible, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_SERVICENAME, &servicename, -1); } /*If not, select one avoiding undefined*/ if ((!compatible) || (servicename == NULL)) { comppath = gtk_tree_row_reference_get_path(compreference); if (comppath != NULL) { if (gtk_tree_model_get_iter(model, &iter, comppath)) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(othercombo), &iter); } gtk_tree_path_free(comppath); } } /*Free resources*/ gtk_tree_row_reference_free(compreference); if (servicename != NULL) { g_free(servicename); } } } /*Free resources*/ g_strfreev(comparray); g_free(compatibility); } } } } void mmgui_preferences_window_services_page_mm_modules_combo_changed(GtkComboBox *widget, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; g_signal_handlers_block_by_func(mmguiapp->window->prefmodulescmcombo, mmgui_preferences_window_services_page_cm_modules_combo_changed, mmguiapp); mmgui_preferences_window_update_compatible_modules(mmguiapp, widget, GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo)); g_signal_handlers_unblock_by_func(mmguiapp->window->prefmodulescmcombo, mmgui_preferences_window_services_page_cm_modules_combo_changed, mmguiapp); } void mmgui_preferences_window_services_page_cm_modules_combo_changed(GtkComboBox *widget, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; g_signal_handlers_block_by_func(mmguiapp->window->prefmodulesmmcombo, mmgui_preferences_window_services_page_mm_modules_combo_changed, mmguiapp); mmgui_preferences_window_update_compatible_modules(mmguiapp, widget, GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo)); g_signal_handlers_unblock_by_func(mmguiapp->window->prefmodulesmmcombo, mmgui_preferences_window_services_page_mm_modules_combo_changed, mmguiapp); } static void mmgui_preferences_window_services_page_modules_combo_set_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { gboolean available, compatible; gtk_tree_model_get(tree_model, iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_AVAILABLE, &available, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, &compatible, -1); g_object_set(cell, "sensitive", available && compatible, NULL); } static void mmgui_preferences_window_services_page_modules_combo_fill(GtkComboBox *combo, GSList *modules, gint type, mmguimodule_t currentmodule) { GSList *iterator; GtkListStore *store; gchar *icon; GtkCellArea *area; GtkCellRenderer *renderer; GtkTreeIter iter; mmguimodule_t module; gint moduleid, curid; if ((combo == NULL) || (modules == NULL)) return; store = gtk_list_store_new(MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); moduleid = -1; curid = 0; for (iterator=modules; iterator; iterator=iterator->next) { module = iterator->data; if (module->type == type) { if (module->applicable) { icon = "user-available"; } else if (module->activationtech == MMGUI_SVCMANGER_ACTIVATION_TECH_SYSTEMD) { icon = "user-away"; } else if (module->activationtech == MMGUI_SVCMANGER_ACTIVATION_TECH_DBUS) { icon = "user-away"; } else { icon = "user-offline"; } gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_ICON, icon, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_NAME, module->description, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, module->shortname, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_SERVICENAME, module->servicename, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBILITY, module->compatibility, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_AVAILABLE, module->applicable || (module->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA), MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); if (currentmodule != NULL) { if (currentmodule == module) { moduleid = curid; } } else { if (((module->applicable) || (module->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA)) && (moduleid == -1)) { moduleid = curid; } } curid++; } } gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_ICON, "user-invisible", MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_NAME, _("Undefined"), MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, "undefined", MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_SERVICENAME, NULL, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBILITY, NULL, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_AVAILABLE, TRUE, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); if (moduleid == -1) { moduleid = curid; } area = gtk_cell_layout_get_area(GTK_CELL_LAYOUT(combo)); renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(area), renderer, FALSE, FALSE, TRUE); gtk_cell_area_attribute_connect(area, renderer, "icon-name", MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_ICON); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), renderer, mmgui_preferences_window_services_page_modules_combo_set_sensitive, NULL, NULL); renderer = gtk_cell_renderer_text_new(); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(area), renderer, TRUE, FALSE, FALSE); gtk_cell_area_attribute_connect(area, renderer, "text", MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_NAME); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), renderer, mmgui_preferences_window_services_page_modules_combo_set_sensitive, NULL, NULL); gtk_combo_box_set_model(GTK_COMBO_BOX(combo), GTK_TREE_MODEL(store)); g_object_unref(store); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), moduleid); } void mmgui_preferences_window_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data) { mmgui_application_t mmguiapp; gint response; gchar *strcolor, *modulename; gboolean autostart; GtkTreeIter iter; GtkTreeModel *model; gint argcp, i, p; gchar **argvp; gchar *rawcmd; gboolean correctform; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if ((mmguiapp->options == NULL) || (mmguiapp->settings == NULL)) return; autostart = mmgui_main_application_is_in_autostart(mmguiapp); /*Show SMS settings*/ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsconcat), mmguiapp->options->concatsms); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsexpand), mmguiapp->options->smsexpandfolders); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsoldontop), mmguiapp->options->smsoldontop); gtk_range_set_value(GTK_RANGE(mmguiapp->window->prefsmsvalidityscale), (gdouble)mmguiapp->options->smsvalidityperiod); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsreportcb), mmguiapp->options->smsdeliveryreport); if (mmguiapp->options->smscustomcommand != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->prefsmscommandentry), mmguiapp->options->smscustomcommand); } /*Show behaviour settings*/ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourhide), mmguiapp->options->hidetotray); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehavioursounds), mmguiapp->options->usesounds); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourgeom), mmguiapp->options->savegeometry); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourautostart), autostart); /*Show graph color and movement direction settings*/ #if GTK_CHECK_VERSION(3,4,0) gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(mmguiapp->window->preftrafficrxcolor), (const GdkRGBA *)&mmguiapp->options->rxtrafficcolor); gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(mmguiapp->window->preftraffictxcolor), (const GdkRGBA *)&mmguiapp->options->txtrafficcolor); #else gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(mmguiapp->window->preftrafficrxcolor), FALSE); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(mmguiapp->window->preftraffictxcolor), FALSE); gtk_color_button_set_color(GTK_COLOR_BUTTON(mmguiapp->window->preftrafficrxcolor), (const GdkColor *)&(mmguiapp->options->rxtrafficcolor)); gtk_color_button_set_color(GTK_COLOR_BUTTON(mmguiapp->window->preftraffictxcolor), (const GdkColor *)&(mmguiapp->options->txtrafficcolor)); #endif gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->preftrafficmovdircombo), mmguiapp->options->graphrighttoleft ? 1 : 0); /*Show modules settings*/ gtk_range_set_value(GTK_RANGE(mmguiapp->window->prefenabletimeoutscale), (gdouble)mmguiapp->coreoptions->enabletimeout); gtk_range_set_value(GTK_RANGE(mmguiapp->window->prefsendsmstimeoutscale), (gdouble)mmguiapp->coreoptions->sendsmstimeout); gtk_range_set_value(GTK_RANGE(mmguiapp->window->prefsendussdtimeoutscale), (gdouble)mmguiapp->coreoptions->sendussdtimeout); gtk_range_set_value(GTK_RANGE(mmguiapp->window->prefscannetworkstimeoutscale), (gdouble)mmguiapp->coreoptions->scannetworkstimeout); /*Preferred modem manager*/ if (gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo)) == NULL) { g_signal_handlers_block_by_func(mmguiapp->window->prefmodulesmmcombo, mmgui_preferences_window_services_page_mm_modules_combo_changed, mmguiapp); mmgui_preferences_window_services_page_modules_combo_fill(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo), mmguiapp->core->modules, MMGUI_MODULE_TYPE_MODEM_MANAGER, (mmguimodule_t)mmguiapp->core->moduleptr); g_signal_handlers_unblock_by_func(mmguiapp->window->prefmodulesmmcombo, mmgui_preferences_window_services_page_mm_modules_combo_changed, mmguiapp); } else if (mmguiapp->coreoptions->mmmodule != NULL) { model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, &modulename, -1); if (modulename != NULL) { if (g_str_equal(modulename, mmguiapp->coreoptions->mmmodule)) { g_free(modulename); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo), &iter); break; } g_free(modulename); } } while (gtk_tree_model_iter_next(model, &iter)); } } } /*Preferred connection manager*/ if (gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo)) == NULL) { g_signal_handlers_block_by_func(mmguiapp->window->prefmodulescmcombo, mmgui_preferences_window_services_page_cm_modules_combo_changed, mmguiapp); mmgui_preferences_window_services_page_modules_combo_fill(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo), mmguiapp->core->modules, MMGUI_MODULE_TYPE_CONNECTION_MANGER, (mmguimodule_t)mmguiapp->core->cmoduleptr); g_signal_handlers_unblock_by_func(mmguiapp->window->prefmodulescmcombo, mmgui_preferences_window_services_page_cm_modules_combo_changed, mmguiapp); } else if (mmguiapp->coreoptions->cmmodule != NULL) { model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, &modulename, -1); if (modulename != NULL) { if (g_str_equal(modulename, mmguiapp->coreoptions->cmmodule)) { g_free(modulename); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo), &iter); break; } g_free(modulename); } } while (gtk_tree_model_iter_next(model, &iter)); } } } /*Show active pages*/ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagessmscb), mmguiapp->options->smspageenabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesussdcb), mmguiapp->options->ussdpageenabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesinfocb), mmguiapp->options->infopageenabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesscancb), mmguiapp->options->scanpageenabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagestrafficcb), mmguiapp->options->trafficpageenabled); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagescontactscb), mmguiapp->options->contactspageenabled); response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->prefdialog)); if (response > 0) { /*Save SMS settings*/ mmguiapp->options->concatsms = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsconcat)); gmm_settings_set_boolean(mmguiapp->settings, "sms_concatenation", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsconcat))); mmguiapp->options->smsexpandfolders = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsexpand)); gmm_settings_set_boolean(mmguiapp->settings, "sms_expand_folders", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsexpand))); mmguiapp->options->smsoldontop = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsoldontop)); gmm_settings_set_boolean(mmguiapp->settings, "sms_old_on_top", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsoldontop))); mmguiapp->options->smsvalidityperiod = (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsmsvalidityscale)); gmm_settings_set_int(mmguiapp->settings, "sms_validity_period", (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsmsvalidityscale))); mmguiapp->options->smsdeliveryreport = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsreportcb)); gmm_settings_set_boolean(mmguiapp->settings, "sms_send_delivery_report", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefsmsreportcb))); /*Custom command validation*/ if (mmguiapp->options->smscustomcommand != NULL) { g_free(mmguiapp->options->smscustomcommand); } if (g_shell_parse_argv(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->prefsmscommandentry)), &argcp, &argvp, NULL)) { correctform = TRUE; for (i = 0; i < argcp; i++) { for (p = 0; argvp[i][p] != '\0'; p++) { if (argvp[i][p] == '%') { if ((argvp[i][p + 1] == 'n') || (argvp[i][p + 1] == 't')) { p++; } else { correctform = FALSE; break; } } } } g_strfreev(argvp); if (correctform) { /*Update command*/ mmguiapp->options->smscustomcommand = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->prefsmscommandentry))); /*Save custom command in escaped form*/ rawcmd = g_strescape(mmguiapp->options->smscustomcommand, NULL); gmm_settings_set_string(mmguiapp->settings, "sms_custom_command", rawcmd); g_free(rawcmd); } else { /*Update command*/ mmguiapp->options->smscustomcommand = g_strdup(""); /*Save custom command in escaped form*/ gmm_settings_set_string(mmguiapp->settings, "sms_custom_command", ""); } } else { /*Update command*/ mmguiapp->options->smscustomcommand = g_strdup(""); /*Save custom command in escaped form*/ gmm_settings_set_string(mmguiapp->settings, "sms_custom_command", ""); } /*Save program behaviour settings*/ mmguiapp->options->hidetotray = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourhide)); gmm_settings_set_boolean(mmguiapp->settings, "behaviour_hide_to_tray", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourhide))); mmguiapp->options->usesounds = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehavioursounds)); gmm_settings_set_boolean(mmguiapp->settings, "behaviour_use_sounds", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehavioursounds))); mmguiapp->options->savegeometry = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourgeom)); gmm_settings_set_boolean(mmguiapp->settings, "behaviour_save_geometry", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourgeom))); /*Autostart*/ if ((gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourautostart))) && (!autostart)) { mmgui_main_application_add_to_autostart(mmguiapp); } else if ((!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefbehaviourautostart))) && (autostart)) { mmgui_main_application_remove_from_autostart(mmguiapp); } /*Save graph colors and movement direction*/ #if GTK_CHECK_VERSION(3,4,0) gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(mmguiapp->window->preftrafficrxcolor), &(mmguiapp->options->rxtrafficcolor)); strcolor = gdk_rgba_to_string((const GdkRGBA *)&mmguiapp->options->rxtrafficcolor); gmm_settings_set_string(mmguiapp->settings, "graph_rx_color", strcolor); g_free(strcolor); gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(mmguiapp->window->preftraffictxcolor), &(mmguiapp->options->txtrafficcolor)); strcolor = gdk_rgba_to_string((const GdkRGBA *)&mmguiapp->options->txtrafficcolor); gmm_settings_set_string(mmguiapp->settings, "graph_tx_color", strcolor); g_free(strcolor); #else gtk_color_button_get_color(GTK_COLOR_BUTTON(mmguiapp->window->preftrafficrxcolor), &(mmguiapp->options->rxtrafficcolor)); strcolor = gdk_color_to_string((const GdkColor *)&mmguiapp->options->rxtrafficcolor); gmm_settings_set_string(mmguiapp->settings, "graph_rx_color", strcolor); g_free(strcolor); gtk_color_button_get_color(GTK_COLOR_BUTTON(mmguiapp->window->preftraffictxcolor), &(mmguiapp->options->txtrafficcolor)); strcolor = gdk_color_to_string((const GdkColor *)&mmguiapp->options->txtrafficcolor); gmm_settings_set_string(mmguiapp->settings, "graph_tx_color", strcolor); g_free(strcolor); #endif mmguiapp->options->graphrighttoleft = (gboolean)gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->preftrafficmovdircombo)); gmm_settings_set_boolean(mmguiapp->settings, "graph_right_to_left", (gboolean)gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->preftrafficmovdircombo))); /*Save and apply modules settings*/ mmguiapp->coreoptions->enabletimeout = (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefenabletimeoutscale)); gmm_settings_set_int(mmguiapp->settings, "modules_enable_device_timeout", (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefenabletimeoutscale))); mmguiapp->coreoptions->sendsmstimeout = (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsendsmstimeoutscale)); gmm_settings_set_int(mmguiapp->settings, "modules_send_sms_timeout", (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsendsmstimeoutscale))); mmguiapp->coreoptions->sendussdtimeout = (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsendussdtimeoutscale)); gmm_settings_set_int(mmguiapp->settings, "modules_send_ussd_timeout", (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefsendussdtimeoutscale))); mmguiapp->coreoptions->scannetworkstimeout = (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefscannetworkstimeoutscale)); gmm_settings_set_int(mmguiapp->settings, "modules_scan_networks_timeout", (gint)gtk_range_get_value(GTK_RANGE(mmguiapp->window->prefscannetworkstimeoutscale))); mmguicore_modules_mm_set_timeouts(mmguiapp->core, MMGUI_DEVICE_OPERATION_ENABLE, mmguiapp->coreoptions->enabletimeout, MMGUI_DEVICE_OPERATION_SEND_SMS, mmguiapp->coreoptions->sendsmstimeout, MMGUI_DEVICE_OPERATION_SEND_USSD, mmguiapp->coreoptions->sendussdtimeout, MMGUI_DEVICE_OPERATION_SCAN, mmguiapp->coreoptions->scannetworkstimeout, -1); /*Save preferred modules*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->prefmodulesmmcombo), &iter)) { if (mmguiapp->coreoptions->mmmodule != NULL) { g_free(mmguiapp->coreoptions->mmmodule); } gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, &mmguiapp->coreoptions->mmmodule, -1); gmm_settings_set_string(mmguiapp->settings, "modules_preferred_modem_manager", mmguiapp->coreoptions->mmmodule); } } model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->prefmodulescmcombo), &iter)) { if (mmguiapp->coreoptions->cmmodule != NULL) { g_free(mmguiapp->coreoptions->cmmodule); } gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_PREFERENCES_WINDOW_SERVICE_LIST_MODULE, &mmguiapp->coreoptions->cmmodule, -1); gmm_settings_set_string(mmguiapp->settings, "modules_preferred_connection_manager", mmguiapp->coreoptions->cmmodule); } } /*Save active pages*/ mmguiapp->options->smspageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagessmscb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_sms_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagessmscb))); mmguiapp->options->ussdpageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesussdcb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_ussd_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesussdcb))); mmguiapp->options->infopageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesinfocb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_info_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesinfocb))); mmguiapp->options->scanpageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesscancb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_scan_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagesscancb))); mmguiapp->options->trafficpageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagestrafficcb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_traffic_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagestrafficcb))); mmguiapp->options->contactspageenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagescontactscb)); gmm_settings_set_boolean(mmguiapp->settings, "pages_contacts_enabled", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->prefactivepagescontactscb))); mmgui_main_window_update_active_pages(mmguiapp); } gtk_widget_hide(mmguiapp->window->prefdialog); } gchar *mmgui_preferences_window_message_validity_scale_value_format(GtkScale *scale, gdouble value, gpointer data) { return mmgui_str_format_message_validity_period(value); } gchar *mmgui_preferences_window_timeout_scale_value_format(GtkScale *scale, gdouble value, gpointer data) { return mmgui_str_format_operation_timeout_period(value); } static gboolean mmgui_main_application_is_in_autostart(mmgui_application_t mmguiapp) { gchar *linkfile, *desktopfile; struct stat statbuf; gssize len; if (mmguiapp == NULL) return FALSE; /*Form autostart link path using XDG standard*/ linkfile = g_build_filename(g_get_user_config_dir(), "autostart", "modem-manager-gui.desktop", NULL); if (linkfile == NULL) return FALSE; /*Test if link points to the right file*/ if (lstat(linkfile, &statbuf) != -1) { if ((S_ISLNK(statbuf.st_mode)) && (statbuf.st_size > 0)) { desktopfile = g_malloc0(statbuf.st_size + 1); len = readlink(linkfile, desktopfile, statbuf.st_size + 1); if (len != -1) { desktopfile[len] = '\0'; if (g_str_equal(RESOURCE_DESKTOP_FILE, desktopfile)) { g_free(desktopfile); g_free(linkfile); return TRUE; } else { g_free(desktopfile); } } else { g_free(desktopfile); } } } g_free(linkfile); return FALSE; } static gboolean mmgui_main_application_add_to_autostart(mmgui_application_t mmguiapp) { gchar *autostartdir, *linkfile, *desktopfile; struct stat statbuf; gssize len; if (mmguiapp == NULL) return FALSE; /*Create autostart directory tree*/ autostartdir = g_build_path(G_DIR_SEPARATOR_S, g_get_user_config_dir(), "autostart", NULL); if (autostartdir == NULL) return FALSE; if (!g_file_test(autostartdir, G_FILE_TEST_IS_DIR)) { if (g_mkdir_with_parents(autostartdir, S_IRWXU|S_IRGRP|S_IROTH) == -1) { /*Unable to create autostart directory*/ g_free(autostartdir); return FALSE; } } g_free(autostartdir); /*Form autostart link path using XDG standard*/ linkfile = g_build_filename(g_get_user_config_dir(), "autostart", "modem-manager-gui.desktop", NULL); if (linkfile == NULL) return FALSE; if (lstat(linkfile, &statbuf) != -1) { if ((S_ISLNK(statbuf.st_mode)) && (statbuf.st_size > 0)) { desktopfile = g_malloc0(statbuf.st_size + 1); len = readlink(linkfile, desktopfile, statbuf.st_size + 1); if (len != -1) { desktopfile[len] = '\0'; if (!g_str_equal(RESOURCE_DESKTOP_FILE, desktopfile)) { /*Remove wrong symlink*/ g_free(desktopfile); unlink(linkfile); } else { /*Symlink already exists*/ g_free(desktopfile); g_free(linkfile); return TRUE; } } else { /*Remove unreadable symlink*/ g_free(desktopfile); unlink(linkfile); } } else { /*Remove regular file*/ unlink(linkfile); } } /*Create symlink*/ if (symlink(RESOURCE_DESKTOP_FILE, linkfile) == 0) { g_free(linkfile); return TRUE; } g_free(linkfile); return FALSE; } static gboolean mmgui_main_application_remove_from_autostart(mmgui_application_t mmguiapp) { gchar *linkfile; struct stat statbuf; if (mmguiapp == NULL) return FALSE; /*Form autostart link path using XDG standard*/ linkfile = g_build_filename(g_get_user_config_dir(), "autostart", "modem-manager-gui.desktop", NULL); if (linkfile == NULL) return FALSE; if (lstat(linkfile, &statbuf) != -1) { /*Remove symlink*/ unlink(linkfile); g_free(linkfile); return TRUE; } g_free(linkfile); return FALSE; } modem-manager-gui-0.0.19.1/LICENSE000664 001750 001750 00000104513 13261703575 016203 0ustar00alexalex000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . modem-manager-gui-0.0.19.1/man/de/000775 001750 001750 00000000000 13261703575 016335 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/packages/mageia/modem-manager-gui.spec000664 001750 001750 00000005264 13261703575 024351 0ustar00alexalex000000 000000 Summary: Modem Manager GUI Name: modem-manager-gui Version: 0.0.18 Release: %mkrel 1 License: GPLv3 Group: Communications/Mobile URL: http://linuxonly.ru Source: %{name}-%{version}.tar.gz Vendor: Alex #BuildArch: x86_64 BuildRequires: pkgconfig BuildRequires: libgtk+3.0-devel >= 3.4.0 BuildRequires: glib2-devel >= 2.32.1 BuildRequires: libgdbm-devel >= 1.10 BuildRequires: po4a >= 0.45 BuildRequires: itstool >= 1.2.0 BuildRequires: libgtkspell3-devel >= 3.0.6 #Spell checker 0.0.18 Requires: gtk+3.0 >= 3.4.0 Requires: glib2 >= 2.32.1 Requires: libgdbm4 >= 1.10 Requires: modemmanager >= 0.5.0.0 Requires: gtkspell3 >= 3.0.6 #Spell checker 0.0.18 #Requires: libnotify >= 0.7.5 #Suggests: networkmanager Suggests: libnotify >= 0.7.5 Suggests: libcanberra0 >= 0.28 Suggests: evolution-data-server >= 3.4.1 Suggests: mobile-broadband-provider-info >= 20120614 %description This program is simple graphical interface for Modem Manager daemon dbus interface. Current features: - View device information: Operator name, Mode, IMEI, IMSI, Signal level. - Send and receive SMS messages with long massages concatenation and store messages in database. - Send USSD requests and read answers in GSM7 and UCS2 formats converted to system UTF8 charset. - Scan available mobile networks. %prep %setup -q #cp -f %{SOURCE1} ./src/ %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make install INSTALLPREFIX=%{buildroot} #desktop-file-install --vendor mageia --dir %{buildroot}%{_datadir}/applications --add-category X-Mageia --delete-original %{buildroot}%{_datadir}/applications/extras-%{name}.desktop %find_lang %{name} %clean rm -rf %{buildroot} %files -f %{name}.lang %defattr(-,root,root,-) %doc LICENSE %doc AUTHORS %doc Changelog %{_bindir}/%{name} %{_libdir}/%{name}/modules/* %{_datadir}/pixmaps/%{name}.png %{_datadir}/%{name}/pixmaps/* %{_datadir}/%{name}/sounds/* %{_datadir}/%{name}/ui/%{name}.ui %{_datadir}/applications/%{name}.desktop %{_datadir}/appdata/%{name}.appdata.xml %{_datadir}/polkit-1/actions/ru.linuxonly.%{name}.policy %{_mandir}/man1/%{name}.1* %{_mandir}/*/man1/* %doc %{_datadir}/help/*/%{name}/* %changelog * Sat Oct 10 2015 Alex - Version 0.0.18 changes * Tue Jun 18 2013 Alex - Version 0.0.16 changes * Fri Apr 12 2013 AlexL - fixed Group for Mageia - added modemmanager to Requires - added networkmanager to Suggests - added patch modem-manager-gui.ui #* Mon Apr 07 2013 Zomby #- repack for Mageia Russian Community #* Tue Dec 16 2012 Alex #- added additional pictures for 0.0.15 release * Wed Aug 08 2012 Alex - released spec modem-manager-gui-0.0.19.1/help/tr/000775 001750 001750 00000000000 13261703575 016547 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/bn_BD.po000664 001750 001750 00000003643 13261703575 020006 0ustar00alexalex000000 000000 # # Translators: # Md. Emruz Hossain , 2016 # Reazul Iqbal , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Md. Emruz Hossain \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/ethereal/modem-manager-gui/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "মডেম ব্যবস্থাপনা সেবা সক্রিয় ও শুরু করুন" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "মডেম ব্যবস্থাপনা সেবা বন্ধ আছে। এই সেবা চালু করতে হলে আপনাকে authenticate করতে হবে। " #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "মডেম ব্যবস্থাপনা সেবা ব্যবহার করুন।" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "মডেম ব্যবস্থাপনা সেবার জন্য আপনার credential প্রয়োজন। এই সেবা ব্যবহার করতে হলে আপনাকে authenticate করতে হবে। " modem-manager-gui-0.0.19.1/man/zh_CN/000775 001750 001750 00000000000 13261703575 016746 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/pt_BR/pt_BR.po000664 001750 001750 00000010433 13261703575 020322 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Rafael Fontenelle , 2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/ethereal/modem-manager-gui/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Comandos do Usuário" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "NOME" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - interface gráfica simples para o daemon do Modem Manager." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "SINOPSE" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m módulo ] [ -c módulo ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "DESCRIÇÃO" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Esse programa é uma interface gráfica simples para os daemons de Modem Manager 0.6/0.7, Wader e oFono usando interface dbus." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Não mostra a janela ao iniciar" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Usa o módulo de gerenciamento de modem especificado" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Usa o módulo de gerenciamento de conexão especificado" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Lista todos os módulos disponíveis e sai" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "AUTOR" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Escrito por Alex. Veja a informação de Sobre para todas os contribuidores." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "RELATANDO ERROS" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "COPYRIGHT" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Esse é um software livre. Você pode redistribuir cópias dele sob os termos da Licença Pública Geral GNU Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "VEJA TAMBÉM" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/resources/pixmaps/message-drafts.png000664 001750 001750 00000002103 13261703575 024274 0ustar00alexalex000000 000000 PNG  IHDR-bKGD pHYsVnVn Ѱ(tIME ^IDAT8}MlTƯҿIi %i p!A@\Q M@BbL$]Ę!.$$j-ał(R27(S "'9ŗ5kם[*b0F0<w?9r{>r>t`/?_uerrR&&&֭[2>>nE_ as۟cú;^ʏKc Q)uٶ  }Oׇo0 Uh;˦MDaőc,RIUsuXJ%Y+_uϞ7w߰gռUݫs˗w*գU <5bQ9NJz{l:8W_^͢Żu]80 g!oߦ7rTUri,e6Q>wܡNDc B̾}؃444PWWG* ;iIgftuuErAj~U, 8%- ZEqEQ:y0J!##ԟ8y p8i_1 {>^},̙1`Xä<y8e`Fzsѱ8i~q8Қ J;:PNР*ܔ1J)7Eo]#"q\E[[PӬ2DdR*gURP)ͿnR__+)!#G( @-  Cr.4K=b45!@I%M9(iM" {/R*Wi([m{>JԬX䬟IgH&d8׽\Mc3%BߩTs`j`A4hVp_`B0AkIENDB`modem-manager-gui-0.0.19.1/help/uk/uk.po000664 001750 001750 00000104455 13261703575 017531 0ustar00alexalex000000 000000 # # Translators: # Yarema aka Knedlyk , 2014-2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Ukrainian (http://www.transifex.com/ethereal/modem-manager-gui/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Yarema aka Knedlyk " #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Інформація про Менеджер модемів." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "Про Менеджер модемів" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "Ця програма розповсюджується на базі Загальної публічної ліцензії GNU 3-ї версії, так як опубліковано через Free Software Foundation. Копію цієї ліцензії можна знайти за цим посиланням, або у файлі COPYING, що міститься в джерельному коді цієї програми." #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "Як Ви можете допомогти зробити Менеджер модемів кращим." #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Надання коду" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "Зауважте, що ця команда клонування не дає Вам прав на запис до сховища." #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "Переклад Менеджер модемів Вашою рідною мовою." #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Переклад" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "Графічний інтерфейс користувача, традиційну сторінку допомоги і інструкцію в стилі Gnome’а Менеджера модемів можна перекласти Вашою мовою." #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "Тут є сторінка проекту на Transifex, де містяться існуючі переклади і де можна додати свій." #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "Загальну допомогу щодо роботи Transifex дивіться Сторінку Допомоги по Transifex." #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "Для роботи Ви повинні заглянути в правила і словники локальної команди перекладачів Gnome. Менеджер модемів не повинен розглядатися як справжня програма Gnome’а, він часто використовується в середовищах на базі GTK і повинен пристосовуватися до концепцій такого світу програм." #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Допомога для Менеджера модемів." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "Менеджер модемів" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "Лого привітання GNOMEІнструкція використання Менеджера модемів" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "Менеджер модемів є графічною накладкою на демон ModemManager`а, який може контролювати специфічні функції модему." #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "Ви можете використовувати Менеджер модему для наступних завдань:" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Сканування доступних мобільних мереж" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Використання" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Долучитися до проекту" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Інформація." #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Ліцензія" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Ця робота розповсюджується під ліцензією CreativeCommons Attribution-Share Alike 3.0 Unported." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Ви можете:" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Ділитися" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "Для копіювання, розповсюдження і передачі роботи." #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Для переробки" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Для адаптування роботи." #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "За наступних умов:" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Приписи" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "Ви повинні пристосовувати роботу до приписів, визначених автором або власника ліцензії (але жодною мірою, що наводить на думку, що автор підтримує Вас чи Ваше використання цієї роботи)" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "Розповсюдження на умовах" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "Якщо ви змінюєте, перетворюєте або берете за основу цю роботу, Ви можете поширювати отриманий в результаті витвір на умовах схожої або сумісної ліцензії." #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "Повний текст ліцензії можна переглянути на сторінці CreativeCommons, або прочитати повністю на сторінці Commons Deed." #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Повідомлення про вади і запит нових можливостей." #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Повідомлення про вади" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "Налаштування програми для Ваших потреб." #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Налаштування" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Використання списку контактів." #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Список контактів" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr " Контактне вікно Менеджера Модемів. " #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Отримання інформації про мобільну мережу." #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Інформація про мережу" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "Ваш оператор подає деяку інформацію, яку можна переглянути у Менеджері модемів. Клацніть на кнопку Інформація на панелі." #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "В наступному вікні Ви побачите всю доступну інформацію, отриману від оператора:" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr " Вікно інформації про мережуМенеджера модемів. " #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "Більшість інформації зрозуміла і добре знана з традиційних мобільних телефонів і смартфонів. Зауважте, що визначення положення за допомогою GPS (в нижній частині вікна) не працюватиме в більшості випадків, оскільки мережні пристрої не мають сенсор GPS." #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Активування Ваших модемних пристроїв." #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Модеми" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "Після запуску Менеджера модемів появиться наступне вікно:" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "GUI менеджера модемів" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "Початкове вікно запуску <_:app-1/>." #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "Ви можете переглянути пристрої модемів, доступні у Вашій системі. Натисніть на один з них, щоб використовувати цей пристрій." #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "Після клацання на пристрій може виявитися, що спочатку потрібно його активувати. Менеджер модемів в такому випадку запитає у Вас підтвердження." #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "Майте терпець після з’єднання переносного пристрою, такого як USB-флешка або карта PCMCI. Їх знаходження системою може трохи потривати." #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "Ви не можете використовувати кілька модемів одночасно. Якщо Ви клацнете на інший пристрій в списку, попередній пристрій буде деактивовано." #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Пошук доступних мереж." #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Пошук мереж" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "Вікно пошуку мережі <_:app-1/>." #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Використання Менеджера модемів для висилання та отримання SMS." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "Вікно SMS <_:app-1/>." #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Отримання статистики про мережний трафік." #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Мережний трафік" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "Вікно мережного трафіку <_:app-1/>." #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "Використання Менеджера модемів для висилання кодів USSD і отримання відповідей." #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "Коди USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "Менеджер модемів може також надсилати USSD коди. Ці коди відповідають за контроль деяких функцій мережі, наприклад видимість Вашого номеру телефону при надсиланні повідомлень." #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "Для використання функцій USSD клацніть на кнопку USSD на панелі." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "Вікно USSD <_:app-1/>." #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "На самому верху вікна висвітлюється код *100#. Цей код зазвичай використовується для перевірки балансу передплаченої картки. Якщо Ви бажаєте вислати інший код, клацніть кнопку Редагувати справа." #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "Коди USSD доступні тільки в мережі, яка використовує стандарти 3GPP." #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" modem-manager-gui-0.0.19.1/help/meson.build000664 001750 001750 00000001276 13261703575 020272 0ustar00alexalex000000 000000 gnome = import('gnome') help_files = [ 'about.page', 'contrib-code.page', 'contrib-translations.page', 'index.page', 'license.page', 'report-bugs.page', 'usage-config.page', 'usage-contacts.page', 'usage-getinfo.page', 'usage-modem.page', 'usage-netsearch.page', 'usage-sms.page', 'usage-traffic.page', 'usage-ussd.page' ] help_media = [ 'figures/contacts-window.png', 'figures/modem-manager-gui-logo.png', 'figures/network-info.png', 'figures/scan-window.png', 'figures/sms-window.png', 'figures/traffic-window.png', 'figures/ussd-window.png', 'figures/startup-window.png' ] gnome.yelp('modem-manager-gui', sources: help_files, media: help_media, symlink_media: true, ) modem-manager-gui-0.0.19.1/.tx/config000664 001750 001750 00000001607 13261703575 017077 0ustar00alexalex000000 000000 [main] host = https://www.transifex.com minimum_perc = 2 [modem-manager-gui.modem-manager-gui-internationalization-template] file_filter = po/.po source_file = po/modem-manager-gui.pot source_lang = en_US [modem-manager-gui.modem-manager-gui-man-page-template] file_filter = man//.po source_file = man/modem-manager-gui.pot source_lang = en_US lang_map = pl_PL: pl, bn_BD: bn, cs_CZ: cs [modem-manager-gui.modem-manager-gui-appdata-file-template] file_filter = appdata/.po source_file = appdata/modem-manager-gui.appdata.pot source_lang = en_US [modem-manager-gui.modem-manager-gui-help-template] file_filter = help//.po source_file = help/modem-manager-gui-help.pot source_lang = en_US [modem-manager-gui.modem-manager-gui-polkit-policy-template] file_filter = polkit/.po source_file = polkit/ru.linuxonly.modem-manager-gui.policy.pot source_lang = en_US modem-manager-gui-0.0.19.1/man/uz@Cyrl/000775 001750 001750 00000000000 13261703575 017335 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/info-page.h000664 001750 001750 00000002705 13261703575 020003 0ustar00alexalex000000 000000 /* * info-page.h * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __INFO_PAGE_H__ #define __INFO_PAGE_H__ #include #include "main.h" //INFO void mmgui_main_info_update_for_modem(mmgui_application_t mmguiapp); void mmgui_main_info_handle_signal_level_change(mmgui_application_t mmguiapp, mmguidevice_t device); void mmgui_main_info_handle_network_mode_change(mmgui_application_t mmguiapp, mmguidevice_t device); void mmgui_main_info_handle_network_registration_change(mmgui_application_t mmguiapp, mmguidevice_t device); void mmgui_main_info_handle_location_change(mmgui_application_t mmguiapp, mmguidevice_t device); void mmgui_main_info_state_clear(mmgui_application_t mmguiapp); #endif /* __INFO_PAGE_H__ */ modem-manager-gui-0.0.19.1/resources/sounds/message.ogg000664 001750 001750 00000100121 13261703575 022634 0ustar00alexalex000000 000000 OggSz*KvorbisDqOggSz*#=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS@&z*U69 /4ESPVeiRekh/E eY x陞_i+qy=LCKO0K0=o0sg{w?98qxx9<8<<xpa9 PF{%oE 4 eWrG?,4`%1f4g~>.tW]}qoE 4@ a9 PF{% c9ޢ,7`LA,8͙̪F}} k'Qk q#Ŵ44EpKn_9u}][LߧO3sCW1S(AQ {r o[6%j1}JsTEN12 Tbo`\2%,{ĦI* DaZXX -hEQEc+^c ]EN2HƳ WT\W2xP7~ Ws5o5bYF?kvΉXmuի2jY*$ن5)+,Q˒Z^F(<;WZȞKu?.vĹgk+eQGNga珘|lC,buNJӑ0Wm4\"MA~$VKg6-Mj _VF#szoN햭=av.%;2ş_L{Mcj$T_2l/ e)'(/u `F|CUxW>v`_fR/Omp8}&ۉ3 U5\ f8￯M06{Ѵ9/y*lrLkn5 ywzz5=؆͖cPKVWۯ|1O~j&+ k5aɣ;m.+]^9<*~nb.Ec4_i{HB I3:Vc<_^k1_0O'ѿ[eKapc1TU:B]C>>4M<0M7d|QPd)p4_94-~m7om89Ե_X į(|Ʉ[Z|}0g\fwFZB@@ -YۀXiOe%ù b! ~ nTgQ.P! X#儯4 B'8߮CU͕Ɣi. ~߾JܜYܛ89sdt4y_k4KTU.ݮh5OplOu",;כepCB?wAO7$FIR}| lh|g9|Gyf7j$D$]-55$ u?p_m8^'F]{kŤQӔo/nP@BQ .>>f}sYl.>߁4nt,!u/mIFW{1@9S-H%`7<SQ>.JgޅyZd`*i?OQ G88m`p'F ltp$0N_hZ!9c ˿'ȣ y 0|H7WIiA2bş" vz$iӉL ^Ϸ8S7ni`cѪw {~d@9 M \j vḇ[ҙF}tp*;z0DѪY*{H4tBK5,ta.2F5@Pg<|;LQ ްpa;=JF2TƟ>ʆ'*KCJTK_$=@?o^)I}[t'0k4S%xN{jswgg@뺪ZhC @OJX/<nIu@j2ݎ@_0{@{3]m]@ [W`HMA4  6 x{v8 7DFɤp*ξ?Bq3w ::ڪK1wqo4{x~>B! dd t`,'NwͯDkL yӽnz,4M˩sY=h4VTT{=k`g-`m7fu@1yϯ﹙r(@.˖1 HdߕHoEߚxlMN/fLPDӁ]%Z^p L`;u1̯~3Ll$nyW-y}s>f</}c+`@1ӧӜAEWS>$!"u|VO0"^ DnQOBMKSf\͹$B׆.4o3 =ݟ/sό͂ZDzɤ?XW1g坹Oj|{r5|,}[f*?:ٖ&ѓRb~yNuKcrOvyMkqK]hg/b[knx ɟs5Dו\R60fiiؕD=q~d<9꫏G?W5@}ոk^zNպqI\T#mW}獵=^@!ZJ $޵!R{Vҟ.8`B/eȄv9v%o}~youI|' yܖ29t4g3s sјL:Ir~:,|rT&V_,.NzszkHv. !)jNCdnf(Y܇n7;s-zTiSėm9T%qkZv'6Ԕ3[OSo JewuٓiUsWz4y>}P!A${i:z23y\}|FN|ټr>Stf(L8,K/TUH P4/Ƀn-Dr,OggS@Jz*V^JxݟZ̤7"@=FWs|xw_/:t`Ͼ8d1qbW_W<!e6K ɗ 0b%'0{9'X>W?,>hߟrTvhPJY^=;&Bġ/+UYjH}ߘ#Օ7=Oڐ soi"1mxJ u,{r%|Q: vo 6c543x7 402&|k OLzS^b}*08.Y~&~uZ0${VY@@Phvp`k<奦V㬹!b~k3~nv9cOgf5|ƀ.N0=G4*ZWJPJ֫8fyY#_R {٣;@}_3\K>{x 5AoH:^h>#&j 鐶sU-ڏ``A_ ,RsbKOExCh 4Kxў</Wg3 kQ 8g?(B -`>q[J& ~ K0kh[r/<|3 oӵx7gx @~q ?g_Pdhm=MVx͠)6oR-22[7;`vymsQpU.[=8Ȁ/v b>4 @Yt kc2{N7P-&[W\i⭟z? DG!r[4}?}֓Apѭw;ÜxŌ=Ɨ|qhSPwЙʆ"b{4? ..t; m @]e]u"i7"/?*.1!h0Ix. 9 ?82Bɺ*KS)G停pFQ~ ?'q<9g'xc I('҂$pRKw&(S2y^><""k_5G%*+z^,zh 8` 7bn7'if!,ԞT-<Qf ?$qx Kޯp-upyF@חndaTVY { *% sz7m7>0qޡ))9 {k`w -ib~'} >moXM djn`!ٵxl4 f}O~Sm8ۑco@G6?{7k})~;Rq[>G|U5L(´tC\j"QBT`xL-ˆ˲]nK똟3z āv/^ lW_@W'8j/Jh!,B|IKK.@&N+ٿ@5 >ᷩ#fb߉x'YmͩC}+*ʛk̋zp,%`z}Rh|J9c5?o|Nuȯ { 1]934sm8@ە}`p.۴{>6&p_P ?f1)2s{Ǝo8% 9>_&sV=v/0PCYP5;ʹ.DPׇ͂>{1x^o 4PL )I)8  S uN Mq]jr<5ܙCmu8G" WF&'~*R`"?)"AX o~tO}* 3[x6}^ؿ gx m\ vW@ :}b'8{-M8qMU>ϊ`4@,   r)(W[7t B82M?MŸzC\Giiժ(H[V1Tw7:~==fe:$/s (_aߝ쁂,\\ fP=Tۻ[e<^jS^@xo_o^w}T ҁd>`MPOM4`#`3Lב4Q@5_Ѽ^K\[^HpG^:ce@{~*a  ZPႪ [w3\']UM*e%rI>CX>s0s 9|2ͫJ b㣶a @.v݁T>x6Mx*d'z'Ƿ95ai툙c,Wv|).U1Eu,p~ߕk ou=Σi|]D]=]Ffk/f]6֘^';`vMR<||=-nk ;IN}6_<~|PKWl?D-J7Sΰdٔ2nHva XuI<]-" yE\5;@E7Zp78@|m ;TFPmU1Ndi8^V2oǃ/Ky莯?h=(vWNu@ csjҳ h3KsNֿ4ă;q `?v: bެǯ 5PIkvF 4b ?!mq*&'*r37UJ5o7]N:هolq}Su09=yg7P6_ ,X{4:x[OM䞝Vyֻv]\gv1OGg Cz(Gb`d.L`[8Q]H8OggS@rz*||ȍ؋zZі%oQ縯 7H^Ζ'AH؟p8RU_ =>D< ~{w`'9s@F p=uPwe ~k-~ }/;rVw-oι5| `[#otߩ'`$(yhkˀ?鶀ڝ揶?8d4Tw}pf3*HǬlRpdzo3}~\i/"rI6Y:3eeOu"p r~:z`hwWiDd{V[QL͹xgqGXZtܿ `i^{:QZU8cL,p?gC gS44>Aj |)_(RP]YY*.#͡ܚݣʚu? MϜmhq^,⛝(OK9Omqpfz ]6V/l߿]^ S @!{QSB@>Y÷k4/`@8 ̳3~mO7$qpGiyy;>033;>>7k/s ܀I١o6@PJAgty"HDBvz] _/FԀtiE>ܞ]4<8<*N }_" |G(p"xw @0 puSBɶ MMrz^rѰ&0& o?0Ͽ$m~y2o{x@Ѱqw93\=N’@n룣OPhP^MBE|]uo(Ir}e5-&S@|TPN4U/W&է v;]aꦆyG}|c;牲_P̊͜T_IԲ҉VpI 9@Z.̢r3,`CTlGnv]9`ڍ\iY+u@rj  <4 `Nm2g5p[|uM|W@8årkJ*U%X}e7jSeA7x/Ϭ9 G%v2Љf7<3Ϲhv_ż N`ii Z{N>3 ?oǧ545ph*)KҰGCL˵#2=qȔT_MOO{Wq2ԯS{ ?6ϛ"2ᩧʌTJLd|}gU)?1Q$4kD@%ϗM~k&dv`!(?TA@SC-H~AZEG`@/byEYWM~$bi9=h] uU r?_̧3}w(#B9,!xB *vn͉~$S76 P.ޞ TZo{F?U7_x%nǟ|o, 4j ׉j [>nye8q5[д*)5>d8-dsk7 PNF~J~_EDS% b+"z.q3)l! k`Y \, xӋ%q4ovb&4 &ؿ3@7~Ja"({b-g9x(ݪL%R bJg{.Z@0'ޒz $@ C>?~oR7Ƈ dS^mPg g/==1kyO}H#XV@a*2ji;<խr(wtyuW9$@Q,R X>}O DdٺW!>Hu l^D@}(8kM g3 ߅#Gx_ۂh[%LgXh5C.~- %w8%^ݍBh}g鞳Ucg֌V)/:]1(\?:U r_OOZjYx; -/:'Qbm>h] |7q7#bʝ`l2Jkz?f0?%O3=U:+sy*A# SLx\N%oǫݣ Q Ȧ^?Fi k_?LuA,((0;s>MHz C/"kg.8m12'`*IdaUe۞~ ` Iz7t@:/R/r Gxhpg_XMq173p6߮*$7Fd9f?Ql98xtzRhd6@BxJ{v@Y@W'f_  @AX8njP_++  \!ʟAlN8$Ea׭H|Lfr]=v2c SudJq,|tה^ɣ dl6 9>\ν~0;WR9'|7?^_Ǿ9}+}svמIpB`AH ITQ*=; h+_}S OggS@z*3'Mp?bt!Wdۄ /'X}^J(Y"u5HQ{>2.~x8ja,<^zHzL?v vg[`@ozx>*9CAÀǔ98]Cx33}\K$+37IDZ8+/a.w97|y/> @Q\ϕyZc],}cL"Зo”4N=֋ݛ zر]=QMs*gWs都agr}  Xn0۠5b7iI!gm̈ؼYM@%IWu>?8J`gzn6!9KH2,A(@W&Bm_歜!6N?yXWVgor9}<+?h?mi6pL ٕݙ$}6鵲y̚Ƈ!y  @nx%H~0 @P~G؋|_/". F%]F/LPO3d| [#Pk Z43]YbrE6P]gOǝIՒK En;36SgGW]K5<ĵ6W)?6nzyF\2,cw#+2lXM_9Piǻ3|:[U4_ C7bhJzNjo6v$XR·j|\Z_;ls!~*w;lǿ?*knò"&)tNOrW/o(ưSWmV]]!OyO(ā6:'\47 @z$x>kWuޯOR'NGI<_N\?clz(Z BIJ*\/>!Db C|s} rϯe,\u_ߴ_^U&@O`]M4?ju.wSu_LKCN8/^ZxI`YL<\3t6 o[}T0}8DMΥS.<P bAO!gnvOM$Lul֐/:<%͗/@Q} fpW# ^A6 <`2pg-H޷?GͣF$^SsH43?G[AtxkFHL)d@KنWE?`RԼh ݸ6=,sGs⪡YiWUY?/raLduy'{O%G/̞?meׯٽC2>OM6o? sI8qqJ6גs #\*(`Twc$q]lq7΂H&L P!E&erTA_(witKU8b'D?K8w4/pxLcoGJlHS3tTk-v~v{ݾ\|ӽi,1Y`ד%'_cW<2ͩ27mad@R~~ oP :x>>CokQ&ahxchZOYd7 id7ۙ]4? do4aQ/Y^ǫ?LAk/.*۱,xSs4͂Jd0נ3tK_yoqxk0/neܴ6,b@-l`p?Q`Hp0Jg|u?eN+:Z_CbQGxfDٔIIeT%{?/ 927J7ܶoi ܁IW);$h0r_y?ZG;vkj$PqbD. ,qǕ1d|]5o?MNfS1)QfM|%G%{қMѹD3[0DTZ/h}x0me6NJ; h ?_CyrҮ~tƄc}̽I  % s DӛW&*'D Kܾ_^|&؁QTCYϟ@?|`[3-֎ $ZW, `B9s{ 6o=gpa#'D^jwe|b Pp`07Zy5T'E0&r pSyo6f蟯O! j.oށ{#~8I޼3 [C}h~r2{849Ot2oLX`Xrf&,rUtoWo${{OY2Eszj~8(0h}؄F},H˸2<^8ѷm){QFӉv|`jOeʤ)Wy.vC.,'umh❎*kY$)[,]G9O~gPQ8 .k>m3V ;4 @T@c/G40fN2gjE=g; !*ǖReW.:s':beͨ* ƀ9NXk> ^<֌HчS }c:\}ϯOڒX\$ ϵcPl,БdJCh/{__ ؟S]-7OGemvsM[b>lOL,yzɽ wL/᳠ R ׫j[4.iêi/Վs}N} ]rRՓ3?7jekp6N^/Bd}9iZrI3d8<LUNo1l~[jw< Ugg>n2tT{ D& z0=d_6J <ђ` &jЀ4\{}+wmU陓xu?_ѺM_8uՏ𨔒R\q~͏pn@Qf(P ڗ T|?_X:;khZjw ~dmVr`MWH(A.9 ϟ`8&<YVhRdH>up7`<@0yQ\vnVlo +yX{i򓷬 4'u?'0@@17h@Γ Ȭ4h%: IJkM7׻Yvj*'9ȭ_a_oWCm(\e]8.rbW;3s@S r`{|}WU/}}e>c>z]:s)IƙЬ̜` + }!LM4Iz_ѲXCvsQG/&P| LLg%m-, O /@'[R2#@2왧Q@죽7C,'`[|}(\M `:r;Λ:X[lOpIynfᏙx^ܧ>ٚY]ZUXfD{&gb"n='v{Ͼy S0p'&NFY˫ zrsӓ/EL9rɝ}~$A캱{Ri-B .‚ Hʶ%p,=>_*x盧p緗TYMr6_*![A,@A(4`@W rC޸[</h.`Z2}с =p *3 4/Uz;)֐N桋~dGӹ'aqpHy αY8~w@2 qWLSvb {籷8=v̄CY| ^ J:g`@AFAs^ $l  Yh`L,J<~}R:q <x}N?^ꎲnhX˨~uP!Pè)a~^~kuO|Q#Nˀ锃n=tlW=L`k%vnN}8@Hv`ˣpLgçc{[(Z2[fLhjf_ WgvI64c.!H "߈yht2gl/wb>ŵ!L] 0%zb4@ )) ]p*F!:a&p8'?ٽ]ػ{^VVXԿ~2'>wݷjgo736Ţf˻hiou}rS\9}fRe)tߕ}%|~,4, &+"_^\>/O}6p~'Q߮ 3xhL0o("UV&2E$@ApHutd_׿/ōptNE@KQv[o @/u4 t]˄-'S@ x? \2q5xj݁<2_|6@cN>gp p/`'(aO}Ҡ:~`jTwfOM^.Y`ܴ@W~yݼGjCOO~~O Dx~~eIlX{8@RIDK7H%d5ޓy(=AN<óĴez--;*W9*4@DĀ FF4 u؟ 屴l5 :iOMA>gGi7@_v JUZ p9N"|ݠ[fy5 oGdp}x1&׻^{Uez &|+fy<mv . =l`s=)ggww}rܔyVL2 >]\ '5fW~X>#2/Jz+~^lJ6KfM2-[dߝ?f6=:0_8s6㟽 =3r.- PBSJo0 Sq^f8 >.SnZCMsI@ <~ԩDM??]5;^X3BuHʕk >Y Fm(¦}G2RvKm|5_bOTJ@S0C^9/NtwS=4>{r n`Hrz6v$'v79~eיJ5NrΓ SOLRؠ&dCMn=d͛yOU&j@ZK0p0#]Mʺ/3jHo?ǭ9|3x8 J/P `/^ eLHKxO7w(KU)ӑȖXt.EKrU:d8~Ƈ {6mvӪ+1T9-p+=O@ iv ~.޹zPy=ҡf [hz@$}0b4vs$o|9kT|NNCK~pJ !3Lɡ>S[ʿbz>_uoΖn 醓,cM{5?q<txʹr⦩oF\zYg)ęO6`/ Q0Zp uxMwQZZM*giE}&Pޱv&Y!D` P@P o @elHHGOut("99'@?%+|F}Gf0S_#:)v$@*b'rJh8i̘`.0xl]<2GL+dep20_in`-Gw{sܹD_3;|r6? u28 dy]н59?FGLj{>(sr {nǎG?ϗbx~4Ip^`k=5"!thg ] du~˶mq(o,U55{% ,: `E eL̈ ^r܆l.Kɲ}F`>[_E,FcLSbiLƭwziQ ecNIt>B  xxX/1s~gۿkQw543;?pלvӜ=o<íOJg.1[ODsLTctT:e⩗-mR탄nwXr,0Np1˻WAp@ )~'/ ~7>I|dhh"5d(qy7<aTOggS@z*wyzruqy}je؈`E^mU0l8I~Q]H@}`BgXkmJHN F X.F :?ƽ <1X 1Қ6`z4W2Wn>g =$N‰ylkQҐj'FT<>swsg5=; v6m&>oqL4W߽Guw.wq^ $:QYn//$p<ųt-l)ĵU Ai*liPV 8UR 4ie,: }z^RA0 u Nӿ'MQԣ |m dk]ɂ V2Дf0{+pȎbi{k#`]sew YEghz^{oP`tiihI~?h+mzy ]]IvX (Eaq-=7VMTMK;]\kIR*ѳ!ϥӏT_?KQx C]'wz3=M宜nꜞ% 6ܕ̰'~zr@pxEr fFch  te,ډ sBRKZ rq"~,nr[ԣ 4?x7:FTAH4+_zIICN'fXεY7cXҝkZ 6@<%8`w@C0?/Cyu {f&|2L75dS~oOfϙ?kޟK@K4xF }y:{Ytk7^9}I2K~Gsz/l $dÁ"DDe>}?@J2Ԉ9Ӌ cNeG[Bc] @?y0;?E~ޱӜu^=bUwNMM4yf;dxQS:up<2@+/\{\(\*" P纓}d{a7if@dlE>O6@ʮ@do<@y:Ey:+l™2:x}ze(KQBH.mRlDXv^  !#$@$`> e\:yز8Au,!#, YGkfDY%*HHW[uBn,< {{g%h%ii \eqd<2Kw't44o7@L~$J]c4Ծ4y}1<Π{ӝPE.{Zw1|2TM+{of[=5ʩj?QL&"?oyadt_=Dvv`M-ɩO^D!Y1Wp;Ys&nTԻ6g&sRu 3@*8VD  etyo"z gE➞}K,@6ֺDP) (fҟGsK#Ͼ֝ L s6'/7ʍeN_%q%p<Ó I{U]L?dsw䡟W7枾|:Mî&;ߩ#*U[n o5$N@&?MmzJtLGtU݀DBL xiF}VVra,K2xܙ>/1bbMOqr?Ti }9 e\`tֿOIu,U8(B}|*;Bci~FFM $j$E) طo/ _?3L,:Xsڋk8Ӥ Wٞ*UnZk`+ KPkf}&gv'Ou0{cWe&i&y+#s9g J2iw}wyfǪ&u '[{I(s}rΞ&=X}CQqX~s@wu:d*o/_)!-ff;{b Pyײ)^`+Hre<'yC'NX.gEE'6Bci `cYQI*$@y^?N= fQ{7wM4deߔ{~;@ |J]Z ~b΄SSo&/<6]}3UN̪:ëL{I;kd]{>h@l \0+u50d1嗃Hs؜w9E?DOm,;8E!6u;1o<#^>\bG$sJUSCS窗dəLR3 -)ۦW6hwYQ'YT3p 0e#骯8qHwB\J\vtԲPQT2+30/xOmzLCa]|*[s_p[T ۗ~YxdD Kz3jgbi򞹜93gsyHhIg\0}j>L%B79M'PDvj>4YPf@w' 2UE 3T%xu dj\y}}?CsGïg-if:Xxnp ܿdbNak[Ӥ3gpyn8oBv9UynY|v <ϰ$&h~RKOggSz*-Ғvorst|e\rL}Ze8'"}=ޅ_7º e>r|goW6FւvɧUi4`uwğ_`]---`/@,}Io.elfY:5vz\$wg~z;mMxe?չXxjHhXidl7㛣rM~^H6=`3Wۗ>χFe Ipc*Ӫ0:rO*Eh@ p@\$Ce@Lêz:w5|t:>̮uW$qQَy 6#$7uzI9o@?Н0V?IlVuSy|dF{w#`FAs6;f0 >]z3Zr!lw5S<|l&3ߛk@0Я k545@QX:!:$`윩̥6=Uc":ze]ps`\`]/?z64t#@0I&yww808۶ Cnic/] ¹ A8HrwMTP4IzF^ ؅W5%Z# 9Pe\d}_!e:/BվGnpMl6lUX]$/?;,m3 LtE(Kj4Bu$UnfXQ]$\v$3?en1\.2 }~_t- 9o 잃?}ǝINYagWL&4ܐuK;⧦E'5ïkϗcIOΪ}.~F$к1ac L\G|k\9 b_aR\>?NHln9dHQ ]biDf,SeB2N0Tz_o*URY2zMjN1@L$ɫfX Ton/w2`ֳ݈٩0mm2 Iȼۢ8 ␕s8@='O9==MbNw+U2m}/ 2WUhĬ~zqM>u~NzU*\![ mȲfVw@ [c<ΥY1,etvybu1o}/4s0!v7 TbFoل|jM,ТjL&TRexfWM3y\Yorv?CVYW Dʶ6pST|SM)ſ{(ʚ@']Smodem-manager-gui-0.0.19.1/appdata/sk_SK.po000664 001750 001750 00000005766 13261711214 020161 0ustar00alexalex000000 000000 # # Translators: # Jozef Gaal , 2018 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-04-02 09:57+0000\n" "Last-Translator: Jozef Gaal \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/ethereal/modem-manager-gui/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Alex" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Riadenie špecifických funkcií širokopásmového modemu EDGE/3G/4G" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/src/info-page.c000664 001750 001750 00000015434 13261703575 020001 0ustar00alexalex000000 000000 /* * info-page.c * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "strformat.h" #include "mmguicore.h" #include "../resources.h" #include "info-page.h" #include "main.h" //INFO void mmgui_main_info_update_for_modem(mmgui_application_t mmguiapp) { mmguidevice_t device; gchar buffer[256]; guint locationcaps; if (mmguiapp == NULL) return; device = mmguicore_devices_get_current(mmguiapp->core); locationcaps = mmguicore_location_get_capabilities(mmguiapp->core); if (device != NULL) { /*Device*/ g_snprintf(buffer, sizeof(buffer), "%s %s (%s)", device->manufacturer, device->model, device->port); gtk_label_set_label(GTK_LABEL(mmguiapp->window->devicevlabel), buffer); /*Operator name*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->operatorvlabel), device->operatorname); /*Operator code*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->operatorcodevlabel), mmgui_str_format_operator_code(device->operatorcode, device->type, buffer, sizeof(buffer))); /*Registration state*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->regstatevlabel), mmgui_str_format_reg_status(device->regstatus)); /*Network mode*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->modevlabel), mmgui_str_format_mode_string(device->mode)); /*IMEI*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->imeivlabel), device->imei); /*IMSI*/ gtk_label_set_label(GTK_LABEL(mmguiapp->window->imsivlabel), device->imsi); /*Signal level*/ g_snprintf(buffer, sizeof(buffer), "%u%%", device->siglevel); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), buffer); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), device->siglevel/100.0); /*Location*/ if (locationcaps & MMGUI_LOCATION_CAPS_3GPP) { memset(buffer, 0, sizeof(buffer)); g_snprintf(buffer, sizeof(buffer), "%u/%u/%u/%u/%u", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], (device->loc3gppdata[3] >> 16) & 0x0000ffff, device->loc3gppdata[3] & 0x0000ffff); gtk_label_set_label(GTK_LABEL(mmguiapp->window->info3gpplocvlabel), buffer); } else { gtk_label_set_label(GTK_LABEL(mmguiapp->window->info3gpplocvlabel), _("Not supported")); } if (locationcaps & MMGUI_LOCATION_CAPS_GPS) { memset(buffer, 0, sizeof(buffer)); g_snprintf(buffer, sizeof(buffer), "%3.2f/%3.2f/%3.2f", device->locgpsdata[0], device->locgpsdata[1], device->locgpsdata[2]); gtk_label_set_label(GTK_LABEL(mmguiapp->window->infogpslocvlabel), buffer); } else { gtk_label_set_label(GTK_LABEL(mmguiapp->window->infogpslocvlabel), _("Not supported")); } } } void mmgui_main_info_handle_signal_level_change(mmgui_application_t mmguiapp, mmguidevice_t device) { gchar strbuf[256]; if ((mmguiapp == NULL) || (device == NULL)) return; g_snprintf(strbuf, sizeof(strbuf), "%u%%", device->siglevel); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), strbuf); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), device->siglevel/100.0); } void mmgui_main_info_handle_network_mode_change(mmgui_application_t mmguiapp, mmguidevice_t device) { if ((mmguiapp == NULL) || (device == NULL)) return; gtk_label_set_label(GTK_LABEL(mmguiapp->window->modevlabel), mmgui_str_format_mode_string(device->mode)); } void mmgui_main_info_handle_network_registration_change(mmgui_application_t mmguiapp, mmguidevice_t device) { guint setpage; gchar buffer[256]; if ((mmguiapp == NULL) || (device == NULL)) return; gtk_label_set_label(GTK_LABEL(mmguiapp->window->operatorvlabel), device->operatorname); gtk_label_set_label(GTK_LABEL(mmguiapp->window->operatorcodevlabel), mmgui_str_format_operator_code(device->operatorcode, device->type, buffer, sizeof(buffer))); gtk_label_set_label(GTK_LABEL(mmguiapp->window->regstatevlabel), mmgui_str_format_reg_status(device->regstatus)); /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiapp, setpage); } void mmgui_main_info_handle_location_change(mmgui_application_t mmguiapp, mmguidevice_t device) { gchar buffer[256]; guint locationcaps; if ((mmguiapp == NULL) || (device == NULL)) return; locationcaps = mmguicore_location_get_capabilities(mmguiapp->core); if (locationcaps & MMGUI_LOCATION_CAPS_3GPP) { memset(buffer, 0, sizeof(buffer)); g_snprintf(buffer, sizeof(buffer), "%u/%u/%u/%u/%u", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], (device->loc3gppdata[3] >> 16) & 0x0000ffff, device->loc3gppdata[3] & 0x0000ffff); gtk_label_set_label(GTK_LABEL(mmguiapp->window->info3gpplocvlabel), buffer); } else { gtk_label_set_label(GTK_LABEL(mmguiapp->window->info3gpplocvlabel), _("Not supported")); } if (locationcaps & MMGUI_LOCATION_CAPS_GPS) { memset(buffer, 0, sizeof(buffer)); g_snprintf(buffer, sizeof(buffer), "%2.3f/%2.3f/%2.3f", device->locgpsdata[0], device->locgpsdata[1], device->locgpsdata[2]); gtk_label_set_label(GTK_LABEL(mmguiapp->window->infogpslocvlabel), buffer); } else { gtk_label_set_label(GTK_LABEL(mmguiapp->window->infogpslocvlabel), _("Not supported")); } } void mmgui_main_info_state_clear(mmgui_application_t mmguiapp) { /*Clear 'Info' page fields*/ gtk_label_set_text(GTK_LABEL(mmguiapp->window->devicevlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->operatorvlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->modevlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->imeivlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->imsivlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->info3gpplocvlabel), ""); gtk_label_set_text(GTK_LABEL(mmguiapp->window->infogpslocvlabel), ""); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), ""); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(mmguiapp->window->signallevelprogressbar), 0.0); } modem-manager-gui-0.0.19.1/appdata/meson.build000664 001750 001750 00000001212 13261703575 020742 0ustar00alexalex000000 000000 i18n = import('i18n') i18n.merge_file('appdata-file', input: 'modem-manager-gui.appdata.xml.in', output: 'modem-manager-gui.appdata.xml', type: 'xml', data_dirs: join_paths(meson.source_root(), 'appdata'), po_dir: join_paths(meson.source_root(), 'appdata'), install: true, install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'metainfo') ) i18n.merge_file('desktop-file', input: 'modem-manager-gui.desktop.in', output: 'modem-manager-gui.desktop', type: 'desktop', po_dir: join_paths(meson.source_root(), 'appdata'), install: true, install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'applications') ) modem-manager-gui-0.0.19.1/man/ru/000775 001750 001750 00000000000 13261703575 016373 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/usage-ussd.page000664 001750 001750 00000004576 13261703575 021236 0ustar00alexalex000000 000000 Use Modem Manager GUI for send USSD codes and receive the answers. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

USSD codes

Modem Manager GUI is able to send USSD codes. These codes are controlling some network functions, for example the visibility of your phone number when sending a SMS.

To use the USSD functions, click on the USSD button in the toolbar.

USSD window of Modem Manager GUI.

In the text entry on top of the window, the code *100# is already displayed. This code is the usual one for requesting the balance for a prepaid card. If you like to send another code, click on the Edit button on the right

.

Modem Manager GUI supports interactive USSD sessions, so pay attention to hints displayed under USSD answers. You can send USSD responses using text entry for USSD commands. If you'll send new USSD command while USSD session is active, this session will be closed automatically.

If you use Huawei device and get unreadable USSD answers, you can try to click on the Edit button and toggle the Change message encoding button in the toolbar of opened window.

USSD codes are only available in networks which use the 3GPP standards .

You can use such codes for many purposes: change plan, request balance, block number, etc.

modem-manager-gui-0.0.19.1/po/ar.po000664 001750 001750 00000115724 13261704674 016565 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Eslam Maolaoy , 2016 # Eslam Maolaoy , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Arabic (http://www.transifex.com/ethereal/modem-manager-gui/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "الرسائل القصيرة الغير مقروءة" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "الرسائل الغير مقروءة" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "الإتصال" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "تأكيد إزالة جهة الإتصال ؟" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "جهة الإتصال لم يتم إزالتها من الجهاز" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "جهة الإتصال غير محددة" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "أول اسم" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "أول رقم" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "البريد الإلكتروني" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "المجموعة" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "الاسم الثاني" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "الرقم الثاني" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "تم تحديده" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "الجهاز" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "تفعيل" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "غير مدعوم" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "خطأ في التهيئة" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "تم بنجاح" #: ../src/main.c:511 msgid "Failed" msgstr "فشل" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "انتهت الجلسة" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_ايقاف" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "تهيئة الجهاز..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "لم يتم ايجاد اي جهاز في النظام" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_الأجهزة" #: ../src/main.c:1585 msgid "_SMS" msgstr "_الرسائل القصيرة" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_معلومات" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_الزحمة" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "اظهار النافذة" #: ../src/main.c:2062 msgid "New SMS" msgstr "رسالة قصيرة جديدة" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "الخروج" #: ../src/main.c:2680 msgid "_Quit" msgstr "_الخروج" #: ../src/main.c:2686 msgid "_Actions" msgstr "_الأنشطة" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_التفضيلات" #: ../src/main.c:2692 msgid "_Edit" msgstr "_التحرير" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_مساعدة" #: ../src/main.c:2697 msgid "_About" msgstr "_عن البرنامج" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "التفضيلت" #: ../src/main.c:2714 msgid "Help" msgstr "مساعدة" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "حول" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "الوصف" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "غير محدد" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "فحص الشبكات" #: ../src/scan-page.c:46 msgid "Device error" msgstr "خطأ في الجهاز" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "مزود الخدمة" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "مرسلي الرسائل:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "الرقم خاطئ او الجهاز غير جاهز" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "جاري حفظ الرسالة" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "تم الإرسال" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "متوقف" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "الرسائل القصيرة" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "غير معروف" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "متاح" #: ../src/strformat.c:248 msgid "Current" msgstr "الحالي" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "ممنوع" #: ../src/strformat.c:286 msgid "Not registered" msgstr "غير مسجل" #: ../src/strformat.c:288 msgid "Home network" msgstr "شبكة المنزل" #: ../src/strformat.c:290 msgid "Searching" msgstr "جاري البحث" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "التسجيل مرفوض" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "غير معروف" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "تم إلغاء العمل" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "وقت الجلسة" #: ../src/traffic-page.c:482 msgid "Application" msgstr "البرنامج" #: ../src/traffic-page.c:486 msgid "PID" msgstr "" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "بروتوكول" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "منفذ" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "الوجهة" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "تجاوزت المدة المسموحة" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "كيلوبايت" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "ثانية" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "سرعة RX " #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "سرعة TX " #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "المعامل" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "القيمة" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "عينة الأوامر" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "طلب USSD خاطئ او الجهاز غير جاهز" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "طلب USSD خاطئ" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "الأمر" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "الخدمة" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "التفعيل" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "مرحبا بك" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "مدير المودم" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "مدير الإتصالات" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "تفعيل الخدمات" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "الأجهزة" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "معلومات" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "فحص" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "الزحمة" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "جهات الإتصال" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "تحرير" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "جديد" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "أزل" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "اجابة" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "اطلب" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "ارسل" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "وضع" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "قوة الشبكة" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "كود مقدم الخدمة" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "التسجيل" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "بدأ البحث" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "إصنع إتصال" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "ضع قيود" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "الإحصائيات" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "سرعة الإرسال" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "جهى اتصال جديدة" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "أزل جهة الإتصال" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "ارسل الرسالة القصيرة" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "الصفحة الرئيسية" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "الإتصالات الفعالة" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "انهي البرنامج" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "أضف اتصال جديد" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "أزل الإتصال المحدد" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "الاسم" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "هوية الشبكة" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "رقم الدخول" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "اسم المستخدم" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "الرمز" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "خطأ" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "إسألني مرة أخرى" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "اخرج فقط" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "رسالة قصيرة جديدة" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "حفظ" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "رقم" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "استخدم الأصوات للأحداث" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "تصغير النافذة عند الإغلاق" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "السلوك" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "تحرير المجلدات" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "الرسوم البيانية" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "تفعيل الجهاز" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "ارسل رسالة قصيرة" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "فحص الشبكات" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "الوحدات" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "الأسئلة" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "قيود التزاحم" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "تفعيل قيود الوقت" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "ميغابايت" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "جيجا بايت" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "تيرا بايت" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "رسالة" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "الأوامر" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "اظهر الرسالة" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "قطع الاتصال" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "الوقت" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "الدقائق" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "الساعات" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "احصائيات التزاحم" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "يناير" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "فبراير" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "مارس" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "ابريل" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "مايو" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "يونيو" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "يوليو" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "أغسطس" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "سبتمبر" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "أكتوبر" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "نوفمبر" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "ديسمبر" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "أضف" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "مسح" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/help/de/000775 001750 001750 00000000000 13261703575 016512 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/resources/pixmaps/info-tb.png000664 001750 001750 00000002625 13261703575 022736 0ustar00alexalex000000 000000 PNG  IHDR szzsRGBbKGD pHYs  tIME , WIDATXÝWOhU}oNvXUXnn[Ji^KS/"ҋ{(b-K M 4o (4;;3мafvvag~~3oHVR 0 ߉8yE!Ϳ7)ϖeQJaaa}Q}!V8|0W*3?7B4 ~ -..buum_*fAlp]3)ccc8uZǎ$B+++<33C=T#H7Z/233tlYyvvm,q>ώ=юv[Zݻw) n%APy=~8*JOB̌ PF(=!@"U(\.ҥKZ}6z!4#=N1ǎ<{l._ S:a,gסj.xpZSEqka(Bmr9޽{X^^Ngk!Dل-~.JW9WbZk0 (=zDBʁb[666̰,+v"!loo*]׽P,#ػw/Q,7b{oT͏$sjQarrZx۶ \v B]m={i'ǡ0 S yضe!휬m!l۶$RJC$)B0sc6? "X U3PJ̚"h;8\ޚ`>&JKއaJ|6 ׫`@ c$nb}`"f϶mH)QvQv1(J4 Z7}'SRxd#2H0N(&ёDzP At eYHEbrjRmgS bSJɛ\DG8Af_; *3̜o6Zs%ώ.H<Z D֚FLq%ע(ʭJt?FF<<<|2snJ;}dd$իW #Fyôn244zvyloow7!+;̏whɂmm(Nsh^cnnEDwگ0S!D۱J)j&(eLR zJ_uOF^T'JsǎCO077gnQJU|`|̯)n:N]E-7Rkd]JIENDB`modem-manager-gui-0.0.19.1/src/strformat.h000664 001750 001750 00000003635 13261703575 020162 0ustar00alexalex000000 000000 /* * strformat.h * * Copyright 2013-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __STRFORMAT_H__ #define __STRFORMAT_H__ #include #include #include #include "mmguicore.h" gchar *mmgui_str_format_speed(gfloat speed, gchar *buffer, gsize bufsize, gboolean small); gchar *mmgui_str_format_time_number(guchar number, gchar *buffer, gsize bufsize); gchar *mmgui_str_format_time(guint64 seconds, gchar *buffer, gsize bufsize, gboolean small); gchar *mmgui_str_format_bytes(guint64 bytes, gchar *buffer, gsize bufsize, gboolean small); gchar *mmgui_str_format_sms_time(time_t timestamp, gchar *buffer, gsize bufsize); gchar *mmgui_str_format_mode_string(enum _mmgui_device_modes mode); gchar *mmgui_str_format_na_status_string(enum _mmgui_network_availability status); gchar *mmgui_str_format_access_tech_string(enum _mmgui_access_tech status); gchar *mmgui_str_format_reg_status(enum _mmgui_reg_status status); gchar *mmgui_str_format_operator_code(gint operatorcode, enum _mmgui_device_types type, gchar *buffer, gsize bufsize); gchar *mmgui_str_format_message_validity_period(gdouble value); gchar *mmgui_str_format_operation_timeout_period(gdouble value); #endif /* __STRFORMAT_H__ */ modem-manager-gui-0.0.19.1/src/traffic-page.h000664 001750 001750 00000010174 13261703575 020465 0ustar00alexalex000000 000000 /* * traffic-page.h * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __TRAFFIC_PAGE_H__ #define __TRAFFIC_PAGE_H__ #include #include "main.h" enum _mmgui_main_trafficlist_columns { MMGUI_MAIN_TRAFFICLIST_PARAMETER = 0, MMGUI_MAIN_TRAFFICLIST_VALUE, MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_COLUMNS }; enum _mmgui_main_trafficlist_id { MMGUI_MAIN_TRAFFICLIST_ID_CAPTION = 0, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA, MMGUI_MAIN_TRAFFICLIST_ID_RXSPEED, MMGUI_MAIN_TRAFFICLIST_ID_TXSPEED, MMGUI_MAIN_TRAFFICLIST_ID_TIME, MMGUI_MAIN_TRAFFICLIST_ID_DATALIMIT, MMGUI_MAIN_TRAFFICLIST_ID_TIMELIMIT, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_MONTH, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_MONTH, MMGUI_MAIN_TRAFFICLIST_ID_TIME_MONTH, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_YEAR, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_YEAR, MMGUI_MAIN_TRAFFICLIST_ID_TIME_YEAR }; enum _mmgui_main_connectionlist_columns { MMGUI_MAIN_CONNECTIONLIST_APPLICATION = 0, MMGUI_MAIN_CONNECTIONLIST_PID, MMGUI_MAIN_CONNECTIONLIST_PROTOCOL, MMGUI_MAIN_CONNECTIONLIST_STATE, MMGUI_MAIN_CONNECTIONLIST_BUFFER, MMGUI_MAIN_CONNECTIONLIST_LOCALADDR, MMGUI_MAIN_CONNECTIONLIST_DESTADDR, MMGUI_MAIN_CONNECTIONLIST_INODE, MMGUI_MAIN_CONNECTIONLIST_TIME, MMGUI_MAIN_CONNECTIONLIST_COLUMNS }; enum _mmgui_main_trafficstatslist_columns { MMGUI_MAIN_TRAFFICSTATSLIST_DAY = 0, MMGUI_MAIN_TRAFFICSTATSLIST_RXDATA, MMGUI_MAIN_TRAFFICSTATSLIST_TXDATA, MMGUI_MAIN_TRAFFICSTATSLIST_SESSIONTIME, MMGUI_MAIN_TRAFFICSTATSLIST_TIMESATMP, MMGUI_MAIN_TRAFFICSTATSLIST_COLUMNS }; enum _mmgui_main_traffic_limits_validation { MMGUI_MAIN_LIMIT_TRAFFIC = 0x00, MMGUI_MAIN_LIMIT_TIME = 0x01, MMGUI_MAIN_LIMIT_BOTH = 0x02 }; //TRAFFIC gboolean mmgui_main_traffic_stats_history_update_from_thread(gpointer data); void mmgui_main_traffic_statistics_dialog(mmgui_application_t mmguiapp); void mmgui_main_traffic_statistics_dialog_button_clicked_signal(GObject *object, gpointer data); gboolean mmgui_main_traffic_connections_update_from_thread(gpointer data); void mmgui_main_traffic_connections_terminate_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_traffic_connections_dialog(mmgui_application_t mmguiapp); void mmgui_main_traffic_connections_dialog_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_traffic_traffic_statistics_list_init(mmgui_application_t mmguiapp); void mmgui_main_traffic_connections_list_init(mmgui_application_t mmguiapp); gboolean mmgui_main_traffic_limits_show_message_from_thread(gpointer data); void mmgui_main_traffic_limits_dialog_time_section_disable_signal(GtkToggleButton *togglebutton, gpointer data); void mmgui_main_traffic_limits_dialog(mmgui_application_t mmguiapp); void mmgui_main_traffic_limits_dialog_button_clicked_signal(GObject *object, gpointer data); //gboolean mmgui_main_traffic_update_statusbar_from_thread(gpointer data); gboolean mmgui_main_traffic_stats_update_from_thread_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); gboolean mmgui_main_traffic_stats_update_from_thread(gpointer data); void mmgui_main_traffic_speed_plot_draw(GtkWidget *widget, cairo_t *cr, gpointer data); void mmgui_main_traffic_accelerators_init(mmgui_application_t mmguiapp); void mmgui_main_traffic_list_init(mmgui_application_t mmguiapp); void mmgui_main_traffic_restore_settings_for_modem(mmgui_application_t mmguiapp); #endif /* __TRAFFIC_PAGE_H__ */ modem-manager-gui-0.0.19.1/src/strformat.c000664 001750 001750 00000026315 13261703575 020155 0ustar00alexalex000000 000000 /* * strformat.c * * Copyright 2013-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "strformat.h" #include "mmguicore.h" gchar *mmgui_str_format_speed(gfloat speed, gchar *buffer, gsize bufsize, gboolean small) { gdouble fpvalue; if ((buffer == NULL) || (bufsize == 0)) return NULL; memset(buffer, 0, bufsize); if (speed < 1024.0) { if (small) { g_snprintf(buffer, bufsize, _("%.3f kbps"), speed); } else { g_snprintf(buffer, bufsize, _("%.3f kbps"), speed); } } else if ((speed >= 1024.0) && (speed < 1048576.0)) { fpvalue = speed / (gdouble)(1024.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Mbps"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Mbps"), fpvalue); } } else { fpvalue = speed / (gdouble)(1048576.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Gbps"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Gbps"), fpvalue); } } return buffer; } gchar *mmgui_str_format_time_number(guchar number, gchar *buffer, gsize bufsize) { if ((buffer == NULL) || (bufsize == 0)) return NULL; memset(buffer, 0, bufsize); if (number < 10) { g_snprintf(buffer, bufsize, "0%u", (guint)number); } else { g_snprintf(buffer, bufsize, "%u", (guint)number); } return buffer; } gchar *mmgui_str_format_time(guint64 seconds, gchar *buffer, gsize bufsize, gboolean small) { gchar secbuffer[3], minbuffer[3], hourbuffer[3]; if ((buffer == NULL) || (bufsize == 0)) return NULL; memset(buffer, 0, bufsize); if (seconds < 60) { if (small) { g_snprintf(buffer, bufsize, _("%u sec"), (guint)seconds); } else { g_snprintf(buffer, bufsize, _("%u sec"), (guint)seconds); } } else if ((seconds >= 60) && (seconds < 3600)) { if (small) { g_snprintf(buffer, bufsize, _("%s:%s"), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } else { g_snprintf(buffer, bufsize, _("%s:%s"), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } } else if ((seconds >= 3600) && (seconds < 86400)) { if (small) { g_snprintf(buffer, bufsize, _("%s:%s:%s"), mmgui_str_format_time_number(seconds%86400/3600, hourbuffer, sizeof(hourbuffer)), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } else { g_snprintf(buffer, bufsize, _("%s:%s:%s"), mmgui_str_format_time_number(seconds%86400/3600, hourbuffer, sizeof(hourbuffer)), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } } else { if (small) { g_snprintf(buffer, bufsize, _("%" G_GUINT64_FORMAT " day(s) %s:%s:%s"), seconds/86400, mmgui_str_format_time_number(seconds%86400/3600, hourbuffer, sizeof(hourbuffer)), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } else { g_snprintf(buffer, bufsize, _("%" G_GUINT64_FORMAT " day(s) %s:%s:%s"), seconds/86400, mmgui_str_format_time_number(seconds%86400/3600, hourbuffer, sizeof(hourbuffer)), mmgui_str_format_time_number(seconds%3600/60, minbuffer, sizeof(minbuffer)), mmgui_str_format_time_number(seconds%60, secbuffer, sizeof(secbuffer))); } } return buffer; } gchar *mmgui_str_format_bytes(guint64 bytes, gchar *buffer, gsize bufsize, gboolean small) { gdouble fpvalue; if ((buffer == NULL) || (bufsize == 0)) return NULL; memset(buffer, 0, bufsize); if (bytes < 1024) { if (small) { g_snprintf(buffer, bufsize, _("%u"), (guint)bytes); } else { g_snprintf(buffer, bufsize, _("%u"), (guint)bytes); } } else if ((bytes >= 1024) && (bytes < 1048576ull)) { fpvalue = bytes / (gdouble)(1024.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Kb"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Kb"), fpvalue); } } else if ((bytes >= 1048576ull) && (bytes < 1073741824ull)) { fpvalue = bytes / (gdouble)(1048576.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Mb"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Mb"), fpvalue); } } else if ((bytes >= 1073741824ull) && (bytes < 109951162800ull)) { fpvalue = bytes / (gdouble)(1073741824.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Gb"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Gb"), fpvalue); } } else { fpvalue = bytes / (gdouble)(109951162800.0); if (small) { g_snprintf(buffer, bufsize, _("%.3g Tb"), fpvalue); } else { g_snprintf(buffer, bufsize, _("%.3g Tb"), fpvalue); } } return buffer; } gchar *mmgui_str_format_sms_time(time_t timestamp, gchar *buffer, gsize bufsize) { time_t todaytime; struct tm *ftime; gdouble delta; if ((buffer == NULL) || (bufsize == 0)) return NULL; /*Truncate today's time*/ todaytime = time(NULL); ftime = localtime(&todaytime); ftime->tm_hour = 0; ftime->tm_min = 0; ftime->tm_sec = 0; todaytime = mktime(ftime); /*Calculate time interval*/ delta = difftime(todaytime, timestamp); /*Prepare mssage time structure*/ ftime = localtime(×tamp); memset(buffer, 0, bufsize); if (delta <= 0.0) { if (strftime(buffer, bufsize, _("Today, %T"), ftime) == 0) { g_snprintf(buffer, bufsize, _("Unknown")); } } else if ((delta > 0.0) && (delta < 86400.0)) { if (strftime(buffer, bufsize, _("Yesterday, %T"), ftime) == 0) { g_snprintf(buffer, bufsize, _("Unknown")); } } else { if (strftime(buffer, bufsize, _("%d %B %Y, %T"), ftime) == 0) { g_snprintf(buffer, bufsize, _("Unknown")); } } return buffer; } gchar *mmgui_str_format_mode_string(enum _mmgui_device_modes mode) { switch (mode) { case MMGUI_DEVICE_MODE_UNKNOWN: return _("Unknown"); case MMGUI_DEVICE_MODE_GSM: return "GSM"; case MMGUI_DEVICE_MODE_GSM_COMPACT: return "Compact GSM"; case MMGUI_DEVICE_MODE_GPRS: return "GPRS"; case MMGUI_DEVICE_MODE_EDGE: return "EDGE (ETSI 27.007: \"GSM w/EGPRS\")"; case MMGUI_DEVICE_MODE_UMTS: return "UMTS (ETSI 27.007: \"UTRAN\")"; case MMGUI_DEVICE_MODE_HSDPA: return "HSDPA (ETSI 27.007: \"UTRAN w/HSDPA\")"; case MMGUI_DEVICE_MODE_HSUPA: return "HSUPA (ETSI 27.007: \"UTRAN w/HSUPA\")"; case MMGUI_DEVICE_MODE_HSPA: return "HSPA (ETSI 27.007: \"UTRAN w/HSDPA and HSUPA\")"; case MMGUI_DEVICE_MODE_HSPA_PLUS: return "HSPA+ (ETSI 27.007: \"UTRAN w/HSPA+\")"; case MMGUI_DEVICE_MODE_1XRTT: return "CDMA2000 1xRTT"; case MMGUI_DEVICE_MODE_EVDO0: return "CDMA2000 EVDO revision 0"; case MMGUI_DEVICE_MODE_EVDOA: return "CDMA2000 EVDO revision A"; case MMGUI_DEVICE_MODE_EVDOB: return "CDMA2000 EVDO revision B"; case MMGUI_DEVICE_MODE_LTE: return "LTE (ETSI 27.007: \"E-UTRAN\")"; default: return _("Unknown"); } } gchar *mmgui_str_format_na_status_string(enum _mmgui_network_availability status) { switch (status) { case MMGUI_NA_UNKNOWN: return _("Unknown"); case MMGUI_NA_AVAILABLE: return _("Available"); case MMGUI_NA_CURRENT: return _("Current"); case MMGUI_NA_FORBIDDEN: return _("Forbidden"); default: return _("Unknown"); } } gchar *mmgui_str_format_access_tech_string(enum _mmgui_access_tech status) { switch (status) { case MMGUI_ACCESS_TECH_GSM: return "GSM"; case MMGUI_ACCESS_TECH_GSM_COMPACT: return "GSM Compact"; case MMGUI_ACCESS_TECH_UMTS: return "UMTS"; case MMGUI_ACCESS_TECH_EDGE: return "EDGE"; case MMGUI_ACCESS_TECH_HSDPA: return "HSDPA"; case MMGUI_ACCESS_TECH_HSUPA: return "HSUPA"; case MMGUI_ACCESS_TECH_HSPA: return "HSPA"; case MMGUI_ACCESS_TECH_HSPA_PLUS: return "HSPA+"; case MMGUI_ACCESS_TECH_LTE: return "LTE"; default: return "Unknown"; } } gchar *mmgui_str_format_reg_status(enum _mmgui_reg_status status) { switch (status) { case MMGUI_REG_STATUS_IDLE: return _("Not registered"); case MMGUI_REG_STATUS_HOME: return _("Home network"); case MMGUI_REG_STATUS_SEARCHING: return _("Searching"); case MMGUI_REG_STATUS_DENIED: return _("Registration denied"); case MMGUI_REG_STATUS_UNKNOWN: return _("Unknown status"); case MMGUI_REG_STATUS_ROAMING: return _("Roaming network"); default: return _("Unknown status"); } } gchar *mmgui_str_format_operator_code(gint operatorcode, enum _mmgui_device_types type, gchar *buffer, gsize bufsize) { if ((buffer == NULL) || (bufsize == 0)) return NULL; memset(buffer, 0, bufsize); if (operatorcode != 0) { if (type == MMGUI_DEVICE_TYPE_GSM) { if ((operatorcode & 0x0000ffff) < 10) { /*MCC+MNC (4 to 5 digits)*/ g_snprintf(buffer, bufsize, "%u0%u", (operatorcode & 0xffff0000) >> 16, operatorcode & 0x0000ffff); } else { /*MCC+MNC (5 and 6 digits)*/ g_snprintf(buffer, bufsize, "%u%u", (operatorcode & 0xffff0000) >> 16, operatorcode & 0x0000ffff); } } else if (type == MMGUI_DEVICE_TYPE_CDMA) { /*SID*/ g_snprintf(buffer, bufsize, "%u", operatorcode); } } else { g_snprintf(buffer, bufsize, _("Unknown")); } return buffer; } gchar *mmgui_str_format_message_validity_period(gdouble value) { gfloat num; gchar *res; if ((value >= 0.0) && (value <= 143.0)) { /*Minutes*/ num = (value + 1.0) * 5.0; res = g_strdup_printf(_("%3.0f minutes"), num); } else if ((value >= 144.0) && (value <= 167.0)) { /*Hours*/ num = 12.0 + ((value - 143.0) * 0.5); res = g_strdup_printf(_("%3.1f hours"), num); } else if ((value >= 168.0) && (value <= 196.0)) { /*Days*/ num = (value - 166.0); res = g_strdup_printf(_("%2.0f days"), num); } else if ((value >= 197.0) && (value <= 255.0)) { /*Weeks*/ num = (value - 192.0); res = g_strdup_printf(_("%2.0f weeks"), num); } else { /*Undefined*/ res = g_strdup(_("Undefined")); } return res; } gchar *mmgui_str_format_operation_timeout_period(gdouble value) { gchar *res; if ((value >= 0.0) && (value < 60.0)) { /*Seconds*/ res = g_strdup_printf(_("%2.0f sec"), value); } else if (value >= 60.0) { /*Minutes*/ res = g_strdup_printf(_("%u min, %u sec"), (guint)value / 60, (guint)value % 60); } else { /*Undefined*/ res = g_strdup("Undefined"); } return res; } modem-manager-gui-0.0.19.1/appdata/its/000775 001750 001750 00000000000 13261703575 017403 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/packages/debian/compat000664 001750 001750 00000000003 13261703575 021371 0ustar00alexalex000000 000000 10 modem-manager-gui-0.0.19.1/src/traffic-page.c000664 001750 001750 00000155525 13261703575 020472 0ustar00alexalex000000 000000 /* * traffic-page.c * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "settings.h" #include "notifications.h" #include "strformat.h" #include "mmguicore.h" #include "trafficdb.h" #include "netlink.h" #include "traffic-page.h" #include "main.h" static void mmgui_main_traffic_limits_notification_show_window_callback(gpointer notification, gchar *action, gpointer userdata); static void mmgui_main_traffic_limits_dialog_traffic_section_disable_signal(GtkToggleButton *togglebutton, gpointer data); static gboolean mmgui_main_traffic_limits_dialog_open(mmgui_application_t mmguiapp); /*TRAFFIC*/ static void mmgui_main_traffic_limits_notification_show_window_callback(gpointer notification, gchar *action, gpointer userdata) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)userdata; if (mmguiapp == NULL) return; gtk_window_present(GTK_WINDOW(mmguiapp->window->window)); } gboolean mmgui_main_traffic_stats_history_update_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmgui_trafficdb_t trafficdb; struct _mmgui_day_traffic traffic; GtkTreeModel *model; gboolean valid; guint64 curtimestamp; GtkTreeIter iter; gchar strformat[4][64]; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (mmguiapp->core == NULL) return FALSE; /*If dialog window is not visible - do not update connections list*/ if (!gtk_widget_get_visible(mmguiapp->window->trafficstatsdialog)) return FALSE; trafficdb = (mmgui_trafficdb_t)mmguicore_devices_get_traffic_db(mmguiapp->core); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview)); if ((trafficdb != NULL) && (model != NULL)) { if (mmgui_trafficdb_session_get_day_traffic(trafficdb, &traffic)) { valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_TRAFFICSTATSLIST_TIMESATMP, &curtimestamp, -1); if (traffic.daytime == curtimestamp) { //RX bytes mmgui_str_format_bytes(traffic.dayrxbytes + traffic.sessrxbytes, strformat[1], sizeof(strformat[1]), FALSE); //TX bytes mmgui_str_format_bytes(traffic.daytxbytes + traffic.sesstxbytes, strformat[2], sizeof(strformat[2]), FALSE); //Session time mmgui_str_format_time(traffic.dayduration + traffic.sessduration, strformat[3], sizeof(strformat[3]), FALSE); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_TRAFFICSTATSLIST_RXDATA, strformat[1], MMGUI_MAIN_TRAFFICSTATSLIST_TXDATA, strformat[2], MMGUI_MAIN_TRAFFICSTATSLIST_SESSIONTIME, strformat[3], -1); break; } valid = gtk_tree_model_iter_next(model, &iter); } } } return FALSE; } void mmgui_main_traffic_statistics_dialog_fill_statistics(mmgui_application_t mmguiapp, guint month, guint year) { GtkTreeModel *model; GtkTreeIter iter; GSList *statistics, *iterator; mmgui_trafficdb_t trafficdb; mmgui_day_traffic_t traffic; struct tm *timespec; gchar strformat[4][64]; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview)); trafficdb = (mmgui_trafficdb_t)mmguicore_devices_get_traffic_db(mmguiapp->core); if ((model != NULL) && (trafficdb != NULL)) { g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); statistics = mmgui_trafficdb_get_traffic_list_for_month(trafficdb, month, year); if (statistics != NULL) { for (iterator=statistics; iterator; iterator=iterator->next) { traffic = iterator->data; //Date timespec = localtime((const time_t *)&(traffic->daytime)); if (strftime(strformat[0], sizeof(strformat[0]), "%d %B", timespec) == -1) { snprintf(strformat[0], sizeof(strformat[0]), _("Unknown")); } //RX bytes mmgui_str_format_bytes(traffic->dayrxbytes + traffic->sessrxbytes, strformat[1], sizeof(strformat[1]), FALSE); //TX bytes mmgui_str_format_bytes(traffic->daytxbytes + traffic->sesstxbytes, strformat[2], sizeof(strformat[2]), FALSE); //Session time mmgui_str_format_time(traffic->dayduration + traffic->sessduration, strformat[3], sizeof(strformat[3]), FALSE); gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_TRAFFICSTATSLIST_DAY, strformat[0], MMGUI_MAIN_TRAFFICSTATSLIST_RXDATA, strformat[1], MMGUI_MAIN_TRAFFICSTATSLIST_TXDATA, strformat[2], MMGUI_MAIN_TRAFFICSTATSLIST_SESSIONTIME, strformat[3], MMGUI_MAIN_TRAFFICSTATSLIST_TIMESATMP, traffic->daytime, -1); } } gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), model); g_object_unref(model); mmgui_trafficdb_free_traffic_list_for_month(statistics); } } void mmgui_main_traffic_statistics_control_apply_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; time_t presenttime; struct tm *timespec; gint monthid, yearid; guint year; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; //Local time presenttime = time(NULL); timespec = localtime(&presenttime); year = timespec->tm_year+1900; //Selected month and year identifiers monthid = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->trafficstatsmonthcb)); yearid = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->trafficstatsyearcb)); //Translate year if (yearid == 0) { year = timespec->tm_year+1900-2; } else if (yearid == 1) { year = timespec->tm_year+1900-1; } else if (yearid == 2) { year = timespec->tm_year+1900; } //Reload list mmgui_main_traffic_statistics_dialog_fill_statistics(mmguiapp, monthid, year); } void mmgui_main_traffic_statistics_dialog(mmgui_application_t mmguiapp) { /*gint response;*/ time_t presenttime; struct tm *timespec; gchar strformat[64]; if (mmguiapp == NULL) return; //Local time presenttime = time(NULL); timespec = localtime(&presenttime); //Clear years gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(mmguiapp->window->trafficstatsyearcb)); //Years snprintf(strformat, sizeof(strformat), "%u", timespec->tm_year+1900-2); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mmguiapp->window->trafficstatsyearcb), strformat); snprintf(strformat, sizeof(strformat), "%u", timespec->tm_year+1900-1); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mmguiapp->window->trafficstatsyearcb), strformat); snprintf(strformat, sizeof(strformat), "%u", timespec->tm_year+1900); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(mmguiapp->window->trafficstatsyearcb), strformat); //Select current year gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->trafficstatsyearcb), 2); //Select current month gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->trafficstatsmonthcb), timespec->tm_mon); //Fill list mmgui_main_traffic_statistics_dialog_fill_statistics(mmguiapp, timespec->tm_mon, timespec->tm_year+1900); /*response = */gtk_dialog_run(GTK_DIALOG(mmguiapp->window->trafficstatsdialog)); gtk_widget_hide(mmguiapp->window->trafficstatsdialog); } void mmgui_main_traffic_statistics_dialog_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_traffic_statistics_dialog(mmguiapp); } void mmgui_main_traffic_traffic_statistics_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; /*GtkTreeIter iter;*/ if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Day"), renderer, "markup", MMGUI_MAIN_TRAFFICSTATSLIST_DAY, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Received data"), renderer, "markup", MMGUI_MAIN_TRAFFICSTATSLIST_RXDATA, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Transmitted data"), renderer, "markup", MMGUI_MAIN_TRAFFICSTATSLIST_TXDATA, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Session time"), renderer, "markup", MMGUI_MAIN_TRAFFICSTATSLIST_SESSIONTIME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), column); store = gtk_list_store_new(MMGUI_MAIN_TRAFFICSTATSLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->trafficstatstreeview), GTK_TREE_MODEL(store)); g_object_unref(store); } gboolean mmgui_main_traffic_connections_update_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmgui_netlink_connection_change_t fullchange; GSList *changes, *iterator; gboolean add, remove, modify; GHashTable *modconns; GtkTreeModel *model; GtkTreeIter iter; gboolean valid; guint inode; GtkTreePath *path; GtkTreeRowReference *reference; GList *rmlist, *rmnode; gchar strbuf[32]; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->conntreeview)); if (model == NULL) return FALSE; changes = mmguicore_get_connections_changes(mmguiapp->core); if (changes == NULL) return FALSE; modconns = g_hash_table_new(g_int_hash, g_int_equal); add = FALSE; remove = FALSE; modify = FALSE; for (iterator=changes; iterator; iterator=iterator->next) { fullchange = (mmgui_netlink_connection_change_t)iterator->data; if (fullchange != NULL) { if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_ADD) { add = TRUE; } else if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_REMOVE) { remove = TRUE; g_hash_table_insert(modconns, &(fullchange->inode), fullchange); } else if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_MODIFY) { modify = TRUE; g_hash_table_insert(modconns, &(fullchange->inode), fullchange); } } } gtk_widget_freeze_child_notify(mmguiapp->window->conntreeview); if ((remove) || (modify)) { rmlist = NULL; valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNECTIONLIST_INODE, &inode, -1); fullchange = (mmgui_netlink_connection_change_t)g_hash_table_lookup(modconns, (gconstpointer)&inode); if (fullchange != NULL) { if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_MODIFY) { /*update connection*/ mmgui_str_format_bytes((guint64)fullchange->data.params->dqueue, strbuf, sizeof(strbuf), FALSE); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_CONNECTIONLIST_STATE, mmgui_netlink_socket_state(fullchange->data.params->state), MMGUI_MAIN_CONNECTIONLIST_BUFFER, strbuf, -1); } else if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_REMOVE) { /*save reference to remove*/ path = gtk_tree_model_get_path(model, &iter); reference = gtk_tree_row_reference_new(model, path); rmlist = g_list_prepend(rmlist, reference); gtk_tree_path_free(path); } } valid = gtk_tree_model_iter_next(model, &iter); } /*remove closed connections*/ if (rmlist != NULL) { for (rmnode = rmlist; rmnode != NULL; rmnode = rmnode->next) { path = gtk_tree_row_reference_get_path((GtkTreeRowReference *)rmnode->data); if (path != NULL) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } } } g_list_foreach(rmlist, (GFunc)gtk_tree_row_reference_free, NULL); g_list_free(rmlist); } } if (add) { for (iterator=changes; iterator; iterator=iterator->next) { fullchange = (mmgui_netlink_connection_change_t)iterator->data; if (fullchange != NULL) { if (fullchange->event == MMGUI_NETLINK_CONNECTION_EVENT_ADD) { mmgui_str_format_bytes((guint64)fullchange->data.connection->dqueue, strbuf, sizeof(strbuf), FALSE); gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_CONNECTIONLIST_APPLICATION, fullchange->data.connection->appname, MMGUI_MAIN_CONNECTIONLIST_PID, fullchange->data.connection->apppid, MMGUI_MAIN_CONNECTIONLIST_PROTOCOL, "TCP", MMGUI_MAIN_CONNECTIONLIST_STATE, mmgui_netlink_socket_state(fullchange->data.connection->state), MMGUI_MAIN_CONNECTIONLIST_BUFFER, strbuf, MMGUI_MAIN_CONNECTIONLIST_LOCALADDR, fullchange->data.connection->srcport, MMGUI_MAIN_CONNECTIONLIST_DESTADDR, fullchange->data.connection->dsthostname, MMGUI_MAIN_CONNECTIONLIST_INODE, fullchange->data.connection->inode, -1); } } } } gtk_widget_thaw_child_notify(mmguiapp->window->conntreeview); /*Free resources*/ g_slist_foreach(changes, (GFunc)mmgui_netlink_free_connection_change, NULL); g_slist_free(changes); return FALSE; } void mmgui_main_traffic_connections_terminate_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; guint pid; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->conntreeview)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->conntreeview)); if (model != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNECTIONLIST_PID, &pid, -1); mmgui_netlink_terminate_application((pid_t)pid); } } } void mmgui_main_traffic_connections_dialog(mmgui_application_t mmguiapp) { GtkTreeModel *model; GSList *connections, *iterator; mmgui_netlink_connection_t connection; GtkTreeIter iter; gchar strbuf[32]; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->conntreeview)); if (model != NULL) { gtk_list_store_clear(GTK_LIST_STORE(model)); /*Fill list with initial connections*/ connections = mmguicore_open_connections_list(mmguiapp->core); if (connections != NULL) { for (iterator=connections; iterator; iterator=iterator->next) { connection = (mmgui_netlink_connection_t)iterator->data; if (connection != NULL) { mmgui_str_format_bytes((guint64)connection->dqueue, strbuf, sizeof(strbuf), FALSE); gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_CONNECTIONLIST_APPLICATION, connection->appname, MMGUI_MAIN_CONNECTIONLIST_PID, connection->apppid, MMGUI_MAIN_CONNECTIONLIST_PROTOCOL, "TCP", MMGUI_MAIN_CONNECTIONLIST_STATE, mmgui_netlink_socket_state(connection->state), MMGUI_MAIN_CONNECTIONLIST_BUFFER, strbuf, MMGUI_MAIN_CONNECTIONLIST_LOCALADDR, connection->srcport, MMGUI_MAIN_CONNECTIONLIST_DESTADDR, connection->dsthostname, MMGUI_MAIN_CONNECTIONLIST_INODE, connection->inode, -1); } } /*Free resources*/ g_slist_foreach(connections, (GFunc)mmgui_netlink_free_connection, NULL); g_slist_free(connections); } gtk_dialog_run(GTK_DIALOG(mmguiapp->window->conndialog)); mmguicore_close_connections_list(mmguiapp->core); gtk_widget_hide(mmguiapp->window->conndialog); } } void mmgui_main_traffic_connections_dialog_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_traffic_connections_dialog(mmguiapp); } void mmgui_main_traffic_accelerators_init(mmgui_application_t mmguiapp) { /*Accelerators*/ mmguiapp->window->connaccelgroup = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(mmguiapp->window->conndialog), mmguiapp->window->connaccelgroup); gtk_widget_add_accelerator(mmguiapp->window->conntermtoolbutton, "clicked", mmguiapp->window->connaccelgroup, GDK_KEY_t, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); } void mmgui_main_traffic_connections_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; if (mmguiapp == NULL) return; /*List*/ renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Application"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_APPLICATION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("PID"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_PID, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Protocol"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_PROTOCOL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("State"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_STATE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Buffer"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_BUFFER, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Port"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_LOCALADDR, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Destination"), renderer, "markup", MMGUI_MAIN_CONNECTIONLIST_DESTADDR, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->conntreeview), column); store = gtk_list_store_new(MMGUI_MAIN_CONNECTIONLIST_COLUMNS, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT64); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->conntreeview), GTK_TREE_MODEL(store)); g_object_unref(store); } gboolean mmgui_main_traffic_limits_show_message_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; guint eventid; gchar *notifycaption, *notifytext; enum _mmgui_notifications_sound soundmode; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; eventid = GPOINTER_TO_INT(mmguiappdata->data); if (mmguiappdata->mmguiapp->coreoptions != NULL) { //Various limits switch (eventid) { case MMGUI_EVENT_TRAFFIC_LIMIT: notifycaption = _("Traffic limit exceeded"); notifytext = mmguiappdata->mmguiapp->coreoptions->trafficmessage; break; case MMGUI_EVENT_TIME_LIMIT: notifycaption = _("Time limit exceeded"); notifytext = mmguiappdata->mmguiapp->coreoptions->timemessage; break; default: g_debug("Unknown limit identifier"); return FALSE; } //Show notification/play sound if (mmguiappdata->mmguiapp->options->usesounds) { soundmode = MMGUI_NOTIFICATIONS_SOUND_MESSAGE; } else { soundmode = MMGUI_NOTIFICATIONS_SOUND_NONE; } mmgui_notifications_show(mmguiappdata->mmguiapp->notifications, notifycaption, notifytext, soundmode, mmgui_main_traffic_limits_notification_show_window_callback, mmguiappdata); } g_free(mmguiappdata); return FALSE; } void mmgui_main_traffic_limits_dialog_time_section_disable_signal(GtkToggleButton *togglebutton, gpointer data) { mmgui_application_t mmguiapp; gboolean sensitive; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; sensitive = gtk_toggle_button_get_active(togglebutton); gtk_widget_set_sensitive(mmguiapp->window->timeamount, sensitive); gtk_widget_set_sensitive(mmguiapp->window->timeunits, sensitive); gtk_widget_set_sensitive(mmguiapp->window->timemessage, sensitive); gtk_widget_set_sensitive(mmguiapp->window->timeaction, sensitive); } static void mmgui_main_traffic_limits_dialog_traffic_section_disable_signal(GtkToggleButton *togglebutton, gpointer data) { mmgui_application_t mmguiapp; gboolean sensitive; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; sensitive = gtk_toggle_button_get_active(togglebutton); gtk_widget_set_sensitive(mmguiapp->window->trafficamount, sensitive); gtk_widget_set_sensitive(mmguiapp->window->trafficunits, sensitive); gtk_widget_set_sensitive(mmguiapp->window->trafficmessage, sensitive); gtk_widget_set_sensitive(mmguiapp->window->trafficaction, sensitive); } static gboolean mmgui_main_traffic_limits_dialog_open(mmgui_application_t mmguiapp) { gint response; gulong trafficboxsignal, timeboxsignal; if (mmguiapp == NULL) return FALSE; trafficboxsignal = g_signal_connect(G_OBJECT(mmguiapp->window->trafficlimitcheckbutton), "toggled", G_CALLBACK(mmgui_main_traffic_limits_dialog_traffic_section_disable_signal), mmguiapp); timeboxsignal = g_signal_connect(G_OBJECT(mmguiapp->window->timelimitcheckbutton), "toggled", G_CALLBACK(mmgui_main_traffic_limits_dialog_time_section_disable_signal), mmguiapp); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->trafficlimitcheckbutton), "toggled", NULL); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->timelimitcheckbutton), "toggled", NULL); response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->trafficlimitsdialog)); g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->trafficlimitcheckbutton), trafficboxsignal); g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->timelimitcheckbutton), timeboxsignal); gtk_widget_hide(mmguiapp->window->trafficlimitsdialog); return (response > 0); } void mmgui_main_traffic_limits_dialog(mmgui_application_t mmguiapp) { mmguidevice_t device; gchar realtrafficbuf[64], settrafficbuf[64], realtimebuf[64], settimebuf[64]; gchar *message; if (mmguiapp == NULL) return; if ((mmguiapp->coreoptions == NULL) || (mmguiapp->core == NULL) || (mmguiapp->modemsettings == NULL)) return; device = mmguicore_devices_get_current(mmguiapp->core); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->trafficlimitcheckbutton), mmguiapp->coreoptions->trafficenabled); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mmguiapp->window->trafficamount), (gdouble)mmguiapp->coreoptions->trafficamount); gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->trafficunits), mmguiapp->coreoptions->trafficunits); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->trafficmessage), mmguiapp->coreoptions->trafficmessage); gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->trafficaction), mmguiapp->coreoptions->trafficaction); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->timelimitcheckbutton), mmguiapp->coreoptions->timeenabled); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mmguiapp->window->timeamount), (gdouble)mmguiapp->coreoptions->timeamount); gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->timeunits), mmguiapp->coreoptions->timeunits); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->timemessage), mmguiapp->coreoptions->timemessage); gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->timeaction), mmguiapp->coreoptions->timeaction); if (mmgui_main_traffic_limits_dialog_open(mmguiapp)) { if (mmguiapp->coreoptions != NULL) { /*Traffic*/ if (mmguiapp->coreoptions->trafficmessage != NULL) { g_free(mmguiapp->coreoptions->trafficmessage); mmguiapp->coreoptions->trafficmessage = NULL; } mmguiapp->coreoptions->trafficenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->trafficlimitcheckbutton)); mmguiapp->coreoptions->trafficamount = (guint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(mmguiapp->window->trafficamount)); mmguiapp->coreoptions->trafficunits = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->trafficunits)); mmguiapp->coreoptions->trafficmessage = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->trafficmessage))); mmguiapp->coreoptions->trafficaction = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->trafficaction)); switch (mmguiapp->coreoptions->trafficunits) { case 0: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024; break; case 1: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024*1024; break; case 2: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024*1024*1024; break; default: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024; break; } mmguiapp->coreoptions->trafficexecuted = FALSE; if (device != NULL) { if ((device->connected) && (mmguiapp->coreoptions->trafficenabled) && (mmguiapp->coreoptions->trafficfull < (device->rxbytes + device->txbytes))) { mmguiapp->coreoptions->trafficexecuted = TRUE; } } /*Time*/ if (mmguiapp->coreoptions->timemessage != NULL) { g_free(mmguiapp->coreoptions->timemessage); mmguiapp->coreoptions->timemessage = NULL; } mmguiapp->coreoptions->timeenabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->timelimitcheckbutton)); mmguiapp->coreoptions->timeamount = (guint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(mmguiapp->window->timeamount)); mmguiapp->coreoptions->timeunits = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->timeunits)); mmguiapp->coreoptions->timemessage = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->timemessage))); mmguiapp->coreoptions->timeaction = gtk_combo_box_get_active(GTK_COMBO_BOX(mmguiapp->window->timeaction)); switch (mmguiapp->coreoptions->timeunits) { case 0: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60; break; case 1: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60*60; break; default: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60; break; } mmguiapp->coreoptions->timeexecuted = FALSE; if (device != NULL) { if ((device->connected) && (mmguiapp->coreoptions->timeenabled) && (mmguiapp->coreoptions->timefull < device->sessiontime)) { mmguiapp->coreoptions->timeexecuted = TRUE; } } /*Save settings*/ /*Traffic*/ mmgui_modem_settings_set_boolean(mmguiapp->modemsettings, "limits_traffic_enabled", mmguiapp->coreoptions->trafficenabled); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_traffic_amount", (gint)mmguiapp->coreoptions->trafficamount); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_traffic_units", (guint)mmguiapp->coreoptions->trafficunits); mmgui_modem_settings_set_string(mmguiapp->modemsettings, "limits_traffic_message", mmguiapp->coreoptions->trafficmessage); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_traffic_action", (guint)mmguiapp->coreoptions->trafficaction); /*Time*/ mmgui_modem_settings_set_boolean(mmguiapp->modemsettings, "limits_time_enabled", mmguiapp->coreoptions->timeenabled); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_time_amount", (guint)mmguiapp->coreoptions->timeamount); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_time_units", (guint)mmguiapp->coreoptions->timeunits); mmgui_modem_settings_set_string(mmguiapp->modemsettings, "limits_time_message", mmguiapp->coreoptions->timemessage); mmgui_modem_settings_set_int(mmguiapp->modemsettings, "limits_time_action", (guint)mmguiapp->coreoptions->timeaction); if (device != NULL) { if ((mmguiapp->coreoptions->trafficexecuted) || (mmguiapp->coreoptions->timeexecuted)) { if ((mmguiapp->coreoptions->trafficexecuted) && (mmguiapp->coreoptions->timeexecuted)) { message = g_strdup_printf(_("Traffic: %s, limit set to: %s\nTime: %s, limit set to: %s\nPlease check entered values and try once more"), mmgui_str_format_bytes(device->rxbytes + device->txbytes, realtrafficbuf, sizeof(realtrafficbuf), TRUE), mmgui_str_format_bytes(mmguiapp->coreoptions->trafficfull, settrafficbuf, sizeof(settrafficbuf), TRUE), mmgui_str_format_time(device->sessiontime, realtimebuf, sizeof(realtimebuf), TRUE), mmgui_str_format_time(mmguiapp->coreoptions->timefull, settimebuf, sizeof(settimebuf), TRUE)); mmgui_main_ui_error_dialog_open(mmguiapp, _("Wrong traffic and time limit values"), message); g_free(message); } else if (mmguiapp->coreoptions->trafficexecuted) { message = g_strdup_printf(_("Traffic: %s, limit set to: %s\nPlease check entered values and try once more"), mmgui_str_format_bytes(device->rxbytes + device->txbytes, realtrafficbuf, sizeof(realtrafficbuf), TRUE), mmgui_str_format_bytes(mmguiapp->coreoptions->trafficfull, settrafficbuf, sizeof(settrafficbuf), TRUE)); mmgui_main_ui_error_dialog_open(mmguiapp, _("Wrong traffic limit value"), message); g_free(message); } else if (mmguiapp->coreoptions->timeexecuted) { message = g_strdup_printf(_("Time: %s, limit set to: %s\nPlease check entered values and try once more"), mmgui_str_format_time(device->sessiontime, realtimebuf, sizeof(realtimebuf), TRUE), mmgui_str_format_time(mmguiapp->coreoptions->timefull, settimebuf, sizeof(settimebuf), TRUE)); mmgui_main_ui_error_dialog_open(mmguiapp, _("Wrong time limit value"), message); g_free(message); } } } } } } void mmgui_main_traffic_limits_dialog_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_traffic_limits_dialog(mmguiapp); } gboolean mmgui_main_traffic_stats_update_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmgui_trafficdb_t trafficdb; mmguidevice_t device; GtkTreeModel *model; GtkTreeIter sectioniter, elementiter; gboolean sectionvalid, elementvalid; gint id; gchar buffer[64]; gfloat speed; guint64 limitleft; GdkWindow *window; gboolean visible; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (mmguiapp->core == NULL) return FALSE; if (mmguiapp->core->device == NULL) return FALSE; trafficdb = (mmgui_trafficdb_t)mmguicore_devices_get_traffic_db(mmguiapp->core); /*Update traffic statistics*/ model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->trafficparamslist)); if (model != NULL) { sectionvalid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), §ioniter); while (sectionvalid) { /*Sections*/ if (gtk_tree_model_iter_has_child(model, §ioniter)) { /*Elements*/ if (gtk_tree_model_iter_children(model, &elementiter, §ioniter)) { do { device = mmguicore_devices_get_current(mmguiapp->core); if ((device == NULL) || ((device != NULL) && (!device->connected))) { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, "", -1); } else { gtk_tree_model_get(model, &elementiter, MMGUI_MAIN_TRAFFICLIST_ID, &id, -1); switch (id) { case MMGUI_MAIN_TRAFFICLIST_ID_RXDATA: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(device->rxbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TXDATA: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(device->txbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_RXSPEED: if (device->speedindex < MMGUI_SPEED_VALUES_NUMBER) { if (device->speedindex == 0) { speed = device->speedvalues[0][device->speedindex]; } else { speed = device->speedvalues[0][device->speedindex-1]; } } else { speed = device->speedvalues[0][MMGUI_SPEED_VALUES_NUMBER-1]; } gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_speed(speed, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TXSPEED: if (device->speedindex < MMGUI_SPEED_VALUES_NUMBER) { if (device->speedindex == 0) { speed = device->speedvalues[1][device->speedindex]; } else { speed = device->speedvalues[1][device->speedindex-1]; } } else { speed = device->speedvalues[1][MMGUI_SPEED_VALUES_NUMBER-1]; } gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_speed(speed, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TIME: if (device->connected) { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_time(device->sessiontime, buffer, sizeof(buffer), TRUE), -1); } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disconnected"), -1); } break; case MMGUI_MAIN_TRAFFICLIST_ID_DATALIMIT: if (device->connected) { if (mmguiapp->coreoptions != NULL) { if (!mmguiapp->coreoptions->trafficexecuted) { if (mmguiapp->coreoptions->trafficenabled) { limitleft = mmguiapp->coreoptions->trafficfull - (device->rxbytes + device->txbytes); if (mmguiapp->coreoptions->trafficfull > (device->rxbytes + device->txbytes)) { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(limitleft, buffer, sizeof(buffer), TRUE), -1); } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Limit"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disabled"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Limit"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disabled"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disconnected"), -1); } break; case MMGUI_MAIN_TRAFFICLIST_ID_TIMELIMIT: if (device->connected) { if (mmguiapp->coreoptions != NULL) { if (!mmguiapp->coreoptions->timeexecuted) { if (mmguiapp->coreoptions->timeenabled) { limitleft = mmguiapp->coreoptions->timefull - device->sessiontime; if (mmguiapp->coreoptions->timefull > device->sessiontime) { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_time(limitleft, buffer, sizeof(buffer), TRUE), -1); } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Limit"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disabled"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Limit"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disabled"), -1); } } else { gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, _("Disconnected"), -1); } break; case MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_MONTH: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(trafficdb->monthrxbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_MONTH: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(trafficdb->monthtxbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TIME_MONTH: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_time(trafficdb->monthduration, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_YEAR: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(trafficdb->yearrxbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_YEAR: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_bytes(trafficdb->yeartxbytes, buffer, sizeof(buffer), TRUE), -1); break; case MMGUI_MAIN_TRAFFICLIST_ID_TIME_YEAR: gtk_tree_store_set(GTK_TREE_STORE(model), &elementiter, MMGUI_MAIN_TRAFFICLIST_VALUE, mmgui_str_format_time(trafficdb->yearduration, buffer, sizeof(buffer), TRUE), -1); break; default: break; } } elementvalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &elementiter); } while (elementvalid); } } sectionvalid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), §ioniter); } } /*Update traffic graph*/ window = gtk_widget_get_window(mmguiapp->window->trafficdrawingarea); visible = gtk_widget_get_visible(mmguiapp->window->trafficdrawingarea); /*Update only if needed*/ if ((gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)) == MMGUI_MAIN_PAGE_TRAFFIC) && (window != NULL) && (visible)) { //TODO: Determine rectangle gdk_window_invalidate_rect(window, NULL, FALSE); } return FALSE; } void mmgui_main_traffic_speed_plot_draw(GtkWidget *widget, cairo_t *cr, gpointer data) { gint width, height; gint i, c, graphlen; gfloat maxvalue; gchar strbuffer[32]; const gdouble dashed[1] = {1.0}; mmgui_application_t mmguiapp; mmguidevice_t device; gdouble rxr, rxg, rxb, txr, txg, txb; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; device = mmguicore_devices_get_current(mmguiapp->core); if (device == NULL) return; #if GTK_CHECK_VERSION(3,4,0) /*RX speed graph color*/ rxr = mmguiapp->options->rxtrafficcolor.red; rxg = mmguiapp->options->rxtrafficcolor.green; rxb = mmguiapp->options->rxtrafficcolor.blue; /*TX speed graph color*/ txr = mmguiapp->options->txtrafficcolor.red; txg = mmguiapp->options->txtrafficcolor.green; txb = mmguiapp->options->txtrafficcolor.blue; #else /*RX speed graph color*/ rxr = mmguiapp->options->rxtrafficcolor.red/65535.0; rxg = mmguiapp->options->rxtrafficcolor.green/65535.0; rxb = mmguiapp->options->rxtrafficcolor.blue/65535.0; /*TX speed graph color*/ txr = mmguiapp->options->txtrafficcolor.red/65535.0; txg = mmguiapp->options->txtrafficcolor.green/65535.0; txb = mmguiapp->options->txtrafficcolor.blue/65535.0; #endif maxvalue = 100.0; if ((device->connected) && (device->speedindex > 0)) { for (i=device->speedindex-1; i>=0; i--) { if (device->speedvalues[0][i] > maxvalue) { maxvalue = device->speedvalues[0][i]; } if (device->speedvalues[1][i] > maxvalue) { maxvalue = device->speedvalues[1][i]; } } } if (maxvalue < 100.0) maxvalue = 100.0; width = gtk_widget_get_allocated_width(widget); height = gtk_widget_get_allocated_height(widget); cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_set_line_width(cr, 1.5); graphlen = 19*(gint)((width-60)/19.0); cairo_move_to(cr, 30, 30); cairo_line_to(cr, 30, height-30); cairo_line_to(cr, 30+graphlen, height-30); cairo_line_to(cr, 30+graphlen, 30); cairo_line_to(cr, 30, 30); cairo_stroke(cr); cairo_set_source_rgba(cr, 0.5, 0.5, 0.5, 1); cairo_set_line_width(cr, 1.0); cairo_set_dash(cr, dashed, 1, 0); for (i=1; i<10; i++) { cairo_move_to(cr, 30, height-30-(i*(gint)((height-60)/10.0))); cairo_line_to(cr, 30+graphlen, height-30-(i*(gint)((height-60)/10.0))); } for (i=1; i<19; i++) { cairo_move_to(cr, 30+(i*(gint)((width-60)/19.0)), 30); cairo_line_to(cr, 30+(i*(gint)((width-60)/19.0)), height-30); } cairo_stroke(cr); cairo_set_dash(cr, dashed, 0, 0); cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size(cr, 8); for (i=0; i<=10; i++) { cairo_move_to(cr, 0, height-30+3-(i*(gint)((height-60)/10.0))); memset(strbuffer, 0, sizeof(strbuffer)); g_snprintf(strbuffer, sizeof(strbuffer), "%4.0f", i*(maxvalue/10.0)); cairo_show_text(cr, strbuffer); } cairo_move_to(cr, 0, 15); cairo_show_text(cr, _("kbps")); for (i=0; i<19; i++) { cairo_move_to(cr, 30-5+(i*(gint)((width-60)/19.0)), height-8); memset(strbuffer, 0, sizeof(strbuffer)); if (mmguiapp->options->graphrighttoleft) { g_snprintf(strbuffer, sizeof(strbuffer), "%i", (19-i+1)*MMGUI_THREAD_SLEEP_PERIOD); } else { g_snprintf(strbuffer, sizeof(strbuffer), "%i", (i+1)*MMGUI_THREAD_SLEEP_PERIOD); } cairo_show_text(cr, strbuffer); } cairo_move_to(cr, width-35, height-8); cairo_show_text(cr, _("sec")); cairo_stroke(cr); if ((device != NULL) && (device->connected) && (device->speedindex > 0)) { cairo_set_source_rgba(cr, txr, txg, txb, 1.0); cairo_set_line_width(cr, 2.5); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); if (mmguiapp->options->graphrighttoleft) { c = device->speedindex-1; for (i=0; ispeedindex; i++) { if (i == device->speedindex-1) { cairo_arc(cr, graphlen+30, height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, graphlen+30, height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); } else { cairo_line_to(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); cairo_arc(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); c--; } } } else { c = device->speedindex-1; for (i=0; ispeedindex; i++) { if (i == device->speedindex-1) { cairo_arc(cr, 30, height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, 30, height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); } else { cairo_line_to(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); cairo_arc(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[1][i]*((height-60)/maxvalue))); c--; } } } cairo_stroke(cr); cairo_set_source_rgba(cr, rxr, rxg, rxb, 1.0); cairo_set_line_width(cr, 2.5); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); if (mmguiapp->options->graphrighttoleft) { c = device->speedindex-1; for (i=0; ispeedindex; i++) { if (i == device->speedindex-1) { cairo_arc(cr, graphlen+30, height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, graphlen+30, height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); } else { cairo_line_to(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); cairo_arc(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, graphlen+30-(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); c--; } } } else { c = device->speedindex-1; for (i=0; ispeedindex; i++) { if (i == device->speedindex-1) { cairo_arc(cr, 30, height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, 30, height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); } else { cairo_line_to(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); cairo_arc(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue)), 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, 30+(c*(gint)((width-60)/19.0)), height-30-(gint)(device->speedvalues[0][i]*((height-60)/maxvalue))); c--; } } } cairo_stroke(cr); } //RX speed cairo_set_source_rgba(cr, rxr, rxg, rxb, 1.0); cairo_set_line_width(cr, 2.5); cairo_arc(cr, width-230, 12, 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, width-222, 12); cairo_line_to(cr, width-238, 12); cairo_stroke(cr); cairo_set_source_rgba(cr, 0.5, 0.5, 0.5, 1); cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(cr, 10); cairo_move_to(cr, width-220, 15); cairo_show_text(cr, _("RX speed")); cairo_stroke(cr); //TX speed cairo_set_source_rgba(cr, txr, txg, txb, 1.0); cairo_set_line_width(cr, 2.5); cairo_arc(cr, width-110, 12, 2.0, 0*(3.14/180.0), 360*(3.14/180.0)); cairo_move_to(cr, width-102, 12); cairo_line_to(cr, width-118, 12); cairo_stroke(cr); cairo_set_source_rgba(cr, 0.5, 0.5, 0.5, 1); cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(cr, 10); cairo_move_to(cr, width-100, 15); cairo_show_text(cr, _("TX speed")); cairo_stroke(cr); } void mmgui_main_traffic_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeStore *store; GtkTreeIter iter; GtkTreeIter subiter; if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Parameter"), renderer, "markup", MMGUI_MAIN_TRAFFICLIST_PARAMETER, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficparamslist), column); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); column = gtk_tree_view_column_new_with_attributes(_("Value"), renderer, "markup", MMGUI_MAIN_TRAFFICLIST_VALUE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->trafficparamslist), column); store = gtk_tree_store_new(MMGUI_MAIN_TRAFFICLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Session"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_CAPTION, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Received data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Transmitted data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Receive speed"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_RXSPEED, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Transmit speed"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TXSPEED, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Session time"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TIME, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Traffic left"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_DATALIMIT, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Time left"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TIMELIMIT, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Month"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_CAPTION, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Received data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_MONTH, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Transmitted data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_MONTH, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Total time"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TIME_MONTH, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Year"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_CAPTION, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Received data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_RXDATA_YEAR, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Transmitted data"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TXDATA_YEAR, -1); gtk_tree_store_append(store, &subiter, &iter); gtk_tree_store_set(store, &subiter, MMGUI_MAIN_TRAFFICLIST_PARAMETER, _("Total time"), MMGUI_MAIN_TRAFFICLIST_ID, MMGUI_MAIN_TRAFFICLIST_ID_TIME_YEAR, -1); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->trafficparamslist), GTK_TREE_MODEL(store)); gtk_tree_view_expand_all(GTK_TREE_VIEW(mmguiapp->window->trafficparamslist)); g_object_unref(store); } void mmgui_main_traffic_restore_settings_for_modem(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; if ((mmguiapp->modemsettings == NULL) || (mmguiapp->coreoptions == NULL)) return; /*Traffic limits*/ if (mmguiapp->coreoptions->trafficmessage != NULL) { g_free(mmguiapp->coreoptions->trafficmessage); mmguiapp->coreoptions->trafficmessage = NULL; } mmguiapp->coreoptions->trafficenabled = mmgui_modem_settings_get_boolean(mmguiapp->modemsettings, "limits_traffic_enabled", FALSE); mmguiapp->coreoptions->trafficamount = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_traffic_amount", 150); mmguiapp->coreoptions->trafficunits = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_traffic_units", 0); mmguiapp->coreoptions->trafficaction = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_traffic_action", 0); mmguiapp->coreoptions->trafficmessage = mmgui_modem_settings_get_string(mmguiapp->modemsettings, "limits_traffic_message", _("Traffic limit exceeded... It's time to take rest \\(^_^)/")); switch (mmguiapp->coreoptions->trafficunits) { case 0: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024; break; case 1: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024*1024; break; case 2: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024*1024*1024; break; default: mmguiapp->coreoptions->trafficfull = (guint64)mmguiapp->coreoptions->trafficamount*1024*1024; break; } mmguiapp->coreoptions->trafficexecuted = FALSE; /*Time limits*/ if (mmguiapp->coreoptions->timemessage != NULL) { g_free(mmguiapp->coreoptions->timemessage); mmguiapp->coreoptions->timemessage = NULL; } mmguiapp->coreoptions->timemessage = mmgui_modem_settings_get_string(mmguiapp->modemsettings, "limits_time_message", _("Time limit exceeded... Go sleep and have nice dreams -_-")); mmguiapp->coreoptions->timeenabled = mmgui_modem_settings_get_boolean(mmguiapp->modemsettings, "limits_time_enabled", FALSE); mmguiapp->coreoptions->timeamount = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_time_amount", 60); mmguiapp->coreoptions->timeunits = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_time_units", 0); mmguiapp->coreoptions->timeaction = (guint)mmgui_modem_settings_get_int(mmguiapp->modemsettings, "limits_time_action", 0); switch (mmguiapp->coreoptions->timeunits) { case 0: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60; break; case 1: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60*60; break; default: mmguiapp->coreoptions->timefull = mmguiapp->coreoptions->timeamount*60; break; } mmguiapp->coreoptions->timeexecuted = FALSE; } modem-manager-gui-0.0.19.1/man/bn/000775 001750 001750 00000000000 13261703575 016344 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/ru/000775 001750 001750 00000000000 13261703575 016550 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/plugins/000775 001750 001750 00000000000 13261703575 017442 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/usage-config.page000664 001750 001750 00000001206 13261703575 021510 0ustar00alexalex000000 000000 Configure the application to match your needs. Mario Blättermann mario.blaettermann@gmail.com

Creative Commons Share Alike 3.0

Configuration

modem-manager-gui-0.0.19.1/po/pl.po000664 001750 001750 00000114012 13261705166 016560 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Swift Geek , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (http://www.transifex.com/ethereal/modem-manager-gui/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Nieprzeczytane SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Nieprzeczytane wiadomości" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Usuń kontakt" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Czy na pewno chcesz usunąć kontakt?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Błąd podczas usuwania kontaktu" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Kontakt nie został usunięty z urządzenia" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Drugi numer" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Błąd w trakcie otwierania urządzenia" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Urządzenie" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Błąd podczas inicjalizowania" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Włączam urządzenie" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Nie znaleziono urządzeń w systemie" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Modem nie jest gotowy do pracy. Proszę czekać na zakończenie przygotowania modemu..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Modem musi być włączony aby czytać i wysyłać SMSy. Proszę włączyć modem." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Modem musi być zarejestrowany w sieci komórkowej aby wysyłać i odbierać SMSy. Proszę czekać" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Modem musi być odblokowany aby odbierać i wysyłać SMSy. Wprowadź kod PIN" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Modem manager nie wspiera wysyłania żądań USSD" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "Nowy SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Wypisz wszystkie dostępne moduły i wyjdź" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Błąd urządzenia" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Odebrano %u nowych wiadomości SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Odebrano nową wiadomość SMS" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Numer SMS niepoprawny\nMogą być użyte tylko numery od 2 do 20 cyfr bez liter i symboli" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Tekst SMSa niepoprawny\nProszę wprowadzić jakiś tekst do wysłania" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "Wysyłanie SMS pod numer \"%s\" ..." #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Zły numer lub urządzenie nie gotowe" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Zapisywanie SMS..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Folder dla wysłanych wiadomości SMS.\nMożesz odpowiedzieć na wybraną wiadomość używając przycisku \"Odpowiedz\"" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Folder dla wysłanych wiadomości SMS" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Folder dla wersji roboczych wiadomości SMS.\nWybierz wiadomość i kliknij przycisk \"Odpowiedz\" aby zacząć edytować." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "Wysyłanie żądania USSD %s" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Złe żądanie USSDD lub urządzenie nie gotoweh" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Sesja USSD przerwana. Możesz wysłać nowe żądanie" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Złe żądanie USSD" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Zobacz i wybierz aktywne urządzenia CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Urządzenia" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "Wysyłaj i odbieraj wiadomości SMS CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "Wyślij żądania USSD CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Zobacz informacje aktywnego urządzenia CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Wyślij nową wiadomość SMS CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Żądanie" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "Wyślij żądanie USSD CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Wyślij nową wiadomość SMS do wybranego kontaktu CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Wyślij SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Nowa wiadomość SMS" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Włącz urządzenie" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Wyślij wiadomość SMS" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Wyślij żądanie USSD" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/src/modules/uuid.h000664 001750 001750 00000001665 13261703575 020560 0ustar00alexalex000000 000000 /* * uuid.h * * Copyright 2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __UUID_H__ #define __UUID_H__ #include GRand *mmgui_uuid_init(void); gchar *mmgui_uuid_generate(GRand *rng); #endif /* __UUID_H__ */ modem-manager-gui-0.0.19.1/help/pl/pl.po000664 001750 001750 00000061622 13261703575 017517 0ustar00alexalex000000 000000 # # Translators: # Swift Geek , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (http://www.transifex.com/ethereal/modem-manager-gui/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Informacje o Modem Manager GUI." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Wyszukaj dostępne sieci komórkowe" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Aktywuj swój modem" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Używaj Modem Manager GUI do wysyłania i odbierania SMS." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/packages/debian/control000664 001750 001750 00000003224 13261703575 021576 0ustar00alexalex000000 000000 Source: modem-manager-gui Section: net Priority: optional Maintainer: Graham Inggs Build-Depends: debhelper (>= 10), itstool, libgdbm-dev, libglib2.0-dev, libgtk-3-dev, libgtkspell3-3-dev, libappindicator3-dev, ofono-dev (>= 1.9), po4a Standards-Version: 4.1.2 Homepage: https://linuxonly.ru/page/modem-manager-gui Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/modem-manager-gui.git Vcs-Git: https://anonscm.debian.org/git/collab-maint/modem-manager-gui.git Package: modem-manager-gui Architecture: linux-any Depends: modemmanager (>= 0.5.2) | ofono (>= 1.9), network-manager (>= 0.9.4.0) | connman (>= 1.12) | ppp (>= 2.4.5), mobile-broadband-provider-info, policykit-1, ${misc:Depends}, ${shlibs:Depends} Recommends: modem-manager-gui-help, yelp Suggests: evolution-data-server, libindicate5 | libmessaging-menu0, libnotify4 Pre-Depends: ${misc:Pre-Depends} Description: GUI front-end for ModemManager / Wader / oFono This program is a simple graphical interface for ModemManager, Wader and oFono daemon D-Bus interfaces. It can send, receive and store SMS messages, send USSD requests and read answers in GSM7 and UCS2 formats, and scan for available mobile networks. Package: modem-manager-gui-help Section: doc Architecture: all Depends: ${misc:Depends} Breaks: modem-manager-gui (<< 0.0.18-2~) Replaces: modem-manager-gui (<< 0.0.18-2~) Description: GUI front-end for ModemManager / Wader / oFono - documentation This package contains the documentation. modem-manager-gui-0.0.19.1/man/uk/uk.po000664 001750 001750 00000012137 13261703575 017347 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Yarema aka Knedlyk , 2014-2015,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Yarema aka Knedlyk \n" "Language-Team: Ukrainian (http://www.transifex.com/ethereal/modem-manager-gui/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "Листопад 2017" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "Менеджер модемів v0.0.19" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Команди користувача" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "НАЗВА" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - простий графічний інтерфейс для демону Менеджера модемів." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "ОГЛЯД" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m модуль ] [ -c модуль ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "ОПИС" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Ця програма є простим графічним інтерфейсом для демонів Менеджера модемів 0.6/0.7, Wader і oFono, використовуючи інтерфейс dbus." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Не показувати вікна при запуску" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Використовувати визначений модуль управління модемом" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Використовувати модуль управління з’єднанням" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Показати список всіх модулів і вийти" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "АВТОР" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Написано Alex’ом. Переглянути весь діалог про всі вклади." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "ПОВІДОМЛЕННЯ ПРО ВАДИ" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "Повідомляйте про вади Ealex@linuxonly.ruE, або на секції трекеру вад на сторінці Ehttp://linuxonly.ruE." #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "ПРАВА" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "Всі права застережено \\(co 2012-2017 Alex" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Це є вільна програма. Ви можете розповсюджувати її згідно з правилами Загальної публічної ліцензії GNU Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "ДОДАТКОВА ІНФОРМАЦІЯ" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/resources/pixmaps/info-network.png000664 001750 001750 00000002156 13261703575 024021 0ustar00alexalex000000 000000 PNG  IHDR00WbKGD pHYs $ $BtIME&HIDATh}sשnS*Ed#$IQ֕Va͘,CmL㏰<< ,LLC<,ITC-R?λu֮kw>o{F%l:<4L\+o ϝQ"^t'͌KĤ ;U@|ipR~@"k`tt3+#\߰?b'f>Qt?n9h˩w~H&F]-X3C޶TӋ1xg*LGs] *]KBwd㣊9{Gkh+;Wq||kf'bQQ7D-ɾkR&jU0*3sq)F-x:>cCNZ23+[O/$JVng]_<<0>rJ J߁Ãv`Eurzm * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include GRand *mmgui_uuid_init(void) { GTimeVal timeval; g_get_current_time(&timeval); return g_rand_new_with_seed((timeval.tv_sec * 1000) + (timeval.tv_usec / 1000)); } gchar *mmgui_uuid_generate(GRand *rng) { guint symseq, symval; gchar uuidbuf[37]; const gchar uuidtemplate[] = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"; const gchar uuidvalues[] = "0123456789abcdef"; if (rng == NULL) return NULL; memset(uuidbuf, 0, sizeof(uuidbuf)); for (symseq = 0; symseq < sizeof(uuidtemplate); symseq++) { symval = g_rand_int_range(rng, 0, 32767) % 16; switch (uuidtemplate[symseq]) { case 'x': uuidbuf[symseq] = uuidvalues[symval]; break; case 'y': uuidbuf[symseq] = uuidvalues[(symval & 0x03) | 0x08]; break; default: uuidbuf[symseq] = uuidtemplate[symseq]; break; } } return g_strdup(uuidbuf); } modem-manager-gui-0.0.19.1/help/C/000775 001750 001750 00000000000 13261703575 016304 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/netlink.h000664 001750 001750 00000011123 13261703575 017574 0ustar00alexalex000000 000000 /* * netlink.h * * Copyright 2012-2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __NETLINK_H__ #define __NETLINK_H__ #include #include #include #include #include #include enum _mmgui_netlink_interface_event_type { MMGUI_NETLINK_INTERFACE_EVENT_TYPE_UNKNOWN = 0, MMGUI_NETLINK_INTERFACE_EVENT_TYPE_ADD = 1 << 0, MMGUI_NETLINK_INTERFACE_EVENT_TYPE_REMOVE = 1 << 1, MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS = 1 << 2, }; /*Connection change identifiers*/ enum _mmgui_netlink_connection_event_type { MMGUI_NETLINK_CONNECTION_EVENT_ADD = 0, MMGUI_NETLINK_CONNECTION_EVENT_REMOVE = 1, MMGUI_NETLINK_CONNECTION_EVENT_MODIFY = 2 }; /*Connection paramerters*/ struct _mmgui_netlink_connection { guint inode; guint dqueue; uid_t userid; time_t updatetime; pid_t apppid; gchar *appname; gchar *dsthostname; gchar srcaddr[INET6_ADDRSTRLEN + 8]; gchar dstaddr[INET6_ADDRSTRLEN + 8]; gushort srcport; guchar state; guchar family; }; typedef struct _mmgui_netlink_connection *mmgui_netlink_connection_t; /*Changed parameters of connection */ struct _mmgui_netlink_connection_changed_params { guchar state; guint dqueue; }; typedef struct _mmgui_netlink_connection_changed_params *mmgui_netlink_connection_changed_params_t; /*Unified connection changes structure*/ struct _mmgui_netlink_connection_change { guint inode; guint event; union { mmgui_netlink_connection_changed_params_t params; mmgui_netlink_connection_t connection; } data; }; typedef struct _mmgui_netlink_connection_change *mmgui_netlink_connection_change_t; struct _mmgui_netlink_connection_info_request { struct nlmsghdr msgheader; struct inet_diag_req nlreq; }; struct _mmgui_netlink_interface_info_request { struct nlmsghdr msgheader; struct ifinfomsg ifinfo; }; struct _mmgui_netlink_interface_event { enum _mmgui_netlink_interface_event_type type; gchar ifname[IFNAMSIZ]; gboolean running; gboolean up; guint64 rxbytes; guint64 txbytes; }; typedef struct _mmgui_netlink_interface_event *mmgui_netlink_interface_event_t; struct _mmgui_netlink { //Connections monitoring gint connsocketfd; pid_t userid; time_t currenttime; GHashTable *connections; GAsyncQueue *changequeue; //single queue for now struct sockaddr_nl connaddr; //Network interfaces monitoring gint intsocketfd; struct sockaddr_nl intaddr; }; typedef struct _mmgui_netlink *mmgui_netlink_t; gboolean mmgui_netlink_terminate_application(pid_t pid); gchar *mmgui_netlink_socket_state(guchar state); gboolean mmgui_netlink_update(mmgui_netlink_t netlink); gboolean mmgui_netlink_request_connections_list(mmgui_netlink_t netlink, guint family); gboolean mmgui_netlink_read_connections_list(mmgui_netlink_t netlink, gchar *data, gsize datasize); gboolean mmgui_netlink_request_interface_statistics(mmgui_netlink_t netlink, gchar *interface); gboolean mmgui_netlink_read_interface_event(mmgui_netlink_t netlink, gchar *data, gsize datasize, mmgui_netlink_interface_event_t event); gint mmgui_netlink_get_connections_monitoring_socket_fd(mmgui_netlink_t netlink); gint mmgui_netlink_get_interfaces_monitoring_socket_fd(mmgui_netlink_t netlink); struct sockaddr_nl *mmgui_netlink_get_connections_monitoring_socket_address(mmgui_netlink_t netlink); struct sockaddr_nl *mmgui_netlink_get_interfaces_monitoring_socket_address(mmgui_netlink_t netlink); void mmgui_netlink_free_connection_change(mmgui_netlink_connection_change_t change); void mmgui_netlink_free_connection(mmgui_netlink_connection_t connection); GSList *mmgui_netlink_open_interactive_connections_list(mmgui_netlink_t netlink); void mmgui_netlink_close_interactive_connections_list(mmgui_netlink_t netlink); GSList *mmgui_netlink_get_connections_changes(mmgui_netlink_t netlink); void mmgui_netlink_close(mmgui_netlink_t netlink); mmgui_netlink_t mmgui_netlink_open(void); #endif /* __NETLINK_H__ */ modem-manager-gui-0.0.19.1/help/C/usage-contacts.page000664 001750 001750 00000004125 13261703575 022064 0ustar00alexalex000000 000000 Use your contact lists. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

Contact lists

Broadband modem has access to contacts stored on SIM card. Some modems can also store contacts in internal memory. Modem Manager GUI can work with contacts from these storages and also can export contacts from system contacts storages. Supported system contact storages are: Evolution Data Server used by GNOME applications (GNOME contacts section) and Akonadi server used by KDE applications (KDE contacts section).

Contacts window of Modem Manager GUI.

Use New contact button to fill form and add new contact to SIM card or modem storage, Remove contact button to remove selected contact from SIM card or modem storage and Send SMS button to compose and send SMS message to selected contact (either from SIM card or modem, or exported from system contacts storage).

Some backends don't support modem contacts manipulation functions. For example, ModemManager doesn't work with contacts from SIM card and modem memory at all (this functionality isn't implemented yet), and oFono can only export contacts from SIM card (this is developer's decision).

modem-manager-gui-0.0.19.1/help/C/contrib-translations.page000664 001750 001750 00000003152 13261703575 023322 0ustar00alexalex000000 000000 Translate Modem Manager GUI into your native language. Mario Blättermann mario.blaettermann@gmail.com

Creative Commons Share Alike 3.0

Translations

The graphical user interface, the traditional man page and the Gnome-style user manual of Modem Manager GUI can be translated into your language.

There is a project page on Transifex where existing translations are hosted and also new ones can be provided.

For general help on how Transifex works, see the Transifex Help Desk.

For your work you should have a look at the rules and dictionaries of the local Gnome translation teams . Although Modem Manager GUI shouldn't be considered as pure Gnome software, it will be often used in GTK based environments and should match the conceptual world of such applications.

modem-manager-gui-0.0.19.1/man/id/meson.build000664 001750 001750 00000000344 13261703575 020504 0ustar00alexalex000000 000000 custom_target('man-id', input: 'id.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'id', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/src/netlink.c000664 001750 001750 00000061520 13261703575 017575 0ustar00alexalex000000 000000 /* * netlink.c * * Copyright 2012-2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "netlink.h" #define MMGUI_NETLINK_INTERNAL_SEQUENCE_NUMBER 100000 static gboolean mmgui_netlink_numeric_name(gchar *dirname); static gboolean mmgui_netlink_process_access(gchar *dirname, uid_t uid); static gboolean mmgui_netlink_socket_access(gchar *dirname, gchar *sockname, guint inode); static gchar *mmgui_netlink_process_name(gchar *dirname, gchar *appname, gsize appsize); static gboolean mmgui_netlink_get_process(guint inode, gchar *appname, gsize namesize, pid_t *apppid); static gboolean mmgui_netlink_hash_clear_foreach(gpointer key, gpointer value, gpointer user_data); struct sockaddr_nl *mmgui_netlink_get_connections_monitoring_socket_address(mmgui_netlink_t netlink); struct sockaddr_nl *mmgui_netlink_get_interfaces_monitoring_socket_address(mmgui_netlink_t netlink); static mmgui_netlink_connection_change_t mmgui_netlink_create_connection_change(mmgui_netlink_t netlink, guint event, guint inode); static gboolean mmgui_netlink_numeric_name(gchar *dirname) { if ((dirname == NULL) || (!*dirname)) return FALSE; while (*dirname) { if (!isdigit(*dirname)) { return FALSE; } else { (void)*dirname++; } } return TRUE; } static gboolean mmgui_netlink_process_access(gchar *dirname, uid_t uid) { gchar fullpath[PATH_MAX]; struct stat pathstat; if (!mmgui_netlink_numeric_name(dirname)) return FALSE; memset(fullpath, 0, sizeof(fullpath)); sprintf(fullpath, "/proc/%s", dirname); if (stat(fullpath, &pathstat) == -1) { return FALSE; } if (pathstat.st_uid != uid) { return FALSE; } return TRUE; } static gboolean mmgui_netlink_socket_access(gchar *dirname, gchar *sockname, guint inode) { gchar fullpath[PATH_MAX]; struct stat fdstat; if (!mmgui_netlink_numeric_name(sockname)) return FALSE; memset(fullpath, 0, sizeof(fullpath)); snprintf(fullpath, sizeof(fullpath), "/proc/%s/fd/%s", dirname, sockname); if (stat(fullpath, &fdstat) == -1) { return FALSE; } if (((fdstat.st_mode & S_IFMT) == S_IFSOCK) && (fdstat.st_ino == inode)) { return TRUE; } return FALSE; } static gchar *mmgui_netlink_process_name(gchar *dirname, gchar *appname, gsize appsize) { gint fd, i; gchar fpath[PATH_MAX]; ssize_t linkchars; if ((dirname == NULL) || (dirname[0] == '\0')) return NULL; if ((appname == NULL) || (appsize == 0)) return NULL; memset(fpath, 0, sizeof(fpath)); snprintf(fpath, sizeof(fpath), "/proc/%s/exe", dirname); linkchars = readlink(fpath, appname, appsize-1); if (linkchars == 0) { memset(fpath, 0, sizeof(fpath)); snprintf(fpath, sizeof(fpath), "/proc/%s/comm", dirname); fd = open(fpath, O_RDONLY); if (fd != -1) { linkchars = read(fd, appname, appsize-1); close(fd); } else { return NULL; } } appname[linkchars] = '\0'; for (i=linkchars; i>=0; i--) { if (appname[i] == '/') { memmove(appname+0, appname+i+1, linkchars-i-1); linkchars -= i+1; break; } } appname[linkchars] = '\0'; return appname; } static gboolean mmgui_netlink_get_process(guint inode, gchar *appname, gsize namesize, pid_t *apppid) { DIR *procdir, *fddir; struct dirent *procde, *fdde; gchar fdirpath[PATH_MAX]; if ((appname == NULL) || (namesize == 0) || (apppid == NULL)) return FALSE; procdir = opendir("/proc"); if (procdir != NULL) { while ((procde = readdir(procdir))) { if (mmgui_netlink_process_access(procde->d_name, getuid())) { memset(fdirpath, 0, sizeof(fdirpath)); snprintf(fdirpath, sizeof(fdirpath), "/proc/%s/fd", procde->d_name); //enumerate file descriptors fddir = opendir(fdirpath); if (fddir != NULL) { while ((fdde = readdir(fddir))) { if (mmgui_netlink_socket_access(procde->d_name, fdde->d_name, inode)) { //printf("%s:%s (%s)\n", procde->d_name, fdde->d_name, nlconnections_process_name(procde->d_name, appname, sizeof(appname))); *apppid = atoi(procde->d_name); mmgui_netlink_process_name(procde->d_name, appname, namesize); closedir(fddir); closedir(procdir); return TRUE; } } closedir(fddir); } } } closedir(procdir); } return FALSE; } gboolean mmgui_netlink_terminate_application(pid_t pid) { if (kill(pid, 0) == 0) { if (kill(pid, SIGTERM) == 0) { return TRUE; } } return FALSE; } gchar *mmgui_netlink_socket_state(guchar state) { switch (state) { case TCP_ESTABLISHED: return "Established"; case TCP_SYN_SENT: return "SYN sent"; case TCP_SYN_RECV: return "SYN recv"; case TCP_FIN_WAIT1: return "FIN wait"; case TCP_FIN_WAIT2: return "FIN wait"; case TCP_TIME_WAIT: return "Time wait"; case TCP_CLOSE: return "Close"; case TCP_CLOSE_WAIT: return "Close wait"; case TCP_LAST_ACK: return "Last ACK"; case TCP_LISTEN: return "Listen"; case TCP_CLOSING: return "Closing"; default: return "Unknown"; } } void mmgui_netlink_hash_destroy(gpointer data) { mmgui_netlink_connection_t connection; connection = (mmgui_netlink_connection_t)data; if (connection == NULL) return; if (connection->appname != NULL) g_free(connection->appname); if (connection->dsthostname != NULL) g_free(connection->dsthostname); g_free(connection); } static gboolean mmgui_netlink_hash_clear_foreach(gpointer key, gpointer value, gpointer user_data) { mmgui_netlink_connection_t connection; mmgui_netlink_t netlink; mmgui_netlink_connection_change_t change; connection = (mmgui_netlink_connection_t)value; netlink = (mmgui_netlink_t)user_data; if (connection->updatetime == netlink->currenttime) { return FALSE; } else { if (netlink->changequeue != NULL) { change = mmgui_netlink_create_connection_change(netlink, MMGUI_NETLINK_CONNECTION_EVENT_REMOVE, connection->inode); if (change != NULL) { g_async_queue_push(netlink->changequeue, change); } } g_debug("Connection removed: inode %u\n", connection->inode); return TRUE; } } gboolean mmgui_netlink_request_connections_list(mmgui_netlink_t netlink, guint family) { struct _mmgui_netlink_connection_info_request request; gint status; if ((netlink == NULL) || ((family != AF_INET) && (family != AF_INET6))) return FALSE; memset(&request.msgheader, 0, sizeof(struct nlmsghdr)); request.msgheader.nlmsg_len = sizeof(struct _mmgui_netlink_connection_info_request); request.msgheader.nlmsg_type = TCPDIAG_GETSOCK; request.msgheader.nlmsg_flags = NLM_F_REQUEST | NLM_F_ROOT; request.msgheader.nlmsg_pid = ((1 & 0xffc00000) << 22) | (getpid() & 0x3fffff); request.msgheader.nlmsg_seq = 0; memset(&request.nlreq, 0, sizeof(struct inet_diag_req)); request.nlreq.idiag_family = family; request.nlreq.idiag_states = ((1 << (TCP_CLOSING + 1)) - 1); request.msgheader.nlmsg_len = NLMSG_ALIGN(request.msgheader.nlmsg_len); status = send(netlink->connsocketfd, &request, request.msgheader.nlmsg_len, 0); if (status != -1) { return TRUE; } else { return FALSE; } } gboolean mmgui_netlink_read_connections_list(mmgui_netlink_t netlink, gchar *data, gsize datasize) { struct nlmsghdr *msgheader; struct inet_diag_msg *entry; mmgui_netlink_connection_t connection; mmgui_netlink_connection_change_t change; /*struct hostent *dsthost;*/ gchar srcbuf[INET6_ADDRSTRLEN]; gchar dstbuf[INET6_ADDRSTRLEN]; gchar appname[1024]; pid_t apppid; gboolean needupdate; if ((netlink == NULL) || (data == NULL) || (datasize == 0)) return FALSE; //Get current time netlink->currenttime = time(NULL); //Work with data for (msgheader = (struct nlmsghdr *)data; NLMSG_OK(msgheader, (unsigned int)datasize); msgheader = NLMSG_NEXT(msgheader, datasize)) { if ((msgheader->nlmsg_type == NLMSG_ERROR) || (msgheader->nlmsg_type == NLMSG_DONE)) { break; } //New connections list if (msgheader->nlmsg_type == TCPDIAG_GETSOCK) { entry = (struct inet_diag_msg *)NLMSG_DATA(msgheader); if (entry != NULL) { if ((entry->idiag_uid == netlink->userid) || (netlink->userid == 0)) { if (!g_hash_table_contains(netlink->connections, (gconstpointer)&entry->idiag_inode)) { //Add new connection if (mmgui_netlink_get_process(entry->idiag_inode, appname, sizeof(appname), &apppid)) { connection = g_new(struct _mmgui_netlink_connection, 1); connection->inode = entry->idiag_inode; connection->family = entry->idiag_family; connection->userid = entry->idiag_uid; connection->updatetime = netlink->currenttime; connection->dqueue = entry->idiag_rqueue + entry->idiag_wqueue; connection->state = entry->idiag_state; connection->srcport = ntohs(entry->id.idiag_sport); g_snprintf(connection->srcaddr, sizeof(connection->srcaddr), "%s:%u", inet_ntop(entry->idiag_family, entry->id.idiag_src, srcbuf, INET6_ADDRSTRLEN), ntohs(entry->id.idiag_sport)); g_snprintf(connection->dstaddr, sizeof(connection->dstaddr), "%s:%u", inet_ntop(entry->idiag_family, entry->id.idiag_dst, dstbuf, INET6_ADDRSTRLEN), ntohs(entry->id.idiag_dport)); connection->appname = g_strdup(appname); connection->apppid = apppid; connection->dsthostname = NULL; /*dsthost = gethostbyaddr(entry->id.idiag_dst, sizeof(entry->id.idiag_dst), entry->idiag_family); if (dsthost != NULL) { connection->dsthostname = g_strdup(dsthost->h_name); } else {*/ connection->dsthostname = g_strdup(connection->dstaddr); /*}*/ g_hash_table_insert(netlink->connections, (gpointer)&connection->inode, connection); /*Add change*/ if (netlink->changequeue != NULL) { change = mmgui_netlink_create_connection_change(netlink, MMGUI_NETLINK_CONNECTION_EVENT_ADD, connection->inode); if (change != NULL) { g_async_queue_push(netlink->changequeue, change); } } g_debug("Connection added: inode %u\n", entry->idiag_inode); } } else { //Update connection information (state, buffers fill, time) connection = g_hash_table_lookup(netlink->connections, (gconstpointer)&entry->idiag_inode); if (connection != NULL) { connection->updatetime = netlink->currenttime; needupdate = FALSE; if (connection->dqueue != (entry->idiag_rqueue + entry->idiag_wqueue)) { connection->dqueue = entry->idiag_rqueue + entry->idiag_wqueue; needupdate = TRUE; } if (connection->state != entry->idiag_state) { connection->state = entry->idiag_state; needupdate = TRUE; } if (needupdate) { if (netlink->changequeue != NULL) { change = mmgui_netlink_create_connection_change(netlink, MMGUI_NETLINK_CONNECTION_EVENT_MODIFY, connection->inode); if (change != NULL) { g_async_queue_push(netlink->changequeue, change); } } g_debug("Connection updated: inode %u\n", entry->idiag_inode); } } } } } } } //Remove connections that disappear g_hash_table_foreach_remove(netlink->connections, mmgui_netlink_hash_clear_foreach, netlink); return TRUE; } gboolean mmgui_netlink_request_interface_statistics(mmgui_netlink_t netlink, gchar *interface) { struct _mmgui_netlink_interface_info_request request; guint ifindex; gint status; if ((netlink == NULL) || (interface == NULL)) return FALSE; if ((netlink->intsocketfd == -1) || (interface[0] == '\0')) return FALSE; ifindex = if_nametoindex(interface); if ((ifindex == 0) && (errno == ENXIO)) return FALSE; memset(&request, 0, sizeof(request)); request.msgheader.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)); request.msgheader.nlmsg_type = RTM_GETLINK; request.msgheader.nlmsg_flags = NLM_F_REQUEST; request.msgheader.nlmsg_seq = MMGUI_NETLINK_INTERNAL_SEQUENCE_NUMBER; request.msgheader.nlmsg_pid = ((2 & 0xffc00000) << 22) | (getpid() & 0x3fffff); request.ifinfo.ifi_family = AF_UNSPEC; request.ifinfo.ifi_index = ifindex; request.ifinfo.ifi_type = 0; request.ifinfo.ifi_flags = 0; request.ifinfo.ifi_change = 0xFFFFFFFF; request.msgheader.nlmsg_len = NLMSG_ALIGN(request.msgheader.nlmsg_len); status = send(netlink->intsocketfd, &request, request.msgheader.nlmsg_len, 0); if (status != -1) { return TRUE; } else { return FALSE; } } gboolean mmgui_netlink_read_interface_event(mmgui_netlink_t netlink, gchar *data, gsize datasize, mmgui_netlink_interface_event_t event) { struct nlmsghdr *msgheader; struct ifinfomsg *ifi; struct rtattr *rta; struct rtnl_link_stats *ifstats; struct rtnl_link_stats64 *ifstats64; gchar ifname[IFNAMSIZ]; gboolean have64bitstats; if ((netlink == NULL) || (data == NULL) || (datasize == 0) || (event == NULL)) return FALSE; //Work with data for (msgheader = (struct nlmsghdr *)data; NLMSG_OK(msgheader, (unsigned int)datasize); msgheader = NLMSG_NEXT(msgheader, datasize)) { if ((msgheader->nlmsg_type == NLMSG_ERROR) || (msgheader->nlmsg_type == NLMSG_DONE)) { break; } //New event if ((msgheader->nlmsg_type == RTM_NEWLINK) || (msgheader->nlmsg_type == RTM_DELLINK) || (msgheader->nlmsg_type == RTM_GETLINK)) { ifi = NLMSG_DATA(msgheader); rta = IFLA_RTA(ifi); //Copy valuable data first event->running = (ifi->ifi_flags & IFF_RUNNING); event->up = (ifi->ifi_flags & IFF_UP); if (if_indextoname(ifi->ifi_index, ifname) != NULL) { strncpy(event->ifname, ifname, sizeof(event->ifname)); } event->type = MMGUI_NETLINK_INTERFACE_EVENT_TYPE_UNKNOWN; //Detrmine type of event if (msgheader->nlmsg_seq == MMGUI_NETLINK_INTERNAL_SEQUENCE_NUMBER) { event->type = MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS; } else { if (msgheader->nlmsg_type == RTM_NEWLINK) { event->type = MMGUI_NETLINK_INTERFACE_EVENT_TYPE_ADD; g_debug("[%u] New interface state: Running: %s, Up: %s, Name: %s\n", msgheader->nlmsg_seq, (ifi->ifi_flags & IFF_RUNNING) ? "Yes" : "No", (ifi->ifi_flags & IFF_UP) ? "Yes" : "No", if_indextoname(ifi->ifi_index, ifname)); } else if (msgheader->nlmsg_type == RTM_DELLINK) { event->type = MMGUI_NETLINK_INTERFACE_EVENT_TYPE_REMOVE; g_debug("[%u] Deleted interface state: Running: %s, Up: %s, Name: %s\n", msgheader->nlmsg_seq, (ifi->ifi_flags & IFF_RUNNING) ? "Yes" : "No", (ifi->ifi_flags & IFF_UP) ? "Yes" : "No", if_indextoname(ifi->ifi_index, ifname)); } else if (msgheader->nlmsg_type == RTM_GETLINK) { event->type = MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS; g_debug("[%u] Requested interface state: Running: %s, Up: %s, Name: %s\n", msgheader->nlmsg_seq, (ifi->ifi_flags & IFF_RUNNING) ? "Yes" : "No", (ifi->ifi_flags & IFF_UP) ? "Yes" : "No", if_indextoname(ifi->ifi_index, ifname)); } } //If 64bit traffic statistics values are not available, 32bit values will be used anyway have64bitstats = FALSE; //Use tags to get additional data while (RTA_OK(rta, msgheader->nlmsg_len)) { if (rta->rta_type == IFLA_IFNAME) { strncpy(event->ifname, (char *)RTA_DATA(rta), sizeof(event->ifname)); g_debug("Tag: Device name: %s\n", (char *)RTA_DATA(rta)); } else if (rta->rta_type == IFLA_STATS) { ifstats = (struct rtnl_link_stats *)RTA_DATA(rta); if (!have64bitstats) { event->rxbytes = ifstats->rx_bytes; event->txbytes = ifstats->tx_bytes; if (!(event->type & MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS)) { event->type |= MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS; } } g_debug("Tag: Interface Statistics (32bit): RX: %u, TX: %u\n", ifstats->rx_bytes, ifstats->tx_bytes); } else if (rta->rta_type == IFLA_STATS64) { ifstats64 = (struct rtnl_link_stats64 *)RTA_DATA(rta); event->rxbytes = ifstats64->rx_bytes; event->txbytes = ifstats64->tx_bytes; have64bitstats = TRUE; if (!(event->type & MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS)) { event->type |= MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS; } g_debug("Tag: Interface Statistics (64bit): RX: %llu, TX: %llu\n", ifstats64->rx_bytes, ifstats64->tx_bytes); } else if (rta->rta_type == IFLA_LINK) { g_debug("Tag: Link type\n"); } else if (rta->rta_type == IFLA_ADDRESS) { g_debug("Tag: interface L2 address\n"); } else if (rta->rta_type == IFLA_UNSPEC) { g_debug("Tag: unspecified\n"); } else { g_debug("Tag: %u\n", rta->rta_type); } rta = RTA_NEXT(rta, msgheader->nlmsg_len); } } } return TRUE; } gint mmgui_netlink_get_connections_monitoring_socket_fd(mmgui_netlink_t netlink) { if (netlink == NULL) return -1; return netlink->connsocketfd; } gint mmgui_netlink_get_interfaces_monitoring_socket_fd(mmgui_netlink_t netlink) { if (netlink == NULL) return -1; return netlink->intsocketfd; } struct sockaddr_nl *mmgui_netlink_get_connections_monitoring_socket_address(mmgui_netlink_t netlink) { if (netlink == NULL) return NULL; return &(netlink->connaddr); } struct sockaddr_nl *mmgui_netlink_get_interfaces_monitoring_socket_address(mmgui_netlink_t netlink) { if (netlink == NULL) return NULL; return &(netlink->intaddr); } static mmgui_netlink_connection_change_t mmgui_netlink_create_connection_change(mmgui_netlink_t netlink, guint event, guint inode) { mmgui_netlink_connection_change_t change; mmgui_netlink_connection_t connection; if (netlink == NULL) return NULL; change = NULL; switch (event) { case MMGUI_NETLINK_CONNECTION_EVENT_ADD: connection = g_hash_table_lookup(netlink->connections, &inode); if (connection != NULL) { change = g_new0(struct _mmgui_netlink_connection_change, 1); change->inode = inode; change->event = event; change->data.connection = g_new0(struct _mmgui_netlink_connection, 1); change->data.connection->state = connection->state; change->data.connection->family = connection->family; change->data.connection->srcport = connection->srcport; change->data.connection->dqueue = connection->dqueue; change->data.connection->inode = connection->inode; change->data.connection->userid = connection->userid; change->data.connection->apppid = connection->apppid; change->data.connection->appname = g_strdup(connection->appname); change->data.connection->dsthostname = g_strdup(connection->dsthostname); strncpy(change->data.connection->srcaddr, connection->srcaddr, sizeof(change->data.connection->srcaddr)); strncpy(change->data.connection->dstaddr, connection->dstaddr, sizeof(change->data.connection->dstaddr)); } break; case MMGUI_NETLINK_CONNECTION_EVENT_REMOVE: change = g_new0(struct _mmgui_netlink_connection_change, 1); change->inode = inode; change->event = event; change->data.connection = NULL; break; case MMGUI_NETLINK_CONNECTION_EVENT_MODIFY: connection = g_hash_table_lookup(netlink->connections, &inode); if (connection != NULL) { change = g_new0(struct _mmgui_netlink_connection_change, 1); change->inode = inode; change->event = event; change->data.params = g_new0(struct _mmgui_netlink_connection_changed_params, 1); change->data.params->state = connection->state; change->data.params->dqueue = connection->dqueue; } break; default: break; } return change; } void mmgui_netlink_free_connection_change(mmgui_netlink_connection_change_t change) { if (change == NULL) return; switch (change->event) { case MMGUI_NETLINK_CONNECTION_EVENT_ADD: if (change->data.connection != NULL) { if (change->data.connection->appname != NULL) { g_free(change->data.connection->appname); } if (change->data.connection->dsthostname != NULL) { g_free(change->data.connection->dsthostname); } g_free(change->data.connection); } g_free(change); break; case MMGUI_NETLINK_CONNECTION_EVENT_REMOVE: g_free(change); break; case MMGUI_NETLINK_CONNECTION_EVENT_MODIFY: if (change->data.params != NULL) { g_free(change->data.params); } g_free(change); break; default: break; } } void mmgui_netlink_free_connection(mmgui_netlink_connection_t connection) { if (connection == NULL) return; if (connection->appname != NULL) { g_free(connection->appname); } if (connection->dsthostname != NULL) { g_free(connection->dsthostname); } g_free(connection); } GSList *mmgui_netlink_open_interactive_connections_list(mmgui_netlink_t netlink) { GSList *connections; GHashTableIter iter; gpointer key, value; mmgui_netlink_connection_t srcconn, dstconn; if (netlink == NULL) return NULL; connections = NULL; g_hash_table_iter_init(&iter, netlink->connections); while (g_hash_table_iter_next(&iter, &key, &value)) { srcconn = (mmgui_netlink_connection_t)value; if (srcconn != NULL) { dstconn = g_new(struct _mmgui_netlink_connection, 1); dstconn->inode = srcconn->inode; dstconn->family = srcconn->family; dstconn->userid = srcconn->userid; dstconn->updatetime = srcconn->updatetime; dstconn->dqueue = srcconn->dqueue; dstconn->state = srcconn->state; dstconn->srcport = srcconn->srcport; strncpy(dstconn->srcaddr, srcconn->srcaddr, sizeof(dstconn->srcaddr)); strncpy(dstconn->dstaddr, srcconn->dstaddr, sizeof(dstconn->dstaddr)); dstconn->appname = g_strdup(srcconn->appname); dstconn->apppid = srcconn->apppid; dstconn->dsthostname = g_strdup(srcconn->dsthostname); connections = g_slist_prepend(connections, dstconn); } } if (connections != NULL) { connections = g_slist_reverse(connections); } if (netlink->changequeue == NULL) { netlink->changequeue = g_async_queue_new_full((GDestroyNotify)mmgui_netlink_free_connection_change); } return connections; } void mmgui_netlink_close_interactive_connections_list(mmgui_netlink_t netlink) { if (netlink->changequeue != NULL) { g_async_queue_unref(netlink->changequeue); netlink->changequeue = NULL; } } GSList *mmgui_netlink_get_connections_changes(mmgui_netlink_t netlink) { GSList *changes; mmgui_netlink_connection_change_t change; if (netlink->changequeue == NULL) return NULL; changes = NULL; while ((change = g_async_queue_try_pop(netlink->changequeue)) != NULL) { changes = g_slist_prepend(changes, change); } if (changes != NULL) { changes = g_slist_reverse(changes); } return changes; } void mmgui_netlink_close(mmgui_netlink_t netlink) { if (netlink == NULL) return; if (netlink->connsocketfd != -1) { close(netlink->connsocketfd); g_hash_table_destroy(netlink->connections); if (netlink->changequeue != NULL) { g_async_queue_unref(netlink->changequeue); } } if (netlink->intsocketfd != -1) { close(netlink->intsocketfd); } g_free(netlink); } mmgui_netlink_t mmgui_netlink_open(void) { mmgui_netlink_t netlink; netlink = g_new(struct _mmgui_netlink, 1); #ifndef NETLINK_SOCK_DIAG netlink->connsocketfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG); #else netlink->connsocketfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG); #endif if (netlink->connsocketfd != -1) { memset(&netlink->connaddr, 0, sizeof(struct sockaddr_nl)); netlink->connaddr.nl_family = AF_NETLINK; netlink->connaddr.nl_pid = ((1 & 0xffc00000) << 22) | (getpid() & 0x3fffff); netlink->connaddr.nl_groups = 0; netlink->userid = getuid(); netlink->changequeue = NULL; netlink->connections = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, (GDestroyNotify)mmgui_netlink_hash_destroy); } else { netlink->connections = NULL; g_debug("Failed to open connections monitoring netlink socket\n"); } netlink->intsocketfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (netlink->intsocketfd != -1) { memset(&netlink->intaddr, 0, sizeof(netlink->intaddr)); netlink->intaddr.nl_family = AF_NETLINK; netlink->intaddr.nl_groups = RTMGRP_LINK; netlink->intaddr.nl_pid = ((2 & 0xffc00000) << 22) | (getpid() & 0x3fffff); if (bind(netlink->intsocketfd, (struct sockaddr *)&(netlink->intaddr), sizeof(netlink->intaddr)) == -1) { g_debug("Failed to bind network interfaces monitoring netlink socket\n"); close(netlink->intsocketfd); netlink->intsocketfd = -1; } } else { g_debug("Failed to open network interfaces monitoring netlink socket\n"); } return netlink; } modem-manager-gui-0.0.19.1/polkit/its/polkit.loc000664 001750 001750 00000000367 13261703575 021302 0ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/ru.linuxonly.modem-manager-gui.policy.pot000664 001750 001750 00000001770 13261703575 026503 0ustar00alexalex000000 000000 msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "Enable and start modem management services" msgstr "" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:12 msgid "Modem management services aren't running. You need to authenticate to enable and start these services." msgstr "" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "Use modem management service" msgstr "" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:23 msgid "Modem management service needs your credentials. You need to authenticate to use this service." msgstr "" modem-manager-gui-0.0.19.1/man/ar/000775 001750 001750 00000000000 13261703575 016347 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/index.page000664 001750 001750 00000003517 13261703575 020257 0ustar00alexalex000000 000000 Help for Modem Manager GUI. <media type="image" src="figures/gnome-hello-logo.png"/> Modem Manager GUI Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

<media type="image" src="figures/modem-manager-gui-logo.png">GNOME Hello logo</media>Modem Manager GUI manual

Modem Manager GUI is a graphical frontend for the ModemManager daemon which is able to control specific modem functions.

You can use Modem Manager GUI for the following tasks:

Create and control mobile broadband connections

Send and receive SMS messages and store messages in database

Initiate USSD requests and read answers (also using interactive sessions)

View device information: operator name, device mode, IMEI, IMSI, signal level

Scan available mobile networks

View mobile traffic statistics and set limits

Usage
Contribute to the project
modem-manager-gui-0.0.19.1/packages/debian/changelog000664 001750 001750 00000000217 13261745303 022037 0ustar00alexalex000000 000000 modem-manager-gui (0.0.19.1-1) bionic; urgency=low * Version 0.0.19.1 release -- Alex Fri, 6 Apr 2018 22:30:00 +0300 modem-manager-gui-0.0.19.1/src/modules/historyshm.h000664 001750 001750 00000004630 13261703575 022016 0ustar00alexalex000000 000000 /* * historyshm.h * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __HISTORYSHM_H__ #define __HISTORYSHM_H__ #include #include #define MMGUI_HISTORY_SHM_DB_PATH "/var/lib/modem-manager-gui/" #define MMGUI_HISTORY_SHM_DB_FILE "/var/lib/modem-manager-gui/history.db" #define MMGUI_HISTORY_SHM_DB_PERM 0755 #define MMGUI_HISTORY_SHM_SEGMENT_NAME "mmgui_%s" #define MMGUI_HISTORY_SHM_SEGMENT_PERM 0777 /*Shm flags*/ enum _mmgui_history_shm_flags { MMGUI_HISTORY_SHM_FLAGS_NONE = 0x00, MMGUI_HISTORY_SHM_FLAGS_SYNC = 0x01 }; /*Shm structure*/ struct _mmgui_history_shm { /*Driver flags (syncronized)*/ gint flags; /*Current device identifier*/ gint identifier; /*Synchronization timesatamp*/ guint64 synctime; }; typedef struct _mmgui_history_shm *mmgui_history_shm_t; struct _mmgui_history_shm_client { /*Database*/ GDBM_FILE db; /*Current device*/ gchar *drivername; gboolean devopened; /*Memory segment*/ gint shmid; mmgui_history_shm_t shmaddr; }; typedef struct _mmgui_history_shm_client *mmgui_history_shm_client_t; mmgui_history_shm_client_t mmgui_history_client_new(void); void mmgui_history_client_close(mmgui_history_shm_client_t client); gboolean mmgui_history_client_open_device(mmgui_history_shm_client_t client, const gchar *devpath); gboolean mmgui_history_client_close_device(mmgui_history_shm_client_t client); GSList *mmgui_history_client_enum_messages(mmgui_history_shm_client_t client); /*General purpose functions*/ guint64 mmgui_history_get_driver_from_key(const gchar *key, const gsize keylen, gchar *buf, gsize buflen); gchar *mmgui_history_parse_driver_string(const gchar *path, gint *identifier); #endif /* __HISTORYSHM_H__ */ modem-manager-gui-0.0.19.1/src/modules/historyshm.c000664 001750 001750 00000024211 13261703575 022006 0ustar00alexalex000000 000000 /* * historyshm.c * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "historyshm.h" #include "../smsdb.h" #include "../encoding.h" enum _mmgui_history_shm_client_xml_elements { MMGUI_HISTORY_SHM_XML_PARAM_LOCALTIME = 0, MMGUI_HISTORY_SHM_XML_PARAM_REMOTETIME, MMGUI_HISTORY_SHM_XML_PARAM_DRIVER, MMGUI_HISTORY_SHM_XML_PARAM_SENDER, MMGUI_HISTORY_SHM_XML_PARAM_TEXT, MMGUI_HISTORY_SHM_XML_PARAM_NULL }; static gint mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_NULL; static mmgui_sms_message_t mmgui_history_client_xml_parse(gchar *xml, gsize size); static void mmgui_history_client_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); static void mmgui_history_client_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error); static void mmgui_history_client_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error); mmgui_history_shm_client_t mmgui_history_client_new(void) { GDBM_FILE db; mmgui_history_shm_client_t client; db = gdbm_open(MMGUI_HISTORY_SHM_DB_FILE, 0, GDBM_READER|GDBM_NOLOCK, MMGUI_HISTORY_SHM_DB_PERM, 0); if (db == NULL) return NULL; client = (mmgui_history_shm_client_t)g_new0(struct _mmgui_history_shm_client, 1); client->db = db; return client; } void mmgui_history_client_close(mmgui_history_shm_client_t client) { if (client == NULL) return; if (client->db != NULL) { gdbm_close(client->db); } } gboolean mmgui_history_client_open_device(mmgui_history_shm_client_t client, const gchar *devpath) { gchar *drivername; gint identifier; gchar shmname[64]; if ((client == NULL) || (devpath == NULL)) return FALSE; if (client->devopened) return FALSE; /*Driver name and identifier*/ drivername = mmgui_history_parse_driver_string(devpath, &identifier); if (drivername == NULL) return FALSE; /*Shared memory segment name*/ memset(shmname, 0, sizeof(shmname)); snprintf(shmname, sizeof(shmname), MMGUI_HISTORY_SHM_SEGMENT_NAME, drivername); /*Shared memory object*/ client->shmid = shm_open(shmname, O_RDWR, 0); if (client->shmid == -1) { client->devopened = FALSE; client->shmaddr = NULL; g_free(drivername); return FALSE; } /*Map shared memory fragment*/ client->shmaddr = (mmgui_history_shm_t)mmap(0, sizeof(struct _mmgui_history_shm), PROT_WRITE|PROT_READ, MAP_SHARED, client->shmid, 0); if ((char *)client->shmaddr == (char*)-1) { client->devopened = FALSE; client->shmaddr = NULL; close(client->shmid); g_free(drivername); return FALSE; } /*Set device identifier*/ client->shmaddr->identifier = identifier; client->drivername = drivername; /*Device opened*/ client->devopened = TRUE; return TRUE; } gboolean mmgui_history_client_close_device(mmgui_history_shm_client_t client) { if (client == NULL) return FALSE; if (!client->devopened) return FALSE; /*Drop device identifier*/ client->shmaddr->identifier = -1; /*Remove shared memory segment*/ if (client->shmaddr != NULL) { /*Remove memory segment*/ munmap(client->shmaddr, sizeof(struct _mmgui_history_shm)); close(client->shmid); } if (client->drivername != NULL) { g_free(client->drivername); } /*Device closed*/ client->devopened = FALSE; return TRUE; } GSList *mmgui_history_client_enum_messages(mmgui_history_shm_client_t client) { GSList *messages; mmgui_sms_message_t message; datum key, data; gchar drvstr[128]; guint64 localts, maxts; if (client == NULL) return NULL; if ((!client->devopened) || (client->db == NULL) || (client->shmaddr == NULL) || (client->drivername == NULL)) return NULL; messages = NULL; maxts = 0; key = gdbm_firstkey(client->db); if (key.dptr != NULL) { do { localts = mmgui_history_get_driver_from_key(key.dptr, key.dsize, (gchar *)&drvstr, sizeof(drvstr)); if (localts != 0) { if ((g_str_equal(drvstr, client->drivername)) && ((client->shmaddr->synctime == 0) || ((client->shmaddr->synctime != 0) && (localts > client->shmaddr->synctime)))) { data = gdbm_fetch(client->db, key); if (data.dptr != NULL) { message = mmgui_history_client_xml_parse(data.dptr, data.dsize); if (message != NULL) { messages = g_slist_prepend(messages, message); if (localts > maxts) { maxts = localts; } } } } } key = gdbm_nextkey(client->db, key); } while (key.dptr != NULL); } /*Maximum timestamp for next synchronizations*/ if (messages != NULL) { client->shmaddr->synctime = maxts; } /*Set synchronized*/ client->shmaddr->flags |= MMGUI_HISTORY_SHM_FLAGS_SYNC; return messages; } static mmgui_sms_message_t mmgui_history_client_xml_parse(gchar *xml, gsize size) { mmgui_sms_message_t message; GMarkupParser mp; GMarkupParseContext *mpc; GError *error = NULL; message = mmgui_smsdb_message_create(); mp.start_element = mmgui_history_client_xml_get_element; mp.end_element = mmgui_history_client_xml_end_element; mp.text = mmgui_history_client_xml_get_value; mp.passthrough = NULL; mp.error = NULL; mpc = g_markup_parse_context_new(&mp, 0, (gpointer)message, NULL); g_markup_parse_context_parse(mpc, xml, size, &error); if (error != NULL) { g_debug("Error parsing XML: %s", error->message); g_error_free(error); g_markup_parse_context_free(mpc); mmgui_smsdb_message_free(message); return NULL; } g_markup_parse_context_free(mpc); return message; } static void mmgui_history_client_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { if (g_str_equal(element, "localtime")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_LOCALTIME; } else if (g_str_equal(element, "remotetime")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_REMOTETIME; } else if (g_str_equal(element, "driver")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_DRIVER; } else if (g_str_equal(element, "sender")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_SENDER; } else if (g_str_equal(element, "text")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_TEXT; } else { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_NULL; } } static void mmgui_history_client_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error) { mmgui_sms_message_t message; time_t timestamp; gchar *escstr; message = (mmgui_sms_message_t)data; if (mmgui_history_shm_client_xml_parameter == MMGUI_HISTORY_SHM_XML_PARAM_NULL) return; switch (mmgui_history_shm_client_xml_parameter) { case MMGUI_HISTORY_SHM_XML_PARAM_LOCALTIME: timestamp = (time_t)atol(text); mmgui_smsdb_message_set_timestamp(message, timestamp); break; case MMGUI_HISTORY_SHM_XML_PARAM_REMOTETIME: //not needed now break; case MMGUI_HISTORY_SHM_XML_PARAM_DRIVER: //not needed now break; case MMGUI_HISTORY_SHM_XML_PARAM_SENDER: escstr = encoding_unescape_xml_markup(text, size); if (escstr != NULL) { mmgui_smsdb_message_set_number(message, (const gchar *)escstr); g_free(escstr); } else { mmgui_smsdb_message_set_number(message, text); } break; case MMGUI_HISTORY_SHM_XML_PARAM_TEXT: escstr = encoding_unescape_xml_markup(text, size); if (escstr != NULL) { mmgui_smsdb_message_set_text(message, (const gchar *)escstr, FALSE); g_free(escstr); } else { mmgui_smsdb_message_set_text(message, text, FALSE); } break; default: break; } } static void mmgui_history_client_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error) { if (!g_str_equal(element, "message")) { mmgui_history_shm_client_xml_parameter = MMGUI_HISTORY_SHM_XML_PARAM_NULL; } } guint64 mmgui_history_get_driver_from_key(const gchar *key, const gsize keylen, gchar *buf, gsize buflen) { gchar *drvstr, *timestr; gsize drvlen; guint64 localts; if ((key == NULL) || (keylen == 0) || (buf == NULL) || (buflen == 0)) return 0; drvstr = strchr(key, '@'); if (drvstr == NULL) return 0; timestr = strchr(drvstr+1, '@'); if (timestr == NULL) return 0; drvlen = timestr - drvstr - 1; if (drvlen > buflen) { drvlen = buflen; } localts = atol(timestr+1); memset(buf, 0, buflen); if (strncpy(buf, drvstr+1, drvlen) != NULL) { return localts; } else { return 0; } } gchar *mmgui_history_parse_driver_string(const gchar *path, gint *identifier) { gsize pathlen, driverlen; guint idpos; gchar *drivername; if (path == NULL) return NULL; if ((path[0] != '/') || (strchr(path+1, '_') == NULL)) return NULL; pathlen = strlen(path); driverlen = 0; /*Find delimiter (driver string is in format: /driver_identifier)*/ for (idpos=pathlen; idpos>0; idpos--) { if (path[idpos] == '_') { driverlen = idpos-1; } } if (driverlen > 0) { /*Allocate driver name buffer and copy name*/ drivername = g_try_malloc0(driverlen+1); if (drivername != NULL) { memcpy(drivername, path+1, driverlen); /*Return identifier if needed*/ if (identifier != NULL) { *identifier = atoi(path+idpos+1); } } return drivername; } return NULL; } modem-manager-gui-0.0.19.1/po/de.po000664 001750 001750 00000134716 13261704735 016553 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Mario Blättermann , 2013,2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: German (http://www.transifex.com/ethereal/modem-manager-gui/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Ungelesene SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Ungelesene Nachrichten" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Verbindung" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Fehler beim Hinzufügen des Kontakts" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Kontakt entfernen" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Möchten Sie diesen Kontakt wirklich entfernen?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Fehler beim Entfernen des Kontakts" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Kontakt wurde nicht vom Gerät entfernt" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Kein Kontakt ausgewählt" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Modem-Kontakte" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME-Kontakte" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE-Kontakte" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Vorname" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Erste Nummer" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "E-Mail" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Gruppe" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Zweiter Name" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Zweite Nummer" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Fehler beim Öffnen des Geräts" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersion:%s Port:%s Typ:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Ausgewählt" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Gerät" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Aktivieren" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Nicht unterstützt" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Fehler bei der Initialisierung" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Systemdienste können ohne korrekte Anmeldedaten nicht gestartet werden" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Kommunikation mit verfügbaren Systemdiensten ist nicht möglich" #: ../src/main.c:506 msgid "Success" msgstr "Erfolgreich" #: ../src/main.c:511 msgid "Failed" msgstr "Fehlgeschlagen" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Zeitüberschreitung" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Stoppen" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Gerät wird aktiviert …" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Keine Geräte im System gefunden" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Das Modem ist nicht betriebsbereit. Bitte warten Sie, während das Modem vorbereitet wird …" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Das Modem muss aktiviert werden, um SMS lesen und schreiben zu können. Bitte aktivieren Sie das Modem." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Das Modem muss im Mobilfunknetzwerk registriert sein, um SMS empfangen und senden zu können. Bitte warten …" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Das Modem muss entsperrt werden, um SMS senden und empfangen zu können. Bitte PIN eingeben." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "ModemManager unterstützt die Änderung von SMS-Funktionen nicht." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "ModemManager unterstützt das Senden von SMS-Nachrichten nicht." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Das Modem muss aktiviert werden, um USSD-Codes senden zu können. Bitte Modem aktivieren." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Das Modem muss im Mobilfunknetzwerk registriert sein, um USSD-Codes senden zu können. Bitte warten …" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Das Modem muss entsperrt werden, um USSD-Codes senden zu können. Bitte PIN eingeben." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "ModemManager unterstützt das Senden von USSD-Codes nicht." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Das Modem muss aktiviert werden, um nach verfügbaren Mobilfunknetzwerken zu suchen. Bitte aktivieren Sie das Modem." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Das Modem muss entsperrt werden, um nach verfügbaren Mobilfunknetzwerken zu suchen. Bitte geben Sie den PIN-Code ein." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "ModemManager unterstützt die Suche nach verfügbaren Mobilfunknetzen nicht." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Das Modem ist nun verbunden. Bitte trennen Sie es, um nach Modems zu suchen." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Das Modem muss aktiviert werden, um Kontakte daraus zu exportieren. Bitte aktivieren Sie das Modem." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Das Modem muss entsperrt werden, um Kontakte daraus zu exportieren. Bitte geben Sie den PIN-Code ein." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "ModemManager unterstützt die Änderung von Modem-Kontakten nicht." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "ModemManager unterstützt die Bearbeitung von Modem-Kontakten nicht." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Geräte" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Info" #: ../src/main.c:1600 msgid "S_can" msgstr "Su_chen" #: ../src/main.c:1605 msgid "_Traffic" msgstr "Ne_tzwerkverkehr" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "K_ontakte" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Fenster von Modem Manager GUI ist verborgen" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Symbol im Benachrichtigungsfeld verwenden, um das Fenster wieder anzuzeigen" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Fehler beim Anzeigen der Hilfe" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "Verbindung zu %s getrennt" #: ../src/main.c:2056 msgid "Show window" msgstr "Fenster anzeigen" #: ../src/main.c:2062 msgid "New SMS" msgstr "Neue SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Beenden" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Beenden" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Aktionen" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Einstellungen" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Bearbeiten" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Hilfe" #: ../src/main.c:2697 msgid "_About" msgstr "_Info" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Einstellungen" #: ../src/main.c:2714 msgid "Help" msgstr "Hilfe" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Info" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "MMGUI-Module konnten nicht gefunden werden. Bitte überprüfen Sie, ob die Anwendung korrekt installiert wurde." #: ../src/main.c:2820 msgid "Interface building error" msgstr "Fehler beim Erstellen der Benutzeroberfläche" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Module zur Modemverwaltung:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modul" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Beschreibung" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Module zur Verbindungsverwaltung:\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Speicherzugriffsfehler bei Adresse: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Stack Trace:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Beim Start kein Fenster öffnen" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Angegebenes Modul zur Modemverwaltung verwenden" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Angegebenes Modul zur Verbindungsverwaltung verwenden" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Alle verfügbaren Module auflisten und beenden" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- Werkzeug zur Steuerung spezifischer Funktionen von EDGE/3G/4G-Modems" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Verarbeiten der Befehlszeilenoption fehlgeschlagen: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Nicht definiert" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Netzwerke werden durchsucht …" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Gerätefehler" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Verfügbarkeit: %s Zugriffstechnologie: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Fehler bei der Suche nach Netzwerken" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Netzanbieter" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u neue SMS-Nachrichten erhalten" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Neue SMS-Nachricht erhalten" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Absender:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "SMS-Nummer ist ungültig\nEs können nur Nummern mit 2 bis 20 Stellen\nohne Buchstaben und Symbole verwendet werden" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "SMS-Text ist ungültig\nBitte geben Sie den zu sendenden Text ein" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "SMS wird an »%s« gesendet …" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Falsche Nummer oder Gerät nicht betriebsbereit" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "SMS wird gespeichert …" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Wollen Sie die Nachrichten wirklich entfernen (%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Nachrichten entfernen" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Einige Nachrichten wurden nicht entfernt (%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Eingang" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Dies ist der Ordner für Ihre eingehenden SMS-Nachrichten.\nSie können auf die ausgewählte Nachricht antworten, indem Sie auf »Antworten« klicken." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Gesendet" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Dies ist der Ordner für Ihre gesendeten SMS-Nachrichten." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Entwürfe" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Dies ist der Ordner für Ihre SMS-Nachrichtenentwürfe.\nWählen Sie die zu bearbeitende Nachricht aus und klicken Sie auf »Antworten«." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Eingang\nEingegangene Nachrichten" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Gesendet\nGesendete Nachrichten" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Entwürfe\nNachrichtenentwürfe" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Deaktviert" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbit/s" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbit/s" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbit/s" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbit/s" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbit/s" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbit/s" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u s" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u s" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g kbit" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g kbit" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mbit" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mbit" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gbit" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gbit" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tbit" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tbit" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Heute, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Unbekannt" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Gestern, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d. %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Verfügbar" #: ../src/strformat.c:248 msgid "Current" msgstr "Aktuell" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Unzulässig" #: ../src/strformat.c:286 msgid "Not registered" msgstr "nicht angemeldet" #: ../src/strformat.c:288 msgid "Home network" msgstr "Heimnetzwerk" #: ../src/strformat.c:290 msgid "Searching" msgstr "Suchen" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Registrierung abgelehnt" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Unbekannter Status" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Roaming-Netzwerk" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f Minuten" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f Stunden" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f Tage" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f Wochen" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f s" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u min, %u s" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Vorgang abgebrochen" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Systemd-Zeitüberschreitung" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "Aktivieren des Dienstes ist fehlgeschlagen" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Der Dienst ist von einem bereits fehlgeschlagenen Dienst abhängig" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Dienst übersprungen" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Unbekannter Fehler" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Unbekannter Entitäts-Typ" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Tag" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Empfangene Daten" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Übertragene Daten" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Sitzungszeit" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Anwendung" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokoll" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Status" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Puffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Ziel" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Volumenbegrenzung überschritten" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Zeitbegrenzung überschritten" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Volumen: %s, begrenzt auf: %s\nZeit: %s, begrenzt auf: %s\nBitte eingegebene Werte überprüfen und erneut versuchen" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Ungültige Werte für Volumen- und Zeitbegrenzung" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Volumen: %s, begrenzt auf: %s\nBitte eingegebene Werte überprüfen und erneut versuchen" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Ungültiger Wert für Volumenbegrenzung" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Zeit: %s, begrenzt auf: %s\nBitte eingegebene Werte überprüfen und erneut versuchen" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Ungültiger Wert für Zeitbegrenzung" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Getrennt" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Limit" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Deaktiviert" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "Kbit/s" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "Sek" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "RX-Geschwindigkeit" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "TX-Geschwindigkeit" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parameter" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Wert" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Sitzung" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Empfangene Daten" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Übertragene Daten" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Empfangsgeschwindigkeit" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Übertragungsgeschwindigkeit" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Sitzungszeit" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Volumen verfügbar" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Restzeit" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Monat" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Gesamtzeit" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Jahr" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Volumenbegrenzung ist erreicht… Zeit für etwas Ruhe \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Zeitbegrenzung ist erreicht… Gute Nacht und schöne Träume -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Beispielbefehl" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "USSD-Code ist ungültig\nAnfrage ist auf 160 Zeichen begrenzt\nbeginnt mit * und endet mit #" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "USSD-Code %s wird gesendet …" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "USSD-Antwort %s wird gesendet …" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Fehler beim Senden des USSD-Codes" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Fehlerhafter USSD-Code oder Gerät nicht betriebsbereit" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "USSD-Sitzung abgebrochen. Sie können einen neuen Code senden." #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Ungültiger USSD-Code" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nUSSD-Sitzung ist aktiv. Auf Eingabe wird gewartet …\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nKeine Antwort empfangen …" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Befehl" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Jetzt starten!" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Dienst" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "S_chließen" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Aktivierung …" #: ../src/welcome-window.c:330 msgid "Success" msgstr "Erfolgreich" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Willkommen" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "Ungeachtet seines Namens unterstützt Modem Manager GUI verschiedene Backends. Bitte wählen Sie die Backends aus, die Sie verwenden wollen. Falls Sie nicht sicher sind, lassen Sie alles unverändert." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Modemverwaltung" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Verbindungsverwaltung" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Willkommen bei Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Dienste nach Aktivierung freischalten" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Dienste-Aktivierung" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI nutzt spezielle Systemdienste, um mit Modems und dem Netzwerk zu kommunizieren. Bitte warten Sie, bis alle erforderlichen Dienste aktiviert wurden." #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Verfügbare Geräte anzeigen und auswählen STRG+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Geräte" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "SMS-Nachrichten senden und empfangen STRG+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "USSD-Codes senden STRG+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Info zum aktiven Gerät anzeigen STRG+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Info" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Existierende Mobilfunknetze suchen STRG+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Suchen" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Netzwerkverkehr überwachen STRG+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Datenverkehr" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "System- und Modem-Adressbücher anzeigen STRG+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Kontakte" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Bearbeiten" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Neue SMS-Nachricht senden STRG+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Neu" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Ausgewählte Nachricht entfernen STRG+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Entfernen" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Ausgewählte Nachricht beantworten STRG+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Antworten" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Anfordern" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Senden" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "USSD-Code senden STRG+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "USSD-Codeliste bearbeiten STRG+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Ausrüstung" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Modus" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Signalstärke" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Netzanbieter-Code" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Registrierung" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Netzwerk" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "3GPP-Ortung\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Standort" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Verfügbare Mobilfunknetze suchen STRG+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Suche starten" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Verbindung erstellen" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Volumen- oder Zeitbegrenzung bis zur Trennung festlegen STRG+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Begrenzung setzen" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Liste der aktiven Netzwerkverbindungen anzeigen STRG+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Verbindungen" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Tägliche Übertragungsstatistiken anzeigen STRG+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statistiken" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Übertragungsgeschwindigkeit" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Neuen Kontakt zum Modem-Adressbuch hinzufügen STRG+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Neuer Kontakt" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Kontakt aus dem Modem-Adressbuch entfernen STRG+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Kontakt entfernen" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "SMS-Nachricht an ausgewählten Kontakt senden STRG+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "SMS verschicken" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Werkzeug zur Steuerung spezifischer Funktionen von EDGE/3G/4G-Modems" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Webseite" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Deutsch: Mario Blättermann " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Aktive Verbindungen" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Ausgewählte Anwendung mit dem SIGTERM-Signal beenden STRG+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Anwendung beenden" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Neue Breitbandverbindung hinzufügen" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Ausgewählte Verbindung entfernen" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Name" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Verbindung" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "Netzwerk-ID" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Zugangsnummer" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Benutzername" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Passwort" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Authentifizierung" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Fehler" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Später nachfragen" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Beenden oder minimieren?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Was soll beim Schließen des Anwendungsfensters geschehen?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Nur beenden" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Ins Benachrichtigungsfeld oder Nachrichtenmenü minimieren" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Neue SMS-Nachricht" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Speichern" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Nummer" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Ereignisklänge aktivieren" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Fenster beim Start in Kontrollleiste einbetten" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Fenstergeometrie und -platzierung speichern" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Programm zur Autostart-Liste hinzufügen" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Verhalten" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Verhalten" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Nachrichten verketten" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Ordner aufklappen" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Älteste Nachrichten zuerst" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Darstellung" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Gültigkeitsdauer" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Zustellungsbestätigung senden, falls möglich" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Nachrichtenparameter" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Graph-Farbe für RX-Geschwindigkeit" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Graph-Farbe für TX-Geschwindigkeit" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Datenverkehr" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Graphen" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Bevorzugte Backends" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Gerät aktivieren" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "SMS-Nachricht senden" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "USSD-Code senden" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Netzwerke suchen" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Module" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Frage" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Volumenbegrenzungen" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Zeitbegrenzung aktivieren" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mbit" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gbit" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tbit" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Nachricht" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Aktion" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Nachricht anzeigen" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Verbindung trennen" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Zeit" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Minuten" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Stunden" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Übertragungsstatistiken" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Ausgewählter Zeitraum für Statistiken" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Januar" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Februar" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "März" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "April" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Mai" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Juni" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Juli" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "August" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "September" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Oktober" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "November" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Dezember" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "USSD-Befehle" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Neuen USSD-Code hinzufügen STRG+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Hinzufügen" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Ausgewählten USSD-Code entfernen STRG+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Löschen" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "Kodierungsänderung der USSD-Antwort von GSM7 auf UCS2 erzwingen (nützlich für Huawei-Modems) STRG+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Zeichenkodierung der Nachricht ändern" modem-manager-gui-0.0.19.1/help/C/usage-getinfo.page000664 001750 001750 00000002572 13261703575 021705 0ustar00alexalex000000 000000 Get info about the mobile network. Mario Blättermann mario.blaettermann@gmail.com

Creative Commons Share Alike 3.0

Network info

Your network operator provides some info which you can view in Modem Manager GUI. Click on the Info button in the toolbar.

In the following window you see all available information as provided from your operator:

Network information window of Modem Manager GUI.

The most informations are self-explained and well known from traditional mobile phones or smartphones. Note, the GPS based location detection (in the lower part of the window) won't work in most cases because mobile broadband devices usually don't have a GPS sensor.

modem-manager-gui-0.0.19.1/resources/ui/modem-manager-gui.ui000664 001750 001750 00001006707 13261745467 023474 0ustar00alexalex000000 000000 999999 1 10 20 120 20 1 10 60 120 60 1 10 35 120 35 1 10 25 120 25 1 10 -1 255 -1 1 10 1 10000 1 1 10 1 10000 1 1 10 False Welcome center-always 438 456 False False 25 25 55 55 20 vertical True False vertical 16 True False 128 False True 0 True True False False True False 16 5 True False Despite of it's name, Modem Manager GUI supports different backends. Please select backends you plan to use. If not sure, just do not change anything. center True 0 1 2 True False 5 Modem manager 0 0 2 True False 5 Connection manager 0 0 3 True False True 0 1 3 True False 0 1 2 True False Welcome to Modem Manager GUI 0 0 2 Enable services after activation True True False start True True 0 4 2 True False 16 True False Services activation 0 0 2 True False Modem Manager GUI uses special system services to communicate with modems and network stack. Please wait until all needed services being activated. center True 0 1 2 True True True in True True 0 2 2 1 False True 1 False True 0 _Let's Start! True True True center center 20 20 True False True 1 False Modem Manager GUI center 850 600 True False vertical True False both-horiz True False View and select available devices <b>CTRL+F1</b> True Devices True True False True True False Send and receive SMS messages <b>CTRL+F2</b> True SMS True devbutton False True True False Send USSD requests <b>CTRL+F3</b> True USSD True devbutton False True True False View active device information <b>CTRL+F4</b> True Info True devbutton False True True False Scan existing mobile networks <b>CTRL+F5</b> True Scan True devbutton False True True False Monitor network traffic <b>CTRL+F6</b> True Traffic True devbutton False True True False View system and modem addressbooks <b>CTRL+F7</b> True Contacts True devbutton False True False True 0 True True False False 6 start _Stop True True True True True 0 False start 16 False start False True 0 False gtk-missing-image False True 1 True False end False True 2 infobarstopbutton False True 1 True True False True False vertical True False 5 True False 5 Connection False True 0 True False True True 1 Edit True True True Open connection editor <b>CTRL+E</b> False True 2 Activate True True True Activate or deactivate connection <b>CTRL+A</b> 5 False True 3 False True 5 0 True True in True True True True 1 True False Devices False True False vertical True False both-horiz True False Send new SMS message <b>CTRL+N</b> True New True mail-message-new False True True False Remove selected message <b>CTRL+D</b> True Remove True user-trash False True True False Answer selected message <b>CTRL+A</b> True Answer True mail-reply-sender False True False True 0 True True 235 True True in True True True multiple False True True True in True True False word 5 5 True True True True 1 1 True False SMS 1 False True False True False 5 5 5 5 Request 0 0 True True True True in True True False word-char 0 1 4 Send True True True Send ussd request <b>CTRL+S</b> 5 5 5 5 3 0 Edit True True True Edit USSD commands list <b>CTRL+E</b> 5 5 5 5 2 0 True False 5 5 5 5 True True True 1 0 2 True False USSD 2 False True False True True 5 True False True 0 none True False 12 True False 3 3 True False 15 6 0 0 3 True False Device 0 1 0 True False center 75 True True end 2 0 True False IMEI 0 1 1 True False center 75 True True end 2 1 True False IMSI/ESN 0 1 2 True False center 75 True True end 2 2 True False 5 5 5 <b>Equipment</b> True 0 0 True False True True 0 none True False 12 True False 3 3 True False 15 6 0 0 5 True False Operator 0 1 0 True False center 75 True True end 2 0 True False Mode 0 1 3 True False center 75 True True end 2 3 True False Signal level 0 1 4 True False Operator code 0 1 1 True False center 75 True True end 2 1 True False Registration 0 1 2 True False center 75 True True end 2 2 True False center center 75 True True middle 2 4 True False 6 5 5 <b>Network</b> True 0 1 True False True 0 none True False 12 True False 3 3 True False 15 6 0 0 2 True False 3GPP Location <small>MCC/MNC/LAC/RNC/CID</small> True 0 1 0 True False GPS location <small>Longitude/Latitude</small> True 0 1 1 True False center 75 True True end 2 0 True False center 75 True True end 2 1 True False 5 5 5 <b>Location</b> True 0 2 3 True False Info 3 False True False True True True True True True in True True 0 1 True False True True False Scan available mobile networks <b>CTRL+S</b> True Start scan True edit-find False True False False True False False True Create connection True list-add False True 0 0 4 False True False Scan 4 False True False vertical True False True False Set traffic amount or time limit for disconnect <b>CTRL+L</b> True Set limit True network-offline False True True False View list of active network connections <b>CTRL+C</b> True Connections True network-workgroup False True True False View daily traffic statistics <b>CTRL+S</b> True Statistics True x-office-calendar False True False True 0 True True 235 True True in True True False True True False vertical True False Transmission speed False True 0 True False True True 1 True True True True 1 5 True False Traffic 5 False True False vertical True False True False Add new contact to modem addressbook <b>CTRL+N</b> True New contact True contact-new False True True False Remove contact from modem addressbook <b>CTRL+D</b> True Remove contact True user-trash False True True False False True True False Send SMS message to selected contact <b>CTRL+S</b> True Send SMS True mail-message-new False True False True 0 True False in True True True True 1 6 True False Contacts 6 False True True 2 True False 5 True False gtk-missing-image False True 0 False True end 3 False 5 About True center-on-parent True dialog window Modem Manager GUI 0.0.19.1 Copyright 2012-2018 Alex Tool for EDGE/3G/4G modem specific functions control http://linuxonly.ru/page/modem-manager-gui Homepage GPL3 Alex <alex@linuxonly.ru> English: Alex <alex@linuxonly.ru> Yogesh Kanitkar <openclipart.org> Michal Konstantynowicz / shokunin <openclipart.org/user-detail/shokunin> LlubNek <openclipart.org/user-detail/LlubNek> Umidjon Almasov <u.almasov@gmail.com> image-missing gpl-3-0 False vertical 2 False end False True end 0 False 5 Active connections True center-on-parent 650 400 True dialog window False vertical 2 False end gtk-close True True True True False True 1 False True end 0 True False vertical True False True False Terminate selected application using SIGTERM signal <b>CTRL+T</b> True Terminate application True process-stop False True False True 0 True True in True True True True 1 True True 5 1 connclosebutton False 5 Connections True center-on-parent 650 550 True dialog window False vertical 2 False end gtk-cancel True True True True False True 0 gtk-ok True True True True False True 1 False True end 0 True False vertical True False True False Add new broadband connection True Add connection True list-add False True True False False Remove selected connection True Remove connection True list-remove False True False True 0 True True 220 True True in True True True True True False vertical True False 5 0 none True False 12 True False 5 10 True True True 1 1 True False Name 0 0 0 True False APN 0 0 1 True True 1 0 True False 5 5 5 <b>Connection</b> True start True True 0 True False 5 0 none True False 12 True False 5 10 True False Network ID 0 0 1 Enable roaming True True False True 0 0 2 True True True connnetidadjustment 1 1 True False 5 5 5 <b>Network</b> True True True 1 True False 5 0 none True False 12 True False 5 10 True False Access number 0 0 0 True False User name 0 0 1 True False Password 0 0 2 True True True 1 0 True True True 1 1 True True True 1 2 True False 5 5 5 <b>Authentication</b> True True True 2 True False 5 0 none True False 12 True False 5 10 True False DNS 1 0 0 0 True False DNS 2 0 0 1 True False True True 1 0 True False True True 1 1 True False 5 5 5 <b>DNS</b> True True True 3 True True True True 1 True True 5 1 conncancelbutton connokbutton False 5 Error True center-on-parent True dialog True window error close False vertical 2 False end False True end 0 False 5 True center-on-parent 320 200 True dialog window False vertical 2 False end gtk-cancel True False True True right False True 0 gtk-ok True False True True False True 1 False True end 0 True False 3 True True False dialog-question 6 0 0 4 Ask me again True False False start True True 0 4 2 True False <b>Quit or minimize?</b> True 1 0 True False What do you want application to do on window close? 1 1 Just quit True False False start True True 1 2 Minimize to tray or messaging menu True False False start True True exitcloseradio 1 3 True True 5 1 exitnobutton exityesbutton False 5 New contact True center-on-parent True dialog window False vertical 2 False end gtk-close True False True True False True 0 gtk-add True False True True False True 1 False True end 0 True False 5 5 True True True 1 0 True True 1 1 True True 1 2 True True 1 3 True True 1 4 True True 1 5 True False First name 0 0 0 True False First number 0 0 1 True False EMail 0 0 2 True False Group 0 0 3 True False Second name 0 0 4 True False Second number 0 0 5 True True 5 1 newcontactclosebutton newcontactaddbutton False 5 New SMS message True center-on-parent 650 400 True dialog window False vertical 5 False end gtk-close True True True True False True 1 False True end 1 True False vertical True False True False True Send True mail-send False True True False True Save True document-save False True True False False True Disabled True tools-check-spelling True True True False False True True False True False 160/1 True True False True 0 True False 5 True False 5 5 5 Number 0 0 True False 5 True True True 1 0 True True True True in True True word 0 1 2 True True 1 True True 0 closesmsbutton False 5 False 400 50 True dialog window False vertical 2 False end gtk-cancel True True True True right False True 0 gtk-apply True True True True False True 1 False True end 0 True False 5 5 True False Please enter PIN code to unlock modem True 1 0 2 True True True 8 False * 2 1 True False start PIN 1 1 True False dialog-password 6 0 0 2 True False 5 1 pinentrycancelbutton pinentryapplybutton False 5 Preferences True center-on-parent 450 300 True dialog window False vertical 5 False end gtk-close True True True True False True 0 gtk-apply True True True True False True 1 False True end 0 True True True False 10 0 none True False 12 True False vertical Use sounds for events True True False start True False True 0 Hide window to tray on close True True False start True False True 1 Save window geometry and placement True True False start True False True 2 Add program to autostart list True True False start True False True 3 True False 5 5 5 <b>Behaviour</b> True True False Behaviour False True False 10 vertical 5 True False 0 none True False 12 True False vertical Concatenate messages True True False start True False True 0 Expand folders True True False start True False True 1 Place old messages on top True True False start True False True 2 True False 5 5 5 <b>Presentation</b> True False True 0 True False 0 none True False 12 True False 5 5 True False 5 5 Validity period 0 0 Send delivery report if possible True True False start True 0 1 2 True True 5 5 True prefsmsvalidityadjustment 256 0 right 1 0 True False 5 5 5 <b>Message parameters</b> True False True 1 True False 0 none True False 12 True False True 5 5 True False Command 0 0 0 True True True 1 0 True False <i><small>Use <b>%n</b> for message sender number and <b>%t</b> for it's text (eg. <b>zenity --info --title=%n --text=%t</b>).</small></i> True True 0 0 1 2 True False 5 5 5 <b>Custom command</b> True True True 2 1 True False 1 SMS 1 False True False 10 0 none True False 12 True False 5 5 True True True True 1 0 True True True 1 1 True False RX Speed graph color 0 0 0 True False TX Speed graph color 0 0 1 True False Movement direction 0 0 2 True False 0 Left to right Right to left 1 2 True False 5 5 5 <b>Traffic</b> True 2 True False Graphs 2 False True False 10 vertical 5 True False 0 none True False 12 True False 5 5 True False Modem manager 0 0 0 True False Connection manager 0 0 1 True False 5 5 True 1 0 True False 5 5 True 1 1 True False 5 5 5 <b>Preferred backends</b> True False True 0 True False 0 none True False 12 True False 5 5 True False Enable device 0 0 0 True False Send SMS message 0 0 1 True False Send USSD request 0 0 2 True False Scan networks 0 0 3 True True 5 5 True prefenebledevicetimeoutadjustment 1 right 1 0 True True 5 5 True prefsendsmstimeoutadjustment 1 right 1 1 True True 5 5 True prefsendussdtimeoutadjustment 1 right 1 2 True True 5 5 True prefscannetworkstimeoutadjustment 1 right 1 3 True False 5 5 5 <b>Operations timeouts</b> True False True 1 3 True False Modules 3 False True False 10 0 none True False 12 True False vertical Devices True False True False start True True False True 0 SMS True True False start True False True 1 USSD True True False start True False True 2 Info True True False start True False True 3 Scan True True False start True False True 4 Traffic True True False start True False True 5 Contacts True True False start True False True 6 True False 5 5 5 <b>Active pages</b> True 4 True False Pages 4 False True True 1 prefclosebutton prefapplybutton False 5 Question True center-on-parent True dialog False window question yes-no False vertical 2 False end False True end 0 False 5 Traffic limits True center-on-parent 500 400 True dialog window False vertical 2 False end gtk-close True True True True False True 0 gtk-apply True True True True False True 1 True True end 0 True False vertical True False 0 none True False 12 True False 5 5 True Enable traffic limit True True False start center True 0 0 3 True False center Traffic 0 0 1 True True center 1 trafficadjustment True 1 1 1 True False center Mb Gb Tb 2 1 True False center Message 0 0 2 True True center 1 2 2 True False center Action 0 0 3 True False center 0 Show message Disconnect 1 3 2 True False 5 5 5 <b>Traffic</b> True True True 0 True False 0 none True False 12 True False 5 5 True Enable time limit True True False start center True 0 0 3 True False center Time 0 0 1 True True center 1 timeadjustment 1 1 1 True False center 0 Minutes Hours 2 1 True False center Message 0 0 2 True True center 1 2 2 True False center Action 0 0 3 True False center 0 Show message Disconnect 1 3 2 True False 5 5 5 <b>Time</b> True False True 1 True True 5 1 trafficlimitsclosebutton trafficlimitsapplybutton False 5 Traffic statistics True center-on-parent 650 400 True dialog window False vertical 2 False end gtk-close True False True True False False 2 False True end 0 True False vertical 5 True False 5 True False Selected statistics period False True 0 gtk-apply True False True True False True end 0 True False False True end 1 True False January February March April May June July August September October November December False True end 2 False True 0 True False in True False True True 1 True True 5 1 trafficstatsclosebutton False 5 USSD commands True center-on-parent 650 400 True dialog window False vertical 2 False end gtk-close True True True True False True 1 False True end 0 True False vertical True False True False Add new USSD command <b>CTRL+N</b> True Add True list-add False True True False Remove selected USSD command <b>CTRL+D</b> True Delete True list-remove False True True False False True True False Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei modems) <b>CTRL+E</b> True Change message encoding True document-properties False True False True 0 True True in True True True True 1 True True 5 1 ussdeditclosebutton modem-manager-gui-0.0.19.1/man/pl/000775 001750 001750 00000000000 13261703575 016360 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/license.page000664 001750 001750 00000003501 13261703575 020563 0ustar00alexalex000000 000000 Legal information. License

This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 Unported license.

You are free:

<em>To share</em>

To copy, distribute and transmit the work.

<em>To remix</em>

To adapt the work.

Under the following conditions:

<em>Attribution</em>

You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).

<em>Share Alike</em>

If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

For the full text of the license, see the CreativeCommons website, or read the full Commons Deed.

modem-manager-gui-0.0.19.1/po/uk.po000664 001750 001750 00000152722 13261705312 016567 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Yarema aka Knedlyk , 2014-2015,2017 # Игорь Гриценко , 2012 # Роман Лепіш , 2012 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Ukrainian (http://www.transifex.com/ethereal/modem-manager-gui/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Непрочитані SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Непрочитані повідомлення" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "%s неправильні\nНеможливо зберегти їх і використати для ініціалізації з'єднання" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "Неназване з'єднання" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "Назва APN" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "Перший сервер DNS адрес IP" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "Другий сервер DNS адрес IP" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "З’єднання" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Помилка додавання контакту" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Вилучити контакт" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Дійсно бажаєте вилучити контакт?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Помилка вилучення контакту" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Контакт не вилучено з пристрою" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Не зазначено контакту" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Контакти модему" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "Контакти GNOME’а" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "Контакти KDE" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Ім’я" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Перший номер" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Ел. пошта" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Група" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Прізвище" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Другий номер" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Помилка відкриття пристрою" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s%s\nПрошивка:%s Порт:%s Тип:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Вибране" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Пристрій" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Активувати" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "Деактивувати" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "З'єднання з %s..." #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "Від'єднання від %s..." #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Не підтримується" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Помилка ініціалізації" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Не в змозі запустити потрібні системні сервіси без авторизації" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Не в стані обмінюватися даними з доступними системними сервісами" #: ../src/main.c:506 msgid "Success" msgstr "Успіх" #: ../src/main.c:511 msgid "Failed" msgstr "Не вдалося" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Затримка" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Стоп" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Включення пристрою..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "В системі не знайдено пристрою" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Модем не готовий для операції. Будь ласка, зачекайте, поки модем буде готовий..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Модем потрібно включити, щоб читати і писати SMS. Включіть модем, буль ласка." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Модем повинен зареєструватися до мобільної мережі для отримання і відсилання SMS. Зачекайте, будь ласка..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Модем потрібно відімкнути для отримання і відсилання SMS. Введіть PIN-код, будь ласка." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Менеджер модемів не підтримує функції управління SMS " #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Менеджер модемів не підтримує висилання повідомлень SMS." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Потрібно активувати модем для висилання USSD. Активуйте модем, будь ласка." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Модем повинен зареєструватися до мобільної мережі для висилання USSD. Зачекайте, будь ласка..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Модем потрібно відімкнути для відсилання USSD. Введіть PIN-код, будь ласка." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Менеджер модему не підтримує відсилання запитів USSD." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Модем має бути активованим для сканування доступних мереж. Активуйте модем, будь ласка." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Модем потрібно відімкнути для сканування доступних мереж. Введіть PIN-код, будь ласка." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Менеджер модемів не підтримує сканування доступних мобільних мереж." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "На даний момент модем підключено. Для сканування, будь ласка, від'єднайтесь. " #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Модем потрібно активувати експорту з нього контактів. Активуйте модем, будь ласка." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Модем потрібно відімкнути для експорту з нього контактів. Введіть PIN-код, будь ласка." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Менеджер модемів не підтримує функції управління контактами модему." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Менеджер модемів не підтримує функції редагування контактів модему." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Пристрої" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Інфо" #: ../src/main.c:1600 msgid "S_can" msgstr "С_канування" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Трафік" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "_Контакти" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Вікно менеджера модемів приховане" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Використати іконки трею або меню повідомлень для показу вікна" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Помилка показу змісту допомоги" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s відключений" #: ../src/main.c:2056 msgid "Show window" msgstr "Показати вікно" #: ../src/main.c:2062 msgid "New SMS" msgstr "Написати SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Завершити" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Завершити" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Дії" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Налаштування" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Редагувати" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Допомога" #: ../src/main.c:2697 msgid "_About" msgstr "_Про" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Налаштування" #: ../src/main.c:2714 msgid "Help" msgstr "Допомога" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Про програму" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "Неможливо знайти модулі MMGUI. Будь ласка, перевірте, чи програма правильно встановлена" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Помилка побудови інтерфейсу" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Модулі керування модемом:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Модуль" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Опис" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Модулі управління з’єднанням:\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Помилка сегментації при адресі: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Відслідковування стеку:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Не показувати вікна на старті" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Використовувати визначений модуль управління модемом" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Використовувати визначений модуль управління з’єднанням" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Показати список доступних модулів і вийти" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- утиліта контролю специфічними EDGE/3G/4G функціями модему" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Виконання командної стрічки не вдалося: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Невизначено" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Сканування мереж..." #: ../src/scan-page.c:46 msgid "Device error" msgstr "Помилка пристрою" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Доступність: %s Стандарт: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Помилка сканування мережі" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Оператор" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Прийнято %u нових повідомлень SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Прийнято нове повідомлення SMS" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Повідомлення від:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n %s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Невірний номер для відправки SMS\nЛише номери від 2 до 20 цифр без літер та символів можуть бути використані" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Текст SMS некоректний\nНаберіть більше тексту для відправки" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "Висилання SMS на номер \"%s\"..." #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Невірний номер чи неготовність пристрою" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Збереження SMS..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Дійсно бажаєте вилучити повідомлення (%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Вилучення повідомлень" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Деякі повідомлення не були вилучені (%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Вхідні" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Цей каталог містить ваші вхідні повідомлення SMS.\n Ви можете відповісти на повідомлення з допомогою кнопки 'Відповідь'." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Вислані" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Цей каталог містить ваші вихідні повідомлення SMS." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Чорновики" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Цей каталог містить чернетки ваших повідомлень SMS.\n Виберіть повідомлення і натисніть кнопку 'Відповідь' для початку редагування." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Вхідні \n Прийняті повідомлення" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "b> Вихідні \n Відправлені повідомлення" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Чернетки\n Чернетки повідомлень " #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Відключено" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f КБіт/с" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f КБіт/с" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g МБіт/с" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g МБіт/с" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g ГБіт/с" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g ГБіт/с" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u сек" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u сек" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g КБ" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g КБ" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g МБ" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g МБ" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g ГБ" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g ГБ" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g ТБ" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g ТБ" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Сьогодні, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Невідомо" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Вчора, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Доступно" #: ../src/strformat.c:248 msgid "Current" msgstr "Тепер" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Заборонено" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Не зареєстровано" #: ../src/strformat.c:288 msgid "Home network" msgstr "Домашня мережа" #: ../src/strformat.c:290 msgid "Searching" msgstr "Пошук" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Реєстрацію заборонено" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Невідомий стан" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Роумінг" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f хвилин" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f годин" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f днів" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f тижнів" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f секунд" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u хв, %u с" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Операція скасована" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Досягнуто системного тайм-ауту" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "Активація сервісу не вдалася" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Сервіс залежить від інших сервісів, які не вдалося запустити" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Сервіс пропущено" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Невідома помилка" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Невідомий тип існування" #: ../src/traffic-page.c:246 msgid "Day" msgstr "День" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Отримані дані" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Передані дані" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Час сеансу" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Програма" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Протокол" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Стан" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Буфер" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Порт" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Адреса призначення" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Перевищено обмеження трафіку" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Перевищений обмеження часу" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафік: %s, обмеження: %s\nЧас: %s, обмеження: %s\nБудь ласка, перевірте введені дані та спробуйте ще раз" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Некоректні обмеження трафіка та часу" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафік: %s, обмеження: %s\nБудь ласка, перевірте введені дані та спробуйте ще раз" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Некоректне обмеження трафіку" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Час: %s, обмеження: %s\nБудь ласка, перевірте введені дані та спробуйте ще раз" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Некоректне обмеження часу сесії" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Відключений" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Обмеження" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Відключено" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "КБіт/с" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "сек" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Приймання" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Передача" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Параметр" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Значення" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Сесія" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Отримані дані" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Передані дані" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Швидкість отримання" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Швидкість віддачі" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Час сесії" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Залишок трафіку" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Залишок часу" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Місяць" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Повний час" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Рік" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Перевищено обмеження трафіку ... Прийшов час відпочити \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Перевищено обмеження часу...... Приємних снів -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Стандартна команда" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "Запит не коректний.\n Запит не повинен містити більше 160 символів\n,повинен починатись з '*' і закінчуватись '#'" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "Висилання запиту USSD %s..." #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "Висилання відгуку USSD %s..." #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Помилка надсилання запиту USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Неправильний запит USSD або пристрій не готовий" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Сесію USSD завершено. Ви можете відправити новий запит" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Некоректний запит USSD" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\n Сесія USSD активна. Очікується відповідь...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nЖодної відповіді не отримано..." #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Команда" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Давайте почнемо!" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Сервіс" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Закрити" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Активація..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Успіх" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Ласкаво просимо" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "Незважаючи на назву, менеджер модемів співпрацює з різними програмами. Виберіть, будь ласка, програму, яку Ви будете використовувати. Якщо не впевнені, тоді нічого не змінюйте." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Менеджер модему" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Менеджер з’єднання" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Ласкаво просимо до графічного інтерфейсу менеджера модемів (Modem Manager GUI)" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Включити сервіси після активації" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Активація сервісів" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI використовує спеціальні системні сервіси для обміну даними між модемами і стеком мережі. Будь ласка, зачекайте, поки не активуються всі потрібні сервіси." #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Переглянути і вибрати доступні пристрої CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Пристрої" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "Вислати і отримати повідомлення SMS CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "Вислати запити USSD CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Переглянути активну інформацію пристрою CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Статус" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Сканувати доступні мобільні мережі CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Мережі" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Моніторинг мобільного трафіку CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Трафік" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Переглянути системну і модемну адресні книжки CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Контакти" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Редагувати" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Вислати SMS повідомлення CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Нове повідомлення" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Вилучити вибране повідомлення CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Видалити повідомлення" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Відповісти на вибране повідомлення CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Відповідь" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Запит" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Надіслати" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "Вислати запит ussd CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "Редагувати список команд USSD CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Спорядження" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Стандарт" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Рівень сигналу" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Код оператора" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Реєстрація" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Мережа" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "3GPP розташування\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Розташування" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Сканувати доступні мобільні мережі CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Розпочати сканування мереж" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Створити з’єднання" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Вказати кількість трафіку або часове обмеження для роз’єднання CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Застосувати обмеження" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Переглянути список активних мобільних з’єднань CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "З'єднання" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Переглянути денну статистику трафіку " #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Статистика" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Швидкість передачі даних" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Додати новий контакт до адресної книжки модему CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Новий контакт" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Вилучити контакт з адресної книжки модему CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Вилучити контакт" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Вислати SMS-повідомлення до вибраного контакту CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Вислати SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Всі права застережено 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Інструмент для керування специфічними функціями EDGE/3G/4G модемів" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Домашня сторінка" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Українською: \n Игорь Гриценко , 2012.\n Роман Лепіш , 2012" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Активні з'єднання" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Перервати роботу вибраної програми, використовуючи сигнал SIGTERM CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Закрити програму" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Додати нове широкосмугове з’єднання" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "Додати з’єднання" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Вилучити вибране з’єднання" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "Вилучити з’єднання" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Назва" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "З’єднання" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "ID мережі" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Номер доступу" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Назва користувача" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Пароль" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Розпізнавання" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Помилка" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Запитати знову" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Завершити чи мінімізувати?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Що повинна робити програма при закритті вікна?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Завершитись" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Мінімізуватись до трею або меню повідомлень" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Нове SMS повідомлення" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Зберегти" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Номер" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Використовувати звуки подій" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Сховати вікно до трею при замиканні" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Зберегти геометрію вікна і розташування" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Додати програму до автостарту" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Поведінка" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Поведінка" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Об'єднати повідомлення" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Розгорнути папки" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Подати старі повідомлення першими" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Презентація" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Термін дії" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Вислати підтвердження про отримання, якщо можливо" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Параметри повідомлення" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Швидкість прийому" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Швидкість передачі" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "Зліва вправо" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "Справа вліво" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Трафік" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Діаграми" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Програми для співпраці" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Включити пристрій" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Вислати SMS повідомлення" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Вислати запит USSD" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Сканувати мережі" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Модулі" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "Активні сторінки" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "Сторінки" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Питання" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Обмеження" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Включити обмеження часу" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "МБ" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "ГБ" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "ТБ" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Повідомлення" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Дія" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Показати повідомлення" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Розірвати з'єднання" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Час" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Хвилини" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Години" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Статистика трафіку" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Вибраний період статистики" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Січень" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Лютий" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Березень" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Квітень" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Травень" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Червень" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Липень" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Серпень" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Вересень" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Жовтень" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Листопад" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Грудень" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "Команди USSD" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Додати нову команду USSD CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Додати" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Вилучити вибрану команду USSD CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Вилучити" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "Вимагати кодування відповіді USSD з GSM7 до UCS2 (корисно для модемів Huawei) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Змінити кодування символів у повідомленні" modem-manager-gui-0.0.19.1/polkit/its/polkit.its000664 001750 001750 00000000615 13261703575 021320 0ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/appdata/Makefile000664 001750 001750 00000002211 13261703575 020240 0ustar00alexalex000000 000000 include ../Makefile_h APPDATADIR = $(PREFIX)/share/metainfo APPSDIR = $(PREFIX)/share/applications all: while read lang; do \ msgfmt $$lang.po -f -v -o $$lang.mo; \ done < LINGUAS itstool -i its/appdata.its -j modem-manager-gui.appdata.xml.in -o modem-manager-gui.appdata.xml *.mo msgfmt --desktop --template modem-manager-gui.desktop.in -d . -o modem-manager-gui.desktop install: install -d $(INSTALLPREFIX)$(DESTDIR)$(APPDATADIR) cp modem-manager-gui.appdata.xml $(INSTALLPREFIX)$(DESTDIR)$(APPDATADIR) install -d $(INSTALLPREFIX)$(DESTDIR)$(APPSDIR) cp modem-manager-gui.desktop $(INSTALLPREFIX)$(DESTDIR)$(APPSDIR) uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(APPDATADIR)/modem-manager-gui.appdata.xml rm -f $(INSTALLPREFIX)$(DESTDIR)$(APPSDIR)/modem-manager-gui.desktop messages: itstool -i its/appdata.its -o modem-manager-gui.appdata.pot modem-manager-gui.appdata.xml.in xgettext -j -o modem-manager-gui.appdata.pot modem-manager-gui.desktop.in while read lang; do \ msgmerge -U $$lang.po modem-manager-gui.appdata.pot; \ done < LINGUAS clean: rm -f *.mo rm -f modem-manager-gui.appdata.xml rm -f modem-manager-gui.desktop modem-manager-gui-0.0.19.1/appdata/modem-manager-gui.appdata.pot000664 001750 001750 00000006321 13261703575 024236 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 modem-manager-gui.desktop.in:3 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 modem-manager-gui.desktop.in:5 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal level" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" #: modem-manager-gui.desktop.in:4 msgid "Broadband modem management tool" msgstr "" #: modem-manager-gui.desktop.in:7 msgid "modem-manager-gui" msgstr "" #: modem-manager-gui.desktop.in:12 msgid "modem;manager;sms;ussd;" msgstr "" modem-manager-gui-0.0.19.1/help/C/figures/network-info.png000664 001750 001750 00000154133 13261703575 023107 0ustar00alexalex000000 000000 PNG  IHDRCwbKGD pHYs  tIME %)6 IDATxwxU= Ah!ҥHޑN@Gy*4Ei" AA&Mz $mef?͹v7ے p>5W6gfsϙ{ss8G<( BP(Jٷocq|'''S( BP(رcK8㌵zjBP( HqFpG BP( ob߾}DX4 BP( By0=zWZEP( Bcfh4hZL&pX T R ___H$z F) BP( <ϣ8־b˲0 PTCPPS'BP( qrrrk֬AFF5k~!..7n'HyWeԒBy8z`,˺]D"bccaX:|F)JիWqmԬY{쁿?6u˙3guVdff1p@lْlò,~G9rRcƌ'(..ƦMp9!88 ^uLاOСCqU!::N>ݻweYk< ,޸qV£GjP(#G">>Tܺu QQQxq9,"99T*رc`ヒΝ;Z7n 55ưa~zCTbڵbD"0ugKyQ(`˲\.wڣP(//իWVZh׮ѣ}6=.H8t ]"0`|2ܹ8Q²o>̞=hѢZlT̙3#mٲvNC֭i&F#> @@@oߎ3feYcܺu+tL6 @֭hg9r䩟oqq1бcG 2kիW1gٔm6DEEX|yٲe v VVZaÆ 6j믿B,o߾^S]N< 4hqK0i2ʂFR)< eY$$$௿¥KХKMn?|`BBB BaSNaa!6o\b?ɱ<999lwPh46GEE!''< +qOTR999%5i=rGHHCnРAx"N:Uag4m>_c R9`8,˒SNw}c̘1Xv-j֬w}ZRLϲ,VXcXx1/^ &< ZVEѩS'8pڵC6mJʐP(#.. :6Ѕ./H: hР"""gjժn޼IݼyPjU.,, p=E,zd% By6(JDFF?lFժU1`1T !h- 233QJ3F2πY{+Ce1S"8Ip Byvx{{cP(`fjP(ʿdBHHd2 ˡT*!!,Ia3LV|}}a4=*rtz BX,ܻw AP[z=|||JBb@"  "BS'BP( b0 燠 27doNvTBP( 埆xE+F) BP(g u) BP(S( BP(/. BP(ʳti$BP( ByviOP( BP> ÀP( BP(08BP( BaP( BP( ;{.Ǝ \sx p\p|&Z;BP(s(;v͛vyN>ɐd5kbǎPTUprf}|| )) 0l0ԬYӧOի!ɠhO?իJhݺ5 ӧcؼy3T*0n8TV p޽J={D=J-AAARmj5V\Tk׮Bzҥ1cFҥKych4bƍ8wXE-0|pHRm{뭷}vFl#Fpz BP("F֭^z ĨQ_|U"33a2e 6mLN4+V0Xz5Z-I 0`I8s ,X,\ORf̝;M4Aqq12331~H$]9N8VR ?rLk֬`0 f͚m۶aС6 w%,_hA;BP( QLJϣ]v`Y:t'HD'N )) J*  V%epDz=.\QFd2A&aȐ!8vvcǎh4tHHt<|,"::\L8ƍ#˖-[:/^ȑ#a4!0pyyxf͚E3 8~8aX`61h :uiy#FĉNP( ByƸyQnݺX,h޼9VXӧOm۶bQJ|82mr9^$d2eYO?Ŷm۰~z`Ȑ!SN~zpNG9K%ys-D?1uT7+e3) BP(39ÇQ\\Ǔ,h۶-BCC0 =z5jǏ#** a=^z /28æMxb,^̢T*9%577aλ<#D-[09jp^ BP(g焻\|,\K.%̙3q-ܿ2 :uºu됛 瑕|)~r9Zh-[@ף;wDΝ=:\;wyyyPՐd!^^^h֬9VJݻw;y?-r9:te˖!##}6>7۶mѺCNP( ByƸLG9|0^yUիÇcĈx뭷a̝;Zaaa?~>>$UeYh29B<˲(,,$R,`0yyy%K9ѹ۟p8z{O?źua4'BP( 1g(..v]QQ,b,h@O&ñX,6گcY8ʃ}q\ M(دw2L&T*~ BP(Tlƈ- BP(0 DZRqŞ={ BP(ρѴlv:"BP( B# BP(3ģi) BP(E0LϣP( BP(eL[@ՠP( BPNQ( BP(g 'BP( Byt RydTTi^T*D"!GGG#&&BP'@T>ݻtH$, HT Lq8dX,ƭ[0 P( _z/_ƭ[PXXe/x4k ~~~*PͩO H$7xZw"^:\ǏqΝr9^rң둛˗/###j`Y @zPNx{{C&JBa0o0^~ w&hx{{oBZZ#FN:PͩO@,jժ.38}4N>]*r9v튨꼳q:wLm);v 0GHH|}}P(0 f3Z-T*rrrp4m ^Gjc Ś/?\9rk׮EƍѪU+Dl{j?Jx1<RH5z<9ŋؿ4H$x\wNNZ-wNm)qF9s7FDDJ%D"x'(`@QQ._ ɄqƽB(=3bo 0O}uZ!_,Ν;8z(>ԫW^9գ޽AAA )bʕ+!JfÆ {.:D塠@QQ,Ν;C*w@;iii8}4FW_}( lӦMl0Zju0ͰX,`Y>/wf>>>WD;VSs{+T礥JI-f_5֭T5ۺu+PJ=EC׻mvs{ꯇbѢEF6mȹ:ӭfYFe+}z++{{H ĉei61~x4o1116G@ 7oH3g@;"y? 5kFR4w2h^^=8sZlPpLX_f̞=JB_5/ժUCΝ ++Rݻ`nɒ% tYxx87nDAAG64n8+睟\(l'22={YoiN$Abǎ(..ׇ~4hjժ!""8999ȀVuh3& GŸqвe8Fpp."k׮>#)͂ nԨVZyǏ… hڴif3ш޽{#::ׯ_ѣmrXK/ӧO;mbݺu߿ \inʢyY8GӦM!ѠA9rU:u||| apeՌ8;&tcYkɓ'}ʆvڅ:k(Zk.X, >8* {Łq}||q$ 4h\vRΆ p}4iFDDhh(7n]A L&X,\.GPPj׮M"$$Z6D"xUkٌݻjժ@X8CFpCJԩSKGjѩS'DmM 㐐Dܹ3v X4r???ٳ{~a/#[l 8mztFDqe>>;v,!cZ,rtJgBRpLSRR<6ѐ IDATҌ89s 6peof'ODYaڿ3D?~|f_>>>J8tX)/tU?<5kl6;#)M $MBsիGv8ydԩS|rƺ̸8l޼={H$z!/UTo*/͛7͛7IZ;8 r6xRi~|\xGN*t:?08UV|܃ؘ`g۷oGZZ, ѼysguRG%\~JyFL<f+V@\\֭Kҥ \{"""5j@bb"-[퍛7o:6mLpl۶ }fΜr@O1W.#ͭsrrJСCVk׮e˖8{,1uT|Wh4hܸ1c pwf̟?2* -- j<ϓk< 8s BBBC<䲜 $u ˦dB6mPN$$$`ͥA{Zwꩦesfְ,O?Ԧ\&aرXhQH%hfp[_b<///ܿut\lg`ԩS]tX,֭[IqС|}} ֭[Ctt4?_GݱwrK/^$/B}`2Ю];d2\zo&Xk֬ e|r/Q(&BAr D",]JFb`ҤIϱrJ|'A^ok:T*}XXLYfa˖-h4bƍ8wXE-0|pHR8t͛Gᅬ BVcXz5d2F#n݊gBV#44&L@tt{nh4(J=z(֎I۷SN7|?ӧOG^^Z-͛~D'LN:)))}6$ þ+lD"aqo8qbޥKD"Z&yMj HMM%wE幗\5|d2cȑCFFOɓ'cPT¸qPZ5edd@*>B^z0HMMF/8,8CV`6F***"X;᲎H CT*ܻwӧO}v!99Gqdql"B]8ߟ"ȥTc„ %:8 F2&~~~0 DCO꧟}Ea4QPP\#GTF~ W^T*E֭@Z8R`` >3Æ C.]\ڧ3=z4ϟﰼ>;) y?~9X纱,84k "oM9Ǝ N%K@*]v&yoֳfWk, Z-:v숫Wk֬Aaa!/_UV!;;۶mt YYY; ",,[)99o_|[G*WQTXf {=l۶ K.up>qwN^ aXNP#%84 CPP;={6@6mp,_G3%ZSZڵk9s&~TZ;v4k 3f,_=`֭8~->sȑ#.#LDti̝;<#44JF8LK.^tBWPiKꚠ |'ؼy3/^"+̙3X`6mڄjժ!99066T*P(`6q] 7nUcHKK˲0LH$d`(1ii/alHRVZaUi-[eJO @,b8a{MRhݺ5zMN#b L&^ .ĥK֖Kh*Z8Ӷjժ+˳B0Nk42fX"4|шׯcq۷/uHD"\z˲g}#88UTF7J8>BWpRSST{U]<( H$xq5};{׮]IjK+T ooo2TVVzQQQ~pa=L7oL^kġtd8KS? 6~2a4qDR_[#6ZiWz\pF"G R#[Xk(⸺δ tX^YJKG)łyaLppg7 N}K#=;Z˰MvueΝ9±; f:`c:Jg)ӾAدtQwZ&QtQXX !ǜyYfy֭H$ˆ#ЧOfg϶DH* Ǒcvz/k]E/bL:AFZi}MuΫJ&;RT0͈E&M0 o$ȭڜ+MJӿ4ؑ1@Tb˖-5jTNK,)aOl, <9USx+lEi-˳B(p-oBa3f 9kbȑnԄ wԩSxW^ػw/i4۳رchҤ x'Qe˖&TqqqJ8<.\ ''$$֨Qæ,waYhڴ)8æMh"m\inaiӦdY!/8_~%xǼy ɰtR<|X?w aӧq&jԨ-[U"44묜?K^!=źX999"볲FwꩦܑC0 rC͜9-"}m[k =ν#,//"Ά"2kc5 QPPt9s&L@0 f̘7`YDWD7nl6#(("&BY{U]hpBL<۷L&Å 0}t}Y P6}"xGnn.8X,Fhh(]F"$ٮ];ǃydgg#//jo0Y=L& jNsGu{iO>> bbB$ """vDyHx;wD.]<:jΝAAA5z3ͬc{gy{e26mF?ꫯNZZaÆP*D$WYCC$͛Ƅ O?aሎ0hԨrssR,6lDZ]{U]#D!jq ]ayZMh4{. 6lшm۶ATZj2e 뇉'bQI&!&&6lHV` Q5qi'eQ^=R:Z-Zшu?,, 1rqHJJ{nЯ˗/C.Eزe Iڹs':wNBO+mWg'RQ8%** YYY0߾};?NBbDSgNNn߾MZ%F:FF!Α'@N03,, M4eˈ}]Z:lj.M9lPa|'ׯ QT\po޼F!##&ӝ <~6lYj]^ht{jΝQJ:2"i6B3xzߖ0f/?>$ ڴiΝ;ۤ<a={СCd e!йsgdggcP(HJJBѭ[7t* uԁhDDDƝ&::IIInݺ pGa۶mhݺ5ZlǏ?hbhݺ5 ",YΝ#>[wF)l!!!OUW~7n^QZ {Fe2~ߟOk/n:ٳ, G;`Ŋx!HСCׯLΜAa޼yX,:t(vZ644Dy 4(B(p&))rʼn'lEl6GZH^VEBBqF#HDd>/iAAA/m$gzOHM: \b1Q+,,,!uQYjDSG,&X:tiޭ[7t&zkj >DB4g.\X,xz!Da'CZ9^n) E!<%"P[???L6D1<<[Nc6B.g-ɓa ,ˢ[nزe ڷoooo$'' (  a? 55]vE^`XO?sP{ɝmul;q HT*ѿ̚5 /{B,C"@$wi%Z IDATðaСCbΜ96p=ڵkٹsÓ~Gg$qرcJ% t+uGBBGp^Bfgu=%GuN q:/΂1sm۶/quuo/͛AuvMg=Cmذ;vƍc(‘sZYlPTVZȆ9vJkuOmsXf#77=y1Dشip /$d%^J*xyye˖8p@o=ˆ#0` 87oą p}t:D"Fh֬UFZE'NbƎrse+ObccIz#lRdzA*ӿH "Si'bΞ= glwpw$KdW;Nj'N3*V4K`@߾}o:lɊl֎u=d4sfM#?8ھvdg]9+v___t:|wy'LaЩS'z|DX|9AfZ0 7o'OB9G߿GCIkVEAA.] .`۶mPՐH$66<ڵk2۷o{Ǻ%I,K2lH "#)Ѩ_>_*Jn8*CEŕON4W(6mVZe3kfEӼ,z?c֭Y`FG@:upmq5k֐n%o%e[LyuvR)ݻwCPjժyyyyׯz5j {EztRD"dffbر6ӉWT۩Q^~e;varrrl2 ,, ~~~P(6N`@QQrrrh JKD'c@wС3+Zdߩr߾}طoS{q_g$RQ)մIII'gMyHR2˜Ո#h3XOMl?m7|rcOWˢЁwHIIL&ѣGq/0QkgD"VX`ܹ9s&郃G׬.g|v>}Q8Cǎ;f͚`?3F(޽=d2vڅDxEF ???{>"Wܹs8uN:sի>Fͬ׉aӧOч쟡IT|'8q"[oYYY>}zmaBqYEVV|dd$_#??a>^%7ٌ'OY4/AP"۠X,FJJ GoH3w:,::0n4Ÿ~:t g=j r4{s\\f̘AN)4/-B*AEiQlP,ƍ\.߂Pn]_OUZjwu8C\f3rrrr#w`Ǐq99rGŕ+WR`6K8 @ƍq%tr9|iB ѣGw iDP\qE[h1I&e~WqrWGv9 7jNp‘0 вeK\rܚ%$$o߾0 L&rrrv2wc=tҪ2_ܹ33z4 -[|a"~P(pwnjSΞ=kגg*  *@I3OSv(9FxH1if_ǹ-L)7笾i5ޓ2񀢂 ⁃޿?|~nz?׵þ}j[Ν8p ^^^:*s-X,]W~;֬Yc%&}ֱcGyk <<Ȁs;vo{Vxw|ABCCy'*}Pkc"F Əom~޽*U~Qɣ>JXXX{Q?n]ڵٸq# 6x7{Çٿ??cOr4LѮ];:ubMm^~ҡl6 9qرc3p5AAAiӆ~///1sLDILLA ĉbqqql6f"v;eee9dffB˖-),, ""m^'fիktJKK_w777\]]?.7oN6mr5 D~Yˣ]v_t]Cl~n|cqq1yyy5zpmK""")@DDDDDA/+jUO jJ!""""rZ.""""r)Q."""" \DDDDD(f۶m:B""""Z2dQzq?,QFKDDDDn-/׾}{4ib~n{bbbtdDDDDDAx*gyX|9;w͍!C۶mc…|G@СC?~FIFߟCqQ4iѣIII/'x_|@^^֭cKhh( b84;Fƍ=z4M6u`…ޓH ߱c?M6QXXHvXfmmg}F d޼yv}6l؀ޤ|״oߞKv @II o7nVZDFFg}ƬYle'QvmYtV}[ЫW/m"""""?9?x 7n4~=j%''лwoFͫz[۳gOFk3g8r>=z`ر"^}UƎK͚5vƶ <<<Z`ꫯ*W~cٞF/""""rǃܹsdeep S\\իWk̬P>...ƚol7]`CYϟ~]ɄnP-;vĉ7<t҅5kְi&\Ra@-9|3U/34jԈ-[7ߩS'5jDVVSNG3gpqsg4lؐ,6l'0LZ"""""5gϞxxxpA P!/Hpp0W\!==={:]w߾}&77VZ;xה;3f̠O>X,v}^NӦMp6mbƍ:DDDD푑jTp;`/AZZ[n?[/""""K \DDDD.s܎'F꩓"""" gϾ#elْ֭#+"""" ֮]˜9s[ VjgFI\\zWL>%K榳QDǏ3uT-[V;@iu4k֌^zcd ^{5 Xz5&L߿ٓŋn'##>ɓ'3sLtct7WWJ`` n:̙Cll,picƌYf˂ 2e @?fΜIÆ ƍ WyVXAff&[ \{u-HNN淿Nneڴiݛ۷cnLDPPG&((BѢ"5jӟ/CY iii\xB...aÆf???kn߾CRvm<==۷/;wvtv;Wo׳Zر0L_m=""55h qss[n=z鼡b6䄧'-Z 55BN>{`|6vm#G_4~VZ+ܹst˗/={ /THllݺݻWَ(((0Ǚq}1h <==O>NLMKuu+_^~eggWV>nZX,mZvmW^-b´/?DGGs9HIIErq.]DZؽ{7ĉԩS\v܉b!++GתU rرԩcnۙ:un2())fa6?СCWZnQFUݬ1~0g۷ 6III vL&۷ԩS|~+V`Z9rÇwjlsFlllwy1L4mڔh}]d2SRRXh&M"$$jVi/)p=<</\Ek۝=.]3|ml6=_ p8X,};s4mڔƍΝ;iժ͚5ĉSY~G2-ܹsyܹ3nnn8pYfAxvS۷^zE&MVVVV!KNNfٲeL<֭[Wö́㍟ /X8sl/';;f͚U87{}}=gKuu 4à 6mߩSnGwfggӰaC\i߾=~)ϟG/WWWjժE~~>ϟӳ(fԩS,\'Oe|X|r._ \[~6nݻ+]R>եKnɅ GDv_>|WvΝ;"l6ܹsYơ|BonLZoߞ>m:wjlKOOg߾}XVl6'OdʕtgӦM,[)ST@p 2kς{XQݸ_vm~aV\Iaa!/^>s*oU=. .]~z9{,_|E~=x ( l&˃iB:u8x 7bƃ>ޘf>sĈWb ;wC#F`ժU/___zPNDD1M6?\ӧSPP@@@cǎϩzDDnCՕcǒ'|Bf޽;?k111RXXH&Mx'F֭9y1پ}{> wձmĈ={6eee]3gזtamsBBfzˡc믿&((-ZTۙիg&**ʸMQF˘1c{;Q)y,Y¸qpssGS.\رcL0AW4~x{dd$Z㕵k׎0bcc9x 4sBPXXHPPiiiL&vʱcnjU.9;w:DDD^S!&Mлwouu{7w}GVz*eeeNvv6ƝAd޽Ѿ}{*""r9r: ӟ rςp QF4i҄zQTTDFFAAAÇ{a8|0UގIDDDDDA ZlI˖-[>iFGODDDD~t#N""""" EDDDDDAϗnŋ9ufٌdd2UUQvaٰl?Һukl6pǎ#88ݎfn+Rz~Ǐ3uT-[ӧ:u*7ojeȑĉ':u*jr(m۶e58z(?ɓ'qqqᡇ矧~>۷ogPn]bbbxq(wwwݗ_~Ν;P\\L\\)))гgO@II o6OjNHHQQQ4o޼pm)66#GPPP@RRegOJJb޽I2d^^^N_u_׿HHHؖǸq5kþvrss0am+S@;wڅ/YYY-^XAꕔ0{lS\\ҥKyǼرu1n8ˣ(#11ѡ̙3gҰa uU5XL{= x뭷'22WWWJ`` n:̙Clll˅?\(l63f5kFaa!,X)STﭾ}YtMfskח֮]l޶m[5999н{w\\\X,<䓜8qgʕ 2-Z`6[.wy{uKrr2ˋ ҳgOld"88.m6&ɨ>>>t֍ WW>@tt4͛7///z?TU~_D}DJKKСÆ v۲e RM0;2x`, Νjlĺu{ݻ"~0m4W+E IDATJPPSW]WD5u%88}Axxz#GtxݫW/ԁ"b24igf͚5vڷoɓ ++wy"رcʲllݺg}a?sΥqƜ;wD^~eV+Cjnc2xW>}|r?::U={ApuW]WDnnQX$''L׮]+'66xG2sL:uDbb"K.X;s=b^z`߾}V՘-MӦM14jԈ([ @L&6mJtt4[nn(3XRRR4iqQul_]/4/++sj|^zձcGRSSX,4iDgHΟ?Off&={OOOub8Ж/(,ѠA<<<0eddдiӛ~?%3m72ydڷotU~_Dn9Jڵ aРAj wwwN8Ann.C ߟB6mt~;3mڴ}կ_¿o~S\\̖-[h֬p \ÇSTTĆ ̜9BI&rYVZEhhQ~.]X~=<|ƒt.]C=;Nbʕtũ劋)--d2^m6mb͚5L2xFLE_|͆1pL>|222(++#00??? سg.\N:L8񮶷7bׁ̞=[g믓ħ~ -[d̘1>&!!QFa6ر#Æ s(믿&((-ZT?uҩS'%?ԩSiܸ1ߌ}V+#G$f3Xt4hxʼͯ {&>>\۶my*;$$3g}U}""wSRR{%''OOO:t!Cr^~e:w \{$|\\)))гgOh[]ŋȑ#T `_֭KLL =%%%ۜ>}Պ;!!!DEEE7k3oVV+:ϟs+;~"3oƙ nl;vvڅ/YYYƀ:k,yLd"==*<]]:t(STTĺu3gT蛵ϙ7z ryL~g1k]v%99xm6"""༼߿?^^^4lؐ={e|||֭?+WdȐ!hLݺu 0&fa2W]sĉ 0Fw&?z&<<<]vQVVFvv6gϞ]vF?>>>,\.]Tm)))VeGFFR^=6lؠ3[D;U>aFM\\W^ܹsXVp*&*?''lN>͸q5j .!{GLL /"L6F*3_tK2f\\\ʽ59~"3 ›5k0\ ѣԭ[nݺo>oNxxBwww׿Dze5jӧO7(''sѶm[cȑ#yUVոO?\"rسg9/ܹs?>ӦMѣ$&&)X,cOOOV+vtgܬ|xw={6gϞ%>>ޡW^yΝ˥KX|S.3/Z^zѴi V;sD5᯼ .dѢEۯ\Ÿ';//)Sj &ܵFDDLFFZe祗^… 0k֬ e}<#U^hlmڴ7 III[gs))),ZI&;dy{{ШQ#;fyxxPXXh^PP&tg8Ss=bb?>B9&MͻkԾ寪/BS{??ر#/A4i҄ǏW{fΜ9޽~'kFVt=̲e˘N<ȑ#(--`̘1OR[:~"r_ivZ;ӦM3fΝ; ߟ|w>^^^ǎvޚ]ԳgO֬Y3\DM6fLRxu4i/gϞeժUu2f.]~zx/xgJ/W\\l%%%L&ꏈ`ʕ >"6l`/==K.CΩSXr%]tq}YGvCɓ'y9s&>>>ߙ'"? f :OOOv;6u_WV\\lsU<<<8uo&xzzC1v ݻ6mTG:00ٳgרrg۶m:EIHHl6[oUn2)((nݺtԉ(c%K0n8ѣK6l{LL }@<FlcǎFyeee]3gҵkW7k3oV.`#VWwD֘Əo+K6lG1.j4͘L&~kooo.\x.tּyxGyꩧtuֻ;ߪU O,_Wu׷o_uȯY] """" \DDDDDA(Q.""""" EDDDDp""""" EDDDDDApQ."""" \DDDDD(Q.""""" EDDDDp""""" \DDDDDApQ."""" \DDDDD(""""" EDDDDp""""" \DDDDDA(Q."""" \DDDDD(""""" EDDDDDAp""""" \DDDDDA(Q.""""" EDDDD(""""" EDDDDDApQ."""" \DDDDDA(Q.""""" EDDDDp""""" EDDDDDAMtt4۶mSgZb{}ԨQDDD8yEDDDD~j<~U6lꄒ """"r׸4d⫯O>TO^^֭cKhh( b,8… Yp!}_~%K.E̚5|F?O6mG^෿-{O>4i҄wc֬Yl6zei߾=z2ot^ʡCv{V+ǎCl޼s璖F6mh۶-iii̛7͛7Wh)--K.ԯ_BzRR֭~̘1C65 С|۷B]d2ѲeK\]] !==ݘy~衇aƍ; oԨpa~8t͆/|'t֍^z %KO>nݺ9SNL8'p6mʟg|}}uȽ  oU*`ꫯLN9t?mڴا\vv6Ìuy}9s6\DDDD UV<#?\[;` K?L&̤ o%++'|Į](++Hׯ_sqIc[m[k׮|7\b9gA8\qwԉFԩSyG(--̙3?~c&aÆdeeaN8d"&&M&1+ݦML& w˘L&vmD۶mܹ3#!!DϞ=umDΝ+lwwwgƌŽ;طow4mڔ .i&c8N:4mڔ&MkÛ4iBݺuwΤIhٲ%=lْI&ѽ{Gyqa2tiOa?~=22VZ7DDDDD4nݪ֋m EDDDD("""""?_ꂪf1ʹmۖAѸq{֦Ǐ3uT-[pG8V6nܘovȑ#)**"))_|HlPV-c[bb"Xt4hxǪVZL&hժCQF7˷'%%a6kT(طo߉aʔ)qFx f͚E n{Crl6ǎ#$$]vKVVdc6_Yf30eL&锔ܴŋիWgnOWD-_>}Э[7<<<ԩSZqȑ#Yv-V"&&777ceݔ3l0܌cƌaڵdgg|rk6mDNNk(7`Ĉ 2~<8pnnnsRe=2""T]v%99·mFDD}S㩧2-[:]b!22YfըݷZU"77Lx iaaaX8z(o67og2Ԥ^Q6tP>Slقj%??իWjf[z5a€k䄅|r._ \]߿a͍sαf#^z;wfXxGYrC;"""t EWݝiӦ1~?&;;N^^y.'Ϗ>CCCIJJŋvN:LddmWDoZrI&fqqqu̘1økG}ɓ'wG߿6bVZ_ G7e!66B4i“O>IZZ>>>Ӈ2x`z/LBB&LŅ0)"4o'ԩSC=رc.l63p@ooo^~eVZoA~~>#""}޶zEf?~=22VZ7jHHKKc֭Z"""""r)˴&h駮Lp""""" \DDDDDAǏfSg@wGT֬YCzz:fm2h 7n|O[= HD%%%w^rrrC 2///VZF_~Ν;P\\L\\)))гgOh[]ŋȑ#٬1#GFhh(*w}LBII 7n7`֬Y4hYZZ?$wlf̘14k֌BbccY`SLqoŕNzXL{= x뭷'22ҩtPÙ?ݻ_kܹs)--eƍ 4x5kvG_|9}[nxxxũSXjƍ3fIFڵkZ111PTTDRRw怜aÆf3f k׮%;;˗_i&rrrpww]vFo&#F`Ȑ!<呐pss#<<{*qƥիWk._>cǎ%((h":/ݻwPvU "r/DGG{yyѻwo̙T^Frr2 ^^^xyyѳgOlBddd>>>t֍Ǐ`(?2}t}]ڷofd2sYt?77Lx iaaa޳gsΥ9s~zya27oWfp̜9wwwf3L8 re}.]ʄ 1cSN03h"l6>̞=Zj1`*ђ%K8{,ӦM~deeuTW~Z;e;""Rjj*AAAO0;2x`, ΝjlĺuM/;vڷoٳgݻ7r {ѣݱ\ozU;** ł?cXVoСC]6ۗ;w:SlLJZe{^ʞ={4h???֭[oZV+;v &&L&W[~aa!cРAxzzK>}vDD={ /;w.ϰՋ IDATgڴi=zDc\X,XVv{""Lu{aÆӹsg|}}6.ݼk3➞i.]Po\rrrL:H7L855cÆ dffRRRb U 9997mGUXnQF5.… XvU D^JIIaѢEL4ςσFł kK'!/((Tm}lْbxꩧSN瓕uGׄҨQ#+v9l6ړc̠;87ܹs+8pfnW:xUL&Ξ=!L^^~Yl'OuNkРdddc`FFM6u*]D侜lذ!mڴW^w:t(~)[ljիIMMguwˆ  } ˹|2pmv}U[TTf777Ν;ǚ5kzX,<裬\ҡN_tBbb"v233pB׮]~Hx"}Cj""wڦMXlSL4?pٳgYj>B4i“O>ɒ%K{ȮXm۶QZZѣW\!!!T\\\ 3XqEEE\]vQPP@@@cǎYf7-r!޽; Fo""Btt4f]0LZ-[PPP@ݺuԩQQQb,YBJJ nnna6裏>KKKc֭o^.99ѣG7mӃsDDDDq)))xzzAJJA={hذ! EDDD~vyaa!\|Lvv6eeeS-Zh히}=yf\BHH> EEE޽[GMDDDD)"00Ǐsa9p(SRSSfa߿--""""?{"Y|9[bl2^G}8p777pqqՕFQV-~ᇟuCIIɯ ""rw?~h=SDAxRRRx饗ҥ d׮]<3 0o V111 1s璕u[o޼9vq "":P,n;ou|7Ԯ]///OR/^LBB>kf]?,}NܗkKJJ8vSLgիx{{ܹsx]]nXd֬Yƶ"ؽ{7eee< 6̘Y|2-ҽ{wHJJĉꫯOˣv<3<䓼1!C0uTƌڵkf|lڴi׮111ݴ6呐`, ŅǏ3uT&NG}ŋi֬/2_$"w3Մ Xz54nܘѣGs9>#rrrh֬FQFNsfLJzZuѣG5kK,l6;NL>=:uwy޽{ӫW/T"}9\ d R&W_}'|:tړ͛iѢ-..͛?Μ9ի ‚ _¶m*-ŋ1rHxy衇X,̘16#O?m۽{73g$>>ٌ7'N$..9s搛ҥK-ܢE{U5Rҥ4^JU"QQX&ե,$PB*H"JńI&u~3$@h~>yLs;{s !))9s0i$~G6mڔu0a-"00E$"3={0~x,YB2e1c}ƍcѢE(Q%K8}N*sbN\V-^Jll,G'ѣ5jO A9ɓy(믿K/i&JRR7nܠ߿mpӿx 1bfݻwӷo_|}}sٳD>L=Ϗ_|1rL&.]"99B Qb<֣G * 6tҸG׮]9vSիӥK"##իEݝ6mp)}D侜{ `M81>}Ppa|mZTTStNPR%;FRR/^䥗^ k׮c{`ǎ0j(6l7CHL&TB^X|9m۶5N3f̰; f=R\9# 4A~JHH&ɩ:޾}3g̳>;Gaʔ)X,ե_~DٲeiժqvYl#FՕ&MХK}BDs?Wy r{?2?>ׯ_חFѭ[7DDDD 8`[ɛoIҥ;w.-[4oذ!$*U#zQO ;=~L2%KPF ׯϬY={6vA`X8y$իWرcxxxEeӫW/N:E9t萺X#ri /d„ F7Ǐgǎ 2W_}%Kr)%""""G%|׮]DEEqU֭[-ժU+c޽z%EDDDDAx~:t7o:ĻU||<WWW<3gгgO233^hh([lсDIG/dÆ ߟv1d3_μyسgC aʔ)>3g3f eʔ1l63x`RRRXzFGb̘1Xg$-- OOOcڸq3f4za9.\য়~_+7mU˗ͪUdɒt֍ 8/[W$66ԩC>}(\pcwF,`ҥ/55%K~\]]i׮ݻwwz~~u?~<Ǐg՜={6߯SN:} 0dݝUҷo_x 6nHxx8C E{'㏍ma?}vqq[n|h}EAxA9{,ʕӓ>}K/h"tb222 aݺuٓ?8ApiCߋL/^+W#"˗g .]j4&9sE9 pٲe M6$mU4LBǎ0LDGGT}\\\x뭷(_ [1Jq{V̞=D&MD@@Un^[^~ud.]ʼyq׫hѢq!Ο?OӦMN>>/2ol233_q} il6cXowέ úL0FOfXj}n;*ӦM/>>>$''{DAxAtY5kPX1 ,X~… ӸqcM"E1cݛErYVТE vyw~>hגg샣[,ƌcL3L$#"EhhSֆ$joХK2w\L6OHHFrx14i$mXvd29?d{CquuK>Lhh(:uӧ}v"22E)J>,˖-ϖYfM֭իСSe'%%FQ^P"##9rJB ٳ%K2o<㦍~ U2{l~WϟObb";v\|h"J,Iٲe~ 111/_/`<η̘1.Py/^… s%\WСӦMsz]vb {=Wp۷ӤIlJ,ϟ7+WΩ- e!DtWd2QJzi۶-Eeǎ$$$l,ζmޠٷo_}]VT.\1}Hq/'?N/b|׹5]zu̙̙39~8?3/xA࣏>by{{ONRRqqqDDD'___իg̏/[I&\7ow~;|ޙ"r222HMM5 D 8zhm3&&M6b!!!m۶Qreߺu++V>1ȑ#yAЬY36n۷z*'ooo6lի16.\M\FV/য়~L4ӧG͒%KҮ];6lTyGAq[·n݊db֬Ym6_֬Yyqa|6NnW,[#FJ&M-2d[Ӷm[[An:ƎKbb"ŋ;SDmpfaÆΠA잗.]S:\}L:W^yŮlÖ.\`ܸqܾ}jԨg-[ &M6ݚ"c*TB3^Yx1,^~wwwy5-/?{Yn߸}6ŊEt_...tޝ rI4hXbTR%]s<˺~:OfĈ`iᖖ-[:sPAꫯXl))) 2^x!Ocϧp¼vӭ}nܸbŊҮ];""Hhh(˗}:r,\e:?.("22᷄wЁ:sNϟOHHg*==)ɓر^U,k/"Ûo ;̰-Z0z" !$$`^x{ԩpL8N:Uy4oޜ={-*U… |'*TK/I&ڧȣB=ދ(Q.""""" EDDDD_n:"""ǰa(W1gϞO[nڴi8qKӶl_}^z1o<>ǿ"""xL>=;wH"vRSSYz5!!!\tPիǺuxW܅hGZZ}/̙3ٓ|{#q۶mk׮秦Νl6Szu8\UV @ɒ%֭ 4bŊ,_\IDwl6SOѽ{w wxxxحoqwwgY耊pg1e:v|d"::|Upaϟiii,_K2dRP!jԨA\\\u[hA-8teʔŋZ tBŊuEDA#111$$$кukR1̙33+V͛7 ĉ/^m۲l2V^ٳg3f #GdڵS|y)]4۷og֭AZׯ_|üzjGFF7^ݝ?|v9111/a溾;~~~s篿ʡCxl6o3m4|}}mX,"""9r$#F`ܹ\xE1edQN#`ύ7r]~cDzslݻ &h"Yh1H"9%K0m4 w,YBll,f.]b4mڔ˗/sYcHj֬I```니Qőiӻv'k IDAT,Xsܹspm۶ѸqcDrr(ω'Nߟ+V0dƏϕ+W-Çѣ/f[W^)RwwwڴiéSy 6tҸG׮]9vXl6ٽ{7}:w̞={~DFF}lҩED({͛7yם^?))^xOOOzرc o߾:"(%G\~K2wl?#Zsi[Y"--L\\\8t\|4, ft}cccX,3Ƙf2iٲ%W__~4nةED(:uDN\xv}[0ayǎر(/:tiAu`X}mfΜIpp0>,9r)S+`ƌFzIVuՕo>4ib{; 8æMbmۨ\re}}}[.ׯ'998KJII!33HUv6lwiҤ +W͛VǢL&Zh-[طo""""R0.\`ܸqܾ}jԨa.Lhh(Cߟ-[rYFG_~DٲeiժQQQAXncǎ%11ŋ-ӢE 6mDr]T8;--[jժ:dݬ[s`c+)&?^BB5,XqRYt@777)S T"gQQQDFF% \x ʗ/ϕ+Wظq#=<~>޾hɥ`ԴGn g⒎SPOrr2ׯ_wyT`N,ҨQ#u#"1T)]$I$sb˗^ApWWW/7nP. TRO?TBD~WMŹ~:%sOJLNgtޅ t_ ~)^77}Z[""Eq&~L%CI.&Wy>A-qs׬5uEQ."")XO_nݺEzz,@2&nx`c(\L&+"rh""""" EDDDDDApQ."""" \DDDDD(Q.""""" EDDDDp""""" \DDDDDApQ."""" \DDDDD(""""" EDDDDp""""" \DDDDDA(Q."""" \DDDDD(""""" EDDDDDAp""""" \DDDDDA(Q.""""" EDDDD(""""" EDDDDDApQ."""" \DDDDDA(Q.""""" EDDDDp""""" EDDDDDApQ."""" \DDDDD(zIϞ=ٹs^ay'2d-Zx$Ӿ}{ʔ)WXDDDD qү_?""""<͛x"e˖SN4hnGyf.\@bb"ŋGM2e:t(ʕӻEDDDD Do߾3gE͚5yꩧb֬Yl߾XnΝL *oQzuvJILLd߾}$''s (UW\!""gb2rٺs~gTBNhذ|-(^87oDGGO˖-:t(/?~}2k֬l8p +VڵklݺȹkBg&"""" niٲ%UV}[/""""(S."""" \DDDDDA(-::~!"""On:٥1}t.^lÃ'|W^y+˝;w7rqRRR(\0AAA ԩS3g0f<==1LxxxPF K```.b <<<pTnŊY|,"""" 蠸ѷo_J.)))fڴi/0c :vkf#Go>ԩcloѢExxxHXXseĉN{& yff&&%Jh׮ݻw7y{{Ӹqc7npnݚӧ$$$l29;M6GHHH 00aÆQBo֭[ÃZjѯ_?7n O>T\ٮu<-#GdڵS|y)]p""X,d2=浜/33>d28b#pÇw}v|ɻ2333gIIIL:OOOuŋz*}\rH/)R#GTRܼy9sƈ#0acƌ1ZNJ~ػw/&Lۛ-Zd""YBG $s >f ]/2l222M)6ⶁ50mn'"q^P!/bpE͛ʕ+y׹uŋ7ݷo ,d2Ɗ+yd2Cjxk39x 3foootBxx8ݺul6w1i$E߶aÆ~~~tڕٳgHVzH"iӆS(; s mY7Gcmd},qTog蜂圦Y[sZ?ZmnnlV]\\?ɄtWWW, nn]Ϟ=P6L+W={'0p@#FѨQ##"444)X:3[,x :t._LZZٜg˔3eV^^^idg z5)+oc~܎SeMCɭ;G-޶m*5趶c.\Vxyya2\rٳ={>( ʗ/oL&W^͖rmfΜIpp0>,9r)S8W" 1Lg l?@ܒ51T G-; 9=f=n;j۞筯Qndffݶٶ;ӈ# WP!Xyܸq5j Yf2g̙Ӻuk+FZZQQQ 55xꊷ7O?4[f"""hѢpYf,_~\qB-R\v 6/V׮]\rW"(@ئ7䔛5 6htf?gZ)ήwT58w@;:Ysm|7eZ[NObokurE~A >>>?dHgq%NEyez)ƍǦMxIMMH"TPc=oڴ)Æ #88e˖1b\]]iҤ ]t1{ g$&&RD Fׯ$%%QlYZje\P/2qDݻw_@4A|NjFFq_vn`_,wE:k5we;k}rZ6-mSRlSU^dH.Ç[ZlIժU PB PDDřF7f?έWnN)t|nc~)w"ę:=@<_. 6aXpwwr`9ETTn~3N2;v >>^C(vfmM l[Os dddd sW^]'HY5sTNhG]Q]l_nӊbYHt4"##ٲe ǏҥK̟?zrJV\Iɒ%]6;vUV [D! lsm8`/k^m^s>/ =̺P)xmZsۦ:jϩP^dGqO#f.\Ȇ t׭[7׮]ڵkl۶C` Ҭ7Y8GL @N7;d;_GAgN'zNYSn*LAYř G#e„ \x1,ZȘw^6oLJJ ӧOcPw={:Y^[74:z|ɶQFtR!!!!Cжm[m~~6lѽ7 L2O}uyOOOczeffNrԩUTAA0i%:09ݠiPgmG8J=--ZZsjwgcb%>ɳ#ϙ3.䭷ޢwF֑)mO"Ν^~f8m44h=-5;|nwɖ-[5j1Zɓ''s>i߾ezxxp!\p={P^=K߾}}['ӧO`,]eY}g5k#Gz:CpԺgG#V:6S=2R;$'`~r?E CCC5ke-mӧOÆ _dĈƼ9sGﺎs4iݻiڴ)26l`võ۶5?--hVʍ7*ՕΝ;Έ#;e&22qF83S^ק{DDD(GS$FrP: y; e36ӜsB&斛Wnn,?p7׭[ *mYk-G#gtR9~8ӦMN:yӦM׿s=Ǐ?Ȼkķo&666۠5Vy8v5kִkέL3gYKDGGBժUi޼9F~߿޾əRZ56mڤHAmޯog (#VxG9uoG#Ճ#:8[^y^z^G8OLLdFFYp!>>>w~d^y.\@JJ .7n. ˖-˭[TË{ :3eѽ{w֬YÐ!CLG"##i֬puxɒ%wW夤0zhHNNKyP,/ܙlo0p(v浭y>ȭU9~n;؋{ownΛ9s8p+Wb..G:{,k׮qAM3f0r>,/iӦv *D@@]zL~gffr1ԩt5kF||,ׯ/ΈR/"yw9 `c;Ќm05Mn|uܶ%"X)))\x>h O=!!!L6˗/꜒ѣGIHHҥKL:.wVZxxb|-ܹk׮cL;uꔑӧOS|yc_g˴Hѣ֭sNi-[ 0w\Νرcٹs=kƑ#GQP뒛C.] """KGohѢn7Gf̙t./ÇYf߿?ᤧs9gwSa~-ZΝ;;תU+<<;}eas믓›o{Oeqww7ʖ-KBB GWWWRRRHOO+/""""?ry]oƵk0͸FPP& ///*T nnnFQGYp!֮]˼yx'vZnl}OѢEi޼9Ŋ3.4ܸq7or F`y,s鉗g |b+;vlٲ ?+VRJTT+RF DDDD - f͛7鮮űaj׮MzWS X,1w\&O̮]h޼S;iiio<톖 B _RSSVo"E0}tBBBr>|Asظq#Ǐ'%%…  /@:uɄ5jԠo߾Udɒt-%F_bE/_O ֭qɓ'9p@e-[okǏ'88lvO?dEDDDふϳe֮]k| .̖LqIDATgRRRTR*U7n$<{RRR>}l6mYfFv޽1ۛƍӸqcҺukhݺ⑟XlGݝMңGcС֯_?@BB 6 *}vnJll,ԪU~θq4h}rv㹕mmI9r$k׮%>>LҥɃ˃,6믿/Հ#G$ WWWj׮M"Em#55ո^cҤIvm.YK.wrGzs4iؾ};O>qǂ ؿ?7nBBBHJJbΜ9L4M6/^̉'裏Xt)#G3rH,Y´iӈ#,, ooo&Li_|9/Bػw/&L`ѢEh"}DDDD ~Ԯ]_{'.(wjl&,,̘7x`x|֭[/^ܘo> yW1LƈL8VX!C?~|yY oooҥ ;G%0L.]EaÆ.]ڵ+ǎsj*۪W^)RwwwڴiéSqۃ.pټ\ttFIXXÔ*UpAifvO8W*UD搜8eQF4jHŰ CCCs$007xׯtRΝ˔)SrCllU@@b"СCDDDpeҌ~ܳz7e[{yyFffŔ<:aWֹZ!{@BBB.11!CslV\9۴-_~% w,_zףuQ\9n ?:tŋy.kmю L&^m۷o3sLZn?O.];"*[D~={dرv f]ֶq=퓈 ((yiq6lgϞ5VZum[W |@BB10PÆ 祈g֭|gcXHMM%**mİi&bbbX,$$$m6Yy{{ONRRqqqDDDТE NsfX|˗/suRRR4RE]Ɔ m+V k׮U""[LL wցuD~VuO>w5oohР/ժUl6GW_q m-ZO?p3qشi>)R *0vX~… 7۷oC56lSufٲe1WWW4iB.]:?DJ(a(_<#44$ʖ-KV ???^|E&NHzz:{6n&ul{Ygya_N=8: | 7o&!!___:vH`qYƌ0<3FTes[m{z뭷ϸz+V}JIIa۷ 7nkfWNHH ŋm۶zs<"LÇl*yULŽ;r fW^ر#GSNjm>./]4O=uԡC(QBP͚5[.WCtg{pʍFb֭Y z^U~n[9~^o^ƌcwaaYArDDAC*T`С{2j(N^5?}ڥLT|y# WPV 4A~JHH=c6Vhk@k+WqO̘1.жn϶G!"#֨Q# *DJJp?%KҮ];)ÇIMM ooo#G:00"E7`Xv7n̶ەuMTۛ&MrJn޼ mR^=x D;Օ !..U\bʻԑH$^ŗb/_swQnnΞ=×7 6v]n[Ǐ$=zTnp84gI7|paEQIbѹs]nNNNܱZ***7 D"uwwK~qC7*=rHc܍:n; B!UVV={xb> ܹS---*((j3fh媮Vvv^^z%r\WM)//WCC8pڷojkke Њ+'NGM]z~m9θm޴p~:6UŒRKҌ3۫p8,ݮ^ed53J[l1?bڲejjjJ.^jnnV]]ݸǙξq\S>%) iG8~kM;Ifː44ھ … T\\Z%%%O6ҥKeNSN3}%uWwwdXTXXh.g}Veff*'?~577_bҥKUVV3g) i֬Yxֱ8 +&5N`*IkNxN& I;TZZvmmmڳgV222t}W_Mj[á2~h׮]:r ܹsf͚U^^8p CCCCھ}eٔeTssb󩥥|0s*++o>0 +V(77Dz|rUWW+;;[^wq9'SeFyyyR+:uJ? 5۴~s9%-C:TA!0]|DWfVVcNEIu~-w͜?3gr;'G7l9p+D8@ "p,I| `1wIENDB`modem-manager-gui-0.0.19.1/src/modules/000775 001750 001750 00000000000 13261703575 017431 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/appdata/fr.po000664 001750 001750 00000007576 13261703575 017572 0ustar00alexalex000000 000000 # # Translators: msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: French (http://www.transifex.com/ethereal/modem-manager-gui/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Contrôle des fonctions spécifiques au modem haut débit EDGE / 3G / 4G" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Interface graphique simple compatible avec Modem manager, les services système Wader et oFono capable de contrôler les fonctions spécifiques aux modems à large bande EDGE/3G/4G." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Vous pouvez vérifier l'équilibre de votre carte SIM, envoyer ou recevoir des messages SMS, contrôler la consommation du trafic mobile et plus, en utilisantModem Manager GUI." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Fonctionnalités actuelles :" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Envoyer et recevoir des messages SMS et les stocker dans la base de données" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Initier des requêtes USSD et lire les réponses (également en utilisant des sessions interactives)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Afficher les informations sur le périphérique : nom de l'opérateur, type appareil, IMEI, IMSI, niveau du signal" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Analyse des réseaux mobiles disponibles" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Afficher les statistiques du trafic mobile et en définir les limites" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Notez que certaines fonctionnalités peuvent ne pas être disponibles en raison des limitations des différents services système ou même des versions différentes du service système en cours d'utilisation." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/help/ar/ar.po000664 001750 001750 00000063250 13261703575 017474 0ustar00alexalex000000 000000 # # Translators: # Eslam Maolaoy , 2016 # Eslam Maolaoy , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Arabic (http://www.transifex.com/ethereal/modem-manager-gui/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "اعتماد المترجم" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "" #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "ماريو بلاترمان" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "اليكس" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "تزويد الكود" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "الترجمة" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "ساعد البرنامج" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "واجهة مستخدم البرنامج" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "البحث عن الشبكات المتوفرة" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "الإستخدام" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "معلومات قانونية" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "التراخيص" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "انت حر في:" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "للتأقلم مع العمل" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "تحت توفر الشروط التالية" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "التبليغ عن الأخطاء وطلب الميزات الجديدة" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "التبليغ عن الأخطاء" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "خصص البرنامج لمطابقة احتياجاتك" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "الضبط" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "استخدم قائمة الأرقام لديك" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "قائمة جهات الإتصال" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "معلومات الشبكة" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "فعل جهاز المودم الخاص بك" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "المودم" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "واجهة مستخدم البرنامج" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "البحث عن الشبكات المتوفرة" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "البحث عن الشبكات" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "نافذة البحث عن الشبكات ل <_:app-1/>" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "الرسائل القصيرة" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "احصل على احصائيات الشبكة" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "ضغط الشبكة" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "رموز USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/src/vcard.h000664 001750 001750 00000002015 13261703575 017227 0ustar00alexalex000000 000000 /* * vcard.h * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #ifndef __VCARD_H__ #define __VCARD_H__ gint vcard_parse_string(const gchar *string, GSList **contacts, gchar *group); gint vcard_parse_list(GSList *vcardrows, GSList **contacts, gchar *group); #endif /* __VCARD_H__ */ modem-manager-gui-0.0.19.1/help/ar/000775 001750 001750 00000000000 13261703575 016524 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/pl_PL/pl_PL.po000664 001750 001750 00000062143 13261703575 020504 0ustar00alexalex000000 000000 # # Translators: # Wiktor Jezioro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (Poland) (http://www.transifex.com/ethereal/modem-manager-gui/language/pl_PL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "" #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Tłumaczenia" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Skanuj dostępne sieci mobilne" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Użycie" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Wspomóż ten projekt" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Licencja" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Zgłoś błędy i prześlij propozycje nowych funkcji" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Zgłoś błąd" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Konfiguracja" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Użyj twojej listy kontaktów" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Listy kontaktów" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Pobierz informacje o sieciach mobilnych" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Informacje o sieci" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modemy" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Szukaj dostępnych sieci" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Szukanie sieciowe" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Pobierz statystyki o ruchu sieciowym" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Ruch sieciowy" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "Kody USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/src/vcard.c000664 001750 001750 00000025406 13261703575 017233 0ustar00alexalex000000 000000 /* * vcard.c * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include "mmguicore.h" #include "vcard.h" enum _mmgui_vcard_attribute { MMGUI_VCARD_ATTRIBUTE_BEGIN = 0, MMGUI_VCARD_ATTRIBUTE_END, MMGUI_VCARD_ATTRIBUTE_EMAIL, MMGUI_VCARD_ATTRIBUTE_FN, MMGUI_VCARD_ATTRIBUTE_N, MMGUI_VCARD_ATTRIBUTE_TEL, MMGUI_VCARD_ATTRIBUTE_UNKNOWN }; static gchar *vcard_unescape_value(const gchar *valuestr, gchar *strstart, gint attribute); static gchar *vcard_parse_attribute(const gchar *srcstr, gint attribute); static gchar *vcard_unescape_value(const gchar *valuestr, gchar *strstart, gint attribute) { gsize length, startlength; gint i, numchars; gchar *unescapedstr, *reallocstr; if (valuestr == NULL) return strstart; length = strlen(valuestr); if (length == 0) return strstart; i = 0; startlength = 0; numchars = 0; if (strstart != NULL) { startlength = strlen(strstart); /*Ignore space in new part of value*/ if (valuestr[0] == ' ') { i = 1; } } unescapedstr = g_malloc0(startlength + length + 1); while (valuestr[i] != '\0') { if (valuestr[i] == '\\') { /*Escaped character*/ switch (valuestr[i+1]) { /*Replace known sequence with single character*/ case 'n': unescapedstr[startlength+numchars] = '\n'; numchars++; i += 2; break; case 'r': unescapedstr[startlength+numchars++] = '\r'; numchars++; i += 2; break; case ',': case ';': case '\\': unescapedstr[startlength+numchars] = valuestr[i+1]; numchars++; i += 2; break; default: /*Unknown sequence - replace slash with space*/ unescapedstr[startlength+numchars] = ' '; numchars++; i++; break; } } else if (valuestr[i] == ';') { /*Delimiter*/ if ((valuestr[i+1] != ';') && (valuestr[i+1] != '\0')) { /*Value exists - delimiter must be replaced*/ unescapedstr[startlength+numchars] = ','; numchars++; i++; } else { /*No value - just skip delimiter*/ i++; } } else { /*Regular character - copy without change*/ if (attribute == MMGUI_VCARD_ATTRIBUTE_TEL) { /*Escape phone number*/ if ((isdigit(valuestr[i])) || ((i == 0) && (valuestr[i] == '+'))) { unescapedstr[startlength+numchars] = valuestr[i]; numchars++; } } else { /*Other attributes*/ unescapedstr[startlength+numchars] = valuestr[i]; numchars++; } i++; } } /*Terminate string*/ unescapedstr[startlength+numchars] = '\0'; if (numchars == 0) { /*String is empty*/ g_free(unescapedstr); return strstart; } /*Truncate string*/ if ((numchars + 1) < length) { reallocstr = g_realloc(unescapedstr, startlength + numchars + 1); if (reallocstr != NULL) { unescapedstr = reallocstr; } } /*Copy start fragment*/ memcpy(unescapedstr, strstart, startlength); return unescapedstr; } static gchar *vcard_parse_attribute(const gchar *srcstr, gint attribute) { gchar *valuestr; if (srcstr == NULL) return NULL; valuestr = strchr(srcstr, ':'); if (valuestr == NULL) return NULL; return vcard_unescape_value(valuestr + 1, NULL, attribute); } gint vcard_parse_string(const gchar *srcstr, GSList **contacts, gchar *group) { guint numcontacts, strnum; gchar **strings; GSList *vcardrows; if ((srcstr == NULL) || (contacts == NULL)) return 0; /*Split string by line delimeters*/ strings = g_strsplit(srcstr, "\r\n", 0); /*String is empty*/ if (strings == NULL) return 0; /*Linked list with rows*/ strnum = 0; vcardrows = NULL; while (strings[strnum] != NULL) { if (strings[strnum][0] != '\0') { vcardrows = g_slist_prepend(vcardrows, strings[strnum]); } strnum++; } numcontacts = 0; if (vcardrows != NULL) { /*Reverse linked list*/ vcardrows = g_slist_reverse(vcardrows); /*Parse contacts*/ numcontacts = vcard_parse_list(vcardrows, contacts, group); } /*Free string array*/ g_strfreev(strings); return numcontacts; } gint vcard_parse_list(GSList *vcardrows, GSList **contacts, gchar *group) { guint numcontacts; GSList *iterator; gchar *value, *row; gint curattribute; mmgui_contact_t contact; if ((vcardrows == NULL) || (contacts == NULL)) return 0; numcontacts = 0; contact = NULL; curattribute = MMGUI_VCARD_ATTRIBUTE_UNKNOWN; for (iterator = vcardrows; iterator != NULL; iterator = iterator->next) { row = (gchar *)iterator->data; if (row != NULL) { if ((row[0] != '\0') && (row[0] != '\r') && (row[0] != '\n')) { if (strchr(row, ':') == NULL) { /*String break*/ if (contact != NULL) { switch (curattribute) { /*Concatenate row*/ case MMGUI_VCARD_ATTRIBUTE_EMAIL: contact->email = vcard_unescape_value(row, contact->email, curattribute); break; case MMGUI_VCARD_ATTRIBUTE_FN: if (contact->name != NULL) { contact->name = vcard_unescape_value(row, contact->name, curattribute); } else if (contact->name2 == NULL) { contact->name2 = vcard_unescape_value(row, contact->name2, curattribute); } break; case MMGUI_VCARD_ATTRIBUTE_N: if (contact->name2 != NULL) { contact->name2 = vcard_unescape_value(row, contact->name2, curattribute); } else if (contact->name2 == NULL) { contact->name = vcard_unescape_value(row, contact->name, curattribute); } break; case MMGUI_VCARD_ATTRIBUTE_TEL: if (contact->number == NULL) { contact->number = vcard_unescape_value(row, contact->number, curattribute); } else if (contact->number2 == NULL) { contact->number2 = vcard_unescape_value(row, contact->number2, curattribute); } break; /*Do nothing*/ case MMGUI_VCARD_ATTRIBUTE_BEGIN: case MMGUI_VCARD_ATTRIBUTE_END: case MMGUI_VCARD_ATTRIBUTE_UNKNOWN: default: break; } } } else { /*New attribute*/ switch (row[0]) { case 'b': case 'B': if (g_ascii_strcasecmp((const gchar *)row, "BEGIN:VCARD") == 0) { /*VCard beginning*/ curattribute = MMGUI_VCARD_ATTRIBUTE_BEGIN; contact = g_new0(struct _mmgui_contact, 1); contact->id = numcontacts; /*Full name of the contact*/ contact->name = NULL; /*Telephone number*/ contact->number = NULL; /*Email address*/ contact->email = NULL; /*Group this contact belongs to*/ contact->group = g_strdup(group); /*Additional contact name*/ contact->name2 = NULL; /*Additional contact telephone number*/ contact->number2 = NULL; /*Boolean flag to specify whether this entry is hidden or not*/ contact->hidden = FALSE; /*Phonebook in which the contact is stored*/ contact->storage = MMGUI_MODEM_CONTACTS_STORAGE_ME; } break; case 'e': case 'E': if (g_ascii_strcasecmp((const gchar *)row, "END:VCARD") == 0) { /*VCard ending*/ curattribute = MMGUI_VCARD_ATTRIBUTE_END; if (contact != NULL) { if (((contact->name != NULL) || (contact->email != NULL) || (contact->name2 != NULL)) && ((contact->number != NULL) || (contact->number2 != NULL))) { /*Set primary name*/ if (contact->name == NULL) { if (contact->email != NULL) { contact->name = g_strdup(contact->email); } else if (contact->name2 != NULL) { contact->name = g_strdup(contact->name2); } } /*Add contact to list*/ *contacts = g_slist_prepend(*contacts, contact); numcontacts++; } else { /*Free contact data*/ if (contact->name != NULL) { g_free(contact->name); } if (contact->number != NULL) { g_free(contact->number); } if (contact->email != NULL) { g_free(contact->email); } if (contact->group != NULL) { g_free(contact->group); } if (contact->name2 != NULL) { g_free(contact->name2); } if (contact->number2 != NULL) { g_free(contact->number2); } g_free(contact); } } } else if (g_ascii_strncasecmp((const gchar *)row, "EMAIL", 5) == 0) { /*Email*/ curattribute = MMGUI_VCARD_ATTRIBUTE_EMAIL; contact->email = vcard_parse_attribute(row, MMGUI_VCARD_ATTRIBUTE_EMAIL); } break; case 'f': case 'F': if (g_ascii_strncasecmp((const gchar *)row, "FN:", 3) == 0) { /*Formatted name*/ curattribute = MMGUI_VCARD_ATTRIBUTE_FN; value = vcard_parse_attribute(row, MMGUI_VCARD_ATTRIBUTE_FN); if (value != NULL) { if (contact->name == NULL) { contact->name = value; } else if (contact->name2 == NULL) { contact->name2 = value; } } } break; case 'n': case 'N': if (g_ascii_strncasecmp((const gchar *)row, "N:", 2) == 0) { /*Name*/ curattribute = MMGUI_VCARD_ATTRIBUTE_N; value = vcard_parse_attribute(row, MMGUI_VCARD_ATTRIBUTE_N); if (value != NULL) { if (contact->name2 == NULL) { contact->name2 = value; } else if (contact->name == NULL) { contact->name = value; } } } break; case 't': case 'T': if (g_ascii_strncasecmp((const gchar *)row, "TEL", 3) == 0) { /*Telephone*/ curattribute = MMGUI_VCARD_ATTRIBUTE_TEL; value = vcard_parse_attribute(row, MMGUI_VCARD_ATTRIBUTE_TEL); if (value != NULL) { if (contact->number == NULL) { contact->number = value; } else if (contact->number2 == NULL) { contact->number2 = value; } } } break; default: /*Unknown entry*/ curattribute = MMGUI_VCARD_ATTRIBUTE_UNKNOWN; break; } } } } } /*Reverse list if contacts found*/ if (numcontacts > 0) { *contacts = g_slist_reverse(*contacts); } return numcontacts; } modem-manager-gui-0.0.19.1/src/svcmanager.h000664 001750 001750 00000007510 13261703575 020263 0ustar00alexalex000000 000000 /* * svcmanager.h * * Copyright 2015-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __SVCMANAGER_H__ #define __SVCMANAGER_H__ #include #include #include "polkit.h" /*Events*/ enum _mmgui_svcmanser_event { MMGUI_SVCMANGER_EVENT_STARTED = 0, MMGUI_SVCMANGER_EVENT_ENTITY_ACTIVATED = 1, MMGUI_SVCMANGER_EVENT_ENTITY_CHANGED = 2, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR = 3, MMGUI_SVCMANGER_EVENT_FINISHED = 4, MMGUI_SVCMANGER_EVENT_AUTH_ERROR = 5, MMGUI_SVCMANGER_EVENT_OTHER_ERROR = 6 }; /*Event callback*/ typedef void (*mmgui_svcmanager_event_callback)(gpointer svcmanager, gint event, gpointer subject, gpointer userdata); /*Activation technologies*/ enum _mmgui_svcmanager_activation_tech { MMGUI_SVCMANGER_ACTIVATION_TECH_NA = 0, MMGUI_SVCMANGER_ACTIVATION_TECH_SYSTEMD, MMGUI_SVCMANGER_ACTIVATION_TECH_DBUS }; /*Entity types*/ enum _mmgui_svcmanser_entity_type { MMGUI_SVCMANGER_TYPE_SERVICE = 0, MMGUI_SVCMANGER_TYPE_INTERFACE = 1 }; /*DBus interface*/ struct _mmgui_svcmanager_interface { gchar *name; gboolean active; gboolean activatable; }; typedef struct _mmgui_svcmanager_interface *mmgui_svcmanager_interface_t; /*Systemd service*/ struct _mmgui_svcmanager_service { gchar *name; gboolean loaded; gboolean active; gboolean running; gboolean enabled; }; typedef struct _mmgui_svcmanager_service *mmgui_svcmanager_service_t; /*State transition*/ struct _mmgui_svcmanager_transition { gint type; gchar *modname; gchar *job; guint timer; gboolean enable; union { mmgui_svcmanager_service_t service; mmgui_svcmanager_interface_t interface; } entity; }; typedef struct _mmgui_svcmanager_transition *mmgui_svcmanager_transition_t; struct _mmgui_svcmanager { /*Service activation interface*/ GDBusConnection *connection; /*Systemd management*/ gboolean systemdtech; GDBusProxy *managerproxy; GHashTable *services; /*Standard DBus activation*/ gboolean dbustech; GDBusProxy *dbusproxy; GHashTable *interfaces; /*Polkit interface*/ mmgui_polkit_t polkit; /*Transitions queue*/ GQueue *transqueue; gboolean svcsinqueue; gboolean intsinqueue; /*User data and callback*/ gpointer userdata; mmgui_svcmanager_event_callback callback; /*Last error message*/ gchar *errormsg; }; typedef struct _mmgui_svcmanager *mmgui_svcmanager_t; gchar *mmgui_svcmanager_get_last_error(mmgui_svcmanager_t svcmanager); mmgui_svcmanager_t mmgui_svcmanager_open(mmgui_polkit_t polkit, mmgui_svcmanager_event_callback callback, gpointer userdata); void mmgui_svcmanager_close(mmgui_svcmanager_t svcmanager); gboolean mmgui_svcmanager_get_service_state(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint); gint mmgui_svcmanager_get_service_activation_tech(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint); gboolean mmgui_svcmanager_schedule_start_service(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint, gchar *modname, gboolean enable); gboolean mmgui_svcmanager_start_services_activation(mmgui_svcmanager_t svcmanager); gchar *mmgui_svcmanager_get_transition_module_name(mmgui_svcmanager_transition_t transition); #endif /* __SVCMANAGER_H__ */ modem-manager-gui-0.0.19.1/man/LINGUAS000664 001750 001750 00000000067 13261703575 016775 0ustar00alexalex000000 000000 ar bn de fr id pl pt_BR ru tr uk uz@Cyrl uz@Latn zh_CN modem-manager-gui-0.0.19.1/packages/gentoo/000775 001750 001750 00000000000 13261703575 020243 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/svcmanager.c000664 001750 001750 00000076307 13261703575 020270 0ustar00alexalex000000 000000 /* * svcmanager.c * * Copyright 2015-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "svcmanager.h" #include "polkit.h" /*DBus constants*/ #define MMGUI_DBUS_START_REPLY_SUCCESS 1 #define MMGUI_DBUS_START_REPLY_ALREADY_RUNNING 2 /*Timeouts in ms*/ #define MMGUI_SVCMANAGER_ACTIVATION_TIMEOUT 15000 static void mmgui_svcmanager_set_last_error(mmgui_svcmanager_t svcmanager, gchar *error); static void mmgui_svcmanager_service_destroy_key(gpointer data); static void mmgui_svcmanager_service_destroy_value(gpointer data); static void mmgui_svcmanager_interface_destroy_key(gpointer data); static void mmgui_svcmanager_interface_destroy_value(gpointer data); static void mmgui_transition_destroy(mmgui_svcmanager_transition_t transition); static void mmgui_transition_queue_destroy(GQueue *transqueue); static gboolean mmgui_svcmanager_open_systemd_manager_interface(mmgui_svcmanager_t svcmanager); static gboolean mmgui_svcmanager_open_dbus_activation_interface(mmgui_svcmanager_t svcmanager); static gboolean mmgui_svcmanager_services_enable(mmgui_svcmanager_t svcmanager, mmgui_svcmanager_transition_t transition); static gboolean mmgui_svcmanager_services_activation_service_timeout(gpointer userdata); static void mmgui_svcmanager_services_activation_service_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer userdata); static void mmgui_svcmanager_services_activation_interface_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer userdata); static gboolean mmgui_svcmanager_services_activation_chain(mmgui_svcmanager_t svcmanager); gchar *mmgui_svcmanager_get_last_error(mmgui_svcmanager_t svcmanager) { return svcmanager->errormsg; } static void mmgui_svcmanager_set_last_error(mmgui_svcmanager_t svcmanager, gchar *error) { if ((svcmanager == NULL) || (error == NULL)) return; if (svcmanager->errormsg != NULL) { g_free(svcmanager->errormsg); } svcmanager->errormsg = g_strdup(error); } static void mmgui_svcmanager_service_destroy_key(gpointer data) { gchar *key; if (data == NULL) return; key = (gchar *)data; g_free(key); } static void mmgui_svcmanager_service_destroy_value(gpointer data) { mmgui_svcmanager_service_t service; if (data == NULL) return; service = (mmgui_svcmanager_service_t)data; g_free(service); } static void mmgui_svcmanager_interface_destroy_key(gpointer data) { gchar *key; if (data == NULL) return; key = (gchar *)data; g_free(key); } static void mmgui_svcmanager_interface_destroy_value(gpointer data) { mmgui_svcmanager_interface_t interface; if (data == NULL) return; interface = (mmgui_svcmanager_interface_t)data; g_free(interface); } static void mmgui_transition_destroy(mmgui_svcmanager_transition_t transition) { if (transition == NULL) return; if (transition->modname != NULL) { g_free(transition->modname); } if (transition->job != NULL) { g_free(transition->job); } g_free(transition); } static void mmgui_transition_queue_destroy(GQueue *transqueue) { mmgui_svcmanager_transition_t transition; if (transqueue == NULL) return; do { /*Remove first transition object*/ transition = g_queue_pop_head(transqueue); if (transition != NULL) { /*Free transistion object*/ if (transition->modname != NULL) { g_free(transition->modname); } if (transition->job != NULL) { g_free(transition->job); } g_free(transition); } } while (transition != NULL); /*Free queue*/ g_queue_free(transqueue); } static gboolean mmgui_svcmanager_open_systemd_manager_interface(mmgui_svcmanager_t svcmanager) { GError *error; GVariant *svclistanswer; GVariant *svclistv; GVariantIter svciter; gchar *svcname, *svcloadedstr, *svcactivestr, *svcrunningstr, *svcunitname, *svcenabledstr; mmgui_svcmanager_service_t service; if (svcmanager == NULL) return FALSE; /*Test if systemd can be used*/ if (!mmgui_polkit_action_needed(svcmanager->polkit, "ru.linuxonly.modem-manager-gui.manage-services", TRUE)) { g_debug("Systemd doesn't work with polkit\n"); return FALSE; } /*Create systemd proxy object*/ error = NULL; svcmanager->managerproxy = g_dbus_proxy_new_sync(svcmanager->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", NULL, &error); if ((svcmanager->managerproxy == NULL) && (error != NULL)) { g_debug("Unable create proxy object: %s\n", error->message); g_error_free(error); return FALSE; } /*Request systemd service list*/ error = NULL; svclistanswer = g_dbus_proxy_call_sync(svcmanager->managerproxy, "ListUnits", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((svclistanswer == NULL) && (error != NULL)) { g_debug("Unable to get Systemd services list: %s\n", error->message); g_error_free(error); g_object_unref(svcmanager->managerproxy); return FALSE; } /*Services hash table*/ svcmanager->services = g_hash_table_new_full(g_str_hash, g_str_equal, mmgui_svcmanager_service_destroy_key, mmgui_svcmanager_service_destroy_value); /*Enumerate services*/ if (g_variant_n_children(svclistanswer) > 0) { svclistv = g_variant_get_child_value(svclistanswer, 0); g_variant_iter_init(&svciter, svclistv); while (g_variant_iter_loop(&svciter, "(ssssssouso)", &svcname, NULL, &svcloadedstr, &svcactivestr, &svcrunningstr, NULL, NULL, NULL, NULL, NULL)) { /*Only services*/ if ((g_strrstr(svcname, ".service") != NULL) && (g_str_equal(svcloadedstr, "loaded"))) { service = g_new0(struct _mmgui_svcmanager_service, 1); service->name = g_strdup(svcname); service->loaded = TRUE; service->active = g_str_equal(svcactivestr, "active"); service->running = g_str_equal(svcrunningstr, "running"); service->enabled = FALSE; g_hash_table_insert(svcmanager->services, service->name, service); g_debug("New Systemd service: %s (%u:%u:%u)\n", service->name, service->loaded, service->active, service->running); } } } g_variant_unref(svclistanswer); /*Request systemd unit files list*/ error = NULL; svclistanswer = g_dbus_proxy_call_sync(svcmanager->managerproxy, "ListUnitFiles", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((svclistanswer == NULL) && (error != NULL)) { g_debug("Unable to get Systemd unit files list: %s\n", error->message); g_error_free(error); g_object_unref(svcmanager->managerproxy); return FALSE; } /*Enumerate units*/ if (g_variant_n_children(svclistanswer) > 0) { svclistv = g_variant_get_child_value(svclistanswer, 0); g_variant_iter_init(&svciter, svclistv); while (g_variant_iter_loop(&svciter, "(ss)", &svcunitname, &svcenabledstr, NULL)) { /*Only services*/ if (g_strrstr(svcunitname, ".service") != NULL) { svcname = strrchr(svcunitname, '/'); if (svcname != NULL) { service = g_hash_table_lookup(svcmanager->services, svcname + 1); if (service == NULL) { service = g_new0(struct _mmgui_svcmanager_service, 1); service->name = g_strdup(svcname + 1); service->loaded = FALSE; service->active = FALSE; service->running = FALSE; service->enabled = g_str_equal(svcenabledstr, "enabled"); g_hash_table_insert(svcmanager->services, service->name, service); g_debug("New Systemd service \'%s\' enabled: %u\n", svcname + 1, service->enabled); } else { service->enabled = g_str_equal(svcenabledstr, "enabled"); g_debug("Known Systemd service \'%s\' enabled: %u\n", svcname + 1, service->enabled); } } } } } g_variant_unref(svclistanswer); return TRUE; } static gboolean mmgui_svcmanager_open_dbus_activation_interface(mmgui_svcmanager_t svcmanager) { GError *error; GVariant *intlistanswer; GVariant *intlistv; GVariantIter intiter; gchar *intname; mmgui_svcmanager_interface_t interface; if (svcmanager == NULL) return FALSE; /*Create DBus proxy object*/ error = NULL; svcmanager->dbusproxy = g_dbus_proxy_new_sync(svcmanager->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, &error); if ((svcmanager->dbusproxy == NULL) && (error != NULL)) { g_debug("Unable create proxy object: %s\n", error->message); g_error_free(error); return FALSE; } /*Request activatable interfaces list*/ error = NULL; intlistanswer = g_dbus_proxy_call_sync(svcmanager->dbusproxy, "ListActivatableNames", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((intlistanswer == NULL) && (error != NULL)) { g_debug("Unable to get activatable Dbus interfaces list: %s\n", error->message); g_error_free(error); g_object_unref(svcmanager->dbusproxy); return FALSE; } /*Interfaces hash table*/ svcmanager->interfaces = g_hash_table_new_full(g_str_hash, g_str_equal, mmgui_svcmanager_interface_destroy_key, mmgui_svcmanager_interface_destroy_value); /*Enumerate interfaces*/ if (g_variant_n_children(intlistanswer) > 0) { intlistv = g_variant_get_child_value(intlistanswer, 0); g_variant_iter_init(&intiter, intlistv); while (g_variant_iter_loop(&intiter, "s", &intname, NULL)) { /*Interfaces that can be activated*/ interface = g_new0(struct _mmgui_svcmanager_interface, 1); interface->name = g_strdup(intname); interface->active = FALSE; interface->activatable = TRUE; g_hash_table_insert(svcmanager->interfaces, interface->name, interface); g_debug("New activatable DBus interface: %s\n", interface->name); } } g_variant_unref(intlistanswer); /*Request active interfaces list*/ error = NULL; intlistanswer = g_dbus_proxy_call_sync(svcmanager->dbusproxy, "ListNames", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((intlistanswer == NULL) && (error != NULL)) { g_debug("Unable to get active Dbus interfaces list: %s\n", error->message); g_error_free(error); g_object_unref(svcmanager->dbusproxy); g_hash_table_destroy(svcmanager->interfaces); return FALSE; } /*Enumerate active interfaces*/ if (g_variant_n_children(intlistanswer) > 0) { intlistv = g_variant_get_child_value(intlistanswer, 0); g_variant_iter_init(&intiter, intlistv); while (g_variant_iter_loop(&intiter, "s", &intname, NULL)) { /*Interfaces that already activated*/ if (intname[0] != ':') { interface = g_hash_table_lookup(svcmanager->interfaces, intname); if (interface == NULL) { interface = g_new0(struct _mmgui_svcmanager_interface, 1); interface->name = g_strdup(intname); interface->active = TRUE; interface->activatable = FALSE; g_hash_table_insert(svcmanager->interfaces, interface->name, interface); g_debug("New active DBus interface: %s\n", interface->name); } else { interface->active = TRUE; g_debug("Known active DBus interface: %s\n", interface->name); } } } } g_variant_unref(intlistanswer); return TRUE; } mmgui_svcmanager_t mmgui_svcmanager_open(mmgui_polkit_t polkit, mmgui_svcmanager_event_callback callback, gpointer userdata) { mmgui_svcmanager_t svcmanager; GError *error; /*Service manager object for system services activation*/ svcmanager = g_new0(struct _mmgui_svcmanager, 1); svcmanager->systemdtech = FALSE; svcmanager->managerproxy = NULL; svcmanager->services = NULL; svcmanager->dbustech = FALSE; svcmanager->dbusproxy = NULL; svcmanager->interfaces = NULL; svcmanager->polkit = polkit; svcmanager->callback = callback; svcmanager->userdata = userdata; svcmanager->errormsg = NULL; error = NULL; /*DBus system bus connection*/ svcmanager->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); if ((svcmanager->connection == NULL) && (error != NULL)) { g_debug("Error getting system bus connection: %s", error->message); g_error_free(error); g_free(svcmanager); return NULL; } /*Systemd manager interface*/ svcmanager->systemdtech = mmgui_svcmanager_open_systemd_manager_interface(svcmanager); /*Dbus activation interface*/ svcmanager->dbustech = mmgui_svcmanager_open_dbus_activation_interface(svcmanager); /*At least DBus interface must be available*/ if ((!svcmanager->systemdtech) && (!svcmanager->dbustech)) { g_object_unref(svcmanager->connection); g_free(svcmanager); return NULL; } /*Initilize static transitions queue*/ svcmanager->transqueue = g_queue_new(); svcmanager->svcsinqueue = FALSE; svcmanager->intsinqueue = FALSE; return svcmanager; } void mmgui_svcmanager_close(mmgui_svcmanager_t svcmanager) { if (svcmanager == NULL) return; /*Systemd services hash table*/ if (svcmanager->services != NULL) { g_hash_table_destroy(svcmanager->services); svcmanager->services = NULL; } /*Systemd proxy object*/ if (svcmanager->managerproxy != NULL) { g_object_unref(svcmanager->managerproxy); svcmanager->managerproxy = NULL; } /*DBus interfaces hash table*/ if (svcmanager->interfaces != NULL) { g_hash_table_destroy(svcmanager->interfaces); svcmanager->interfaces = NULL; } /*DBus proxy object*/ if (svcmanager->dbusproxy != NULL) { g_object_unref(svcmanager->dbusproxy); svcmanager->dbusproxy = NULL; } /*DBus system bus connection*/ if (svcmanager->connection != NULL) { g_object_unref(svcmanager->connection); svcmanager->connection = NULL; } /*Last error message*/ if (svcmanager->errormsg != NULL) { g_free(svcmanager->errormsg); svcmanager->errormsg = NULL; } g_free(svcmanager); } gboolean mmgui_svcmanager_get_service_state(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint) { mmgui_svcmanager_service_t service; mmgui_svcmanager_interface_t interface; if ((svcmanager == NULL) || ((svcname == NULL) && (svcint == NULL))) return FALSE; /*Systemd service state*/ if ((svcmanager->systemdtech) && (svcname != NULL)) { service = g_hash_table_lookup(svcmanager->services, svcname); if (service != NULL) { return service->running; } } /*DBus interface state*/ if ((svcmanager->dbustech) && (svcint != NULL)) { interface = g_hash_table_lookup(svcmanager->interfaces, svcint); if (interface != NULL) { return interface->active; } } return FALSE; } gint mmgui_svcmanager_get_service_activation_tech(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint) { mmgui_svcmanager_service_t service; mmgui_svcmanager_interface_t interface; if ((svcmanager == NULL) || ((svcname == NULL) && (svcint == NULL))) return MMGUI_SVCMANGER_ACTIVATION_TECH_DBUS; /*Systemd activation*/ if ((svcmanager->systemdtech) && (svcname != NULL)) { service = g_hash_table_lookup(svcmanager->services, svcname); if (service != NULL) { if (!service->running) { return MMGUI_SVCMANGER_ACTIVATION_TECH_SYSTEMD; } } } /*DBus activation*/ if ((svcmanager->dbustech) && (svcint != NULL)) { interface = g_hash_table_lookup(svcmanager->interfaces, svcint); if (interface != NULL) { if (interface->activatable) { if (!interface->active) { return MMGUI_SVCMANGER_ACTIVATION_TECH_DBUS; } } } } return MMGUI_SVCMANGER_ACTIVATION_TECH_NA; } gboolean mmgui_svcmanager_schedule_start_service(mmgui_svcmanager_t svcmanager, gchar *svcname, gchar *svcint, gchar *modname, gboolean enable) { mmgui_svcmanager_transition_t transition; mmgui_svcmanager_service_t service; mmgui_svcmanager_interface_t interface; if ((svcmanager == NULL) || ((svcname == NULL) && (svcint == NULL))) return FALSE; /*Systemd activation queue*/ if ((svcmanager->systemdtech) && (svcname != NULL)) { service = g_hash_table_lookup(svcmanager->services, svcname); if (service != NULL) { if (!service->running) { transition = g_new0(struct _mmgui_svcmanager_transition, 1); transition->type = MMGUI_SVCMANGER_TYPE_SERVICE; transition->modname = g_strdup(modname); transition->job = NULL; transition->timer = 0; transition->enable = enable; transition->entity.service = service; g_queue_push_head(svcmanager->transqueue, transition); svcmanager->svcsinqueue = TRUE; g_debug("Systemd service \'%s\' start scheduled\n", svcname); } else { g_debug("Systemd service \'%s\' already running\n", svcname); } return TRUE; } g_printf("Can\'t use Systemd for \'%s\' service activation\n", svcname); } /*DBus activation queue*/ if ((svcmanager->dbustech) && (svcint != NULL)) { interface = g_hash_table_lookup(svcmanager->interfaces, svcint); if (interface != NULL) { if (interface->activatable) { if (!interface->active) { transition = g_new0(struct _mmgui_svcmanager_transition, 1); transition->type = MMGUI_SVCMANGER_TYPE_INTERFACE; transition->modname = g_strdup(modname); transition->job = NULL; transition->timer = 0; transition->enable = enable; transition->entity.interface = interface; g_queue_push_tail(svcmanager->transqueue, transition); svcmanager->intsinqueue = TRUE; g_debug("DBus interface \'%s\' activation scheduled\n", svcint); } else { g_debug("DBus interface \'%s\' already active\n", svcint); } return TRUE; } } g_printf("Can\'t use DBus activation mechanism for \'%s\' interface\n", svcint); } return FALSE; } static gboolean mmgui_svcmanager_services_enable(mmgui_svcmanager_t svcmanager, mmgui_svcmanager_transition_t transition) { gchar **services; GVariant *request; GVariant *answer; GError *error; if ((svcmanager == NULL) || (transition == NULL)) return FALSE; if ((!svcmanager->systemdtech) || (transition->type != MMGUI_SVCMANGER_TYPE_SERVICE) || (!transition->enable)) return FALSE; /*Systemd services array to enable*/ services = g_malloc0(sizeof(gchar *) * 2); services[0] = g_strdup(transition->entity.service->name); services[1] = NULL; /*Request with array and flags for persistent enablement and symlinks repalcement*/ request = g_variant_new("(^asbb)", services, FALSE, TRUE); error = NULL; answer = g_dbus_proxy_call_sync(svcmanager->managerproxy, "EnableUnitFiles", request, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((answer == NULL) && (error != NULL)) { /*Free services array*/ g_strfreev(services); /*Return error*/ g_debug("Unable to enable Systemd service \'%s\': %s\n", transition->entity.service->name, error->message); mmgui_svcmanager_set_last_error(svcmanager, error->message); g_error_free(error); return FALSE; } /*Not really interested in result*/ g_variant_unref(answer); /*Free services array*/ g_strfreev(services); return TRUE; } static gboolean mmgui_svcmanager_services_activation_service_timeout(gpointer userdata) { mmgui_svcmanager_t svcmanager; mmgui_svcmanager_transition_t transition; svcmanager = (mmgui_svcmanager_t)userdata; if (svcmanager == NULL) return G_SOURCE_REMOVE; /*Remove transition object from queue*/ transition = g_queue_pop_head(svcmanager->transqueue); /*Signal error*/ g_debug("Timeout while starting Systemd service \'%s\' for module \'%s\'", transition->entity.service->name, transition->modname); mmgui_svcmanager_set_last_error(svcmanager, _("Timeout")); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } /*Destroy transition*/ mmgui_transition_destroy(transition); /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); return G_SOURCE_REMOVE; } static void mmgui_svcmanager_services_activation_service_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer userdata) { mmgui_svcmanager_t svcmanager; mmgui_svcmanager_transition_t transition; guint jobid; gchar *jobpath, *svcname, *svcstate, *statedescr; svcmanager = (mmgui_svcmanager_t)userdata; if (svcmanager == NULL) return; transition = g_queue_peek_head(svcmanager->transqueue); /*Queue mustn't be empty*/ if (transition != NULL) { /*We're looking for job termination*/ if (g_str_equal(signal_name, "JobRemoved")) { /*Job status description*/ g_variant_get(parameters, "(uoss)", &jobid, &jobpath, &svcname, &svcstate); /*Compare job path and check status*/ if (g_str_equal(jobpath, transition->job)) { /*Remove transition object from queue and stop timer*/ transition = g_queue_pop_head(svcmanager->transqueue); g_source_remove(transition->timer); if (g_str_equal(svcstate, "done")) { /*Enable service if requested*/ if (transition->enable) { mmgui_svcmanager_services_enable(svcmanager, transition); } /*Service successfully started*/ g_debug("Systemd service \'%s\' for module \'%s\' successfully started\n", transition->entity.service->name, transition->modname); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ACTIVATED, transition, svcmanager->userdata); } /*Destroy transition*/ mmgui_transition_destroy(transition); /*And go to next entity*/ mmgui_svcmanager_services_activation_chain(svcmanager); } else { /*Service not started*/ if (g_str_equal(svcstate, "canceled")) { statedescr = _("Job canceled"); } else if (g_str_equal(svcstate, "timeout")) { statedescr = _("Systemd timeout reached"); } else if (g_str_equal(svcstate, "failed")) { statedescr = _("Service activation failed"); } else if (g_str_equal(svcstate, "dependency")) { statedescr = _("Service depends on already failed service"); } else if (g_str_equal(svcstate, "skipped")) { statedescr = _("Service skipped"); } else { statedescr = _("Unknown error"); } g_debug("Error while starting Systemd service \'%s\' for module \'%s\'. %s\n", transition->entity.service->name, transition->modname, statedescr); mmgui_svcmanager_set_last_error(svcmanager, statedescr); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } /*Destroy transition*/ mmgui_transition_destroy(transition); /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); } } } } } static void mmgui_svcmanager_services_activation_interface_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer userdata) { mmgui_svcmanager_t svcmanager; mmgui_svcmanager_transition_t transition; GError *error; GVariant *data; gint status; svcmanager = (mmgui_svcmanager_t)userdata; if (svcmanager == NULL) return; /*Remove transition object from queue*/ transition = g_queue_pop_head(svcmanager->transqueue); error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { /*Error while activation*/ g_printf("Error activating interface \'%s\' for module \'%s\'. %s\n", transition->entity.interface->name, transition->modname, error->message); mmgui_svcmanager_set_last_error(svcmanager, error->message); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } g_error_free(error); /*Destroy transition*/ mmgui_transition_destroy(transition); /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); } else { /*Get activation status - maybe meaningless*/ g_variant_get(data, "(u)", &status); g_variant_unref(data); if ((status == MMGUI_DBUS_START_REPLY_SUCCESS) || (status == MMGUI_DBUS_START_REPLY_ALREADY_RUNNING)) { /*Interface is activated or already exists*/ g_debug("Interface \'%s\' for module \'%s\' successfully activated. Status: %u\n", transition->entity.interface->name, transition->modname, status); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ACTIVATED, transition, svcmanager->userdata); } /*Destroy transition*/ mmgui_transition_destroy(transition); /*And go to next entity*/ mmgui_svcmanager_services_activation_chain(svcmanager); } else { /*Status is unknown*/ g_debug("Interface \'%s\' for module \'%s\' not activated. Unknown activation status: %u\n", transition->entity.interface->name, transition->modname, status); mmgui_svcmanager_set_last_error(svcmanager, _("Unknown activation status")); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } /*Destroy transition*/ mmgui_transition_destroy(transition); /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); } } } static gboolean mmgui_svcmanager_services_activation_chain(mmgui_svcmanager_t svcmanager) { mmgui_svcmanager_transition_t transition; GVariant *answer; GError *error; transition = g_queue_peek_head(svcmanager->transqueue); if (transition != NULL) { /*Work on next transistion*/ if (transition->type == MMGUI_SVCMANGER_TYPE_SERVICE) { /*Schedule Systemd unit start*/ error = NULL; answer = g_dbus_proxy_call_sync(svcmanager->managerproxy, "StartUnit", g_variant_new("(ss)", transition->entity.service->name, "replace"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if ((answer == NULL) && (error != NULL)) { g_debug("Unable to schedule start Systemd service \'%s\' for module \'%s\'. %s\n", transition->entity.service->name, transition->modname, error->message); mmgui_svcmanager_set_last_error(svcmanager, error->message); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } g_error_free(error); /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); return FALSE; } /*Watch for job completion*/ g_variant_get(answer, "(o)", &transition->job); transition->job = g_strdup(transition->job); g_variant_unref(answer); g_debug("Systemd service activation started, job: %s\n", transition->job); /*Timer used as timeout source*/ transition->timer = g_timeout_add(MMGUI_SVCMANAGER_ACTIVATION_TIMEOUT, mmgui_svcmanager_services_activation_service_timeout, svcmanager); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_CHANGED, transition, svcmanager->userdata); } } else if (transition->type == MMGUI_SVCMANGER_TYPE_INTERFACE) { /*Schedule DBus service activation*/ g_dbus_proxy_call(svcmanager->dbusproxy, "StartServiceByName", g_variant_new("(su)", transition->entity.interface->name, 0), G_DBUS_CALL_FLAGS_NONE, MMGUI_SVCMANAGER_ACTIVATION_TIMEOUT, NULL, (GAsyncReadyCallback)mmgui_svcmanager_services_activation_interface_handler, svcmanager); g_debug("Interface activation started"); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_CHANGED, transition, svcmanager->userdata); } } else { /*Unknown entity type*/ g_debug("Unknown entity type: %u\n", transition->type); mmgui_svcmanager_set_last_error(svcmanager, _("Unknown entity type")); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_ENTITY_ERROR, transition, svcmanager->userdata); } /*Free transition queue*/ mmgui_transition_queue_destroy(svcmanager->transqueue); return FALSE; } } else { /*No more jobs in queue - finish process*/ if (svcmanager->svcsinqueue) { /*Unsubscribe from Systemd events if needed*/ error = NULL; g_dbus_proxy_call_sync(svcmanager->managerproxy, "Unsubscribe", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error != NULL) { /*Do not pay much attention to such errors*/ g_printf("Unable to unsubscribe from Systemd events: %s\n", error->message); g_error_free(error); } } /*Drop state values*/ svcmanager->svcsinqueue = FALSE; svcmanager->intsinqueue = FALSE; /*Signal process finish*/ if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_FINISHED, NULL, svcmanager->userdata); } } return TRUE; } gboolean mmgui_svcmanager_start_services_activation(mmgui_svcmanager_t svcmanager) { GError *error; if (svcmanager == NULL) return FALSE; /*If activation queue is empty just return*/ if (g_queue_get_length(svcmanager->transqueue) == 0) { g_debug("All services already active - nothing to do\n"); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_FINISHED, NULL, svcmanager->userdata); } return TRUE; } /*Request password for Systemd units activation*/ if (svcmanager->svcsinqueue) { if (!mmgui_polkit_request_password(svcmanager->polkit, "ru.linuxonly.modem-manager-gui.manage-services")) { g_debug("Wrong credentials - unable to continue with services activation\n"); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_AUTH_ERROR, NULL, svcmanager->userdata); } return FALSE; } /*OK, authorization was successfull, now subscribe to signals*/ error = NULL; g_dbus_proxy_call_sync(svcmanager->managerproxy, "Subscribe", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error != NULL) { g_debug("Unable to subscribe to signals: %s\n", error->message); mmgui_svcmanager_set_last_error(svcmanager, error->message); if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_OTHER_ERROR, NULL, svcmanager->userdata); } g_error_free(error); return FALSE; } /*And connect signal handler*/ g_signal_connect(svcmanager->managerproxy, "g-signal", G_CALLBACK(mmgui_svcmanager_services_activation_service_handler), svcmanager); } /*Signal start services activation process*/ if (svcmanager->callback != NULL) { (svcmanager->callback)(svcmanager, MMGUI_SVCMANGER_EVENT_STARTED, NULL, svcmanager->userdata); } /*And start activation*/ mmgui_svcmanager_services_activation_chain(svcmanager); if (svcmanager->svcsinqueue) { /*Drop authorization*/ mmgui_polkit_revoke_authorization(svcmanager->polkit, "ru.linuxonly.modem-manager-gui.manage-services"); } return TRUE; } gchar *mmgui_svcmanager_get_transition_module_name(mmgui_svcmanager_transition_t transition) { if (transition == NULL) return NULL; return transition->modname; } modem-manager-gui-0.0.19.1/src/smsdb.h000664 001750 001750 00000007107 13261703575 017247 0ustar00alexalex000000 000000 /* * smsdb.h * * Copyright 2012-2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __SMSDB_H__ #define __SMSDB_H__ enum _mmgui_smsdb_sms_folder { MMGUI_SMSDB_SMS_FOLDER_INCOMING = 0, MMGUI_SMSDB_SMS_FOLDER_SENT, MMGUI_SMSDB_SMS_FOLDER_DRAFTS }; struct _smsdb { const gchar *filepath; guint unreadmessages; }; typedef struct _smsdb *smsdb_t; struct _mmgui_sms_message { gchar *number; gchar *svcnumber; GArray *idents; GString *text; gulong dbid; gboolean read; gboolean binary; guint folder; time_t timestamp; }; typedef struct _mmgui_sms_message *mmgui_sms_message_t; smsdb_t mmgui_smsdb_open(const gchar *persistentid, const gchar *internalid); gboolean mmgui_smsdb_close(smsdb_t smsdb); /*Message functions*/ mmgui_sms_message_t mmgui_smsdb_message_create(void); void mmgui_smsdb_message_free(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_number(mmgui_sms_message_t message, const gchar *number); const gchar *mmgui_smsdb_message_get_number(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_service_number(mmgui_sms_message_t message, const gchar *number); const gchar *mmgui_smsdb_message_get_service_number(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_text(mmgui_sms_message_t message, const gchar *text, gboolean append); const gchar *mmgui_smsdb_message_get_text(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_data(mmgui_sms_message_t message, const gchar *data, gsize len, gboolean append); gboolean mmgui_smsdb_message_set_identifier(mmgui_sms_message_t message, guint ident, gboolean append); guint mmgui_smsdb_message_get_identifier(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_timestamp(mmgui_sms_message_t message, time_t timestamp); time_t mmgui_smsdb_message_get_timestamp(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_read(mmgui_sms_message_t message, gboolean read); gboolean mmgui_smsdb_message_get_read(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_folder(mmgui_sms_message_t message, enum _mmgui_smsdb_sms_folder folder); enum _mmgui_smsdb_sms_folder mmgui_smsdb_message_get_folder(mmgui_sms_message_t message); gboolean mmgui_smsdb_message_set_binary(mmgui_sms_message_t message, gboolean binary); gboolean mmgui_smsdb_message_get_binary(mmgui_sms_message_t message); gulong mmgui_smsdb_message_get_db_identifier(mmgui_sms_message_t message); /*General functions*/ guint mmgui_smsdb_get_unread_messages(smsdb_t smsdb); gboolean mmgui_smsdb_add_sms(smsdb_t smsdb, mmgui_sms_message_t message); GSList *mmgui_smsdb_read_sms_list(smsdb_t smsdb); void mmgui_smsdb_message_free_list(GSList *smslist); mmgui_sms_message_t mmgui_smsdb_read_sms_message(smsdb_t smsdb, gulong idvalue); gboolean mmgui_smsdb_remove_sms_message(smsdb_t smsdb, gulong idvalue); gboolean mmgui_smsdb_set_message_read_status(smsdb_t smsdb, gulong idvalue, gboolean readflag); #endif /* __SMSDB_H__ */ modem-manager-gui-0.0.19.1/help/C/figures/traffic-window.png000664 001750 001750 00000176474 13261703575 023424 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxyxڷ-dXB," ( "* ((/ z<~GeqCϫ EA9,alLf}f&3$ ʤ_WU?]TDN%~@ @P5֭['١W*N@ UͨQ_c\qw* ,%@ \=Z3%(3??6V@ U?̺u$CQ@ @p%Net<@ W1.V+NYFf3  G0h@ >(BAAEEEȲpx<v;r\u #\ @ 2999l6E!))$0 nJJJ%??/t:IIIA] #\ ӧO>$={c#PQ\v;F&MeNGLL 111Ԯ]Gb%990A>,vN|bhѣeoXXRWQ 8NV^֭[9{,nX4h@޽曁jѷ~?O֬Y<@Ps)**p`0h޼9AsDDD͚58jï^ vZw}Pf4_mr+--ga…8qmҿ6mʡCغukk5HQKெ,l6n7 6D$<ONaÆnl6[P%\ TXϱchԨk׮%66/jx-;v>3h ڷox1T"-[Ν;#11[nO&۷/Ce9rt|IoΚ5kxq{9x G%--'|!##ȨQ9s&O<=zf{ 6,/&33̢EWn$I=z4R nCXXXƨ?`۱DDDi_`7sڹ7oرc=:ZE&6eÿ+ǏgРAqk֭[ԩS9x 7|3۷L6uiX/R:vȲe|s8<3^hH\\9/"'}$&&O?͆ ر#%%%]uƐ!Ckٿ?ӦMŋ>\4bccdܹU gŊ|XV:t%Kª٧~^_~\s5AuٶmsdggGvv6$$$0'6mnE\\OKm8wϾϳm6}qqq\.nwW7of x7k֌ a<6m h W#fp8ZEuҾ}{6oLNN:>}-9f||~@#3f gϞeȐ!Zx?#ϟG$Zj(4oޜra~7Zh?tP{1VX[on'\s N~t岦K.ԩSݻwS\\u]޽{)..&33nAgʕdffV)M60~xN>СCYϞ=1cNSi DAAڻ`̘1h| u@ 9("<=IJJ";;siÏ?s"ﭵ I4h'O;믿C=ĢEhԨO<V\Lx7ogΜaʔ)̚5Yf1~xwAu÷Zk׎ݻa:w̭Zn,|;Jii)4mڔXbcciڴ)ᔖb~MEQZlIjj* }Mݺu8|ԩSGۗSP'OWvKcÆ ۷O۾knv8zCŻk0P\/Gz7nȑ#_Պ9P+몄jr4Síl޽;P6IVVp}ѫWrP?~7m߾}<Ml5cHqӸx"'NQF̚5OS\\sD$z}n>N<ӹk:u*gϞe: _֯_ƍ֭aڵΩ,|;nnݺZJRRǏp*@puQZZʻヒb^z>ߺeĈ̘1/$Ib@w]w矓*;v~:usM7v9{,ǎcɒ%>-ޕJPP[V-oСCA(U O>̙3+WnbĈܹ#G0qDڴicL>scaW@ szw}'bXʕyՊ`@ߩS'Fhi|.%ŋ3vX:wL˖-yPE6>,3eYWFz(-- xGpB~7ZnC=D˖-F^ꫯؿ?&L_s:,X?M6?Fjj*cƌ 8xew)}yW9rdɚ/|(qJ8 5kְo>}Q^z%rh Xt)ׯgϞ=(Bbb"ݺuGZ8ݺuCe/_͎Ӹqc^vJQQQP-AD$f3%^aa!'O&///`Haa!A`nZe$F֭[T7ӧOcѦMrssxسgJeHwy;<"$IkٯNGrXѤIOGEEd jG'IDGG( ԪU'<^OBBfш,˸\.JKKGQrqPW2ش4"""(**";;7,,Zjisrss5PJ8nDP͛73i$ji $Ott\n7p∍y/^INEQ8}4Ua9w镮hyONNn Z&<<\J&Mr(**`0 rĈ@p^C 6mDAAZW_nQQz=j x8}4jl6W8&?iҤzlڨxDtt|.+l^z|\.ԩ>|8t_vsij׮]ኸC[g ::U{b`:S@p刌dܹ#I.bD HN'IIIL& l6^h.lNuev9u @ f#**MbX(,,$//ۍ` ""x! #\ @btĐí(6wiii \MWyL@ Ȳiዖp@  #p@  #p@  c@ A @ W]5@ G$@ @p1 @ I;@ @p%CQN<ɨQp\W֗Ǐs#2]jN@ !Z˗3vX:wRǏgʔ)ddd`2hԨVb`Ըo޼9O?tkz=P6w233˥CݿhѢJTQ @#IR^,ӰaC6mn0n 5~r(..ztJwu_ @P3$)yWxy9s ӎ;>3~gINN_`ر 6F1e,Xd>c4ر#Fs LĉY|94ƌCݺuذak֬L޽;,AAAF19|}Y9s&&MbٲeL&JKK9ry!I ,jj.!)v̙3&##… >}:mڴӧO2c0Xh%%%15f9`v bۙ;w.$+rJs{2w\MիWs=.q@ '_~Ν;xڵ+[n vnرc1X,∏jja3Dm6vbȑ8NL&C ~9oԨQЫW/233tt:2339wKe„ 3FVX@ii){aĈ8L& *w(R+hv;[laѸn\.s?c֭[7@ At`͛vӮ];͛ԩ(Bll,n@ȥo~~>QQQȲ @llznXXv\t:x< /rJ/^L2dM4/^n)--(}\I.G|=O<( 'O֎KG0@ WJfʲ̦M(**bܸq~ƍԩHiРޑ HKK ''r{_M7݄,,[Yf1k֬G:11\\sssQY/%>j+;4gRRR| 6_k5]@ +C(#??~ٳgkK/ѣG9s &ݻ'(dee_p!`aaa|ͬXFAA_|=z)ܹ<1L!mVba͚5ϭ,ݗ0vʜ9s8q;vM6fʕ>Zww@ <lڴ[n$ͅq4k֌M61|py,YӱZ0n8{1cn!CpjȲc=|SO=`k׮tV,ˬ^{zZ5Ǐ_vmN(}7o^9r?>~;v,/sU}a:u^xO>X$IҴ>@ WiӦQFQQQc/^~3x+گPl1s>K!нe&q}0=.5>+>PNRx @ .l.nj-@ KG$tаaC֮]+V@ yzArRQ @pe-@ $e@  IR@ C[>..@ @@@ bp@  ௉(>}ӧOe+\.<n/H#I^GN 6O@ :uL ^` <%߳h"n:tuz( F .qFf3O=.1D=Ь֭#**lذ#Gp7lFӡ(AqEKqq1 LNNV;#kyL _G>|Z\.yB^ټy3< ͚5V| }zTYB2֬YCBBIII厕l2 =zh4j̀m49r۷o;UVSj~(((\A0x Zz[ovcҸqc:vvk#=S].QQQ4k֌ ĠTEsFͅUGhVF(:iT]:9rHfsm|gԩS[oUKk:{oǃ ..Tmۆ&==~5ellJC*c??]yL g֭r7nڵ~>Ӯ];t:;vfJQG}Dxx8m۶zRye_,OzBU4$Ikt\A]kfNIKK#&&ǣ Ft j`l6>S4h@F()) X<O@ ItZj1k׎۷vҥH%wfey,))֭[9r.@<&|$ iȑO?] ~iiѢ/PwZxx8G*… )-- Xɨt:֭cԩV5]W%j^4/EuңGSP5U BeLKRPPpU䡊tW{?hNaZYjEEE¨):Yd}s!>>-[v}W?t:u%55Xerrr8qV5`q:l޼~Ѽy=|rss+tG dY{%11GNǢEZ>SS@ (̙3ѷn:|і-[صk7xcn3A>}HOO<>>p믿۷V'0`QAE_[բyuep7iٲ%6pM#BLeFke۶mZ9y(nx͛#2 6{nN'z(dY`0вeKj=z("##$o|ڴi(* 7@^hٲ%L&z=aaa$$$pr7jG#NGtt4wYf*5alXVڀzc.;:uh&2[fǎ R_ UsGZ|t]k!==Y*,S^=F3YԖmIlҧRQt:r Z"**L~]*ڵÚ[Ɵ]?,s]wi]rW[fׯgƍ#2C[<R4 'D/q0HDff&7nD$Fip9h޼9?0:CQO\\$i:AYҩS'ڶm`ѢE] eM T$ITԮ^ rp:oŋ}*[m݆$##Iݻ78Π&**~w N<~<..Nk7*2{w*B\\ܟJ,N''9U>Ϛ/hn_onn.VB~o;+}QF/cƌh4߲}v0aFGotR9r$z r9ׯϞ={8qt޽Np8tl66lȭJAAsz7nL=z4Æ Yf$$$лwobbbXht֍H-lÁ^Y 6myא$oiӦk+Pa5ɤt,\ۍlfԨQ< 6,h=U@ (O-Z*[HTEaΝY9{,_56SII ?6msΌ1ӧ$$$m۶r?Δ)S F'''ӪU+zMlllqƬZ RVK%.KWV: N'FQ%4 z=û4Pŋ9y$))) 4nI{&5v &h-h:p7jN'={SNZkR[ǃ({|ǘL* 9x5hZ|f(XV>5[͂QRR’%Kx뭷hڴ) CRRyf-zKrrҤIt:VZɓ'ꫯ7n;v䣏>bԩp |K.K,˄swrEV^b!22Ӹqcz='N <}ZUVN:%V hz:uxgx}`(y Α#GpҮ];CtttҪR|HBsa8pfg%EQp8L8EII ͣiӦ\wuZ={d߾}|פҠAF͜9s0ÇQ'_l& Y9~8+W;/R+"??é4>`СsA~7ڷo?LZ6N'z+M4a,_9A{%jZ|fx<^xnpĨQxw˵{^U,ȲLbb%@:<$&&ҤIz^>\dYk׮DGGsi~'$Iѣ呞NQQ1wwq_u:Tܯ4:#Ghj}t:ܹ3&s1mkFx<̝;v8p m۶qfffe?ofNOy4;w\]`ĉL2kyP5=OE(..՞;wN_s9Μ9Soz0WѣG),,c?{n\.ʟzNf֬Y<[oy'IHH… ^Ǐ_IU-W:_st:fϞlfȑ>n{1^~e>yׯ]wW_}UίY @X,&M+Š+0aP*tRv܉oh47w1c -\z)~m2e ,d2p8)..&99Ǔ^}l5kPRRlwyU۰ܲey1mɓ'[o/3eZ̘1Gc@[ 2(..{ڼi9[nՌ-[УG>*޺tؑNW/$-- YIMMZ+E(yݪs 8m𡷖)_jĉ,_BZZcƌnݺ/{3pfϞMII }h4ұcG\!毃^'22˅``ذaȲݻٺu+zI*+gϞt:ϟya:t@jj*.~Z+楔?c2h޼9#F &&R]qyF6FBe\.͚5rqAJJJ馛hڴ)ŋs1z=,n::tȑ#ZX/^ `o# ̙3oٳ;wٳg3d[ yWعs'۶mHF۷/ftR-s2e^ۭ:N6lZ$$$0dBceMӱxbƏ_nfbbb횆u?~1`1bUTQ^״7nÆ gϞO|A^U)$IB~дiSڶmN###<}Qm3hԨQ{a4ܹ3ߛk.+V(3&V+ݺuc RXXܹs?>٬\ݻujՊުN;vW_}>VTt… y'Yr%gϮ",qDdd$nZjin(_uѣGc|yJJ ;*z+;v񐗗Gvv_vᄢf1zhM4iWKS|Vznذ!ݻw̙3ddd;vle:uU\\%%%@?-[=z=Ï?Or-EQ[=֭[;v,fB\\ G"33sx*]v_sudڪ?2x`mGlmڴw/d2tuFxe fΜIZXx1?8SN-Mxx8 6d޽lݺnݺhj8߿AF_й<jZjl@x_}ͥh6j(-z\Nxbb`صk#G 2ҁi:ԫWN)**"""Cjj*?ҥ Ԯ]:TQ[yUI4}ꖥ((..B w[HB$PR (kf葖'W3L>|X _65kZld8OffٳΝ_5vw͈#pL&6sL(y;}j{G1L &hwZY֠Z7DEE}@yI/e峠@sũ(ëλS )쎢v{Sn3f Iϟgҥt֍nI3U#~A~4iBvxyg}ZJ*\pAp7ydxOս{w2l0:DII 7xc@58-Nϔ)SXr%/~ :TE!66W^yL۶m}\0TKFTTs'"lTufϞͿ/mVݻyfN>r+N(zԪU+ly;P^UkS; oъZ]-7#fx᭓oV:A= U)P(TA 4 j(EGGk_[EQ@Q i۶-'>|8}e\.NSԿ6Y),,ʼjU,UT@Y_~IVV6Zmͯsx<>{N#W5 ?ʠι۴Ŏ, . ҦM$Ib>}#=Z$æM xԸqϊʚaܸq>?$f3+V`ȑ>RQ{r<}<[U3,/YY:N& I7Ox( .I衇 oIrr2#FK *'xɓ'AIHH஻믿ֺ8G@8~6mڠ(j3gΜrʠiӦF~vE.]p$I;w U}<͛7oDe-[ƻpME{عgx0|P3f`2={6Ν~_ĪAeCYezZnݚ9sPNk_©}6X(xz,)=΅CZZ?++æiEFUXUSn?Z{AlMŋU4h^LviѢ$/tR~mk`0p!\. t:ꖥꚒ~m&NH.]0Lڵ)Sܫ"]$If1 ^LNN~ZLի^Z?;wLQlhܸ1?))),\c2|Zr-Un[PZZG}?Lǎ1L۷Oړ꟝]΀ ˚(<>?TjEEXXNׯ϶m۸{Gzne(;@Q(,,|<gϞ%,,bz!V=n{9F#JJJN Y9s ԩS :0vʜ9s8q;vg6Mٰa?3]v XYL&w'|Bnn.E~~~eΝڀ,^oNTTqqqt꼻t:HMM՞!(JHzj-EEE|W4m4*O?tlUéHۍba:uJ[`%<h>VR=L&:t`ٲegϞ/gϞ!ZUYl}4P5T¸Ybb_УG*pZjlFi6 ͆N$&&2~x>#xӑ$֭[bЪU+ ŗ\*kVHV+bѢE$IaZ)..ִ())ɓӪU++Wl6Sn]&MD0a>fscQ~},Y† 9ՊnZIU*(hD^^+˖-ʻn0/X,@YZfʹ}]]w? Vp{9B.k,3vX֯_Ϛ5kx"P(駟믿VJJJ Ǐ>zjm4}*i( Fj N^',,LzWODDYYYL6"##iѢOʒ%KxWZѫW/nGi Uyu5FmvQN嶺㩧`0еkW_nSouPgݻ7}6Äd2ѣG:u*;-Zpsw`0X,4i 55U[2*{5;_R^=nvâq9dYZeYfʕtؑ۳e߿?ԯ_ƍر#DDDP^=.^{Ν;y#z\ 9O>Fڵ֭'NVx0tPV^ܹsl$&&r:XY3f6hVbvލ,,{i"##AFK{>W^(b55}z=QQQ>~V5_~;ziwUӬV[T%Ib׮]z֯_7|jڬ(6H~[@+??p<""w}Zj3P[f3G̙3<쳼 kVz;mjS}嗔Qe[嶠^_.xsgp=3T<%%˗3tPfΜԩظqOnclٲvO|fnYR Vרp80_Wo֮]KF(((4~6'x#Fk.f͚Ş={khҤ $qqNB%33>}TǠ<|>w}-I}=}(]ƍlj'Bg[Qͦ+O%٬MXZZn0qs\U~w 5sr:%Z`>hڪz+)Ћ\m۶mnwȋw(J(^j[}* cG `_4@$!C#h :{g|(˲\l=cP`ii)#F"(ӦM hWz^Ey^fޮ&,kqʯJ@/Kaĉ,Y Ί+ҥ dddLN$It:˖-#!![^,^GɟM ul۶ uM[?Ç3p@ ÇٵkgΜNG\\ 4m۶ԭ[W0awF#D-t_.屆 jIP1A pbbb0>5% "IUXVŜ:uRQ@(\tE*65tL0kƨ(妣S3k^U=v;:ѿU؟YPfwׯw5I@:=իWMii)pS$wڵ{NܹsIOOĉ|f3 z=Zb׮];TY~= EԪUCj5 RPP޽{ٵk+WE]vBM@ LXff&ӎP&Iٮ yL &ptZhB6+j%7~.W"UVp<̟?g̚yuYx1}f,Hx7f=B*ɲ… n#\jft0 05kN:uP<]wE 47xf͚1{lt:OfԨQ>ˉuF}jOHzz:-[ANNs!**bbb1v;/^$''Fcp@$Xi5ޡ5r( ֭cݺuAᢢ(ʟ> HRW;vlz}UWuo4U, >\L0U_lޚ'bܹ>Dͫ(ҧOV^db;v75APU3NǼy8p ӧO祗^o߾lܸQvGF߾}YdY[n<4jI9r$iiiY_L&KF3mP 8(0Ofܹ;w~Μ9Yu$ѣGmB ͼy>A`$IB0a#T¬,LR{[$n\CVV|zm6+ RwULrx78q̚!2NUh>_^)i^U f`D/zЬ/EQHHH --o:ux8u?.\VܬhdժUpg?{wU53 æGj`ᒘڦVڢf}nn\~ޘhvZnhf X 3?>>8\>\ss_r֭jۗV[^m2AAAES !ʳj*4ݻwݹs ,d|-5uvxw+;e2%c^]ڏ90+++D~'8x O֭[(8h4Ν;':fggg:tٳg{n C8L~J-\nܸAv}P !/y衇f? puu/i1cƘ| NyQr<*NYSAN}^k<rJ+Uݛ7o\ɺ)OJ =z4]tB*999ܸq:|` !/}#FӔ)kLQ5k֠2ea̘1oqqbbb| JUpQI.]Wk/*GyQr<*NY{88::{n5jT.%ez޽˕+WEzȡM6M6w}899xj(Ld4hPOa.˽Bnڵ_ !;w˗/Ӹqc78GTy2 + 4k׮K̬֭f !ڵk+L!wUPyyyiJ:t@jj={l !|{ܨ>rrrHKKc4R !=,??۷ou3S !B!*Dp!B!j @VVV]C!B{ K]C!B{ GB!I.B!D-"\!BZ&EB!Lp!B!jB!B2)…B!eR !BQˤB!u_rrrͭRVֶZ$B!j"'@U)';+ըeB!Inhܒ\"Lʍ;$ /_FMG5tS- |-NWk ؠVWm^'//B!ZVk4j57V@B/999988-71bؕ|rM6rN].Ƨp z5V)X/@}GrrrjzJǏ!RUk>~xfϞMFJ- (Rh`077l<=kJeq7+$Ζу{b0{"]7zPDM&!UpxƎرc9rd5MVIll,!!![xfϞVpV\\\/(`(t'{?3 N|~;w~h/xwZ"*ǾzVMWK:'B!%T^ָ듓Ú5k8x s̡AEz+2D".. 6'#Fk׮&-\`s֮]kv[Aogӯws8x<>(D#%. {_^ߞgx#i݈~ ֽEAVCŅnݺ1tPիWPJ;U=w-##ƷQFE_Pj D!4*j5/1;;;HJJW^aر1B)- rssy,F7|͛7s-7o΄ hܸ;f֭㏤ѠA^~eǶUVEzbvvAZZ <Y\^2ٸ{ngϏ1cƠjK]q-׬uK;:-ZB!Qpssm&M?ovO|׏֭[RdUV|J>`֭59sʕ++#G0{lXb2k,eڪUxoE]P hNg p爓 %%6<mPsDѣjPDŽ߼y+W0eʔr۴|rz=aaadff2|t:#FP9vsޞ˗rJ 35ssuy4h@BBjk[sGzz:III&ϡ^?˗Ԙ~6{կ_7|Fq/:uZq)k{IY糪[!VN3___i2w\Yn'Nd$$$šCxqtt'x#GTvJ=z4CҿJL;|c0Skzhи+:u>+nnntyx:u>QK=lj ڔasss+=wɓ9{{{ "22r#G~ʱxYM,>̘1chذ!*ƍuבhJ">>w䄏QSLl[n4nZ+Ç'&&q1u>zBkT=;vCaz 4W_ %%իWtR}1 (˫T*rssM^h…q݋Lɩz=vZh*C/_n]@(pB&L@Ϟ=jDGGc0z͖u\9'erBJy敘{)=۷'(("c\-“8rxxxiժP0ߟ+͛7?ܹ2F611f͚Uf7+6 ύ<36v:-|~o?7FCRe9hmɺEs/e=TjK/pBPݾ}h߾=:uK.|WL4,ë|#SΎ~k2yd<<[[jA!>Q <^_jn\&88`)8 )Lچ\ DZCptt =6u_,JmހYO5Ɔ8O\jkk[ .>}:qqqT !BXjGzze U/hz\=i\ΖLvo$';'GnHÓ|=zJEF5jٱc;vI&3ϔlΝb< :T|)B [Ty.}^u}S'aR 2EqssOޭ[2jUgBa*Wbld fPߣ1?JV]iܪNddag&N+q8-uУGk_̙3K]v޼y4jԈ#F%B)-Q;GФEKԪb3nݪl00 `|G,C^۲^dddzafyGΖ\!Hnt:u|NlllT*ZlI~*P$Q}Z`effʅB!=Fp ѪU+a+Cחy93 !IM'B!D-"\!BZ&EB!Lp!B!jB!B2)…B!eR !BQˤB!I.B!D-8<666u{aÆ\v6musBQIϟ =^rZn]Ͱ:Z!BX?"j]]7*;UBX8ƌCnnnfXX{9z}]7EZ􄻻e;=$))_o;&L`޽Vk3FZדNS].e*:2M)U*U;?CRԩ'NQF0þ}0 :m̙8::RbSoQf1ORBXhll,!!!^yyy_]!,^E;wbkkKZZ}q6VVLufu3?v=;899)ӯ^ʯoQ9"\{ 4i_5III_~={-~~~3+l޼[nѼys&L@ƍ`ǎyǕuN֭[IJJI&k$&&yfi޼9'NKYgݺuږmviiiYhZ-{gEјř?kѣcƌQfggqF?N~~>ݻw_4{~ZZ˗/ٳ裏FTf^xJ~ 2z JΝ;ٶmt:|A&O+Νc̜9kru"""صkuΝ˪U~:_ڵk|g$&&KHHM6 ++˗sA _'77_C0qD V:e]gږxuWWWLj#;w}3RT?+?F)5 |ǏZMy7iԨw!,,/S*;v9s`ooYr%f֭[Z~???IJJ*#G0{lXb2k,e1ٮtE~_řݓ'OpB222X`۷og`ժUdddRغu+F2k'|e"44 oHy_Xl(<=55U)T*...{޽/$,YRd݃b كY߿e˖k.ZhApp0,]oƍh"eŋȺuظq#WI`S^K9w IDAT;>Qc^C0tPvܩLcϞ=+Ҧz X/>,NNN?ݺuqƨj\]]>|8111E9r$Gҿ.^STs])ѣWnRRRielS{.'OdȑNPPf_E3`ooAAA:t(:t?<888Opgffr)Fnnn 2v wfr8O6wmGՖZT2իWs>:D^^>ٯ9ԯ *5 | 6,Sڵkb0`0(~Ύ\z=L6={i&9r$m۶UwssS6^ ZsNGNNN;|mv{FܼyĶJۿnYJNN`0~GR)25?%%|!Ef /|EѣGٰa' ޽`PmҤI\siذ򵽽}Ӳ$&&b0xW-//Hf"u]T; 5hv܉;v`ϜOyϦ^` !,[zz: .d„ VKtt4~"<]vk׮·~˫}e]cD́b?٦e#44H!mdj1p0^c/T _~t:?+mʬcj.-ׯ/-q܅7Ny-F)ˆ#y7QTz8::oInhFa]3ơl۶C`oo_mmvҥ _}&M"++"VWnĉm+mg+8;;sMO:wlr#;wV%;;oR!3²;;;YjUVfS $,,3fƍ7t={T㎏:mSTz 4CBBS[E^?7Ņ۷3vX۝BXwwwƌÊ+̤iӦ}v€wB _YeWd&L`͚5L:F?AAA&.]0c (ÇW7-[0sL222psscfϟ8q"+V`ҤI裏W}šLbӧEf={^zR|Wlذt|||2d9rϗnE1ȑ#JviweŊDFFJÆ >|rҥKeҤI >uLr6zjVX;y|u~X}ЦM:nDFFU8$p ݻ"\QspQ zB!ĽLpQ&e˖l޼!=A&B!D-"\!BZ&EB!Lp!B!jB!B2)…B!e6B!Ľ`899`ccCΝquuݻDFFҿlmme{{:nuon:<ԯ_f͚ѢE 9u@z…2l۶r !mz \LŴ+1ހ0`:tԩSӲeKN> ӧ힤7{7}~۴i[Z|ݮ];9uz/]… 9s * ///ƍGkjt 'NvBKu1 :FlUZ:5eA7 OOO*߷iӆ.\@rr2<@۾x/hϏ۷ӪU+jt9y$h4t邳yҨQJ'k6y i;w>Δ[j3ggϞe̘14k֌sڜb޼y5 !,`ѣӦMbbbHLLe˖s17nLRR2 ::XT*tԩ.wGQI?&.N/2-6*'PS^zUO;ԩ" ̧={@t:tGGG%::=zZjEÆ IMMɓ׬y-Ze˖b0oMnt"2/ԋq߇Xߥk+#Y_v+W:Yf4nุܸ8wN׮]KlV\IDD)))4i҄^x!CsNVZō7ח+W7sLaٳ$<<""(!!;;;ܹC J݆'NEEj-Z(Ϝ9LOLL,Ioּdw-_q+ۛ,Y:9"`0˗Lo޼9/.]pQ^{5ׯO޽8qBXX[l! #F͜9spssW^,^777BBBHKK#::Z.o^qK.eٓcrVZEZZ3f(lll,O>$WfR _1{[.>Ύs%bccaÆuB 3` ќ={^zpmnܸA~YfJgVaܸq?˗/f>}j'WfEn݈Vz7o2<|Kpv?`͚5@QQQDEE)>|^zѼys8v2+n߾}̝;0`/Qիz}.k׎~ 777eZbb"h"aJ 1)e8JVWfnr`ժU+0p@4`ƍǸq8S"##p|,Y^z;*\\\z}iqQXrr2&/Ҧ_x4 m۶}BT]ic^H/KtaZC={///wZjŁHNN.Rp?~:vLOOO'""FԩNb߾} 6mbر#?#/^oYAcX7߭ 3cccցr/,\z*ʠAhٲR|nZ?p@6mDxx8O=9s[[[BBB;w.<[̙3\vM.o^ql޼Yfѿ8֦I&}28;;{n-ZNLJ~(x8vɉ+m7ɓ'޽{ ݝ_~٬qB!RǩI]7C r-5SM2ЧO TmBcBa}Ο?Odd<1S!B&EB!Lp!B!jB!B2)…B!eR !BQˤB!I.B!D-"\!BZfBe0֭[3h _~AУG\\\ʝ.B#=BX9OOOZjUdZ~~>??;]!Kz…b*_d;w ?^/sZmqn!UV6HOCj4 999eN7_$&&FC6m$[%[%[k%;&&~F+¢z»u|@֭>}:ڵm8qγ+Ӗ> Wu_gϞ%99{{{x|MJ]ĉ|'b0hٲ%&MR۷ /*!Co[ǬYӯ_"-N `kk[tsnݚ+W@kB/u +͛ǯʖ-[3g6mmZ3cqw(OL^ ҠA"-sx{{?ݻt6l Q12EXXzZX߾}CZD;;;slBӦMќu-ɓ9q 2Gk7Ν?V EFFv"##1cƘlQT;̘1Paaa>`vf=)-ْ-ْmٖbxWXlPPM0l-ZĊ+zRꫤpB֯_-ŅGy:uRʚ6m~~~߿gggjj`4h_~V-… kiubb"fb̙p̞=nݺcvInݔwO>ׯg$''3k,ziV[7o̘1H=:t`ڴiYsj-ْ-ْ-ٖJ5eC>}4hP]EQݻw cuj}B!Duiϟ'22r{…kIlɖlɖl̶9&\q1-ْ-ْmٖBz…uZ{R$[%[%:- !ꔵHdKdKuf[ B)kIlɖlɖl̶.Sړ"ْ-ْ-֙m)'\Q'E%[%[3RHONYkOdKdKd[gp!D֞ɖlɖlɶlK!=B:e=)-ْ-ْmٖBz…uZ{R$[%[%:- !ꔵHdKdKuf[ *»uV'NbK*ϸg0~˗7ۭjԩS9w)))@6_\}Yf ۷?_~f刚q9lɖlɖlɮlKaQEygΜYbZqhoWEޕ+Wͳ4VZͰa+5}:ǎcϞ=C=Tj -o^vv6+W$""4i /!CHHH $$XFeؚZcXZ[M[Q/(65M6ѩS',Yc+V`ӦMx{{3|*zQQړ"ْ-ْ-֙m),7שSxhڴ)gޞD֯_{ի˓O>իYxR/^X)҈.K.1|p>sz-ѣYp![n-+WyaaalٲFAtt4s͍^zh"bbb6lIII&Mjk6mm۶Pb~JJ l߾EA+=ړ"ْ-ْ-֙m);w.l޼eڅ JWի͛DZc_,npp0Jkpp0|e500^}S""""**J~azɓ'x70 aym55Z˗G%ە%jHdKdKuf[ ,  , %%3f?OK|땯?S"##p|,Y^znyYER(dZd9Pܲ7ViܹL>"*~,E֞ɖlɖlɶlKO`}6p8w\hݺ55(S^UlٲG5o˗ٵk2 |G&`jysaYm/ooe8p ?rss1cG)2?,,0%jgV%[%[3RXeOxq/dĈxyyaJff&V"-- '''\YƏʕ+Yp!Ez`˚7ydٽ{7-BO? iHIIa 6dL-o1,U=ŕ6v ((Ȭ DVo3c +ضm:t`ڴinkIlɖlɖl̶)SàA-Br޽6mڔŋ9s vvv?m۶-2RXkOdKdKd[g[ B;w0 xzzҰaCn޼I~~>w!77///5j͛7kbʲ1-ْ-ْmٖBp!&t:iiiO nѨhɩp~8}t~ϯsO>Mv픻Hni[ =k2E 6mѣGjT* @ǎaaa]֭[3~x5kƜ9s8z(K.eԫWӧ3j(jY6l0ேٳ^OPPP/^F!$$qQ>׏~EϦ/ZHRRRBݹ|2M6-8Wu~Ym۶|gRWHdKdKuf[ 0`^^^̝;W?QQQÇӫW/ -(Ժuooo~ٽ{7:Y͛7'..cǎ<7x9y65ߘe/mKg0u7 UV|888>QHdKdKuf[ ,?#vɁXlg@R0c ]]]MfVt'|%KrJ.^qrrT֧~Jdd$.\ <}4hP]$2ӦMZ߶:uBTΟ?OddeGB;zɖlɖlɶlKaQ.uzudKdKd[gp!D֞ɖlɖlɶlK!=B:e=)-ْ-ْmٖBz…uZ{R$[%[%:- !ꔵHdKdKuf[ B)kIlɖlɖl̶.Sړ"ْ-ْ-֙m)'\Q'E%[%[3RHONYkOdKdKd[gp!D֞ɖlɖlɶlK!=BM N<իWh4mۖ6m/FGqkb=)-ْ-ْmٖ¢nݺ9Zn܇?~|2Jۏڴe6nHbb"=~Wu~au}lʒ˗ҥ iiiDGGZ槟~m۶?ӯ_nܹs'ْ-ْ-ْ]ٖ¢y)_Ϝ9Ĵrssj5ޮ(+WK,\Ν;3fvEhh(|kacSH^^Z͝;w ?^Ghړ"ْ-ْ-֙m),*ŧAAdnX|9=W'((ĉt钒QxseΝ; W^׏qƕXwʕ 8?#ǕgΜa\xVYi'|£>رcIHHPgggl2|Izͳ>˷~k^z%XbEm 7n 88aÆ *|U'**^z1rHRRR*Ņ-[raԩlj5 oӧOWHbbb=Ӝ;w~A-vKnY]"\N^k׮ԫWgyӧ{WbX|IXx2}h4BBB7n%ֽtÇƍhYpam-3>o޼r{i۷ׯ-RvZZni֬sѣf_h111 82X._ @ӦM|6NU_(i۶-}wGǎ'//[[ _>{yyWk׎ƍKni[ڭ|6=k)SàA-E68oSŋ t:>\dٳ'j1c?/={TK*#zRwvv桇*U^M!6 틓_b`` n*O[o;|嚂xK SZj!'oQ^{9 I9'&ԶOrpP/p8(GRi% /8!?<{%lte5Z~k쇏^{С\t!5 ޽ooo;z!ZnΝ;ݾkx-<<<'.]JVnuٲe e˚c ?z(G͍ cMxii6SrʦD-XuMr-tϴp͵&\??>ĬYt #Dee|ɒ%dggsQYd 1ٷ>WShHUUUmѢq m۶Aǝo%AAAs)l6_}ݻw0W8^gz.ڵk9p 6gI޽;͍cx߾}ٿ?߿n V]S(r-5fQj`[>͛ŋѣ;vԩSVp{oncہk+siN(< L67NBB1^QQQlذbbbػw/[n% x|]3ϐڵkl;vz7/5ۥK:t(wq 2R* DϞ=YzM?ưezyǞ:u*+Wc !͉?ӎ9Bvvք73gk|у(vܹsٳg-ݝx{9No}jxb/_N׮][nboh{qqXhQǎcر={W_} .0i$N>MRRR8y$]tXp;vпc_vػw/{?h,xPn[nk͂曬^=Jff&_|\[CNNo݄ҭ[7N8޽{l_:@j?y>|8۷o'66Zx|}}YbNFBB!c,Ϗ˗_]SUUը_jݿaz-zٳ/g&&&lR͢XuMr-tSM=<уC_t}jڵk3gÆ 30 >IIKKK.͖R;.Vc„ $$$0|{16o ɓشiSѣG0h 5ѡC"""e:Iii)O?M>KIr-tSMa<==߿?111hزe x{{lܺˤrE|}}9r$::mfܕggmEEEBRR6&ή kײ`:t̙3[U\OvLk☌9s9sT}?tԉ9s_KԎU[n6 ;ntw!3͔wGB[n嶦,j9LJU-rmMY$\ۈ 6T?~c~q/j"r-5fT0c~>G8m46mرcbΝvw`8p$ofjn;*//gʕdffr|}}6~>HII!++b:w̔)Sv ,OH?l$$$d㏔ RSS9{,wq6h[z.]ʚ5k 7$00ֺƅsq&N6êIr-tSM_W~akݺ5lْ3gob ͛G\\}zZ3ewl;Xx1k֬g?SL… 5;v4̸q8ps% PL;c&44ÇfѢEŋ9pqƍINN歷ުu,gqrr23f7VMR[n嶦,Xr>o<:t`lvZ }G`ذa>GjZ3E9 ߶mIIIo߾QeeeCNN݄Vkخ؏ֶhѢ6ݺuĉݻf~\ϋ/HUU7nd߾}u5vux?N-rmMY$ 8)..&66 f͚ťK\RcA۶m]R={*^d =zt,Y;Chhhɾ37cǪIr-t>IQII M;"Ʋi&VZePJCsiN>>l۶$|}}1cFFGGǖ-[HNNۛ`x"%%$l6Ȝ9shݺ5{/ӦM˗IMMŋ2rH㋒ }anfΜYX^3gR\\3fLU[n6 z!,V]S(r-5f" BX&)r-r[mn5Bb5r-r[m !\U[n6 J….ŪIr-t%Bb$En[nk͂p!Kj"r-5fAI¥X5I[nۚn$\R-rmMYP.p)VMR[n嶦,( B&)r-r[m !\U[n6 J….ŪIr-tS%X^^^6[UScKKKcʕQYYGv ejboÃ֭[sw3pЦ9\MVgU[n6 '&&nW۶Yx1}f͢M6k8h^u?Κ5k~X} FAA-r-MwSMŒIjHذaİw^nJ@@<BVVtܙ)SѠ>_`pcs] IDATuf#!!%K|dddٳg;lF۝;wb)**ˋ޽{f6ҥKYf AAAZ@aa!?~'6>S.\@۷/Of3`oi]a$En[nkm&رc;gꫯr&MӧIJJ2v>zATT]veܹٳA8}Bxv]D݄p:,Zwwwy;c[&22|I8oq0\XNQQ=FSUU_ڴiðaO~իWOlgݲU-rmMY0Uaƶ˗//4eeeCNNd> 3ů*ZhQgnݺq ݋fcԩƱR֮]Kaaѣ78^|Eظq#s,gG_/==g4.\Kx衇S^^N`` ZO>77s n$En[nk͂9><==m;&m~ǾX~3fLijx s}A.Y8~򓟐ԩS~ϧx|}})++;|l޼Ǐ憻;W\iM~~~{3***-Kֶ1\4ױSN[unխUs#ȠW^\pRڨ{ҜXr-r[}3?‘#G6$\Qgpoߏ'oQ\XB!Ds4$btB.] X5I[nۚnI¥Xr-r[m~t_B gVn[nk͂p!Kj"r-5fAI¥X5I[nۚn$\R-rmMYP.p)VMR[n嶦,( B&)r-r[m !\U[n6 J….ŪIr-t%Bb$En[nk͂p!Kj"r-5fAI¥X5I[nۚnpӒ~ȦMpssѣGSXX@^^^l2jB4&)r-r[mnz^XXHnn.fBJJM !&)r-r[mL¿kZuڕN:5hnݺn:̺u޽;_|E6W\aŊlݺ"N}QyiӦqFIHH`Վ_fb hѢEBa$En[nkBIxUUYYYF߶mۨl}v򈌌ŋY|9]v%66nݺny)**bѢEjϯvpaFuC_!j"r-5fŌ3 ˆ#$++TN8\KMFxx8itvv6#GOOO6o̐!CpΝ;GVV0|pضm[5_VV͍?1k& +ٲe ={cO:+WB՟iG!;;$͍Ç3m45"""(++#""&ǵU4IWqsj"r-5f޻8&pm֨ ɓ'Ӿ}{k=ڵk3gÆ cǎ ϏϓF.] mtB[U-rmMYpz'nn?f*;v駟xtt4>>>l۶ Ү];}Y}FEJJ IIIl6M…TTT"r-7m\.0Z.B4W9].)[nۚnp~1S!U-rmMYP.p)VMR[n嶦,( B&)r-r[m4 6ݻС=ql3`]U Xr-r[m4 6cȐ!z*~)z… |g<#.{-rmMYКp!n3Cnn.%%%?rر#Ν3/ZuMr-tM…Mhݺ5 <-['PUUEYYpǶx{ʕF.<ج億4ݛ*խUVݪxt|-G6M6iݻs\7pmYJEE^^^\ϟ'??ٽ^^^p9խUVݪxt|b/fs[Jc5r-r[mEۄ]ҵkZu҅.]U]/r-5fAI¥X5I[nۚn`$_~VZѣGbbbn_C\!,[ FVg>^{5>7|C˖-ӧ/2F4>#Μ9C4iO|ȦMpssѣGSXX|͏&)r-r[mL'&&7Ν{LLL%c RRRHIIqu¾}2d{ڵ5geeDyWi߾= .dΝzATT]veܹٳŋӺukbbb8q^Ϙ1co uVc9BC\NQQu־uDFFÓO>Ɂx7'5}g}͈cco;y$ECǣcm,ZpbbbԩoI^^۷o'//:wX5I[nۚn`$|53geeCNN݄m6c8{=wAAAڵ8lق7=X\_zYR֮][m9ѣGaaaՒ536l୷ޢgϞ.qV}L4!Cc6oܹsy%Kxeȑ$%%mܸx=Eðj"r-5f~ v믿@-%((h߶m[}ywHII?gȑ6ՐaCϟ?bcYfqҥ9U\zd֯_O~XpqԩSl6cRi>Q&88͛7s!uu3f >>>umk- BBB[n͂)'Ob񄄄Κ5kHOOg񔗗s!72zh.]Dv1bӾ5cժUKT}n:k[$ϏϓF.]t!}Ftt4yyytЁc#0a ̟?{͛70yd |.cСiӆl2..۳zj<==k_TT$%%U6pLϜ9Ü9sHHH0+ٳgY`| 3gdذa<<<Obb"bԨQՖ9Gǎyرcعs'w}73gl B[n6 -f̘Q5dFZpϞ=oSN`ʕ|l!9qgڑ#G6o.q`$En[nk͂)ׄ !~K/QPP@qq1i&ܨdVs(SPP@EE!!!r-r}fTDyBB jR^^M1VoJJ P䵾cfVz/}cLnn.vo5ussc̘1,_Q5&yj"r-5fT0c~>G8m46mرcbΝvw`nqFIHH`dddٳg;l7** 6ALL {e֭σ>Xkק5SBVVtܙ)S\ sq&N:kkX[P~a<==qww]FF 6CRPP`_h@'ݺucݺu >___VXSݺuĉݻԩSo/5,,Tٱ,rrr1޽P/HUUu8mWkCC8q"?hٲ%۷o'33s璚Zo 6[oѳgOfϞw%KxeȑuNuƍƵvgΜھW駟ҫW/.\g}#< oĪIr-tKN¯̟?bbcc b֬Y\t~ק%KѣGIOOgɒ%;ڷ>WsѢE m۶ZFyjk}k_6ӇL;f+++O^Jrr2ׯ_~,\H[1cSgƾ78~󔗗HVOw(j"r-5fM1a-))!77yqEzAǎ%M4ӠcsiN\m1 }^OOF)ˤoo?~#G_l'))ɘ9;)++#99Kr)c7sLBBBؾ}19gr 몵z~ӟr-[ƛoɉ'xꩧx3g3g a~{ر#O?Y]sNnfΜ ws??AEE^^^\4%N:nխUVƣմ1cFՐ!C1bkBÖ-[ٳgdz8رc$##X^ZZСC5{+W׍U-rmMLkG!;;ۚk…7ҿ^JQQ`x߾}ٿ?rĪk [n嶦,h.mB6mk_ޭwŸٰj"r-5fAp!Kj"r-5fbº/r-ܷm !\U[n6 J….ŪIr-t%Bb$En[nk͂p!Kj"r-5fAI¥X5I[nۚn$\R-rmMYP.p)VMR[n嶦,( B&)r-r[mLׯcyyy ,[ 4~}cnH_0^z% (..j7ofŊ|״k׎_~aÆ}+0aRSS@II 3}t|f<+QVMR[n嶦,jhɁx7<~}8vcǎٳ\pI&qivv>=zE׮];w.{ip}??' 4z#G8JTT_~ec-"<<:uoۛUU-rmMYTιsߟN@@۶m/@vv6-ݻ笮;!44͍?0{'xWvk=x`._wՋUVpU#w~ѲeKoNff&sĉ>};vyfϱ1( B!?IքlϟOqq11k,.]tSsxޢE 6m۶YN:3qD$ԩSqp$_6ER IDATӇL;VLpp0w7oСC74a5r-r[m,5  cڵ̙3aÆc^ϟ'--.])c[RRBnnn*YtƏOyy9ˋf*lڴѣG_E{m~Ak U(((?9Zb<F{CҦM{DXr-r[m,5 LJm۶pBڵkdz>˳>[]TT)))$%%aٌr\\ ,`Ռ7jKSB]87???lBrrq'xYVZ{ǶcIaa!IUUSzŅ xG\]U[n6 Z.m;]tח;9<ұcGΝ;Gee5B[n6 qQXXG:wߍ;eee+W뮻8x`>ރһwoTVݪ[unyj4 6'? Ç'((|˫}7ˋΝ;UVݪ[u3WbƌUC aĈEQ[lgϞx"?ȑ#?~_򗸻a /--eС{ԩ\i'!BW9rl}1Sۅ+Ww}GVӧۗI]\iuz[n6 7% yg {NJ+߿?n%ďgIթB\3͑ߔ5 rJ;Ʊca>^yyy;~^n[nkBQkZuڕN:) $::瓘\[Kǎ)++#%%,ܹ3SL!"";wb)**ˋ޽{f_~L6M61vX~BgVn[nkB*8ydݺugu*;v,۷oO?Mnjn'--3n88ܹs  44֭[I˖-9s ~!o+V6_W~ХKƞ$XuMr-t:'၁׏p |ر:hт__hѢYYY䐓cٽ{7vZ cGayѡC¤X5I[nۚnP$͍ÇիW6m~8%+OXm۶`g͚ťKnk.j"r-5f[^?$,,g͚53~x9t^^^rssk !n-rmMYpzwD1 3>}:eee$''tRN:E߾}}^OO-BX~^n[nk͂~1S !M՟i7>BP-rmMY !\U-rmMYP.p)VMR[n嶦,( B&)r-r[m !\U[n6 J….ŪIr-t%Bb$En[nk͂p!Kj"r-5fAI¥X5I[nۚn$\R-rmMYP.p)VMR[n嶦,( B&)r-r[m !\U[n6 Jg}/hIKK㣏>̙3tЁI&OKMM%%%x{{ykmlڴ 777*++=z4|Xj"r-5fIxbb"ocܹl[2 %%W,۷!C˽ˮ]WxVVIIIoߞW_}۳pBvYߟɓ'3{lF={:  77טŪIr-tS%8l6sO=VG7n8._w}k֬sN֭֭c[ݻ_vҥY |j&)r-r[mL{ncn>GDEEѵkWΝ˞={Xx1>[&&&'֠3fl֭[ q%''Oxx8EEENY֭[ILL O>$70_L5# 8;߿ɓtҥڣcm,ZpbbbԩoI^^۷o'//:wX5I[nۚn`$|53geeCNN݄m6c8{=wAAAڵ8lق7=X\_zYR֮][m9ѣGaaaՒ536l୷ޢgϞ.r4iC aǎl޼s'""%Kȑ#IJJ۸qz]vQRR!!!piߏ; e5ĪIr-tSN~m222رc.:-Z 66 }۶m:w!%%?#G(WC& i?|f͚ťKlJ_WqUY~=c…Ƶ "??SNaٌ%Kݻw-[zpp0w}l޼C9LJ֭[ǘ1cmc_Ev9z(_֭~)z… |g.qTTT"r-7mL9 8p <OǏ'$$p֬YCzz:ǏCE||q<66ѣGs%ڵkLj#IDDV_8uۗv;NY{ǤZ'~~~?4tb k6ˣCDDD|) HHH`|o-[ҧO^~ex饗(((p~ΎٴinnnTVV2zh 9~uձ/-rmMY0$<11xpþyj ՛>yٸյ^-x߾};wp]wpBMСCYp!/"~ױ>>5=7|>nFnvɬYfРA̝;ݻwswrZYmvkk]}p X,~1sLnWY]6jGfΜ9Y[/z633aÆG1w\̙Pk'EV٭_O?4qqq{U ߿f̘Ahh(/رc8x 6m"))cV{ tSONDD .ȑ#>:l0]ڞ[z5ׯgǿ+ ķ~ >a,_Z4ֺ3f z"((5kְrJf͚ŢEj|ҥK3gݺuc̙ #GꫯSOʭ<}\Kk'EV٭_?<wy'!!!>A篝e+[Vf~Y_`aÆ .~iG׮]ٳg'N)orssСCsÇgɒ%,_QFQ^^Ξ={p8̘1֯_C@mkc~mӧY{פO8[ȑ#ٸq#}~ٲeUQy;u<< >ϟ﹝Rk|_;)Vln-."| ;}JEEE,Z|ϲ@aܸq,X_|*E&NHDDVbܹ8N{2e Y;S1Զ}]Ρ6_K._M6Q\\L6m{y}?}4O>"Z|[ޮ];~պ]tt4K.gϞL2{IQlegvka4i1x`FcZ nݺ5+?'oe+[Vf7{Z]۷u]p_IQlegvkam[ZZwVle+Y[ uEEk'EV٭:"Ңle+[BpiQIQlegvkN(([V3P'\DZvRle+[ZDr1bBBB8~8l6j"##[x*[V3P.r #&&{zs\l۶dؾ};7tS *([V3КpKbGDGGWy<77ri׮YYYeuPV٭pK\ii)V@YYYsz]L޽{k.waƭqk9N Gs.~Y{nsiiideeiƭqkf4i1x`Fc᪫֭[0nܸ}ʮkn{1+VxbN8ALL 'OfС^w_EN'`&UZ nݺ&??3gΰcnڶm? /,,dȐ!رcx7~"""@K۷uֵf>쳞ۿo=VW ,_7&!V+wy' .ƍ5k} ++N?^=<DFFƒ%K9s&}Y}駞_~%FjBjj*vO+[V3hU y,xb>Ξ=K6m[x=rϙ?>gϞpн{wNJRR}z_[yܸq,]NʦMOfƌnkii) ,`dffҾ}{~ӟ2rK?̞={Xjv6ln{E_vԩSݻ7/6.]{Ze'ܯքd…tؑ-Z=\|g cL:'ܹgy)ۗp]wqMF^^?Ǐ_l7|x vʸqر#fbƍuEFFvѣGsuqo߾Z_w 70h ƍǑ#G<7o<ԩSxjrtle+?[ >,V^Mdd$999|DGGW5u7o'Os)uoFxGLrr2o6pK/ѫW/Xf +Wo߾,ZȓyA?ڵkYb)))/icuEDDZϓ?NΝy'(((h}^ /ᵚ- glt|.#==1ccǎy\^YO<\~Xr%Hbb"W\q+V`Ϟ=M}PV٭_Æ 'dС]ovСCOaÆ *}e7Yd ˗/gԨQg3f0ebٲe^q~̛7W^yų͕W^}u;o6iiiӇ`֬Y@=?gȐ!n:kWהle+[ZU>qDBBQZ{IDATBO={6111^xwyロ*KSWU;wRys)+ѣGsIb7t%;]talڴbڴiý?& m/&::vRle+[Z5"Rք4^KQD㯟WlegvkWQDk le+[Z."-_;)Vln- 寝e+[VfꄋHNle+?[ uEEk'EV٭:"Ңle+[BpiQIQlegvkN(([V3P'\DZvRle+[Z."-_;)Vln- 寝e+[6۠#oc礉[ "ҢҨwV.8'ߥ;%1'ƙ;'͑Z寝e+VԸ2{܆ m=yv> WXw"\DZvRkSq= c˴CqNጋltrcPaxn[1L4ِn^yvNQqo:vw. #lO NhsX/Zl#FD;;Ҿw2W^NX{zϟyDY@18C^}uo|섫j/NeLvQiw9XpeӦp>*J}z9+ 4eQE⌏&(qQXxdセ3pSz:̢ٔt'((}! iՍ sgOq lw. \/XRl#F5bb ^omu+odvܹ0ܖyà<3'ٛy9Tz3 ȦZ}zfc8NۚAQD.qǏ'55W_Mdd>vq٥1mB~' oϱ4v[}`,F06B,fp,!(EDBaym/$U2q4\e?˃:ΕCn$ 9d=ǑKVi%dFխܒZh%FxbCltnYWHg\BBI8md#<$ֳUь&u~TQDL},>snfrssٲe wuW.ۗK=7;gXmy"e_:\Eai1%S.UNMMy:\:  Jn *ݭU}; fogSr"S<ļxtʆL`(/F}>kV&wUѹ,ȿۯne.8b!!$ї+=ewMyo@w+H]#:Hۘx^ꢃ'Pq,@psՕp?S"ɓ| ><6mȑ# eq<^@pR0Ua`C@G[{2"8%5y`́7n P>-J7o1lotq7+%&&bٷo)y|[aP0pT8ܸPtS4 Ai#8JĉZqYVp 8'N΢ք\œ].;!G͗an~6{r ֊pX X]``m#WzuP7` `wYp-]n+ۊ‚ N B`W;]-7:7ޏfoD vAmXLi g3wEͶ珹—wUM=J41oJ-ZZ`ϰ"J.*Cl$Q}7a^]h-~%"Hv;N"//zP.s2r*BQ]?#N0{psq mxׇyׇ6۠YXІZekq7/?9ݣ$yNsP.r Zng`.d٘}cLOC|ʹ˔}gF7:;)_?5x^ևj!SۖEiTs5Қp?R wMߍb[RO/kle:-iiMԉjGVve7)?ȥOZ""""""""""LEH3S.""""T43"""""LEH3S.""""T43"""""L^D1 דbĈ_C@@{&11є\ի)**nӵkWwnJv?,nBCCM<~86m܏7% ''m۶GNHII1-{ҥU5ʔ\0o9v6dufJ6@zz:{!00iJnMs㤦bٸO_fך2;_}e1_k;W_fךZSvckM 6v4-Mp*../Icbb馛gǎ\.Ӳ{Ͱah߾=w怜̴ӧOcZ̭ʀL4 opJ۶mM[[IHH &&ƴL:D߾}IHH`Ν]RR¿ozI6mؾ})ŶmHJJ"::5/͘2̘͘͘5WofW_6cz6kznڒTH5=z$}%""6m`akСf3% --Ν;w7aS < իtѴl 8{,:t0-7 /jCBB fa󖕛aѶm[LAͥxڵkGVVn۔l3kM͘5ژ+یZӸ;_}e1_k;fם;wl2/_οoYYY^fʕ|G߿FQDETTTo>ڵkN<ɦMp״"<33 0%RXX "$$;weFbitvqq17o={ҥKF^ܹsZGFFҥK+ +4{t:'??rS`Xii)Vճ2lf|ku4_8_NBBg^l߾PRRR/'44m۶ѵkWh]@E4;0ظq#apUWݶm[nfݻILLn7:w޽$''0 SN>}2ϛOc8g$$$ZH;vhLۗvENLycClܸݎbib{ryyy:u 0SN5X.("U~~>%%%uVHII1u=x~~>nY\9o<L>tǎ#??#Gt:MyC ՊjbhǏ7}Kii)ax~]^^n399n:pe Ndd$vSNqibbb}5/͘2̘޲͚޲͚޲͚޲͚fWofW_6sq7PeyIXX\s5\y啴mۖ0, Fb>չsgvjj+==?ԩS5q={4-χbtɔ`AA[l!--RzM6mL1ҹsg8}4\si|vž}X, 0`SV+޽ LɆOOOt0+PXXHzz:yyy~ݻAJJFosbʞ={(++ fW_fWofWofWofWofW_K3櫷l櫯q9_wݻϧ[nÇȠBCC &==b{pY-&M2̈#*"MgժU^MDDD׾}Xn47"""""LEH3S.""""T43"~KHW^LDZ}DDD@i.NH P.""""T43"""""LEH3ׅui4szf]055cQQ$tdJHkblr˿"7/F#""""|ZtMxޒCivM 줒fb4DDDDDZ&_m/}*++p0XEDDDeMo\qT#+++ &p2qDӦM#;; 2\.'Ncǎ$$$#λKQQ. QF1p@/ ?9۷'++)Sx*?,X^ĉyjܦsq7ڵuXb6 رcѣiiiTTTбcGƏnz>.<3gsqmѯ_j.RSSy饗7n^{˙3g~jz9ADDD>L)k[v0W6.acX,*9r8N9w /yv /0m4v @~~>>t:=k׮e̜9q6d_ 1tP , k֬^'MYY .䥗^"66;vpBΝ yGINN>c͚51=zٳgs}1h =TaXXlAyf1rH"##:? """R_}0lէOZ_p:0 RRRضR 6pueeey,,,:gϞ8qYU~y_~;wvDDDPRR@QQOrr2}a5C0 ͛Dze|n_ZZO< 裏x衇|^뻯Xl'N`̘1՞3 W^y+0dx 'Of̜9*{.p8ի}g{%ʀ?(ttADDDW; Yvl믹.\X( ꫯf̘1L:?綕k?q5;ȥU</8ʣGpY>ZgŊl޼_^p)UW]Uڵ+fg[n.yx嗫R8O ZRe'8N,_N߾}2mۆ>_uzm`` wq.3gd„ e͚5ARRcǎmԾz#<œ9s߿msrrx뭷\n3ϐǼyxꩧX,L8sĠ ~aOիٰan!CԸJ6{_~_~cDZZK.%,,G}֜1cYYY0~xk}5eҤIƸqqjj*oc#Ĥd3,iiW ¶ XkiYz_П+fOownCv/""""UGGE߫~ ѣ=.""""CP" * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include "encoding.h" #include "smsdb.h" #define MMGUI_SMSDB_SMS_MESSAGE_XML "\n\t%s\n\t\n\t%u\n\t%s\n\t%s\n\t%u\n\t%u\n\n\n" #define MMGUI_SMSDB_READ_TAG "\n\t" #define MMGUI_SMSDB_TRAILER_TAG "\n\n\n" #define MMGUI_SMSDB_TRAILER_PARAMS "\n\t%u\n\t%u\n\n\n" #define MMGUI_SMSDB_ACCESS_MASK 0755 enum _mmgui_smsdb_xml_elements { MMGUI_SMSDB_XML_PARAM_NUMBER = 0, MMGUI_SMSDB_XML_PARAM_TIME, MMGUI_SMSDB_XML_PARAM_BINARY, MMGUI_SMSDB_XML_PARAM_SERVICENUMBER, MMGUI_SMSDB_XML_PARAM_TEXT, MMGUI_SMSDB_XML_PARAM_READ, MMGUI_SMSDB_XML_PARAM_FOLDER, MMGUI_SMSDB_XML_PARAM_NULL }; static gint mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_NULL; static gint mmgui_smsdb_sms_message_sort_compare(gconstpointer a, gconstpointer b); static void mmgui_smsdb_free_sms_list_foreach(gpointer data, gpointer user_data); static mmgui_sms_message_t mmgui_smsdb_xml_parse(gchar *xml, gsize size); static void mmgui_smsdb_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); static void mmgui_smsdb_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error); static void mmgui_smsdb_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error); smsdb_t mmgui_smsdb_open(const gchar *persistentid, const gchar *internalid) { smsdb_t smsdb; const gchar *newfilepath; const gchar *newfilename; gchar filename[64]; const gchar *oldfilename; if (persistentid == NULL) return NULL; //Form path using XDG standard newfilepath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_data_dir(), "modem-manager-gui", "devices", persistentid, NULL); if (newfilepath == NULL) return NULL; //If directory structure not exists, create it if (!g_file_test(newfilepath, G_FILE_TEST_IS_DIR)) { if (g_mkdir_with_parents(newfilepath, S_IRUSR|S_IWUSR|S_IXUSR|S_IXGRP|S_IXOTH) == -1) { g_warning("Failed to make XDG data directory: %s", newfilepath); } } //Form file name newfilename = g_build_filename(newfilepath, "sms.gdbm", NULL); g_free((gchar *)newfilepath); if (newfilename == NULL) return NULL; //If file already exists, just work with it if ((!g_file_test(newfilename, G_FILE_TEST_EXISTS)) && (internalid != NULL)) { //Form old-style file path memset(filename, 0, sizeof(filename)); g_snprintf(filename, sizeof(filename), "sms-%s.gdbm", internalid); oldfilename = g_build_filename(g_get_home_dir(), ".config", "modem-manager-gui", filename, NULL); if (oldfilename != NULL) { //If file exists in old location, move it if (g_file_test(oldfilename, G_FILE_TEST_EXISTS)) { if (g_rename(oldfilename, newfilename) == -1) { g_warning("Failed to move file into XDG data directory: %s -> %s", oldfilename, newfilename); } } } g_free((gchar *)oldfilename); } smsdb = g_new(struct _smsdb, 1); smsdb->filepath = newfilename; smsdb->unreadmessages = 0; return smsdb; } gboolean mmgui_smsdb_close(smsdb_t smsdb) { if (smsdb == NULL) return FALSE; if (smsdb->filepath != NULL) { g_free((gchar *)smsdb->filepath); } smsdb->unreadmessages = 0; g_free(smsdb); return TRUE; } mmgui_sms_message_t mmgui_smsdb_message_create(void) { mmgui_sms_message_t message; message = g_new(struct _mmgui_sms_message, 1); message->timestamp = time(NULL); message->read = FALSE; message->binary = FALSE; message->folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; message->number = NULL; message->svcnumber = NULL; message->idents = NULL; message->text = NULL; return message; } void mmgui_smsdb_message_free(mmgui_sms_message_t message) { if (message == NULL) return; if (message->number != NULL) { g_free(message->number); } if (message->svcnumber != NULL) { g_free(message->svcnumber); } if (message->idents != NULL) { g_array_free(message->idents, TRUE); } if (message->text != NULL) { g_string_free(message->text, TRUE); } g_free(message); } gboolean mmgui_smsdb_message_set_number(mmgui_sms_message_t message, const gchar *number) { gchar *escnumber; gsize srclen; if ((message == NULL) || (number == NULL)) return FALSE; srclen = strlen(number); if (srclen == 0) return FALSE; escnumber = encoding_clear_special_symbols(g_strdup(number), srclen); if (escnumber != NULL) { if (message->number != NULL) { g_free(message->number); } message->number = escnumber; return TRUE; } else { return FALSE; } } const gchar *mmgui_smsdb_message_get_number(mmgui_sms_message_t message) { if (message == NULL) return NULL; return message->number; } gboolean mmgui_smsdb_message_set_service_number(mmgui_sms_message_t message, const gchar *number) { gchar *escnumber; gsize srclen; if ((message == NULL) || (number == NULL)) return FALSE; srclen = strlen(number); if (srclen == 0) return FALSE; escnumber = encoding_clear_special_symbols(g_strdup(number), srclen); if (escnumber != NULL) { if (message->svcnumber != NULL) { g_free(message->svcnumber); } message->svcnumber = escnumber; return TRUE; } else { return FALSE; } } const gchar *mmgui_smsdb_message_get_service_number(mmgui_sms_message_t message) { if (message == NULL) return NULL; return message->svcnumber; } gboolean mmgui_smsdb_message_set_text(mmgui_sms_message_t message, const gchar *text, gboolean append) { if ((message == NULL) || (text == NULL)) return FALSE; if (message->binary) return FALSE; if (!append) { if (message->text != NULL) { g_string_free(message->text, TRUE); } message->text = g_string_new(text); } else { if (message->text != NULL) { message->text = g_string_append_c(message->text, ' '); message->text = g_string_append(message->text, text); } else { message->text = g_string_new(text); } } return TRUE; } const gchar *mmgui_smsdb_message_get_text(mmgui_sms_message_t message) { if (message == NULL) return NULL; if (message->text != NULL) { return message->text->str; } else { return NULL; } } gboolean mmgui_smsdb_message_set_data(mmgui_sms_message_t message, const gchar *data, gsize len, gboolean append) { guint srclen, index; if ((message == NULL) || (data == NULL) || (len == 0)) return FALSE; if (!message->binary) return FALSE; if (!append) { if (message->text != NULL) { g_string_free(message->text, TRUE); } message->text = g_string_new_len(NULL, len*2+1); for (index=0; indextext->str+(index*2), "0%1x", (guchar)data[index]); } else { g_sprintf(message->text->str+(index*2), "%2x", (guchar)data[index]); } } message->text->str[len*2] = '\0'; } else { if (message->text != NULL) { message->text = g_string_append(message->text, "00"); srclen = message->text->len-1; message->text = g_string_set_size(message->text, srclen+len*2+1); for (index=0; indextext->str+(srclen+index*2), "0%1x", (guchar)data[index]); } else { g_sprintf(message->text->str+(srclen+index*2), "%2x", (guchar)data[index]); } } message->text->str[srclen+len*2] = '\0'; } else { message->text = g_string_new_len(NULL, len*2+1); for (index=0; indextext->str+(index*2), "0%1x", (guchar)data[index]); } else { g_sprintf(message->text->str+(index*2), "%2x", (guchar)data[index]); } } message->text->str[len*2] = '\0'; } } return TRUE; } gboolean mmgui_smsdb_message_set_identifier(mmgui_sms_message_t message, guint ident, gboolean append) { if (message == NULL) return FALSE; if (!append) { if (message->idents != NULL) { g_array_free(message->idents, TRUE); } message->idents = g_array_new(FALSE, TRUE, sizeof(guint)); g_array_append_val(message->idents, ident); } else { if (message->idents != NULL) { g_array_append_val(message->idents, ident); } else { message->idents = g_array_new(FALSE, TRUE, sizeof(guint)); g_array_append_val(message->idents, ident); } } return TRUE; } guint mmgui_smsdb_message_get_identifier(mmgui_sms_message_t message) { guint ident; if (message == NULL) return 0; if (message->idents != NULL) { ident = g_array_index(message->idents, guint, 0); } else { ident = 0; } return ident; } gboolean mmgui_smsdb_message_set_timestamp(mmgui_sms_message_t message, time_t timestamp) { if (message == NULL) return FALSE; message->timestamp = timestamp; return TRUE; } time_t mmgui_smsdb_message_get_timestamp(mmgui_sms_message_t message) { if (message == NULL) return 0; return message->timestamp; } gboolean mmgui_smsdb_message_set_read(mmgui_sms_message_t message, gboolean read) { if (message == NULL) return FALSE; message->read = read; return TRUE; } gboolean mmgui_smsdb_message_get_read(mmgui_sms_message_t message) { if (message == NULL) return FALSE; return message->read; } gboolean mmgui_smsdb_message_set_folder(mmgui_sms_message_t message, enum _mmgui_smsdb_sms_folder folder) { if (message == NULL) return FALSE; switch (folder) { case MMGUI_SMSDB_SMS_FOLDER_INCOMING: message->folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; break; case MMGUI_SMSDB_SMS_FOLDER_SENT: message->folder = MMGUI_SMSDB_SMS_FOLDER_SENT; break; case MMGUI_SMSDB_SMS_FOLDER_DRAFTS: message->folder = MMGUI_SMSDB_SMS_FOLDER_DRAFTS; break; default: message->folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; break; } return TRUE; } enum _mmgui_smsdb_sms_folder mmgui_smsdb_message_get_folder(mmgui_sms_message_t message) { if (message == NULL) return MMGUI_SMSDB_SMS_FOLDER_INCOMING; return message->folder; } gboolean mmgui_smsdb_message_set_binary(mmgui_sms_message_t message, gboolean binary) { if (message == NULL) return FALSE; message->binary = binary; return TRUE; } gboolean mmgui_smsdb_message_get_binary(mmgui_sms_message_t message) { if (message == NULL) return FALSE; return message->binary; } gulong mmgui_smsdb_message_get_db_identifier(mmgui_sms_message_t message) { if (message == NULL) return 0; return message->dbid; } guint mmgui_smsdb_get_unread_messages(smsdb_t smsdb) { if (smsdb == NULL) return 0; return smsdb->unreadmessages; } gboolean mmgui_smsdb_add_sms(smsdb_t smsdb, mmgui_sms_message_t message) { GDBM_FILE db; gchar smsid[64]; gulong idvalue; gint idlen; datum key, data; gchar *smsnumber; gchar *smstext; gchar *smsxml; if ((smsdb == NULL) || (message == NULL)) return FALSE; if (smsdb->filepath == NULL) return FALSE; if ((message->number == NULL) || ((message->text->str == NULL))) return FALSE; db = gdbm_open((gchar *)smsdb->filepath, 0, GDBM_WRCREAT, MMGUI_SMSDB_ACCESS_MASK, 0); if (db == NULL) return FALSE; do { idvalue = (gulong)random(); memset(smsid, 0, sizeof(smsid)); idlen = snprintf(smsid, sizeof(smsid), "%lu", idvalue); key.dptr = (gchar *)smsid; key.dsize = idlen; } while (gdbm_exists(db, key)); message->dbid = idvalue; smsnumber = g_markup_escape_text(message->number, -1); if (smsnumber == NULL) { g_warning("Unable to convert SMS number string"); gdbm_close(db); return FALSE; } smstext = g_markup_escape_text(message->text->str, -1); if (smstext == NULL) { g_warning("Unable to convert SMS text string"); g_free(smsnumber); gdbm_close(db); return FALSE; } smsxml = g_strdup_printf(MMGUI_SMSDB_SMS_MESSAGE_XML, smsnumber, message->timestamp, message->binary, message->svcnumber, smstext, message->read, message->folder); data.dptr = smsxml; data.dsize = strlen(smsxml); if (gdbm_store(db, key, data, GDBM_REPLACE) == -1) { g_warning("Unable to write to database"); gdbm_close(db); g_free(smsxml); return FALSE; } gdbm_sync(db); gdbm_close(db); if (!message->read) { smsdb->unreadmessages++; } g_free(smsxml); g_free(smsnumber); g_free(smstext); return TRUE; } static gint mmgui_smsdb_sms_message_sort_compare(gconstpointer a, gconstpointer b) { mmgui_sms_message_t sms1, sms2; sms1 = (mmgui_sms_message_t)a; sms2 = (mmgui_sms_message_t)b; if (sms1->timestamp < sms2->timestamp) { return -1; } else if (sms1->timestamp > sms2->timestamp) { return 1; } else { return 0; } } GSList *mmgui_smsdb_read_sms_list(smsdb_t smsdb) { GDBM_FILE db; GSList *list; mmgui_sms_message_t message; datum key, data; gchar smsid[64]; if (smsdb == NULL) return NULL; if (smsdb->filepath == NULL) return NULL; db = gdbm_open((gchar *)smsdb->filepath, 0, GDBM_READER, MMGUI_SMSDB_ACCESS_MASK, 0); if (db == NULL) return NULL; smsdb->unreadmessages = 0; list = NULL; key = gdbm_firstkey(db); if (key.dptr != NULL) { do { data = gdbm_fetch(db, key); if (data.dptr != NULL) { message = mmgui_smsdb_xml_parse(data.dptr, data.dsize); if (message != NULL) { if (!message->read) { smsdb->unreadmessages++; } memset(smsid, 0, sizeof(smsid)); strncpy(smsid, key.dptr, key.dsize); message->dbid = strtoul(smsid, NULL, 0); list = g_slist_prepend(list, message); } } key = gdbm_nextkey(db, key); } while (key.dptr != NULL); } gdbm_close(db); if (list != NULL) { list = g_slist_sort(list, mmgui_smsdb_sms_message_sort_compare); } return list; } static void mmgui_smsdb_free_sms_list_foreach(gpointer data, gpointer user_data) { mmgui_sms_message_t message; if (data != NULL) return; message = (mmgui_sms_message_t)data; if (message->number != NULL) { g_free(message->number); } if (message->svcnumber != NULL) { g_free(message->svcnumber); } if (message->idents != NULL) { g_array_free(message->idents, TRUE); } if (message->text != NULL) { g_string_free(message->text, TRUE); } } void mmgui_smsdb_message_free_list(GSList *smslist) { if (smslist == NULL) return; g_slist_foreach(smslist, mmgui_smsdb_free_sms_list_foreach, NULL); g_slist_free(smslist); } mmgui_sms_message_t mmgui_smsdb_read_sms_message(smsdb_t smsdb, gulong idvalue) { GDBM_FILE db; gchar smsid[64]; gint idlen; datum key, data; mmgui_sms_message_t message; if (smsdb == NULL) return NULL; if (smsdb->filepath == NULL) return NULL; db = gdbm_open((gchar *)smsdb->filepath, 0, GDBM_READER, MMGUI_SMSDB_ACCESS_MASK, 0); if (db == NULL) return NULL; message = NULL; memset(smsid, 0, sizeof(smsid)); idlen = snprintf(smsid, sizeof(smsid), "%lu", idvalue); key.dptr = (gchar *)smsid; key.dsize = idlen; if (gdbm_exists(db, key)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { message = mmgui_smsdb_xml_parse(data.dptr, data.dsize); message->dbid = idvalue; } } gdbm_close(db); return message; } gboolean mmgui_smsdb_remove_sms_message(smsdb_t smsdb, gulong idvalue) { GDBM_FILE db; gchar smsid[64]; gint idlen, unreaddelta; datum key, data; gchar *node; if (smsdb == NULL) return FALSE; if (smsdb->filepath == NULL) return FALSE; db = gdbm_open((gchar *)smsdb->filepath, 0, GDBM_WRCREAT, MMGUI_SMSDB_ACCESS_MASK, 0); if (db == NULL) return FALSE; memset(smsid, 0, sizeof(smsid)); idlen = g_snprintf(smsid, sizeof(smsid), "%lu", idvalue); key.dptr = (gchar *)smsid; key.dsize = idlen; unreaddelta = 0; if (gdbm_exists(db, key)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { node = strstr(data.dptr, MMGUI_SMSDB_READ_TAG); if (node != NULL) { if ((node-data.dptr > 8) && (isdigit(node[8]))) { if (node[8] == '0') { unreaddelta = -1; } else { unreaddelta = 0; } } } else { unreaddelta = -1; } free(data.dptr); } if (gdbm_delete(db, key) == 0) { smsdb->unreadmessages += unreaddelta; gdbm_sync(db); gdbm_close(db); return TRUE; } } gdbm_close(db); return FALSE; } gboolean mmgui_smsdb_set_message_read_status(smsdb_t smsdb, gulong idvalue, gboolean readflag) { GDBM_FILE db; gint unreaddelta; gchar smsid[64]; gint idlen; datum key, data; gchar *node, /* *trailer,*/ *newmsg; gchar newtrailer[64]; gint newtrailerlen; gboolean res; if (smsdb == NULL) return FALSE; if (smsdb->filepath == NULL) return FALSE; db = gdbm_open((gchar *)smsdb->filepath, 0, GDBM_WRITER, MMGUI_SMSDB_ACCESS_MASK, 0); if (db == NULL) return FALSE; memset(smsid, 0, sizeof(smsid)); idlen = snprintf(smsid, sizeof(smsid), "%lu", idvalue); key.dptr = (gchar *)smsid; key.dsize = idlen; res = FALSE; unreaddelta = 0; if (gdbm_exists(db, key)) { data = gdbm_fetch(db, key); if (data.dptr != NULL) { node = strstr(data.dptr, MMGUI_SMSDB_READ_TAG); if (node != NULL) { if ((node-data.dptr > 8) && (isdigit(node[8]))) { if ((readflag) && (node[8] == '0')) { unreaddelta = -1; node[8] = '1'; } else if ((!readflag) && (node[8] == '1')) { unreaddelta = 1; node[8] = '0'; } if (gdbm_store(db, key, data, GDBM_REPLACE) == 0) { smsdb->unreadmessages += unreaddelta; res = TRUE; } free(data.dptr); } } else { if (strstr(data.dptr, MMGUI_SMSDB_TRAILER_TAG) != NULL) { memset(newtrailer, 0, sizeof(newtrailer)); newtrailerlen = g_snprintf(newtrailer, sizeof(newtrailer), MMGUI_SMSDB_TRAILER_PARAMS, readflag, MMGUI_SMSDB_SMS_FOLDER_INCOMING); newmsg = g_malloc0(data.dsize-9+newtrailerlen+1); memcpy(newmsg, data.dptr, data.dsize-9); memcpy(newmsg+data.dsize-9, newtrailer, newtrailerlen); free(data.dptr); data.dptr = newmsg; data.dsize = data.dsize-9+newtrailerlen; if (readflag) { unreaddelta = -1; } else { unreaddelta = 0; } if (gdbm_store(db, key, data, GDBM_REPLACE) == 0) { smsdb->unreadmessages += unreaddelta; res = TRUE; } g_free(newmsg); } } } } gdbm_close(db); return res; } static mmgui_sms_message_t mmgui_smsdb_xml_parse(gchar *xml, gsize size) { mmgui_sms_message_t message; GMarkupParser mp; GMarkupParseContext *mpc; GError *error = NULL; message = g_new(struct _mmgui_sms_message, 1); message->timestamp = time(NULL); message->read = FALSE; message->folder = MMGUI_SMSDB_SMS_FOLDER_INCOMING; message->binary = FALSE; message->number = NULL; message->svcnumber = NULL; message->idents = NULL; message->text = NULL; mp.start_element = mmgui_smsdb_xml_get_element; mp.end_element = mmgui_smsdb_xml_end_element; mp.text = mmgui_smsdb_xml_get_value; mp.passthrough = NULL; mp.error = NULL; mpc = g_markup_parse_context_new(&mp, 0, (gpointer)message, NULL); g_markup_parse_context_parse(mpc, xml, size, &error); if (error != NULL) { //g_warning(error->message); g_error_free(error); g_markup_parse_context_free(mpc); return NULL; } g_markup_parse_context_free(mpc); return message; } static void mmgui_smsdb_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { if (g_str_equal(element, "number")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_NUMBER; } else if (g_str_equal(element, "time")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_TIME; } else if (g_str_equal(element, "binary")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_BINARY; } else if (g_str_equal(element, "servicenumber")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_SERVICENUMBER; } else if (g_str_equal(element, "text")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_TEXT; } else if (g_str_equal(element, "read")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_READ; } else if (g_str_equal(element, "folder")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_FOLDER; } else { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_NULL; } } static void mmgui_smsdb_xml_get_value(GMarkupParseContext *context, const gchar *text, gsize size, gpointer data, GError **error) { mmgui_sms_message_t message; gchar *numescstr, *textescstr; message = (mmgui_sms_message_t)data; if (mmgui_smsdb_xml_parameter == MMGUI_SMSDB_XML_PARAM_NULL) return; switch (mmgui_smsdb_xml_parameter) { case MMGUI_SMSDB_XML_PARAM_NUMBER: numescstr = encoding_unescape_xml_markup(text, size); if (numescstr != NULL) { message->number = encoding_clear_special_symbols((gchar *)numescstr, strlen(numescstr)); } else { message->number = encoding_clear_special_symbols((gchar *)text, size); } break; case MMGUI_SMSDB_XML_PARAM_TIME: message->timestamp = (time_t)atol(text); break; case MMGUI_SMSDB_XML_PARAM_BINARY: if (atoi(text)) { message->binary = TRUE; } else { message->binary = FALSE; } break; case MMGUI_SMSDB_XML_PARAM_SERVICENUMBER: message->svcnumber = g_strdup(text); break; case MMGUI_SMSDB_XML_PARAM_TEXT: textescstr = encoding_unescape_xml_markup(text, size); if (textescstr != NULL) { message->text = g_string_new(textescstr); g_free(textescstr); } else { message->text = g_string_new(text); } break; case MMGUI_SMSDB_XML_PARAM_READ: if (atoi(text)) { message->read = TRUE; } else { message->read = FALSE; } break; case MMGUI_SMSDB_XML_PARAM_FOLDER: message->folder = atoi(text); break; default: break; } } static void mmgui_smsdb_xml_end_element(GMarkupParseContext *context, const gchar *element, gpointer data, GError **error) { if (!g_str_equal(element, "sms")) { mmgui_smsdb_xml_parameter = MMGUI_SMSDB_XML_PARAM_NULL; } } modem-manager-gui-0.0.19.1/packages/debian/rules000775 001750 001750 00000000514 13261703575 021252 0ustar00alexalex000000 000000 #!/usr/bin/make -f export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed export DEB_BUILD_MAINT_OPTIONS=hardening=+all %: dh $@ override_dh_auto_clean: if [ -f Makefile_h ] ; then \ dh_auto_clean ; \ fi override_dh_auto_install: dh_auto_install rm -rf debian/tmp/usr/share/help/en_US/ rm -rf debian/tmp/usr/share/man/en_US/ modem-manager-gui-0.0.19.1/po/id.po000664 001750 001750 00000132772 13261705051 016547 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ade Malsasa Akbar , 2013 # Arif Budiman , 2014-2015 # etc session, 2013 # Ade Malsasa Akbar , 2013 # master , 2013 # windi anto , 2017 # Rendiyono Wahyu Saputro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Indonesian (http://www.transifex.com/ethereal/modem-manager-gui/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "SMS belum dibaca" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Pesan belum dibaca" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Koneksi" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Galat menambahkan kontak" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Hapus kontak" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Sungguh ingin menghapus kontak?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Galat menghapus kontak" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Kontak tidak dihapus dari perangkat" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Kontak tidak dipilih" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Kontak modem" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "Kontak GNOME" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "Kontak KDE" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Nama depan" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Nomor depan" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Email" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Grup" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Nama tengah" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Nomor akhir" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Gagal membuka perangkat" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersi:%s Port:%s Tipe:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Dipilih" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Perangkat" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Aktifkan" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Tidak didukung" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Galat ketika inisialisasi" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Tidak dapat memulai sistem service tanpa kredensial yang benar" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Tidak dapat berkomunikasi dengan sistem service yang tersedia" #: ../src/main.c:506 msgid "Success" msgstr "Sukses" #: ../src/main.c:511 msgid "Failed" msgstr "Gagal" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Waktu habis" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Berhenti" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Mengaktifkan perangkat..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Tidak ada perangkat yang ditemukan pada sistem" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Modem belum siap beroprasi. mohon tunggu sementara modem sedang dipersiapkan..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Modem harus diaktifkan untuk membaca dan menulis SMS. Silakan aktifkan modem." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Modem harus didaftarkan pada jaringan mobile untuk menerima dan mengirim SMS. Mohon tunggu..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Modem harus tidak terkunci untuk menerima dan mengirim SMS. Silakan masukkan kode PIN." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Modem manager tidak mendukung fungsi manipulasi SMS." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Modem manager tidak mendukung pengiriman SMS." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Modem harus diaktifkan untuk mengirim USSD. Silakan aktifkan modem." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Modem harus didaftarkan pada jaringan mobile untuk mengirim USSD. Modon tunggu..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Modem harus tidak terkunci untuk mengirim USSD. Silakan masukkan kode PIN." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Modem manager tidak mendukung pengiriman permintaan USSD. " #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Modem harus diaktifkan untuk memindai pada jaringan yang tersedia. Silakan aktifkan modem." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Modem harus tidak terkunci untuk memindai jaringan yang tersedia. Silakan masukkan kode PIN." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Modem manager tidak mendukung pemindaian jaringan mobile yang tersedia." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Modem sedang terhubung sekarang. Silakan putuskan untuk memindai." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Modem harus diaktifkan untuk mengekspor kontak darinya. Silakan aktifkan modem." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Modem harus tidak terkunci untuk mengekspor kontak darinya. Silakan masukkan kode PIN." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Modem manager tidak mendukung fungsi manipulasi kontak modem. " #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Modem manager tidak mendukung fungsi edit kontak modem." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Perangkat" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Informasi" #: ../src/main.c:1600 msgid "S_can" msgstr "P_indai" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Trafik" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "K_ontak" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Jendela Modem Manager GUI tersembunyi" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Gunakan tray icon atau menu pesan untuk menampilkan jendela kembali" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Galat ketika menampilkan isi bantuan" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s terputus" #: ../src/main.c:2056 msgid "Show window" msgstr "Tampilkan jendela" #: ../src/main.c:2062 msgid "New SMS" msgstr "SMS baru" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Keluar" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Keluar" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Aksi" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Preferensi" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Sunting" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Bantuan" #: ../src/main.c:2697 msgid "_About" msgstr "_Tentang" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Preferensi" #: ../src/main.c:2714 msgid "Help" msgstr "Bantuan" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Tentang" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "Tidak dapat menemukan modul MMGUI. Tolong periksa apakah aplikasi tersebut terpasang dengan benar" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Galat membangun antarmuka" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Modul manajemen modem:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modul" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Penjelasan" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Modul manajemen Koneksi:\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Segmentation fault pada alamat: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Stack trace:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Jangan tampilkan jendela ketika memulai" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Gunakan modul manajemen modem tertentu" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Menggunakan modul manajemen koneksi tertentu" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Tampilkan semua modul yang tersedia dan keluar" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- perangkat lunak untuk mengatur fungsi khusus pada modem EDGE/3G/4G" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Penjelasan kegagalan opsi baris perintah: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Tidak didefinisikan" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Memindai jaringan..." #: ../src/scan-page.c:46 msgid "Device error" msgstr "Perangkat galat" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Tersedia: %s Akses teknologi: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Galat memindai jaringan" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operator" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Diterima %u pesan SMS baru" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Pesan SMS baru telah diterima" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Pengirim:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Nomor SMS tidak sah\nHanya nomor dari 2 hingga 20 digit tanpa\nhuruf dan simbol yang bisa dipakai" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Teks SMS tidak sah\nTulis teks untuk dapat mengirim" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "Mengirim SMS ke nomor\"1%s\"..." #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Salah nomor atau perangkat tidak siap" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Menyimpan SMS..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Apakah benar ingin menghapus pesan (1%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Hapus pesan" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Beberapa pesan tidak terhapus (1%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Masuk" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Folder ini untuk pesan yang Anda terima.\nAnda dapat menjawab pesan terpilih menggunakan tombol 'Jawab'." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Terkirim" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Folder ini untuk pesan terkirim Anda." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Konsep" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Folder ini untuk draf pesan singkat Anda.\nPilih pesan dan klik tombol 'Jawab' untuk mulai mengubahnya." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Masuk\nPesan masuk" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Kirim\nMengirim pesan" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Draf\nDraf pesan" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Dinonaktifkan" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u detik" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u detik" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Hari ini, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Tidak diketahui" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Kemarin, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Tersedia" #: ../src/strformat.c:248 msgid "Current" msgstr "Saat ini" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Dilarang" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Belum terdaftar" #: ../src/strformat.c:288 msgid "Home network" msgstr "Jaringan rumah" #: ../src/strformat.c:290 msgid "Searching" msgstr "Mencari" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Registrasi ditolak" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Status tidak diketahui" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Jaringan roaming" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f menit" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f jam" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f hari" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f minggu" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f detik" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u menit, %u detik" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Pekerjaan dibatalkan" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Batas waktu Systemd tercapai" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "Pengaktifan service gagal" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Service bergantung pada service yang gagal" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Service dilewati" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Kesalahan yang tidak diketahui" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Tipe entitas tidak dikenal" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Hari" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Data diterima" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Data terkirim" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Durasi sesi" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Aplikasi" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokol" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Status" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Buffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Tujuan" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Melebihi batas lalu lintas jaringan" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Melebihi batas waktu" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Jaringan: %s, batas diatur ke: %s\nWaktu: %s, batas diatur ke: %s\nSilakan periksa nilai yang dimasukkan dan cobalah sekali lagi" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Nilai lalu lintas jaringan dan batasan waktu salah" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Traffic: %s, Ubah batasan pada: %s\nSilakan periksa nilai yang dimasukkan dan cobalah sekali lagi" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Salah penetapan batas traffic jaringan" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Waktu: %s, batas diatur ke: %s\nSilakan periksa nilai yang dimasukkan dan cobalah sekali lagi" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Batas nilai waktu salah" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Terputus" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Batasan" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Nonaktif" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "detik" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Kecepatan RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Kecepatan TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parameter" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Nilai" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Sesi" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Data diterima" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Data ditransfer" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Kecepatan menerima" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Kecepatan mengirim" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Waktu sesi" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Sisa traffic" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Sisa waktu" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Bulan" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Total waktu" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Tahun" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Batas lalu lintas jaringan terlampaui... Saatnya beristirahat" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Batas waktu telah terlampaui... Tidurlah dan mimpi indah" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Contoh perintah" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "Permintaan USSD tidak sah\nPermintaan harus terdiri dari 160 simbol\ndimulai dengan '*' dan diakhiri dengan '#'" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "Mengirim permintaan USSD %s..." #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "Mengirim respon USSD 1%s... " #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Galat mengirim USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Permintaan USSD salah atau perangkat belum siap" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Sesi USSD dihentikan. Anda dapat mengirim permintaan baru" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Permintaan USSD salah" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nSessi USSD telah aktif. Tunggulah untuk data masukan anda...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nTidak ada jawaban..." #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Perintah" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Mulai!" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Service" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Tutup" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Aktivasi..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Sukses" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "1%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Selamat datang" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "Meskipun dari namanya, Modem Manager GUI mendukung backend yang berbeda. Silahkan pilih backend yang kamu rencanakan untuk digunakan. Jika tidak yakin, jangan ubah apapun." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Pengelola modem" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Pengelola koneksi" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Selamat datang di Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Aktifkan layanan setelah aktivasi" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Aktivasi service" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI menggunakan service sistem spesial untuk berkomunikasi dengan modem dan network sack. Mohon tunggu sampai semua service yang dibutuhkan telah diaktifkan" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Menampilkan dan memilih perangkat yang tersedia CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Perangkat" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "Kirim dan terima pesan SMS CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "Kirim permintaan USSD CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Menampilkan informasi perangkat aktif CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Informasi" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Memindai jaringan mobile yang ada CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Pindai" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Monitor lalu lintas jaringan CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Lalu lintas jaringan" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Tampilkan buku alamat sistem dan modem CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Kontak" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Sunting" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Kirim pesan SMS baru CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Baru" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Hapus pesan terpilih CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Hapus" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Balas pesan terpilih CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Jawab" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Meminta" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Kirim" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "Kirim permintaan USSD CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "Sunting daftar perintah USSD CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Perlengkapan" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Mode" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Tingkat sinyal" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Kode operator" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Registrasi" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Jaringan" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "Lokasi 3GPP\nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Lokasi" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Memindai jaringan mobile yang tersedia CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Mulai memindai" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Buat Koneksi" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Atur batasan jumlah trafik atau waktu untuk memutuskan CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Atur batasan" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Tampilkan daftar koneksi jaringan yang aktif CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Koneksi" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Tampilkan statistik trafik harian CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statistik" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Kecepatan transmisi" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Tambah kontak baru di buku alamat modem CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Kontak baru" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Hapus kontak dari buku alamat modem CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Hapus kontak" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Kirim pesan SMS kepada kontak terpilih CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Kirim SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Alat untuk mengendalikan fungsi khusus pada modem EDGE/3G/4G" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Situs Resmi" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "English: Alex " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Koneksi aktif" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Hentikan aplikasi yang dipilih menggunakan SIGTERM signal CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Hentikan aplikasi" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Tambah koneksi broadband baru" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Hapus koneksi yang dipilih" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Nama" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Koneksi" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "ID Jaringan" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Nomor Akses" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Nama Pengguna" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Kata Sandi" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Autentifikasi" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Galat" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Tanyakan nanti" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Keluar atau minimize?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Anda menutup jendela, apa yang Anda ingin aplikasi lakukan?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Keluar saja" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Minimize ke menu tray atau perpesanan" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Pesan SMS baru" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Simpan" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Nomor" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Gunakan suara untuk kejadian" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Sembunyikan jendela ke tray saat menutup" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Simpan ukuran dan posisi jendela" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Tambah program ke daftar otomatis jalan" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Kelakuan" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Tingkah Laku" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Menyatukan pesan" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Memperluas folder" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Letakkan pesan lama di atas" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Presentasi" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Masa berlaku" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Kirim laporan pengiriman jika mungkin" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Parameter Pesan" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Warna grafik kecepatan RX" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Warna grafik kecepatan TX" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Trafik" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Grafik" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Backend yang disukai" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Aktifkan perangkat" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Kirim pesan SMS" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Kirim permintaan USSD" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Pindai jaringan" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Modul" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Pertanyaan" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Batas lalu lintas jaringan" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Aktifkan batasan waktu" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Pesan" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Tindakan" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Tampilkan Pesan" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Putuskan" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Waktu" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Menit" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Jam" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Statistik lalu lintas jaringan" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Periode statistik terpilih" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Januari" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Februari" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Maret" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "April" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Mei" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Juni" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Juli" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Agustus" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Septembar" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Oktober" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "November" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Desember" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "Perintah USSD" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Tambah perintah USSD baru CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Tambah" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Hapus perintah USSD terpilih CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Hapus" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "Paksa balasan USSD mengubah enkoding dari GSM7 ke UCS2 (berguna untuk modem Huawei) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Ubah enkoding pesan" modem-manager-gui-0.0.19.1/.tx/000775 001750 001750 00000000000 13261703575 015703 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/pl/000775 001750 001750 00000000000 13261703575 016535 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/ru/meson.build000664 001750 001750 00000000344 13261703575 020536 0ustar00alexalex000000 000000 custom_target('man-ru', input: 'ru.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'ru', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/man/uk/meson.build000664 001750 001750 00000000344 13261703575 020527 0ustar00alexalex000000 000000 custom_target('man-uk', input: 'uk.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'uk', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/src/ayatana.h000664 001750 001750 00000012134 13261703575 017551 0ustar00alexalex000000 000000 /* * ayatana.h * * Copyright 2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __AYATANA_H__ #define __AYATANA_H__ #include #include #include "libpaths.h" enum _mmgui_aytana_library { MMGUI_AYATANA_LIB_NULL = 0, MMGUI_AYATANA_LIB_INDICATE, MMGUI_AYATANA_LIB_MESSAGINGMENU }; enum _mmgui_ayatana_event { MMGUI_AYATANA_EVENT_SERVER = 0, MMGUI_AYATANA_EVENT_CLIENT }; /*libindiacate staructures*/ typedef struct _IndicateServer IndicateServer; typedef struct _IndicateIndicator IndicateIndicator; /*libmessaging-menu structures*/ typedef struct _MessagingMenuApp MessagingMenuApp; /*libindicate functions*/ typedef IndicateServer *(*indicate_server_ref_default_func)(void); typedef void (*indicate_server_set_type_func)(IndicateServer *server, const gchar *type); typedef void (*indicate_server_set_desktop_file_func)(IndicateServer *server, const gchar *path); typedef void (*indicate_server_show_func)(IndicateServer *server); typedef void (*indicate_server_hide_func)(IndicateServer *server); typedef IndicateIndicator *(*indicate_indicator_new_with_server_func)(IndicateServer *server); typedef void (*indicate_indicator_set_property_func)(IndicateIndicator *indicator, const gchar *key, const gchar *data); typedef void (*indicate_indicator_show_func)(IndicateIndicator *indicator); typedef void (*indicate_indicator_hide_func)(IndicateIndicator *indicator); /*libmessaging-menu functions*/ typedef MessagingMenuApp *(*messaging_menu_app_new_func)(const gchar *desktop_id); typedef void (*messaging_menu_app_register_func)(MessagingMenuApp *app); typedef void (*messaging_menu_app_unregister_func)(MessagingMenuApp *app); typedef void (*messaging_menu_app_append_source_func)(MessagingMenuApp *app, const gchar *id, GIcon *icon, const gchar *label); typedef void (*messaging_menu_app_remove_source_func)(MessagingMenuApp *app, const gchar *source_id); typedef void (*messaging_menu_app_set_source_count_func)(MessagingMenuApp *app, const gchar *source_id, guint count); typedef void (*messaging_menu_app_draw_attention_func)(MessagingMenuApp *app, const gchar *source_id); typedef void (*messaging_menu_app_remove_attention_func)(MessagingMenuApp *app, const gchar *source_id); typedef gboolean (*messaging_menu_app_has_source_func)(MessagingMenuApp *app, const gchar *source_id); struct _mmgui_ayatana_libindicate { IndicateServer *server; IndicateIndicator *client; indicate_server_ref_default_func indicate_server_ref_default; indicate_server_set_type_func indicate_server_set_type; indicate_server_set_desktop_file_func indicate_server_set_desktop_file; indicate_server_show_func indicate_server_show; indicate_server_hide_func indicate_server_hide; indicate_indicator_new_with_server_func indicate_indicator_new_with_server; indicate_indicator_set_property_func indicate_indicator_set_property; indicate_indicator_show_func indicate_indicator_show; indicate_indicator_hide_func indicate_indicator_hide; }; struct _mmgui_ayatana_libmessagingmenu { MessagingMenuApp *server; messaging_menu_app_new_func messaging_menu_app_new; messaging_menu_app_register_func messaging_menu_app_register; messaging_menu_app_unregister_func messaging_menu_app_unregister; messaging_menu_app_append_source_func messaging_menu_app_append_source; messaging_menu_app_remove_source_func messaging_menu_app_remove_source; messaging_menu_app_set_source_count_func messaging_menu_app_set_source_count; messaging_menu_app_draw_attention_func messaging_menu_app_draw_attention; messaging_menu_app_remove_attention_func messaging_menu_app_remove_attention; messaging_menu_app_has_source_func messaging_menu_app_has_source; }; /*Ayatana event callback*/ typedef void (*mmgui_ayatana_event_callback)(enum _mmgui_ayatana_event event, gpointer ayatana, gpointer data, gpointer userdata); struct _mmgui_ayatana { /*Module*/ GModule *module; /*Used library*/ enum _mmgui_aytana_library library; /*Event callback*/ mmgui_ayatana_event_callback eventcb; gpointer userdata; /*Functions union*/ union { struct _mmgui_ayatana_libindicate ind; struct _mmgui_ayatana_libmessagingmenu mmenu; } backend; }; typedef struct _mmgui_ayatana *mmgui_ayatana_t; mmgui_ayatana_t mmgui_ayatana_new(mmgui_libpaths_cache_t libcache, mmgui_ayatana_event_callback callback, gpointer userdata); void mmgui_ayatana_close(mmgui_ayatana_t ayatana); void mmgui_ayatana_set_unread_messages_number(mmgui_ayatana_t ayatana, guint number); #endif /* __AYATANA_H__ */ modem-manager-gui-0.0.19.1/po/meson.build000664 001750 001750 00000000257 13261703575 017756 0ustar00alexalex000000 000000 i18n = import('i18n') i18n.gettext('modem-manager-gui', preset : 'glib', args: [ '--default-domain=modem-manager-gui', '--from-code=UTF-8', '--add-comments', ]) modem-manager-gui-0.0.19.1/man/modem-manager-gui.pot000664 001750 001750 00000006453 13261703575 021774 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: modem-manager-gui.1:4 msgid "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "" #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of " "the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "" modem-manager-gui-0.0.19.1/src/ayatana.c000664 001750 001750 00000033732 13261703575 017553 0ustar00alexalex000000 000000 /* * ayatana.c * * Copyright 2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "../resources.h" #include "ayatana.h" static void mmgui_ayatana_indicator_server_clicked_signal(MessagingMenuApp *server, guint timestamp, gpointer user_data) { mmgui_ayatana_t ayatana; ayatana = (mmgui_ayatana_t)user_data; if (ayatana == NULL) return; if (ayatana->eventcb != NULL) { (ayatana->eventcb)(MMGUI_AYATANA_EVENT_SERVER, ayatana, NULL, ayatana->userdata); } } static void mmgui_ayatana_indicator_client_clicked_signal(MessagingMenuApp *indicator, guint timestamp, gpointer user_data) { mmgui_ayatana_t ayatana; ayatana = (mmgui_ayatana_t)user_data; if (ayatana == NULL) return; if (ayatana->eventcb != NULL) { (ayatana->eventcb)(MMGUI_AYATANA_EVENT_CLIENT, ayatana, NULL, ayatana->userdata); } } static void mmgui_ayatana_indicator_server_show_signal(IndicateServer *arg0, guint arg1, gpointer user_data) { mmgui_ayatana_t ayatana; ayatana = (mmgui_ayatana_t)user_data; if (ayatana == NULL) return; if (ayatana->eventcb != NULL) { (ayatana->eventcb)(MMGUI_AYATANA_EVENT_SERVER, ayatana, NULL, ayatana->userdata); } } static void mmgui_ayatana_indicator_client_show_signal(IndicateServer *arg0, guint arg1, gpointer user_data) { mmgui_ayatana_t ayatana; ayatana = (mmgui_ayatana_t)user_data; if (ayatana == NULL) return; if (ayatana->eventcb != NULL) { (ayatana->eventcb)(MMGUI_AYATANA_EVENT_CLIENT, ayatana, NULL, ayatana->userdata); } } static gchar *mmgui_ayatana_get_desktiop_file_id(gchar *filepath) { guint pathlen, sym; if (filepath == NULL) return NULL; pathlen = strlen(filepath); if (pathlen == 0) return NULL; for (sym = pathlen; sym >= 0; sym--) { if (filepath[sym] == '/') { break; } } return filepath+sym+1; } static gboolean mmgui_ayatana_setup_menu(mmgui_ayatana_t ayatana) { if (ayatana == NULL) return FALSE; if (ayatana->library == MMGUI_AYATANA_LIB_MESSAGINGMENU) { /*setup server*/ ayatana->backend.mmenu.server = (ayatana->backend.mmenu.messaging_menu_app_new)(mmgui_ayatana_get_desktiop_file_id(RESOURCE_DESKTOP_FILE)); if (ayatana->backend.mmenu.server == NULL) { return FALSE; } (ayatana->backend.mmenu.messaging_menu_app_register)(ayatana->backend.mmenu.server); g_signal_connect(G_OBJECT(ayatana->backend.mmenu.server), "activate-source", G_CALLBACK(mmgui_ayatana_indicator_server_clicked_signal), ayatana); return TRUE; } else if (ayatana->library == MMGUI_AYATANA_LIB_INDICATE) { /*setup server*/ ayatana->backend.ind.server = (ayatana->backend.ind.indicate_server_ref_default)(); if (ayatana->backend.ind.server == NULL) { return FALSE; } (ayatana->backend.ind.indicate_server_set_type)(ayatana->backend.ind.server, "message.im"); (ayatana->backend.ind.indicate_server_set_desktop_file)(ayatana->backend.ind.server, RESOURCE_DESKTOP_FILE); (ayatana->backend.ind.indicate_server_show)(ayatana->backend.ind.server); g_signal_connect(G_OBJECT(ayatana->backend.ind.server), "server-display", G_CALLBACK(mmgui_ayatana_indicator_server_show_signal), ayatana); /*setup client*/ ayatana->backend.ind.client = (ayatana->backend.ind.indicate_indicator_new_with_server)(ayatana->backend.ind.server); if (ayatana->backend.ind.client != NULL) { (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "subtype", "im"); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "sender", _("Unread SMS")); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "draw_attention", "false"); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "count", ""); (ayatana->backend.ind.indicate_indicator_show)(ayatana->backend.ind.client); g_signal_connect(G_OBJECT(ayatana->backend.ind.client), "user-display", G_CALLBACK(mmgui_ayatana_indicator_client_show_signal), ayatana); } return TRUE; } else { return FALSE; } } static gboolean mmgui_ayatana_clean_menu(mmgui_ayatana_t ayatana) { if (ayatana == NULL) return FALSE; if (ayatana->library == MMGUI_AYATANA_LIB_MESSAGINGMENU) { if (ayatana->backend.mmenu.server != NULL) { (ayatana->backend.mmenu.messaging_menu_app_remove_source)(ayatana->backend.mmenu.server, "sms"); (ayatana->backend.mmenu.messaging_menu_app_unregister)(ayatana->backend.mmenu.server); } return TRUE; } else if (ayatana->library == MMGUI_AYATANA_LIB_INDICATE) { if (ayatana->backend.ind.server != NULL) { if (ayatana->backend.ind.client != NULL) { (ayatana->backend.ind.indicate_indicator_hide)(ayatana->backend.ind.client); g_object_unref(G_OBJECT(ayatana->backend.ind.client)); } (ayatana->backend.ind.indicate_server_hide)(ayatana->backend.ind.server); g_object_unref(G_OBJECT(ayatana->backend.ind.server)); } return TRUE; } else { return FALSE; } } mmgui_ayatana_t mmgui_ayatana_new(mmgui_libpaths_cache_t libcache, mmgui_ayatana_event_callback callback, gpointer userdata) { mmgui_ayatana_t ayatana; gboolean libopened; ayatana = g_new0(struct _mmgui_ayatana, 1); /*Initialization*/ ayatana->module = NULL; ayatana->library = MMGUI_AYATANA_LIB_NULL; ayatana->eventcb = callback; ayatana->userdata = userdata; /*Open module for libmessaging-menu*/ ayatana->module = g_module_open(mmgui_libpaths_cache_get_library_full_path(libcache, "libmessaging-menu"), G_MODULE_BIND_LAZY); /*Initialize local flag*/ libopened = FALSE; if (ayatana->module != NULL) { libopened = TRUE; libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_new", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_new)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_register", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_register)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_unregister", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_unregister)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_append_source", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_append_source)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_remove_source", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_remove_source)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_set_source_count", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_set_source_count)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_draw_attention", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_draw_attention)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_remove_attention", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_remove_attention)); libopened = libopened && g_module_symbol(ayatana->module, "messaging_menu_app_has_source", (gpointer *)&(ayatana->backend.mmenu.messaging_menu_app_has_source)); /*Try to set up menu*/ if (libopened) { ayatana->library = MMGUI_AYATANA_LIB_MESSAGINGMENU; if (!mmgui_ayatana_setup_menu(ayatana)) { ayatana->library = MMGUI_AYATANA_LIB_NULL; } } /*If some functions not exported or menu not set up, close library*/ if ((!libopened) || (ayatana->library == MMGUI_AYATANA_LIB_NULL)) { ayatana->backend.mmenu.messaging_menu_app_new = NULL; ayatana->backend.mmenu.messaging_menu_app_register = NULL; ayatana->backend.mmenu.messaging_menu_app_unregister = NULL; ayatana->backend.mmenu.messaging_menu_app_append_source = NULL; ayatana->backend.mmenu.messaging_menu_app_remove_source = NULL; ayatana->backend.mmenu.messaging_menu_app_set_source_count = NULL; ayatana->backend.mmenu.messaging_menu_app_draw_attention = NULL; ayatana->backend.mmenu.messaging_menu_app_remove_attention = NULL; /*Close module*/ g_module_close(ayatana->module); ayatana->module = NULL; ayatana->library = MMGUI_AYATANA_LIB_NULL; } } if ((ayatana->library == MMGUI_AYATANA_LIB_NULL) && (ayatana->module == NULL)) { /*Open module for libindicate*/ ayatana->module = g_module_open(mmgui_libpaths_cache_get_library_full_path(libcache, "libindicate"), G_MODULE_BIND_LAZY); if (ayatana->module != NULL) { libopened = TRUE; libopened = libopened && g_module_symbol(ayatana->module, "indicate_server_ref_default", (gpointer *)&(ayatana->backend.ind.indicate_server_ref_default)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_server_set_type", (gpointer *)&(ayatana->backend.ind.indicate_server_set_type)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_server_set_desktop_file", (gpointer *)&(ayatana->backend.ind.indicate_server_set_desktop_file)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_server_show", (gpointer *)&(ayatana->backend.ind.indicate_server_show)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_server_hide", (gpointer *)&(ayatana->backend.ind.indicate_server_hide)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_indicator_new_with_server", (gpointer *)&(ayatana->backend.ind.indicate_indicator_new_with_server)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_indicator_set_property", (gpointer *)&(ayatana->backend.ind.indicate_indicator_set_property)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_indicator_show", (gpointer *)&(ayatana->backend.ind.indicate_indicator_show)); libopened = libopened && g_module_symbol(ayatana->module, "indicate_indicator_hide", (gpointer *)&(ayatana->backend.ind.indicate_indicator_hide)); /*Try to set up menu*/ if (libopened) { ayatana->library = MMGUI_AYATANA_LIB_INDICATE; if (!mmgui_ayatana_setup_menu(ayatana)) { ayatana->library = MMGUI_AYATANA_LIB_NULL; } } /*If some functions not exported or menu not set up, close library*/ if ((!libopened) || (ayatana->library == MMGUI_AYATANA_LIB_NULL)) { ayatana->backend.ind.indicate_server_ref_default = NULL; ayatana->backend.ind.indicate_server_set_type = NULL; ayatana->backend.ind.indicate_server_set_desktop_file = NULL; ayatana->backend.ind.indicate_server_show = NULL; ayatana->backend.ind.indicate_server_hide = NULL; ayatana->backend.ind.indicate_indicator_new_with_server = NULL; ayatana->backend.ind.indicate_indicator_set_property = NULL; ayatana->backend.ind.indicate_indicator_show = NULL; ayatana->backend.ind.indicate_indicator_hide = NULL; /*Close module*/ g_module_close(ayatana->module); ayatana->module = NULL; ayatana->library = MMGUI_AYATANA_LIB_NULL; } } } if ((!libopened) || (ayatana->library == MMGUI_AYATANA_LIB_NULL)) { g_free(ayatana); return NULL; } return ayatana; } void mmgui_ayatana_close(mmgui_ayatana_t ayatana) { if (ayatana == NULL) return; mmgui_ayatana_clean_menu(ayatana); if (ayatana->module != NULL) { g_module_close(ayatana->module); } g_free(ayatana); } void mmgui_ayatana_set_unread_messages_number(mmgui_ayatana_t ayatana, guint number) { gchar *iconpath; GFile *file; GIcon *icon; gchar numstr[32]; if (ayatana == NULL) return; if (ayatana->library == MMGUI_AYATANA_LIB_MESSAGINGMENU) { if (ayatana->backend.mmenu.server != NULL) { if ((ayatana->backend.mmenu.messaging_menu_app_has_source)(ayatana->backend.mmenu.server, "sms")) { if (number > 0) { (ayatana->backend.mmenu.messaging_menu_app_set_source_count)(ayatana->backend.mmenu.server, "sms", number); (ayatana->backend.mmenu.messaging_menu_app_remove_attention)(ayatana->backend.mmenu.server, "sms"); } else { (ayatana->backend.mmenu.messaging_menu_app_remove_source)(ayatana->backend.mmenu.server, "sms"); } } else { if (number > 0) { iconpath = g_build_filename(RESOURCE_SYMBOLIC_ICONS_DIR, "modem-manager-gui-symbolic.svg", NULL); file = g_file_new_for_path(iconpath); icon = g_file_icon_new(file); (ayatana->backend.mmenu.messaging_menu_app_append_source)(ayatana->backend.mmenu.server, "sms", icon, _("Unread messages")); (ayatana->backend.mmenu.messaging_menu_app_set_source_count)(ayatana->backend.mmenu.server, "sms", number); (ayatana->backend.mmenu.messaging_menu_app_draw_attention)(ayatana->backend.mmenu.server, "sms"); g_signal_connect(G_OBJECT(ayatana->backend.mmenu.server), "activate-source::sms", G_CALLBACK(mmgui_ayatana_indicator_client_clicked_signal), ayatana); g_object_unref(icon); g_object_unref(file); g_free(iconpath); } } } } else if (ayatana->library == MMGUI_AYATANA_LIB_INDICATE) { if (ayatana->backend.ind.server != NULL) { if (ayatana->backend.ind.client != NULL) { if (number > 0) { memset(numstr, 0, sizeof(numstr)); snprintf(numstr, sizeof(numstr), "%u", number); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "draw_attention", "true"); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "count", numstr); } else { (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "draw_attention", "false"); (ayatana->backend.ind.indicate_indicator_set_property)(ayatana->backend.ind.client, "count", ""); } } } } } modem-manager-gui-0.0.19.1/resources/pixmaps/signal-75.png000664 001750 001750 00000005750 13261703575 023110 0ustar00alexalex000000 000000 PNG  IHDR}\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx앱N0E|#``) D BBHf@m6x({ϐhey`R:績yFVR/yhs*%}*SкlEg&܈`IOR ++ψ1xjmE"X5Tİ"X+rUD'سk4UWd"݂FŶDLV(cupǽi>{z ,~W_{?'dw IENDB`modem-manager-gui-0.0.19.1/polkit/ru.po000664 001750 001750 00000003647 13261703575 017474 0ustar00alexalex000000 000000 # # Translators: # Alex , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian (http://www.transifex.com/ethereal/modem-manager-gui/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Активация служб управления модемами" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Службы управления модемами не активированы. Вы должны пройти процесс аутентификации для активации этих служб." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Взаимодействие со службой управления модемами" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Службе управления модемами требуются ваши аутентификационные данные. Вы должны пройти процесс аутентификации для взаимодействия с этой службой." modem-manager-gui-0.0.19.1/polkit/tr.po000664 001750 001750 00000003035 13261703575 017462 0ustar00alexalex000000 000000 # # Translators: # Ozancan Karataş , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Ozancan Karataş \n" "Language-Team: Turkish (http://www.transifex.com/ethereal/modem-manager-gui/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Modem yönetim hizmetlerini etkinleştir ve başlat" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Modem yönetim hizmetleri çalışmıyor. Bu hizmetleri etkinleştirmek ve başlatmak için kimlik doğrulaması gerekiyor." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Modem yönetim hizmeti kullan" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Modem yönetim hizmeti kimlik bilgilerinize gereksinim duyar. Bu hizmeti kullanmak için kimlik doğrulaması gerekiyor." modem-manager-gui-0.0.19.1/help/C/report-bugs.page000664 001750 001750 00000002374 13261703575 021421 0ustar00alexalex000000 000000 Report bugs and request new features. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

Report bugs

If you found a bug in Modem Manager GUI, you can use the support forum.

Before filing a new topic, please have a look at the existing ones first. Maybe someone else has already encountered the same problem? Then you might write your comments there.

You can also use the support forum for feature requests.

modem-manager-gui-0.0.19.1/man/id/id.po000664 001750 001750 00000010613 13261703575 017276 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ade Malsasa Akbar , 2014 # Arif Budiman , 2014 # windi anto , 2017 # Rendiyono Wahyu Saputro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Indonesian (http://www.transifex.com/ethereal/modem-manager-gui/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Perintah Pengguna" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "NAMA" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - antarmuka grafis sederhana untuk daemon Modem Manager" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "SINOPSIS" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m modul ] [ -c modul ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "DESKRIPSI" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Program ini adalah antarmuka grafis untuk daemon Modem Manager 0.6/0.7, Wader, dan oFono menggunakan antarmuka dbus." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Jangan tampilkan jendela saat dijalankan." #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Gunakan modul manajemen modem yang telah ditentukan" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Gunakan modul manajemen koneksi yang telah ditentukan" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Menampilkan semua modul yang tersedia dan keluar" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "PENCIPTA" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Ditulis oleh Alex. Lihat dialog Tentang untuk seluruh kontributor." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "MELAPORKAN BUG" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "HAK CIPTA" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Ini adalah perangkat lunak bebas. Anda boleh mendistribusikan ulang salinannya di bawah aturan GNU General Public License Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "LIHAT JUGA" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/help/de/de.po000664 001750 001750 00000107253 13261703575 017452 0ustar00alexalex000000 000000 # # Translators: # Mario Blättermann , 2013-2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: German (http://www.transifex.com/ethereal/modem-manager-gui/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Mario Blättermann " #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Informationen zu Modem Manager GUI." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "Info zu Modem Manager GUI" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "Dieses Programm wird unter den Bedingungen der GNU General Public License Version 3 verbreitet, so wie sie von der Free Software Foundation veröffentlicht wird. Eine Kopie dieser Lizenz finden Sie unter diesem Link oder in der Datei COPYING, die im Quellcode dieses Programms enthalten ist." #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "Wie Sie helfen können, Modem Manager GUI zu verbessern." #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Code beisteuern" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "Beachten Sie, dass dieser Befehl zum Klonen keinen Schreibzugriff auf den Softwarebestand gewährt." #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "Modem Manager GUI in Ihre eigene Sprache übersetzen." #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Übersetzungen" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "Die grafische Benutzeroberfläche, die traditionelle Unix-Handbuchseite und das Benutzerhandbuch im Gnome-Stil von Modem Manager GUI kann in Ihre Sprache übersetzt werden." #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "Es gibt eine Projektseite bei Transifex, wo vorhandene Übersetzungen verfügbar sind und auch neue hinzugefügt werden können." #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "Allgemeine Hilfe zur Funktionsweise von Transifex finden Sie im Transifex Help Desk." #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "Für Ihre Arbeit sollten Sie einen Blick auf die Regelwerke und Standardwörterbücher Ihres lokalen Gnome-Übersetzungsteams werfen. Obwohl Modem Manager GUI nicht unbedingt als reine Gnome-Software betrachtet werden sollte, wird es oft in GTK-basierten Umgebungen verwendet und sollte deshalb die Begriffswelt solcher Anwendungen widerspiegeln." #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Hilfe zu Modem Manager GUI." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "GNOME Hello logoHandbuch zu Modem Manager GUI" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "Modem Manager GUI ist eine grafische Benutzeroberfläche für den ModemManager-Systemdienst, der spezifische Modemfunktionen steuern kann." #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "Sie können mit Modem Manager GUI folgende Aufgaben ausführen:" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Verfügbare Mobilfunknetze suchen" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Benutzung" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Beiträge zum Projekt" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Rechtliche Hinweise." #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Lizenz" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Dieses Werk wird unter einer »CreativeCommons Attribution-Share Alike 3.0 Unported license« verbreitet." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Es ist Ihnen gestattet:" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Freizugeben" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "Das Werk bzw. den Inhalt vervielfältigen, verbreiten und öffentlich zugänglich machen." #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Änderungen vorzunehmen" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Abwandlungen und Bearbeitungen des Werkes bzw. Inhaltes anzufertigen." #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "Unter den folgenden Bedingungen:" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Weitergabe" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "Sie dürfen das Werk nur unter gleichen Bedingungen weitergeben, wie Sie vom Autor oder Lizenzgeber festgelegt wurden (aber nicht so, dass es wie Ihr Werk aussieht)." #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "Share Alike" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "Wenn Sie das lizenzierte Werk bzw. den lizenzierten Inhalt bearbeiten, abwandeln oder in anderer Weise erkennbar als Grundlage für eigenes Schaffen verwenden, dürfen Sie die daraufhin neu entstandenen Werke bzw. Inhalte nur unter Verwendung von Lizenzbedingungen weitergeben, die mit denen dieses Lizenzvertrages identisch, vergleichbar oder kompatibel sind." #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "Den vollständigen Text der Lizenz finden sie auf der CreativeCommons-Webseite. Oder Sie können den vollständigen Commons Deed lesen." #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Fehler melden und neue Funktionen anfragen." #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Fehler melden" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "Anpassung dieser Anwendung an Ihre Wünsche und Erfordernisse." #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Konfiguration" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Ihre Kontaktlisten verwenden." #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Kontaktlisten" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "Das Modem kann auf die in der SIM-Karte gespeicherten Kontakte zugreifen. Einige Modems speichern auch Kontakte im internen Speicher. Modem Manager GUI kann die Kontakte in diesen Speicherbereichen verarbeiten und auch Kontakte aus dem System exportieren. Dabei werden der von Gnome-Anwendungen genutzte Evolution Data Server (Gnome-Kontakte) und der von KDE-Anwendungen verwendete Akonadi-Server (KDE-Kontakte) unterstützt." #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr " Kontakte-Fenster von Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Informationen zum Mobilfunknetzwerk abrufen." #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Netzwerk-Info" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "Ihr Netzanbieter stellt einige Informationen bereit, die Sie in Modem Manager GUI betrachten können. Klicken Sie auf den Info-Knopf in der Werkzeugleiste." #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "Im folgenden Fenster sehen Sie alle Informationen, so wie sie von Ihrem Netzanbieter bereitgestellt werden:" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr " Netzwerkinformations-Fenster von Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "Die meisten Informationen sind selbsterklärend und von traditionellen Mobiltelefonen oder Smartphones bekannt. Beachten Sie, dass die GPS-basierte Ortung (im unteren Teil des Fensters) in den meisten Fällen nicht funktioniert, da mobile Breitbandgeräte üblicherweise nicht über einen GPS-Sensor verfügen." #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Aktivieren Ihrer Modem-Geräte." #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modems" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "Nach dem Start von Modem Manager GUI wird das folgende Fenster angezeigt:" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "Das Startfenster von <_:app-1/>." #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "Sie können die Modems sehen, die in Ihrem System verfügbar sind. Klicken Sie auf einen der Einträge, um dieses Gerät zu verwenden." #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "Nach dem Anklicken eines Gerätes kann es notwendig sein, es zuerst zu aktivieren, sofern es noch nicht anderweitig auf Ihrem System aktiviert wurde. Modem Manager GUI bittet Sie in diesem Fall um Bestätigung." #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "Haben Sie Geduld, wenn Sie ein externes Gerät wie beispielsweise einen USB-Stick oder eine PCMCIA-Karte eingesteckt haben. Es kann etwas dauern, bis das System es erkennt." #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "Sie können nicht mehrere Modems gleichzeitig verwenden. Wenn Sie auf einen anderen Eintrag in der Geräteliste klicken, wird das vorher aktivierte Gerät deaktiviert." #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Nach verfügbaren Mobilfunknetzwerken suchen." #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Netzwerksuche" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "Mit Modem Manager GUI können Sie nach verfügbaren Mobilfunknetzwerken suchen. Klicken Sie hierzu auf den Suchen-Knopf in der Werkzeugleiste." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "Netzwerksuche in <_:app-1/>." #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "Falls ein Mobilfunknetzwerk mehrfach in der Liste erscheint, verwendet dieses Netzwerk verschiedene Broadcasting-Standards. Sie können keine Mobilfunknetzwerke nutzen, deren Broadcasting-Standards von Ihrem Modem nicht unterstützt werden." #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Modem Manager GUI zum Senden und Empfangen von SMS verwenden." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "Die meisten Modems können SMS-Nachrichten senden und empfangen, wie jedes gewöhnliche Mobiltelefon. Auch mit Modem Manager GUI können Sie SMS versenden oder empfangene Nachrichten lesen. Klicken Sie dazu auf den SMS-Knopf in der Werkzeugleiste." #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "Alle Nachrichten werden in drei Ordnern sortiert angezeigt. Empfangene Nachrichten befinden sich im Eingang-Ordner angezeigt, gesendete Nachrichten im Gesendet-Ordner und gespeicherte Nachrichten im Entwürfe-Ordner." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "SMS-Fenster von <_:app-1/>." #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "Die Sortierreihenfolge der Nachrichten sowie einige spezielle SMS-Parameter können Sie im Einstellungsfenster ändern." #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "Mit dem Neu können Sie Nachrichten schreiben und anschließend versenden oder speichern, mit dem Entfernen-Knopf löschen Sie die ausgewählte(n) Nachricht(en) und mit dem Antworten-Knopf beantworten Sie die ausgewählte Nachricht (sofern diese Nachricht eine gültige Rufnummer hat). Sie können dabei nicht mehrere Nachrichten gleichzeitig auswählen." #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Statistiken zum Netzwerkverkehr abrufen." #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Netzwerkverkehr" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "Modem Manager GUI ermittelt Statistiken zum Datenverkehr im Mobilfunknetz und kann das Modem trennen, sobald die Datenmenge oder die Zeit eine vom Benutzer definierte Begrenzung übersteigt. Klicken Sie hierzu auf den Netzwerkverkehr-Knopf in der Werkzeugleiste." #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "Im Netzwerkverkehr-Fenster finden Sie auf der linken Seite Listen mit dem sitzungsbezogenen, monatlichen und jährlichen Netzwerkverkehr, sowie auf der rechten Seite eine grafische Darstellung der aktuellen Übertragungsgeschwindigkeit." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "Anzeige des Netzwerkverkehrs in <_:app-1/>." #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "Mit dem Knopf Begrenzung setzen begrenzen Sie den Netzwerkverkehr für die aktuelle Sitzung, enweder basierend auf der Datenmenge oder der Zeit. Mit dem Knopf Verbindungen erhalten Sie eine Liste der aktiven Netzwerkverbindungen und beenden Anwendungen, die Netzwerkressourcen beanspruchen. In den Statistiken wird der tägliche Netzwerkverkehr in den ausgewählten Monaten angezeigt." #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "Netzwerkstatistiken werden nur ermittelt, während Modem Manager GUI läuft. Daher können die sich ergebenden Werte ungenau sein und sollten nur als Referenz betrachtet werden. Die genauesten Werte ermittelt Ihr Mobilfunkanbieter." #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "Modem Manager GUI zum Senden von USSD-Codes und Empfangen der Antworten verwenden." #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "USSD-Codes" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "Modem Manager GUI bietet die Möglichkeit, USSD-Codes zu senden. Diese Codes steuern Netzwerkfunktionen, zum Beispiel die Sichtbarkeit Ihrer Telefonnummer beim Senden einer SMS-Nachricht." #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "Um die USSD-Funktionen zu verwenden, klicken Sie auf den Knopf USSD in der Werkzeugleiste." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "external ref='figures/ussd-window.png' md5='c1f2437ed53d67408c1fdfeb270f001a'" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "USSD-Fenster von <_:app-1/>." #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "Im Textfeld im oberen Bereich des Fensters wird der Code *100# bereits angezeigt. Dieser Code dient üblicherweise dazu, das Guthaben auf einer Prepaidkarte anzuzeigen. Wenn Sie einen anderen Code senden wollen, klicken Sie auf den Knopf Bearbeiten an der rechten Seite." #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "Modem Manager GUI unterstützt interaktive USSD-Sitzungen, daher sollten Sie auf die in den USSD-Antworten enthaltenen Hinweise achten. Anworten auf USSD-Befehle können Sie in die Texteingabezeile schreiben und absenden. Wenn Sie einen neuen USSD-Befehl senden, während eine Sitzung aktiv ist, wird diese Sitzung automatisch geschlossen." #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "Wenn Sie ein Huawei-Gerät nutzen und unlesbare USSD-Antworten erhalten, können Sie eventuell folgendermaßen Abhilfe schaffen: Klicken Sie auf den Bearbeiten-Knopf und aktivieren Sie die Option Zeichenkodierung der Nachricht ändern." #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "USSD-Codes sind nur in Netzwerken verfügbar, welche die 3GPP-Standards verwenden." #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "Sie können solche Codes für viele Zwecke verwenden: Tarif ändern, Guthaben aufladen, Telefonnummern blockieren usw." #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" modem-manager-gui-0.0.19.1/po/sk_SK.po000664 001750 001750 00000116111 13261711227 017154 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Jozef Gaal , 2018 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-04-06 15:24+0000\n" "Last-Translator: Alex \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/ethereal/modem-manager-gui/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Neprečítané SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Neprečítané správy" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "Pripojenie bez názvu" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "Názov APN" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "IP adresa prvého DNS servera" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "IP adresa druhého DNS servera" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Pripojenie" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Chyba pridania kontaktu" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Odstrániť kontakt" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Naozaj chcete odstrániť kontakt?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Chyba odstránenia kontaktu" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Kontakt nebol odstránený zo zariadenia" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Kontakt nebol vybraný" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Kontakty modemu" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME kontakty" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE kontakty" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Krstné meno" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Prvé číslo" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Email" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Skupina" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Priezvisko" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Druhé číslo" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Chyba otvárania zariadenia" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Vybrané" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Zariadenie" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Aktivovať" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "Deaktivovať" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "Pripájanie na %s..." #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "Odpájanie zo %s..." #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Nepodporované" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "Úspech" #: ../src/main.c:511 msgid "Failed" msgstr "Zlyhalo" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Stop" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "Odomykanie zariadenia..." #: ../src/main.c:796 msgid "Enabling device..." msgstr "Zapínanie zariadenia..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Žiadne zariadenia neboli nájdené v systéme" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Modem nie je pripravený na prevádzku. Počkajte, kým sa modem pripraví..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "Modem musí byť zapnutý na pripojenie k internetu. Prosím zapnite modem." #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management " "functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "Vložte PIN" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "Zapnúť" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Zariadenia" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Info" #: ../src/main.c:1600 msgid "S_can" msgstr "Sk_enovať" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Prenosy" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "_Kontakty" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s odpojené" #: ../src/main.c:2056 msgid "Show window" msgstr "Zobraziť okno" #: ../src/main.c:2062 msgid "New SMS" msgstr "Nová SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Koniec" #: ../src/main.c:2680 msgid "_Quit" msgstr "K_oniec" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Akcie" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Nastavenia" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Upraviť" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Pomoc" #: ../src/main.c:2697 msgid "_About" msgstr "O p_rograme" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Nastavenia" #: ../src/main.c:2714 msgid "Help" msgstr "Pomoc" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "O programe" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Moduly riadenia modemu:\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Modul" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Popis" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Skenujem siete" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Chyba zariadenia" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operátor" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Prijatých %u nových SMS správ" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Prijatá nová SMS správa" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Odosielatelia správy:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Ukladanie SMS..." #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Odstrániť správy" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Doručená" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Odoslaná" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Návrhy" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Doručené\nDoručené správy" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u sek" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u sek" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Dnes, %D" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Včera, %V" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %V, %D" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f minút" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f hodín" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f dní" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f týždňov" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f sek" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u min, %u sek" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokol" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "sek" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Rýchlosť RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Rýchlosť TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parameter" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Hodnota" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Zavrieť" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Aktivácia..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Úspech" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Vitajte" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Zariadenia" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Info" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Skenovať" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Prenosy" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Kontakty" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Upraviť" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Odoslať novú SMS správu CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Nová" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Odstrániť" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Odpovedať" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Vyžiadať" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Odoslať" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Spustiť skenovanie" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Vytvoriť pripojenie" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Pripojenia" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Štatistiky" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Nový kontakt" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Odstrániť kontakt" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Poslať SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Copyright 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Domovská stránka" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Slovenčina: Jozef Gaál " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Ukončiť aplikáciu" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Pridať nové širokopásmové pripojenie" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "Pridať pripojenie" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Odstrániť vybrané pripojenie" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "Odstrániť pripojenie" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Názov" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "ID siete" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "Zapnúť roaming" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Používateľské meno" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Heslo" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Overenie" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Chyba" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Opýtať sa ma znova" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Ukončiť alebo minimalizovať?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Iba ukončiť" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Nová SMS správa" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Uložiť" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Číslo" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "Prosím vložte PIN kód pre odomknutie modemu" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "PIN" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Použiť zvuky pre udalosti" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Správanie" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Správanie" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Zapnúť zariadenie" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Poslať SMS správu" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Poslať USSD žiadosť" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Moduly" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "Stránky" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Otázka" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Limity prenosov" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "Zapnúť obmedzenie prenosov" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Zapnúť obmedzenie času" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Správa" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Akcia" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Zobraziť správu" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Odpojiť" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Čas" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Minúty" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Hodiny" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Štatistika prenosov" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Január" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Február" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Marec" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Apríl" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Máj" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Jún" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Júl" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "August" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "September" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Október" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "November" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "December" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "USSD príkazy" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Pridať nový USSD príkaz CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Pridať" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Odstrániť vybraný USSD príkaz CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Vymazať" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Zmeniť kódovanie správy" modem-manager-gui-0.0.19.1/help/uz@Latn/000775 001750 001750 00000000000 13261703575 017477 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/meson.build000664 001750 001750 00000001367 13261703575 020132 0ustar00alexalex000000 000000 c_sources = [ 'settings.c', 'strformat.c', 'libpaths.c', 'dbus-utils.c', 'notifications.c', 'addressbooks.c', 'ayatana.c', 'smsdb.c', 'trafficdb.c', 'providersdb.c', 'modem-settings.c', 'ussdlist.c', 'encoding.c', 'vcard.c', 'netlink.c', 'polkit.c', 'svcmanager.c', 'mmguicore.c', 'contacts-page.c', 'traffic-page.c', 'scan-page.c', 'info-page.c', 'ussd-page.c', 'sms-page.c', 'devices-page.c', 'preferences-window.c', 'welcome-window.c', 'connection-editor-window.c', 'main.c' ] c_args = [ ] link_args = [ '-export-dynamic' ] mmgui = executable('modem-manager-gui', c_sources, c_args: c_args, link_args: link_args, install: true, dependencies : [glib, gobject, gio, gmodule, gtk, gdbm, gtkspell, appindicator, m]) modem-manager-gui-0.0.19.1/man/ar/ar.po000664 001750 001750 00000007317 13261703575 017321 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Eslam Maolaoy , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Arabic (http://www.transifex.com/ethereal/modem-manager-gui/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "واجهة مستخدم البرنامج" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "أوامر المستخدم " #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "الاسم" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "" #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "الوصف" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "لا تظهر النافذة عند التشغيل" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "المؤلف" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "التبليغ عن الأخطاء" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "حقوق النشر" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "انظر ايضا" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "" modem-manager-gui-0.0.19.1/man/zh_CN/zh_CN.po000664 001750 001750 00000010611 13261703575 020306 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # 周磊 , 2017 # 周磊 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: 周磊 \n" "Language-Team: Chinese (China) (http://www.transifex.com/ethereal/modem-manager-gui/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "2017年11月" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "Modem Manager GUI v0.0.19" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "用户命令" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "名称" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui -用于Modem Manager守护程序的简单图形界面。" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "简介" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "描述" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "这个程序使用dbus接口,是Modem Manager 0.6 / 0.7,Wader和oFono守护进程的简单图形界面。" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "启动时不显示窗口" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "使用指定的调制解调器管理模块" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "使用指定的连接管理模块" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "列出所有可用的模块并退出" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "作者" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "作者是Alex。查看所有贡献者请打开关于对话框。" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "报告BUGS" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "Report bugs to Ealex@linuxonly.ruE, or to the support forum section at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "COPYRIGHT" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "Copyright \\(co 2012-2017 Alex" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "This is free software. You may redistribute copies of it under the terms of the GNU General Public License Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "SEE ALSO" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/src/resources.h.meson000664 001750 001750 00000002530 13261703575 021264 0ustar00alexalex000000 000000 /* * resources.h * * Copyright 2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __RESOURCES_H__ #define __RESOURCES_H__ #mesondefine RESOURCE_NAME #mesondefine RESOURCE_VERSION #mesondefine RESOURCE_SCALABLE_ICONS_DIR #mesondefine RESOURCE_SYMBOLIC_ICONS_DIR #mesondefine RESOURCE_PIXMAPS_DIR #mesondefine RESOURCE_SOUNDS_DIR #mesondefine RESOURCE_UI_DIR #mesondefine RESOURCE_MODULES_DIR #mesondefine RESOURCE_LOCALE_DIR #mesondefine RESOURCE_LOCALE_DOMAIN #mesondefine RESOURCE_DESKTOP_FILE #mesondefine RESOURCE_PROVIDERS_DB #mesondefine RESOURCE_SPELLCHECKER_ENABLED #mesondefine RESOURCE_INDICATOR_ENABLED #endif // __RESOURCES_H__ modem-manager-gui-0.0.19.1/man/bn/bn.po000664 001750 001750 00000012117 13261703575 017305 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Md. Emruz Hossain , 2016 # Reazul Iqbal , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/ethereal/modem-manager-gui/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "মডেম-ম্যানেজার-গুই" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "ব্যবাহারকারীর কমান্ড সমূহ" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "নাম" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "মডেম-ম্যানেজার-গুই, Modem Manager daemon এর সাধারণ গ্রাফিকাল প্রদর্শন ।" #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "সংক্ষিপ্তসার" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "বর্ণনা" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "এই প্রোগ্রামটি হল dbus interface ব্যবহার করে Modem Manager 0.6/0.7, Wader and oFono daemons এর সাধারণ গ্রাফিকাল প্রদর্শন। " #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "শুরুতে window দেখাবেন না" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "নির্দিষ্ট মডেম ব্যবস্থাপনা মডিউল ব্যবহার করুন" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "নির্দিষ্ট সংযোগ ব্যবস্থাপনা মডিউল ব্যবহার করুন" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "সকল ব্যবহারযোগ্য মডিউলগুলো তালিকা করুন এবং বের হয়ে যান।" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "মালিক" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "লিখেছেন Alex. সকল অবদানকারীর জন্য about dialog দেখুন" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "ত্রুটি ধরিয়ে দেওয়া হচ্ছে" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "লেখস্বত্ব" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "এটি মুক্ত সফটওয়্যার। আপনি GNU General Public License Ehttp://www.gnu.org/licenses/gpl.htmlE এর অধীনে এটা বিতরণ করতে পারবেন।" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "আরও দেখুন" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/help/modem-manager-gui-help.pot000664 001750 001750 00000057721 13261703575 023103 0ustar00alexalex000000 000000 msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "" #. (itstool) path: credit/name #: C/about.page:13 #: C/contrib-code.page:13 #: C/contrib-translations.page:13 #: C/index.page:11 #: C/report-bugs.page:13 #: C/usage-config.page:13 #: C/usage-contacts.page:13 #: C/usage-getinfo.page:13 #: C/usage-modem.page:13 #: C/usage-netsearch.page:13 #: C/usage-sms.page:14 #: C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "" #. (itstool) path: credit/name #: C/about.page:17 #: C/contrib-code.page:17 #: C/index.page:15 #: C/report-bugs.page:17 #: C/usage-contacts.page:17 #: C/usage-netsearch.page:17 #: C/usage-sms.page:18 #: C/usage-traffic.page:17 #: C/usage-ussd.page:17 msgid "Alex" msgstr "" #. (itstool) path: license/p #: C/about.page:21 #: C/contrib-code.page:21 #: C/contrib-translations.page:17 #: C/index.page:19 #: C/report-bugs.page:21 #: C/usage-config.page:17 #: C/usage-contacts.page:21 #: C/usage-getinfo.page:17 #: C/usage-modem.page:17 #: C/usage-netsearch.page:21 #: C/usage-sms.page:22 #: C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "" #. (itstool) path: page/p #: C/about.page:27 msgid "Modem Manager GUI was written by Alex. To find more information about Modem Manager GUI, please visit the Modem Manager GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "To report a bug or make a suggestion regarding this application or this manual, use Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "This program is distributed under the terms of the GNU General Public license version 3, as published by the Free Software Foundation. A copy of this license can be found at this link, or in the file COPYING included with the source code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "Modem Manager GUI has a version control system at Bitbucket.com. You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "For general help on how Bitbucket works, see the Bitbucket documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "Modem Manager GUI source code is stored inside Mercurial repository, so you don't have to read Git tutorials; just make sure you know basic Mercurial commands and able to make pull requests on Bitbucket platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "The graphical user interface, the traditional man page and the Gnome-style user manual of Modem Manager GUI can be translated into your language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "There is a project page on Transifex where existing translations are hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "For your work you should have a look at the rules and dictionaries of the local Gnome translation teams . Although Modem Manager GUI shouldn't be considered as pure Gnome software, it will be often used in GTK based environments and should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "GNOME Hello logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "Modem Manager GUI is a graphical frontend for the ModemManager daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "View device information: operator name, device mode, IMEI, IMSI, signal level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "" #. (itstool) path: page/p #: C/license.page:12 msgid "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "Before filing a new topic, please have a look at the existing ones first. Maybe someone else has already encountered the same problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "Broadband modem has access to contacts stored on SIM card. Some modems can also store contacts in internal memory. Modem Manager GUI can work with contacts from these storages and also can export contacts from system contacts storages. Supported system contact storages are: Evolution Data Server used by GNOME applications (GNOME contacts section) and Akonadi server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "Use New contact button to fill form and add new contact to SIM card or modem storage, Remove contact button to remove selected contact from SIM card or modem storage and Send SMS button to compose and send SMS message to selected contact (either from SIM card or modem, or exported from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "Some backends don't support modem contacts manipulation functions. For example, ModemManager doesn't work with contacts from SIM card and modem memory at all (this functionality isn't implemented yet), and oFono can only export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "Your network operator provides some info which you can view in Modem Manager GUI. Click on the Info button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "In the following window you see all available information as provided from your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid " Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "The most informations are self-explained and well known from traditional mobile phones or smartphones. Note, the GPS based location detection (in the lower part of the window) won't work in most cases because mobile broadband devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "After starting Modem Manager GUI, the following window will be displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 #: C/usage-netsearch.page:31 #: C/usage-sms.page:38 #: C/usage-traffic.page:35 #: C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "You can see the modem devices available on your system. Click on one of the entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "After clicking on a device, it might be needed to activate it first, if it was not otherwise activated on your system. Modem Manager GUI will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "Be patient after connecting a removable device such as an USB stick or PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "You cannot use multiple modems at the same time. If you click on another entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "Modem Manager GUI can be used to search available mobile networks. Click on the Scan button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "If one mobile network appears more than once in the list, this mobile network use different broadcasting standards. It is obvioius that you can't scan mobile networks using broadcasting standards that your modem doesn't support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "Most broadband modems able to send and receive SMS messages just like any mobile phone. You can use Modem Manager GUI if you want to send or read received SMS messages. Click on the SMS button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "As you can see, all messages are stored in three folders. You can find received messages in the Incoming folder, sent messages in the Sent folder and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "You can tweak messages sorting order and SMS special parameters using Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "Use New button to compose and send or save message, Remove button to remove selected message(s) and Answer button to answer selected message (if this message has valid number). Don't forget that you can select more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "Modem Manager GUI collects mobile broadband traffic statistics and able to disconnect modem when traffic consumption or time of the session exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "Network traffic window has list with session, month and year traffic consumption information on the left and graphical representation of current network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "Use Set limit button to set traffic or time limit for current session, Connections button to view list of active network connections and terminate applications consuming network traffic and Statistics button to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "Traffic statistics are collected only while Modem Manager GUI is running, so result values can be inaccurate and must be treated as reference only. The most accurate traffic statistics are collected by mobile operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "Use Modem Manager GUI for send USSD codes and receive the answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "Modem Manager GUI is able to send USSD codes. These codes are controlling some network functions, for example the visibility of your phone number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "To use the USSD functions, click on the USSD button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "external ref='figures/ussd-window.png' md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "In the text entry on top of the window, the code *100# is already displayed. This code is the usual one for requesting the balance for a prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "Modem Manager GUI supports interactive USSD sessions, so pay attention to hints displayed under USSD answers. You can send USSD responses using text entry for USSD commands. If you'll send new USSD command while USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "If you use Huawei device and get unreadable USSD answers, you can try to click on the Edit button and toggle the Change message encoding button in the toolbar of opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "USSD codes are only available in networks which use the 3GPP standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "You can use such codes for many purposes: change plan, request balance, block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/polkit/000775 001750 001750 00000000000 13261703575 016474 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/modules/connman112.c000664 001750 001750 00000201543 13261703575 021457 0ustar00alexalex000000 000000 /* * connman112.c * * Copyright 2014-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "../mmguicore.h" #define MMGUI_MODULE_SERVICE_NAME "net.connman" #define MMGUI_MODULE_SYSTEMD_NAME "connman.service" #define MMGUI_MODULE_IDENTIFIER 112 #define MMGUI_MODULE_DESCRIPTION "Connman >= 1.12" #define MMGUI_MODULE_COMPATIBILITY "org.ofono;" /*Internal definitions*/ #define MODULE_INT_CONNMAN_ERROR_CODE_UNKNOWN_METHOD 19 #define MODULE_INT_CONNMAN_UUID_GENERATION_TEMPLATE "00000000-0000-4000-1000-0000%08x" #define MODULE_INT_CONNMAN_CONTEXT_PATH_TEMPLATE "%s/context%u" #define MODULE_INT_CONNMAN_SERVICE_PATH_TEMPLATE_GSM "/net/connman/service/cellular_%s_context%u" #define MODULE_INT_CONNMAN_SERVICE_PATH_TEMPLATE_CDMA "/net/connman/service/cellular_%s" #define MODULE_INT_CONNMAN_OPERATION_TIMEOUT 10000 /*Internal enumerations*/ /*Private module variables*/ struct _mmguimoduledata { /*DBus connection*/ GDBusConnection *connection; /*DBus proxy objects*/ GDBusProxy *connmanproxy; GDBusProxy *connectionproxy; GDBusProxy *ofonoproxy; /*Table of context proxies to monitor changes*/ GHashTable *contexttable; /*DBus object paths*/ gchar *actcontpath; /*Signals*/ gulong connectionsignal; /*Internal state flags*/ gboolean opinitiated; gboolean opstate; gboolean contextlistformed; /*Last error message*/ gchar *errormessage; }; typedef struct _mmguimoduledata *moduledata_t; static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error); static gchar *mmgui_module_context_path_to_uuid(mmguicore_t mmguicore, const gchar *path); static gchar *mmgui_module_uuid_to_context_path(mmguicore_t mmguicore, const gchar *uuid); static gchar *mmgui_module_context_path_to_service_path(mmguicore_t mmguicore, const gchar *path); static gboolean mmgui_module_device_connection_initialize_contexts(mmguicore_t mmguicore, gboolean createproxies); static void mmgui_module_device_connection_manager_context_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static void mmgui_module_device_context_property_changed_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static void mmgui_module_device_cdma_connection_manager_context_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static void mmgui_module_device_connection_connect_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static void mmgui_module_device_connection_disconnect_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error) { moduledata_t moduledata; if ((mmguicore == NULL) || (error == NULL)) return; moduledata = (moduledata_t)mmguicore->cmoduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (error->message != NULL) { moduledata->errormessage = g_strdup(error->message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static gchar *mmgui_module_context_path_to_uuid(mmguicore_t mmguicore, const gchar *path) { gchar *constr, *resuuid; if ((mmguicore == NULL) || (path == NULL)) return NULL; if (mmguicore->device == NULL) return NULL; resuuid = NULL; if (mmguicore->device->type == MMGUI_DEVICE_TYPE_GSM) { constr = g_strrstr(path, "/context"); if (constr != NULL) { resuuid = g_strdup_printf(MODULE_INT_CONNMAN_UUID_GENERATION_TEMPLATE, (guint)atoi(constr + 8)); } } else if (mmguicore->device->type == MMGUI_DEVICE_TYPE_CDMA) { resuuid = g_strdup_printf(MODULE_INT_CONNMAN_UUID_GENERATION_TEMPLATE, 0); } return resuuid; } static gchar *mmgui_module_uuid_to_context_path(mmguicore_t mmguicore, const gchar *uuid) { gchar *respath; guint id; if ((mmguicore == NULL) || (uuid == NULL)) return NULL; if (mmguicore->device == NULL) return NULL; if (mmguicore->device->objectpath == NULL) return NULL; respath = NULL; if (mmguicore->device->type == MMGUI_DEVICE_TYPE_GSM) { sscanf(uuid, MODULE_INT_CONNMAN_UUID_GENERATION_TEMPLATE, &id); respath = g_strdup_printf(MODULE_INT_CONNMAN_CONTEXT_PATH_TEMPLATE, mmguicore->device->objectpath, id); } return respath; } static gchar *mmgui_module_context_path_to_service_path(mmguicore_t mmguicore, const gchar *path) { gchar *constr, *deviceid, *respath; if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; if ((mmguicore->device->imsi == NULL) && (mmguicore->device->version)) return NULL; respath = NULL; if (mmguicore->device->imsi != NULL) { deviceid = mmguicore->device->imsi; } else { deviceid = mmguicore->device->version; } if (mmguicore->device->type == MMGUI_DEVICE_TYPE_GSM) { if (path != NULL) { constr = g_strrstr(path, "/context"); if (constr != NULL) { respath = g_strdup_printf(MODULE_INT_CONNMAN_SERVICE_PATH_TEMPLATE_GSM, deviceid, (guint)atoi(constr + 8)); } } } else if (mmguicore->device->type == MMGUI_DEVICE_TYPE_CDMA) { respath = g_strdup_printf(MODULE_INT_CONNMAN_SERVICE_PATH_TEMPLATE_CDMA, deviceid); } return respath; } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_CONNECTION_MANGER; module->requirement = MMGUI_MODULE_REQUIREMENT_SERVICE; module->priority = MMGUI_MODULE_PRIORITY_NORMAL; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t *)&mmguicorelc->cmoduledata; mmguicorelc->cmcaps = MMGUI_CONNECTION_MANAGER_CAPS_BASIC | MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT | MMGUI_CONNECTION_MANAGER_CAPS_MONITORING; (*moduledata) = g_new0(struct _mmguimoduledata, 1); error = NULL; (*moduledata)->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); (*moduledata)->errormessage = NULL; if (((*moduledata)->connection == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(mmguicorelc->moduledata); return FALSE; } error = NULL; (*moduledata)->connmanproxy = g_dbus_proxy_new_sync((*moduledata)->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", "/", "net.connman.Manager", NULL, &error); if (((*moduledata)->connmanproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->cmoduledata); return FALSE; } (*moduledata)->actcontpath = NULL; return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); if (moduledata != NULL) { if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (moduledata->connmanproxy != NULL) { g_object_unref(moduledata->connmanproxy); moduledata->connmanproxy = NULL; } if (moduledata->connection != NULL) { g_object_unref(moduledata->connection); moduledata->connection = NULL; } g_free(moduledata); } return TRUE; } G_MODULE_EXPORT guint mmgui_module_connection_enum(gpointer mmguicore, GSList **connlist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GDBusProxy *serviceproxy; const gchar *contextpath; gchar *servicepath; GVariant *contexts; GVariantIter coniterl1, coniterl2; GVariant *connodel1, *connodel2; GVariant *conparams, *pathv, *parameter, *paramdict; GVariant *properties, *propdictv, *dnsarrayv, *dnsvaluev; gsize strlength; const gchar *valuestr; gboolean internet; mmguiconn_t connection; guint connnum, dnsnum; if ((mmguicore == NULL) || (connlist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return 0; if (mmguicorelc->cmoduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return 0; if (moduledata->connectionproxy == NULL) return 0; connnum = 0; error = NULL; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { contexts = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetContexts", NULL, 0, -1, NULL, &error); if (contexts != NULL) { g_variant_iter_init(&coniterl1, contexts); while ((connodel1 = g_variant_iter_next_value(&coniterl1)) != NULL) { g_variant_iter_init(&coniterl2, connodel1); while ((connodel2 = g_variant_iter_next_value(&coniterl2)) != NULL) { /*Parameters*/ conparams = g_variant_get_child_value(connodel2, 1); if (conparams != NULL) { /*Type*/ internet = FALSE; parameter = g_variant_lookup_value(conparams, "Type", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { internet = g_str_equal(valuestr, "internet"); } g_variant_unref(parameter); } if (internet) { /*Object path*/ pathv = g_variant_get_child_value(connodel2, 0); strlength = 256; contextpath = g_variant_get_string(pathv, &strlength); if ((contextpath != NULL) && (contextpath[0] != '\0')) { /*New connection*/ connection = g_new0(struct _mmguiconn, 1); /*UUID*/ connection->uuid = mmgui_module_context_path_to_uuid(mmguicore, contextpath); /*Name*/ parameter = g_variant_lookup_value(conparams, "Name", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->name = g_strdup(valuestr); } else { connection->name = g_strdup(_("Unknown")); } g_variant_unref(parameter); } else { connection->name = g_strdup(_("Unknown")); } /*APN*/ parameter = g_variant_lookup_value(conparams, "AccessPointName", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->apn = g_strdup(valuestr); } else { connection->apn = g_strdup("internet"); } g_variant_unref(parameter); } else { connection->apn = g_strdup("internet"); } /*Number*/ connection->number = g_strdup("*99#"); /*Username*/ parameter = g_variant_lookup_value(conparams, "Username", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->username = g_strdup(valuestr); } g_variant_unref(parameter); } /*Password*/ parameter = g_variant_lookup_value(conparams, "Password", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->password = g_strdup(valuestr); } g_variant_unref(parameter); } /*DNS*/ servicepath = mmgui_module_context_path_to_service_path(mmguicore, contextpath); if (servicepath != NULL) { error = NULL; serviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", servicepath, "net.connman.Service", NULL, &error); if (serviceproxy != NULL) { error = NULL; properties = g_dbus_proxy_call_sync(serviceproxy, "GetProperties", NULL, 0, -1, NULL, &error); if (properties != NULL) { propdictv = g_variant_get_child_value(properties, 0); if (propdictv != NULL) { dnsarrayv = g_variant_lookup_value(propdictv, "Nameservers.Configuration", G_VARIANT_TYPE_ARRAY); if (dnsarrayv != NULL) { dnsnum = g_variant_n_children(dnsarrayv); if (dnsnum >= 1) { dnsvaluev = g_variant_get_child_value(dnsarrayv, 0); if (dnsvaluev != NULL) { strlength = 256; valuestr = g_variant_get_string(dnsvaluev, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->dns1 = g_strdup(valuestr); } g_variant_unref(dnsvaluev); } } if (dnsnum >= 2) { dnsvaluev = g_variant_get_child_value(dnsarrayv, 1); if (dnsvaluev != NULL) { strlength = 256; valuestr = g_variant_get_string(dnsvaluev, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->dns2 = g_strdup(valuestr); } g_variant_unref(dnsvaluev); } } g_variant_unref(dnsarrayv); } g_variant_unref(propdictv); } g_variant_unref(properties); } /*else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); }*/ g_object_unref(serviceproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_free(servicepath); } /*Network ID*/ connection->networkid = 0; /*Home only*/ connection->homeonly = FALSE; /*Type*/ connection->type = MMGUI_DEVICE_TYPE_GSM; *connlist = g_slist_prepend(*connlist, connection); connnum++; /*Free resources*/ g_variant_unref(pathv); } } g_variant_unref(conparams); } g_variant_unref(connodel2); } g_variant_unref(connodel1); } g_variant_unref(contexts); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return 0; } } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { conparams = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetProperties", NULL, 0, -1, NULL, &error); if (conparams != NULL) { paramdict = g_variant_get_child_value(conparams, 0); if (paramdict != NULL) { connection = g_new0(struct _mmguiconn, 1); /*UUID*/ connection->uuid = mmgui_module_context_path_to_uuid(mmguicore, NULL); /*Name*/ connection->name = g_strdup(_("CDMA Connection")); /*APN*/ connection->apn = NULL; /*Number*/ connection->number = g_strdup("*777#"); /*Username*/ parameter = g_variant_lookup_value(paramdict, "Username", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->username = g_strdup(valuestr); } g_variant_unref(parameter); } /*Password*/ parameter = g_variant_lookup_value(paramdict, "Password", G_VARIANT_TYPE_STRING); if (parameter != NULL) { strlength = 256; valuestr = g_variant_get_string(parameter, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->password = g_strdup(valuestr); } g_variant_unref(parameter); } /*DNS*/ servicepath = mmgui_module_context_path_to_service_path(mmguicore, NULL); if (servicepath != NULL) { error = NULL; serviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", servicepath, "net.connman.Service", NULL, &error); if (serviceproxy != NULL) { error = NULL; properties = g_dbus_proxy_call_sync(serviceproxy, "GetProperties", NULL, 0, -1, NULL, &error); if (properties != NULL) { propdictv = g_variant_get_child_value(properties, 0); if (propdictv != NULL) { dnsarrayv = g_variant_lookup_value(propdictv, "Nameservers.Configuration", G_VARIANT_TYPE_ARRAY); if (dnsarrayv != NULL) { dnsnum = g_variant_n_children(dnsarrayv); if (dnsnum >= 1) { dnsvaluev = g_variant_get_child_value(dnsarrayv, 0); if (dnsvaluev != NULL) { strlength = 256; valuestr = g_variant_get_string(dnsvaluev, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->dns1 = g_strdup(valuestr); } g_variant_unref(dnsvaluev); } } if (dnsnum >= 2) { dnsvaluev = g_variant_get_child_value(dnsarrayv, 1); if (dnsvaluev != NULL) { strlength = 256; valuestr = g_variant_get_string(dnsvaluev, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { connection->dns2 = g_strdup(valuestr); } g_variant_unref(dnsvaluev); } } g_variant_unref(dnsarrayv); } g_variant_unref(propdictv); } g_variant_unref(properties); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_object_unref(serviceproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_free(servicepath); } /*Network ID*/ connection->networkid = 0; /*Home only*/ connection->homeonly = FALSE; /*Type*/ connection->type = MMGUI_DEVICE_TYPE_CDMA; *connlist = g_slist_prepend(*connlist, connection); connnum = 1; g_variant_unref(paramdict); } g_variant_unref(conparams); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return 0; } } return connnum; } G_MODULE_EXPORT mmguiconn_t mmgui_module_connection_add(gpointer mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguiconn_t connection; GError *error; GVariant *contexttuple, *context; gsize strlength; const gchar *contextpath; gchar *servicepath; GDBusProxy *contextproxy, *serviceproxy; GVariantBuilder *dnsbuilder; if ((mmguicore == NULL) || (name == NULL)) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return NULL; if (mmguicorelc->cmoduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->cmoduledata; connection = NULL; error = NULL; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { contexttuple = g_dbus_proxy_call_sync(moduledata->connectionproxy, "AddContext", g_variant_new("(s)", "internet"), 0, -1, NULL, &error); if (contexttuple != NULL) { context = g_variant_get_child_value(contexttuple, 0); if (context != NULL) { /*Context object path*/ strlength = 256; contextpath = g_variant_get_string(context, &strlength); if ((contextpath != NULL) && (contextpath[0] != '\0')) { /*Context proxy*/ contextproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", contextpath, "org.ofono.ConnectionContext", NULL, &error); if (contextproxy != NULL) { /*New connection*/ connection = g_new0(struct _mmguiconn, 1); /*Name*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Name", g_variant_new_string(name)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } connection->name = g_strdup(name); /*APN*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "AccessPointName", g_variant_new_string(apn)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } connection->apn = g_strdup(apn); /*Username*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Username", g_variant_new_string(username)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } connection->username = g_strdup(username); /*Password*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Password", g_variant_new_string(password)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } connection->password = g_strdup(password); /*DNS*/ if ((dns1 != NULL) || (dns2 != NULL)) { servicepath = mmgui_module_context_path_to_service_path(mmguicore, contextpath); if (servicepath != NULL) { error = NULL; serviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", servicepath, "net.connman.Service", NULL, &error); if (serviceproxy != NULL) { dnsbuilder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); if (dns1 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns1)); } if (dns2 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns2)); } error = NULL; g_dbus_proxy_call_sync(serviceproxy, "SetProperty", g_variant_new("(sv)", "Nameservers.Configuration", g_variant_builder_end(dnsbuilder)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_object_unref(serviceproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } } connection->dns1 = g_strdup(dns1); connection->dns2 = g_strdup(dns2); /*Type*/ connection->type = MMGUI_DEVICE_TYPE_GSM; /*Number*/ connection->number = g_strdup(number); /*Network ID*/ connection->networkid = networkid; /*Home only*/ connection->homeonly = homeonly; /*UUID*/ connection->uuid = mmgui_module_context_path_to_uuid(mmguicore, contextpath); /*Free resources*/ g_object_unref(contextproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } } /*Free resources*/ g_variant_unref(context); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } return connection; } G_MODULE_EXPORT gboolean mmgui_module_connection_update(gpointer mmguicore, mmguiconn_t connection, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2) { mmguicore_t mmguicorelc; moduledata_t moduledata; gchar *contextpath, *servicepath; GError *error; GDBusProxy *contextproxy, *serviceproxy; GVariantBuilder *dnsbuilder; if ((mmguicore == NULL) || (connection == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return FALSE; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { /*Get context object path from generated UUID*/ contextpath = mmgui_module_uuid_to_context_path(mmguicore, connection->uuid); servicepath = mmgui_module_context_path_to_service_path(mmguicore, contextpath); if ((contextpath != NULL) && (servicepath != NULL)) { /*Context proxy*/ contextproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", contextpath, "org.ofono.ConnectionContext", NULL, &error); /*Free resources*/ g_free(contextpath); /*Update properties*/ if (contextproxy != NULL) { /*Name*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Name", g_variant_new_string(name)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->name != NULL) { g_free(connection->name); } connection->name = g_strdup(name); /*APN*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "AccessPointName", g_variant_new_string(apn)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->apn != NULL) { g_free(connection->apn); } connection->apn = g_strdup(apn); /*Username*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Username", g_variant_new_string(username)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->username != NULL) { g_free(connection->username); } connection->username = g_strdup(username); /*Password*/ error = NULL; g_dbus_proxy_call_sync(contextproxy, "SetProperty", g_variant_new("(sv)", "Password", g_variant_new_string(password)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->password != NULL) { g_free(connection->password); } connection->password = g_strdup(password); /*DNS*/ if ((dns1 != NULL) || (dns2 != NULL)) { error = NULL; serviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", servicepath, "net.connman.Service", NULL, &error); if (serviceproxy != NULL) { dnsbuilder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); if (dns1 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns1)); } if (dns2 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns2)); } error = NULL; g_dbus_proxy_call_sync(serviceproxy, "SetProperty", g_variant_new("(sv)", "Nameservers.Configuration", g_variant_builder_end(dnsbuilder)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_object_unref(serviceproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } if (connection->dns1 != NULL) { g_free(connection->dns1); } connection->dns1 = g_strdup(dns1); if (connection->dns2 != NULL) { g_free(connection->dns2); } connection->dns2 = g_strdup(dns2); /*Number*/ if (connection->number != NULL) { g_free(connection->number); } connection->number = g_strdup(number); /*Network ID*/ connection->networkid = networkid; /*Home only*/ connection->homeonly = homeonly; /*Free resources*/ g_object_unref(contextproxy); g_free(servicepath); return TRUE; } else if (error != NULL) { /*Handle errors*/ mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_free(servicepath); } } } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { /*We have single connection in CDMA, so ignore other even if added*/ if (g_str_equal(connection->uuid, "00000000-0000-4000-1000-000000000000")) { /*Name*/ if (connection->name != NULL) { g_free(connection->name); } connection->name = g_strdup(name); /*APN*/ if (connection->apn != NULL) { g_free(connection->apn); } connection->apn = g_strdup(apn); /*Username*/ error = NULL; g_dbus_proxy_call_sync(moduledata->connectionproxy, "SetProperty", g_variant_new("(sv)", "Username", g_variant_new_string(username)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->username != NULL) { g_free(connection->username); } connection->username = g_strdup(username); /*Password*/ error = NULL; g_dbus_proxy_call_sync(moduledata->connectionproxy, "SetProperty", g_variant_new("(sv)", "Password", g_variant_new_string(password)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } if (connection->password != NULL) { g_free(connection->password); } connection->password = g_strdup(password); /*DNS*/ if ((dns1 != NULL) || (dns2 != NULL)) { servicepath = mmgui_module_context_path_to_service_path(mmguicore, NULL); if (servicepath != NULL) { error = NULL; serviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", servicepath, "net.connman.Service", NULL, &error); if (serviceproxy != NULL) { dnsbuilder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); if (dns1 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns1)); } if (dns2 != NULL) { g_variant_builder_add_value(dnsbuilder, g_variant_new_string(dns2)); } error = NULL; g_dbus_proxy_call_sync(serviceproxy, "SetProperty", g_variant_new("(sv)", "Nameservers.Configuration", g_variant_builder_end(dnsbuilder)), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_object_unref(serviceproxy); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } g_free(servicepath); } } if (connection->dns1 != NULL) { g_free(connection->dns1); } connection->dns1 = g_strdup(dns1); if (connection->dns2 != NULL) { g_free(connection->dns2); } connection->dns2 = g_strdup(dns2); /*Number*/ if (connection->number != NULL) { g_free(connection->number); } connection->number = g_strdup(number); /*Network ID*/ connection->networkid = networkid; /*Home only*/ connection->homeonly = homeonly; return TRUE; } } return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_connection_remove(gpointer mmguicore, mmguiconn_t connection) { mmguicore_t mmguicorelc; moduledata_t moduledata; gchar *contextpath; GError *error; if ((mmguicore == NULL) || (connection == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return FALSE; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { /*Get context object path from generated UUID*/ contextpath = mmgui_module_uuid_to_context_path(mmguicore, connection->uuid); if (contextpath != NULL) { /*Remove context with single call*/ error = NULL; g_dbus_proxy_call_sync(moduledata->connectionproxy, "RemoveContext", g_variant_new("(o)", contextpath), 0, -1, NULL, &error); /*Free resources*/ g_free(contextpath); /*Handle errors*/ if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } else { return TRUE; } } } return FALSE; } G_MODULE_EXPORT gchar *mmgui_module_connection_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); return moduledata->errormessage; } static gboolean mmgui_module_device_connection_initialize_contexts(mmguicore_t mmguicore, gboolean createproxies) { moduledata_t moduledata; GError *error; GDBusProxy *contextproxy; GVariant *contexts; GVariantIter coniterl1, coniterl2; GVariant *connodel1, *connodel2; GVariant *conparams, *paramdict, *contexttypev, *interfacev, *contextpathv, *activeflagv, *settingsarrayv; gsize strlength; const gchar *contexttype, *contextpath, *interface; gboolean foundactive; if (mmguicore == NULL) return FALSE; if (mmguicore->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicore->cmoduledata; if (mmguicore->device == NULL) return FALSE; if (mmguicore->device->objectpath == NULL) return FALSE; foundactive = FALSE; error = NULL; if (mmguicore->device->type == MMGUI_DEVICE_TYPE_GSM) { contexts = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetContexts", NULL, 0, -1, NULL, &error); if (contexts != NULL) { g_variant_iter_init(&coniterl1, contexts); while ((connodel1 = g_variant_iter_next_value(&coniterl1)) != NULL) { g_variant_iter_init(&coniterl2, connodel1); while ((connodel2 = g_variant_iter_next_value(&coniterl2)) != NULL) { /*Parameters*/ conparams = g_variant_get_child_value(connodel2, 1); if (conparams != NULL) { /*Type*/ contexttypev = g_variant_lookup_value(conparams, "Type", G_VARIANT_TYPE_STRING); if (contexttypev != NULL) { strlength = 256; contexttype = g_variant_get_string(contexttypev, &strlength); if ((contexttype != NULL) && (contexttype[0] != '\0')) { if (g_str_equal(contexttype, "internet")) { /*Object path*/ contextpathv = g_variant_get_child_value(connodel2, 0); if (contextpathv != NULL) { strlength = 256; contextpath = g_variant_get_string(contextpathv, &strlength); if ((contextpath != NULL) && (contextpath[0] != '\0')) { if (createproxies) { /*Proxy*/ contextproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", contextpath, "org.ofono.ConnectionContext", NULL, NULL); if (contextproxy != NULL) { g_signal_connect(contextproxy, "g-signal", G_CALLBACK(mmgui_module_device_context_property_changed_signal_handler), mmguicore); g_hash_table_insert(moduledata->contexttable, g_strdup(contextpath), contextproxy); } } if (!foundactive) { /*State*/ activeflagv = g_variant_lookup_value(conparams, "Active", G_VARIANT_TYPE_BOOLEAN); if (activeflagv != NULL) { if (g_variant_get_boolean(activeflagv)) { settingsarrayv = g_variant_lookup_value(conparams, "Settings", G_VARIANT_TYPE_ARRAY); if (settingsarrayv != NULL) { /*Interface*/ interfacev = g_variant_lookup_value(settingsarrayv, "Interface", G_VARIANT_TYPE_STRING); if (interfacev != NULL) { /*Update interfacename and state*/ strlength = IFNAMSIZ; interface = g_variant_get_string(interfacev, &strlength); if ((interface != NULL) && (interface[0] != '\0')) { memset(mmguicore->device->interface, 0, IFNAMSIZ); strncpy(mmguicore->device->interface, interface, IFNAMSIZ); mmguicore->device->connected = TRUE; } /*Precache active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = g_strdup(contextpath); /*Set flag*/ foundactive = TRUE; /*Free resources*/ g_variant_unref(interfacev); } g_variant_unref(settingsarrayv); } } g_variant_unref(activeflagv); } } } g_variant_unref(contextpathv); } } } g_variant_unref(contexttypev); } g_variant_unref(conparams); } g_variant_unref(connodel2); } g_variant_unref(connodel1); } g_variant_unref(contexts); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return FALSE; } } else if (mmguicore->device->type == MMGUI_DEVICE_TYPE_CDMA) { conparams = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetProperties", NULL, 0, -1, NULL, &error); if (conparams != NULL) { paramdict = g_variant_get_child_value(conparams, 0); if (paramdict != NULL) { /*State*/ activeflagv = g_variant_lookup_value(paramdict, "Powered", G_VARIANT_TYPE_BOOLEAN); if (activeflagv != NULL) { if (g_variant_get_boolean(activeflagv)) { settingsarrayv = g_variant_lookup_value(paramdict, "Settings", G_VARIANT_TYPE_ARRAY); if (settingsarrayv != NULL) { /*Interface*/ interfacev = g_variant_lookup_value(settingsarrayv, "Interface", G_VARIANT_TYPE_STRING); if (interfacev != NULL) { /*Update interfacename and state*/ strlength = IFNAMSIZ; interface = g_variant_get_string(interfacev, &strlength); if ((interface != NULL) && (interface[0] != '\0')) { memset(mmguicore->device->interface, 0, IFNAMSIZ); strncpy(mmguicore->device->interface, interface, IFNAMSIZ); mmguicore->device->connected = TRUE; } /*Do not precache active context path - we have single connection*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = NULL; /*Set flag*/ foundactive = TRUE; /*Free resources*/ g_variant_unref(interfacev); } g_variant_unref(settingsarrayv); } } g_variant_unref(activeflagv); } g_variant_unref(paramdict); } g_variant_unref(conparams); } } /*Set internal values if active context wasn't found*/ if (!foundactive) { /*Zero interface name*/ memset(mmguicore->device->interface, 0, IFNAMSIZ); mmguicore->device->connected = FALSE; /*Zero active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = NULL; } return TRUE; } static void mmgui_module_device_connection_manager_context_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GDBusProxy *contextproxy; GVariant *propname, *propvalue, *value, *conpath; const gchar *parameter, *path; gsize strsize; if (data == NULL) return; mmguicore = (mmguicore_t)data; if (mmguicore->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicore->cmoduledata; //printf("CONN %s - > %s :: %s\n", sender_name, signal_name, g_variant_print(parameters, TRUE)); if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "Attached")) { if ((g_variant_get_boolean(value)) && (!moduledata->contextlistformed)) { moduledata->contextlistformed = mmgui_module_device_connection_initialize_contexts(mmguicore, TRUE); /*Contacts capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_CONNECTIONS)); } } } g_variant_unref(value); } } } else if (g_str_equal(signal_name, "ContextAdded")) { conpath = g_variant_get_child_value(parameters, 0); if (conpath != NULL) { strsize = 256; path = g_variant_get_string(conpath, &strsize); if ((path != NULL) && (path[0] != '\0')) { contextproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", path, "org.ofono.ConnectionContext", NULL, NULL); if (contextproxy != NULL) { g_signal_connect(contextproxy, "g-signal", G_CALLBACK(mmgui_module_device_context_property_changed_signal_handler), mmguicore); g_hash_table_insert(moduledata->contexttable, g_strdup(path), contextproxy); } } } } else if (g_str_equal(signal_name, "ContextRemoved")) { conpath = g_variant_get_child_value(parameters, 0); if (conpath != NULL) { strsize = 256; path = g_variant_get_string(conpath, &strsize); if ((path != NULL) && (path[0] != '\0')) { g_hash_table_remove(moduledata->contexttable, path); } } } } static void mmgui_module_device_context_property_changed_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GError *error; GVariant *propname, *propvalue, *value, *conparams, *paramdictv, *settingsarrayv, *interfacev; const gchar *parameter, *interface; gsize strsize; if (data == NULL) return; mmguicore = (mmguicore_t)data; if (mmguicore->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicore->cmoduledata; if (!moduledata->contextlistformed) return; //printf("CTX %s - > %s :: %s\n", sender_name, signal_name, g_variant_print(parameters, TRUE)); if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "Active")) { if (g_variant_get_boolean(value)) { /*Update connection information*/ error = NULL; conparams = g_dbus_proxy_call_sync(proxy, "GetProperties", NULL, 0, -1, NULL, &error); if (conparams != NULL) { paramdictv = g_variant_get_child_value(conparams, 0); if (paramdictv != NULL) { /*Settings*/ settingsarrayv = g_variant_lookup_value(paramdictv, "Settings", G_VARIANT_TYPE_ARRAY); if (settingsarrayv != NULL) { /*Interface*/ interfacev = g_variant_lookup_value(settingsarrayv, "Interface", G_VARIANT_TYPE_STRING); if (interfacev != NULL) { strsize = IFNAMSIZ; interface = g_variant_get_string(interfacev, &strsize); if ((interface != NULL) && (interface[0] != '\0')) { memset(mmguicore->device->interface, 0, IFNAMSIZ); strncpy(mmguicore->device->interface, interface, IFNAMSIZ); mmguicore->device->connected = TRUE; } /*Precache active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = g_strdup(g_dbus_proxy_get_object_path(proxy)); /*Generate signals*/ if (moduledata->opinitiated) { /*Connection activated by MMGUI*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection activated by another mean*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(TRUE)); } } /*Free resources*/ g_variant_unref(interfacev); } g_variant_unref(settingsarrayv); } g_variant_unref(paramdictv); } g_variant_unref(conparams); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } else { /*Zero interface name if disconnected*/ memset(mmguicore->device->interface, 0, IFNAMSIZ); mmguicore->device->connected = FALSE; /*Zero active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = NULL; /*Generate signals*/ if (moduledata->opinitiated) { /*Connection deactivated by MMGUI*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection deactivated by another mean*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(FALSE)); } } } } g_variant_unref(value); } } } } static void mmgui_module_device_cdma_connection_manager_context_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GVariant *propname, *propvalue, *value, *conparams, *paramdictv, *settingsarrayv, *interfacev; const gchar *parameter, *interface; gsize strsize; GError *error; if (data == NULL) return; mmguicore = (mmguicore_t)data; if (mmguicore->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicore->cmoduledata; if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "Powered")) { if (g_variant_get_boolean(value)) { /*Update connection information*/ error = NULL; conparams = g_dbus_proxy_call_sync(proxy, "GetProperties", NULL, 0, -1, NULL, &error); if (conparams != NULL) { paramdictv = g_variant_get_child_value(conparams, 0); if (paramdictv != NULL) { /*Settings*/ settingsarrayv = g_variant_lookup_value(paramdictv, "Settings", G_VARIANT_TYPE_ARRAY); if (settingsarrayv != NULL) { /*Interface*/ interfacev = g_variant_lookup_value(settingsarrayv, "Interface", G_VARIANT_TYPE_STRING); if (interfacev != NULL) { strsize = IFNAMSIZ; interface = g_variant_get_string(interfacev, &strsize); if ((interface != NULL) && (interface[0] != '\0')) { memset(mmguicore->device->interface, 0, IFNAMSIZ); strncpy(mmguicore->device->interface, interface, IFNAMSIZ); mmguicore->device->connected = TRUE; } /*Precache active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = NULL; /*Generate signals*/ if (moduledata->opinitiated) { /*Connection activated by MMGUI*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection activated by another mean*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(TRUE)); } } /*Free resources*/ g_variant_unref(interfacev); } g_variant_unref(settingsarrayv); } g_variant_unref(paramdictv); } g_variant_unref(conparams); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } } else { /*Zero interface name if disconnected*/ memset(mmguicore->device->interface, 0, IFNAMSIZ); mmguicore->device->connected = FALSE; /*Zero active context path*/ if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); } moduledata->actcontpath = NULL; /*Generate signals*/ if (moduledata->opinitiated) { /*Connection deactivated by MMGUI*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection deactivated by another mean*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(FALSE)); } } } } g_variant_unref(value); } } } } G_MODULE_EXPORT gboolean mmgui_module_device_connection_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *conparams, *parameter, *paramdict; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (device == NULL) return FALSE; if (device->objectpath == NULL) return FALSE; moduledata->actcontpath = NULL; moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; /*Enumerate contexts and add signal handlers*/ moduledata->contextlistformed = FALSE; error = NULL; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { /*Hash table of connection context proxies*/ moduledata->contexttable = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)g_object_unref); /*Connection manager proxy*/ moduledata->connectionproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.ConnectionManager", NULL, &error); if (moduledata->connectionproxy != NULL) { /*Set signal handler*/ moduledata->connectionsignal = g_signal_connect(moduledata->connectionproxy, "g-signal", G_CALLBACK(mmgui_module_device_connection_manager_context_signal_handler), mmguicore); if (mmguicorelc->device->enabled) { /*Test if contexts are available*/ conparams = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetProperties", NULL, 0, -1, NULL, &error); if (conparams != NULL) { paramdict = g_variant_get_child_value(conparams, 0); if (paramdict != NULL) { parameter = g_variant_lookup_value(paramdict, "Attached", G_VARIANT_TYPE_BOOLEAN); if (parameter != NULL) { if ((g_variant_get_boolean(parameter)) && (!moduledata->contextlistformed)) { moduledata->contextlistformed = mmgui_module_device_connection_initialize_contexts(mmguicorelc, TRUE); } g_variant_unref(parameter); } g_variant_unref(paramdict); } g_variant_unref(conparams); } else if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } } else if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Hash table of connection context proxies not needed here*/ moduledata->contexttable = NULL; /*Connection manager proxy*/ moduledata->connectionproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.cdma.ConnectionManager", NULL, &error); if (moduledata->connectionproxy != NULL) { /*Set signal handler*/ moduledata->connectionsignal = g_signal_connect(moduledata->connectionproxy, "g-signal", G_CALLBACK(mmgui_module_device_cdma_connection_manager_context_signal_handler), mmguicore); if (mmguicorelc->device->enabled) { /*Update connection state*/ moduledata->contextlistformed = mmgui_module_device_connection_initialize_contexts(mmguicorelc, FALSE); } } else if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; /*Handle device disconnection*/ if (moduledata->opinitiated) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } if (moduledata->connectionproxy != NULL) { if (g_signal_handler_is_connected(moduledata->connectionproxy, moduledata->connectionsignal)) { g_signal_handler_disconnect(moduledata->connectionproxy, moduledata->connectionsignal); } g_object_unref(moduledata->connectionproxy); moduledata->connectionproxy = NULL; } if (moduledata->contexttable != NULL) { g_hash_table_destroy(moduledata->contexttable); moduledata->contexttable = NULL; } if (moduledata->actcontpath != NULL) { g_free(moduledata->actcontpath); moduledata->actcontpath = NULL; } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_status(gpointer mmguicore) { mmguicore_t mmguicorelc; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->device == NULL) return FALSE; if (mmguicorelc->device->objectpath == NULL) return FALSE; /*Get interface information*/ mmgui_module_device_connection_initialize_contexts(mmguicorelc, FALSE); return TRUE; } G_MODULE_EXPORT guint64 mmgui_module_device_connection_timestamp(gpointer mmguicore) { mmguicore_t mmguicorelc; guint64 timestamp; if (mmguicore == NULL) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->device == NULL) return 0; if (mmguicorelc->device->objectpath == NULL) return 0; /*Get current timestamp*/ timestamp = (guint64)time(NULL); return timestamp; } G_MODULE_EXPORT gchar *mmgui_module_device_connection_get_active_uuid(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return NULL; if (moduledata->actcontpath == NULL) return NULL; return mmgui_module_context_path_to_uuid(mmguicore, moduledata->actcontpath); } static void mmgui_module_device_connection_connect_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->cmoduledata; error = NULL; g_dbus_proxy_call_finish(proxy, res, &error); if (error != NULL) { /*Reset flags*/ moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; /*Emit signal*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(FALSE)); } /*Handle errors*/ mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } G_MODULE_EXPORT gboolean mmgui_module_device_connection_connect(gpointer mmguicore, mmguiconn_t connection) { mmguicore_t mmguicorelc; moduledata_t moduledata; gchar *contextpath; GDBusProxy *contextproxy; if ((mmguicore == NULL) || (connection == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return FALSE; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { if (moduledata->actcontpath == NULL) { /*Get context object path from generated UUID*/ contextpath = mmgui_module_uuid_to_context_path(mmguicore, connection->uuid); if (contextpath != NULL) { contextproxy = g_hash_table_lookup(moduledata->contexttable, contextpath); if (contextproxy != NULL) { /*Change 'Active' property*/ g_dbus_proxy_call(contextproxy, "SetProperty", g_variant_new("(sv)", "Active", g_variant_new_boolean(TRUE)), G_DBUS_CALL_FLAGS_NONE, MODULE_INT_CONNMAN_OPERATION_TIMEOUT, NULL, (GAsyncReadyCallback)mmgui_module_device_connection_connect_handler, mmguicore); /*Set flags*/ moduledata->opinitiated = TRUE; moduledata->opstate = TRUE; } g_free(contextpath); } } } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Change 'Powered' property*/ g_dbus_proxy_call(moduledata->connectionproxy, "SetProperty", g_variant_new("(sv)", "Powered", g_variant_new_boolean(TRUE)), G_DBUS_CALL_FLAGS_NONE, MODULE_INT_CONNMAN_OPERATION_TIMEOUT, NULL, (GAsyncReadyCallback)mmgui_module_device_connection_connect_handler, mmguicore); /*Set flags*/ moduledata->opinitiated = TRUE; moduledata->opstate = TRUE; } return TRUE; } static void mmgui_module_device_connection_disconnect_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->cmoduledata; error = NULL; g_dbus_proxy_call_finish(proxy, res, &error); if (error != NULL) { /*Reset flags*/ moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; /*Emit signal*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(FALSE)); } /*Handle errors*/ mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } G_MODULE_EXPORT gboolean mmgui_module_device_connection_disconnect(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; gchar *actsvcpath; GDBusProxy *svcproxy; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (mmguicorelc->device->imsi == NULL) return FALSE; if (moduledata->actcontpath == NULL) return FALSE; /*If device already disconnected, return TRUE*/ if (!mmguicorelc->device->connected) return TRUE; /*Get active service path*/ if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { actsvcpath = mmgui_module_context_path_to_service_path(mmguicorelc, moduledata->actcontpath); } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { actsvcpath = mmgui_module_context_path_to_service_path(mmguicorelc, NULL); } else { actsvcpath = NULL; } if (actsvcpath != NULL) { /*Service proxy*/ error = NULL; svcproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "net.connman", actsvcpath, "net.connman.Service", NULL, &error); if ((svcproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(actsvcpath); return FALSE; } g_free(actsvcpath); /*Call disconnect method*/ g_dbus_proxy_call(svcproxy, "Disconnect", NULL, G_DBUS_CALL_FLAGS_NONE, MODULE_INT_CONNMAN_OPERATION_TIMEOUT, NULL, (GAsyncReadyCallback)mmgui_module_device_connection_disconnect_handler, mmguicore); /*Set flags*/ moduledata->opinitiated = TRUE; moduledata->opstate = TRUE; /*Free resources*/ g_object_unref(svcproxy); return TRUE; } return FALSE; } modem-manager-gui-0.0.19.1/help/fr/fr.po000664 001750 001750 00000107242 13261703575 017506 0ustar00alexalex000000 000000 # # Translators: msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: French (http://www.transifex.com/ethereal/modem-manager-gui/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Traducteurs-crédits : L'Africain 2016" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Informations à propos de Modem Manager GUI." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "L'Africain" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "À propos Modem Manager GUI" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "Ce programme est distribué sous les termes de la Licence publique générale GNU version 3 publiée par la Free Software Foundation. Une copie de cette licence peut être trouvée à ce link, ou dans le fichier COPYING inclus avec le code source de ce programme." #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "Comment puis-je aider à améliorer Modem Manager GUI." #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Fournir un code" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "Notez que cette commande pour cloner ne vous donne pas accès en écriture au dépôt." #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "Traduisez Modem Manager GUI dans votre langue maternelle." #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Traductions" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "L'interface utilisateur graphique, la page de manuel traditionnelle et l'aide Gnome de Modem Manager GUI peuvent être traduits dans votre langue." #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "Il existe une page du projet sur Transifex où les traductions existantes sont hébergées et de nouvelles peuvent être fournies." #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "Pour obtenir de l'aide générale sur le fonctionnement de Transifex, consultez le service d'assistance de Transifex." #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "Pour votre travail, vous devriez jeter un coup d'œil aux règles et aux dictionnaires des équipes locales de traduction Gnome. Bien que Modem Manager GUI ne soit pas considéré à proprement parler comme un logiciel Gnome, il sera souvent utilisé dans des environnements basés sur GTK et devrait correspondre au monde conceptuel de ces applications." #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Aide de Modem Manager GUI." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "GNOME Hello logoManuel de Modem Manager GUI" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "Modem Manager GUI est une interface graphique pour le daemon ModemManager qui est capable de contrôler des fonctions spécifiques aux modems." #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "Vous pouvez utiliser Modem Manager GUI pour les tâches suivantes :" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Rechercher les réseaux mobiles disponibles" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Utilisation" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Contribuer au projet" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Informations légales." #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "License" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Cet ouvrag est distribué sous licence CreativeCommons Attribution-Share Alike 3.0 Unported." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Vous êtes libre de :" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Partager" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "Copier, distribuer ou transmettre cet ouvrage." #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Modifier" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Adapter l'ouvrage." #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "Selon les conditions suivantes :" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Attribution" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "Vous devez attribuer le travail de la manière spécifiée par l'auteur ou l'administrateur de la licence (mais pas d'une manière qui suggère qu'ils approuvent vous-même, ou votre utilisation de l'œuvre)." #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "Partager" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "Si vous modifiez, transformez ou exploitez ce travail, vous ne pouvez distribuer le travail résultant que sous la même licence, similaire ou compatible." #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "Pour le texte intégral de la licence, consultez le site web de CreativeCommons ou lisez le texte complet Commons Deed." #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Signaler les bogues et demander de nouvelles fonctionnalités." #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Signaler un bogue" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "Configurez l'application en fonction de vos besoins." #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Configuration" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Utiliser votre liste de contact." #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Listes des contacts" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "Le modem à large bande a accès aux contacts stockés sur la carte SIM. Certains modems peuvent également stocker des contacts dans la mémoire interne. Modem Manager GUI peut fonctionner avec les contacts de ces stockages et peut également exporter des contacts à partir des contacts du système. Les stockages de contacts système pris en charge sont : Evolution Data Server utilisé par les applications GNOME (section contacts GNOME) et le serveur Akonadi utilisé par les applications KDE (section contacts KDE)." #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "Fenêtre des contacts de Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Obtenez des informations sur le réseau mobile." #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Info sur le réseau" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "Votre opérateur réseau fournit certaines informations que vous pouvez afficher dans Modem Manager GUI. Cliquez sur le bouton Informations dans la barre d'outils." #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "Dans la fenêtre suivante, vous voyez toutes les informations disponibles fournies par votre opérateur :" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr " Fenêtre d'information réseau de Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "La plupart des informations sont expliquées et bien connues des téléphones mobiles traditionnels ou des smartphones. Notez que la détection de localisation GPS (dans la partie inférieure de la fenêtre) ne fonctionnera pas dans la plupart des cas car les périphériques mobiles à large bande n'ont généralement pas de capteur GPS." #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Activez vos modems." #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modems" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "Après avoir démarré Modem Manager GUI, la fenêtre suivante s'affichera :" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "Fenêtre de démarrage de <_:app-1/>." #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "Vous pouvez voir les modems disponibles sur votre système. Cliquez sur l'une des entrées pour utiliser ce périphérique." #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "Après avoir cliqué sur un périphérique, il peut s'avérer nécessaire de l'activer en premier si celui-ci n'était pas activé sur votre système. Modem Manager GUI vous demandera dans ce cas une confirmation." #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "Soyez patient après avoir connecté un périphérique amovible tel qu'une clé USB ou une carte PCMCIA. Cela peut prendre un certain temps jusqu'à ce que le système le détecte." #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "Vous ne pouvez pas utiliser plusieurs modems en même temps. Si vous cliquez sur une autre entrée dans la liste des périphériques, celle précédemment activée sera désactivée." #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Rechercher les réseaux disponibles." #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Recherche de réseau" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "Modem Manager GUI peut être utilisé pour rechercher des réseaux mobiles disponibles. Cliquez sur le bouton Recehrcher dans la barre d'outils." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "Fenêtre de recheche réseau de <_:app-1/>." #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "Si un réseau mobile apparaît plus d'une fois dans la liste, ce réseau mobile utilise des normes de diffusion différentes. Il est évident que vous ne pouvez pas analyser les réseaux mobiles en utilisant des normes de diffusion que votre modem ne prend pas en charge." #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Utilisez Modem Manager GUI pour envoyer et recevoir des SMS." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "La plupart des modems à large bande capables d'envoyer et de recevoir des messages SMS comme n'importe quel téléphone mobile. Vous pouvez utiliser Modem Manager GUI si vous souhaitez envoyer ou lire des messages SMS. Cliquez sur le bouton SMS dans la barre d'outils." #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "Comme vous pouvez le voir, tous les messages sont stockés dans trois dossiers. Vous pouvez trouver les messages reçus dans le dossier Entrants, les messages envoyés dans le dossier Envoyés et les messages enregistrés dans le dossier Brouillons." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "Fenêtre de SMS de <_:app-1/>." #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "Vous pouvez modifier l'ordre de tri des messages et les paramètres spéciaux des SMS à l'aide de la fenêtre Préférences." #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "Utiliser le bouton Novueau pour composer, envoyer ou enregistrer vos messages, le bouton Supprimer pour supprimer le (s) message (s) sélectionné (s) et le bouton Répondre pour répondre au message sélectionné (si ce message a un numéro valide). N'oubliez pas que vous pouvez sélectionner plusieurs messages simultanément." #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Obtenez des statistiques sur le trafic réseau." #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Trafic du réseau" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "Modem Manager GUI collecte des statistiques sur le trafic mobile à large bande et peut déconnecter le modem lorsque la consommation du trafic ou le temps de la session dépasse la limite définie par l'utilisateur. Pour utiliser ces fonctions, cliquez sur le bouton Trafic dans la barre d'outils." #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "La fenêtre du trafic réseau contient sur le côté gauche, des informations de consommation de trafic de session, de mois et d'année et sur le côté droit, une représentation graphique de la vitesse de connexion du réseau actuel." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "Fenêtre du trafic réseau de <_:app-1/>." #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "Utilisez le bouton Définir limite pour définir le trafic ou la limite de temps pour la session en cours, le bouton Connexions pour afficher la liste des connexions réseau actives et terminer les applications et le bouton Statistiques pour afficher les statistiques quotidiennes de consommation du trafic pour les mois sélectionnés." #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "Les statistiques de trafic sont collectées uniquement lorsque Modem Manager GUI est en cours d'exécution, de sorte que les valeurs des résultats peuvent être inexactes et doivent être traitées uniquement comme référence. Les statistiques de trafic les plus précises sont collectées par l'opérateur mobile." #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "Utilisez Modem Manager GUI pour envoyer les requêtes USSD et recevoir une réponse." #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "Codes USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "Modem Manager GUI peut envoyer des codes USSD. Ces codes contrôlent certaines fonctions réseau, par exemple la visibilité de votre numéro de téléphone lors de l'envoi d'un SMS." #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "Pour utiliser les fonctions USSD, cliquez sur le bouton USSD dans la barre d'outils." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "external ref='figures/ussd-window.png' md5='c1f2437ed53d67408c1fdfeb270f001a'" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "Fenêtre de requête USSD de <_:app-1/>." #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "Dans l'entrée de texte en haut de la fenêtre, le code *100# est déjà affiché. Ce code est habituellement utilisé pour demander le solde d'une carte prépayée. Si vous souhaitez envoyer un autre code, cliquez sur le bouton Éditer à droite." #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "Modem Manager GUI prend en charge les sessions USSD interactives, faites attention aux indications affichées avec les réponses USSD. Vous pouvez envoyer des réponses USSD en utilisant les entrées de texte pour les commandes USSD. Si vous envoyez une nouvelle commande USSD alors que la session USSD est active, cette session sera fermée automatiquement." #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "Si vous utilisez des périphériques Huawei et obtenez des réponses USSD illisibles, vous pouvez essayer de cliquer sur le bouton Éditer et cliquer sur le bouton Modifier l'encodage des messages dans la barre d'outils de la fenêtre ouverte." #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "Les codes USSD ne sont disponibles que dans les réseaux qui utilise les standards 3GPP ." #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "Vous pouvez utiliser de tels codes à plusieurs fins : plan de changement, connaître votre solde, numéro de bloc, etc." #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" modem-manager-gui-0.0.19.1/src/connection-editor-window.h000664 001750 001750 00000003720 13261703575 023064 0ustar00alexalex000000 000000 /* * connection-editor-window.h * * Copyright 2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __CONNECTION_EDITOR_WINDOW_H__ #define __CONNECTION_EDITOR_WINDOW_H__ #include #include "main.h" enum _mmgui_connection_editor_window_list_columns { MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION = 0, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_COLUMNS }; void mmgui_main_connection_editor_window_open(mmgui_application_t mmguiapp); void mmgui_main_connection_editor_window_list_init(mmgui_application_t mmguiapp); void mmgui_main_connection_editor_window_list_fill(mmgui_application_t mmguiapp); #endif /* __CONNECTION_EDITOR_WINDOW_H__ */ modem-manager-gui-0.0.19.1/packages/debian/modem-manager-gui-help.install000664 001750 001750 00000000017 13261703575 026001 0ustar00alexalex000000 000000 usr/share/help modem-manager-gui-0.0.19.1/resources/ui/000775 001750 001750 00000000000 13261745467 017627 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/po/pl_PL.po000664 001750 001750 00000117235 13261705205 017157 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # mucha090 , 2014 # Wiktor Jezioro , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (Poland) (http://www.transifex.com/ethereal/modem-manager-gui/language/pl_PL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Oznacz jako nieprzeczytaną" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Oznacz jako nieprzeczytane" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Błąd dodawania kontaktu" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Usuń kontakt" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Naprawdę chcesz usunąć kontakt?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Błąd usuwania kontaktu" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Pierwsze Imię" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Pierwszy numer" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Adres e-mail" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Grupa" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Drugie Imię" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Drugi numer" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Błąd otwierania urządzenia" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Zaznaczony" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Urządzenie" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Nie wspierane" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "Sukces" #: ../src/main.c:511 msgid "Failed" msgstr "Nie powiodło się" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Przekroczony czas oczekiwania na odpowiedź" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Modem nie jest gotowy do pracy. Poczekaj na przygotowywane modemu..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Modem musi zostać włączony aby można było czytać i wysyłać wiadomości SMS.\nProsze włączyć modem." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Modem musi zostać zarejestrowany w sieci aby odbierać i wysyłać wiadomości SMS.\nProsze czekać..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Modem musi zostać odblokowany aby odbierać i wysyłać wiadomości SMS.\nProsze podać kod PIN." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Program Modem Manager GUI nie obsługuje funkcji manipulacji SMS." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Program Modem Manager nie wspiera wysyłania wiadomości SMS" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Modem musi zostać włączony aby można było wysyłać kody USSD. \nProsze włączyć modem." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Modem musi zostać zarejestrowany w sieci aby wysyłać kody USSD.\nProsze czekać..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Modem musi zostać odblokowany aby móc wysyłać kody USSD.\nProsze podać kod PIN." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Program Modem Manager nie wspiera wysyłania żądań USSD" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Modem musi zostać włączony aby wyszukać dostępne sieci. Prosze włączyć modem." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Modem musi zostać odblokowany aby można było wyszukać dostępne sieci.\nProsze podać kod PIN." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Program Modem Manager nie wspiera skanowania w poszukiwaniu dostępnych sieci mobilnych" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Aktualnie modem jest podłączony. Prosze rozłączyć aby móc przeskanować." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Modem musi zostać włączony aby aby dało się eksportować kontakty.\nProsze włączyć modem." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Modem musi zostać odblokowany aby aby dało się eksportować kontakty.\nProsze włączyć modem." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Zamknij" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Opis" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Błąd urządzenia" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Błąd podczas wyszukiwania sieci" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Numer SMS nie jest poprawny\nMogą zostać użyte jedynie\nnumery od 2 do 20 liczb bez liter i znaków " #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Brak tekstu do wysłania\nProsze o wpisanie tekstu do wysłania" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Błędny numer albo urządzenie nie jest gotowe" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Nieznane" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Aplikacja" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protokół" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Stan" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Bufor" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Do" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Pobrane dane: %s, limit ustawiony na: %s\nCzas: %s, limit ustawiony na: %s\nProsze o sprawdzenie wprowadzonych wartości i spróbuj ponownie" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Ustawiony limit czasu i prędkości pobranych danych jest niepoprawny" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Prędkość pobranych danych: %s, limit ustawiony na: %s\nProsze sprawdzić pobrane wartości i spróbuj ponownie" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Limit prędkości pobranych danych jest niepoprawny" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Czas: %s, limit ustawiony na: %s\nProsze sprawdzić wprowadzone dane i spróbować jeszcze raz" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Niepoprawny limit czasowy" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parametr" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Wartość" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Odebrane dane" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Wysłane dane" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Prędkość pobierania" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Prędkość wysyłania" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Tyle czasu upłyneło" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Pozostała ilość danych możliwych do pobrania" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Pozostało czasu" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Przykładowe polecenie" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Wystąpił błąd podczas wysyłania kodu USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nTryb wpisywania kodów USSD aktywny. Czekam na wprowadzenie kodu...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Polecenie" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Lokalizacja" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Przeskanuj dostępne sieci komórkowe CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Pokaż statystyki dziennego zużycia danych CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statystyki" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Dodaj nowy kontakt do książki adresowej modemu CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Usuń kontakt z książki adresowej modemu" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Usuń kontakt" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Wyślij wiadomość SMS dla zaznaczonego kontaktu CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Wyślij SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Zamknij czy minimalizuj?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Jaką akcje wybrać podczas zamykania okna programu?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Poprostu wyjdź" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Zminimalizować do tacki systemowej lub do menu powiadomień" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Wybrane statystyki z okresu" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Styczeń" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Luty" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Marzec" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Kwiecień" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Maj" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Czerwiec" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Lipiec" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Sierpień" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Wrzesień" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Październik" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Listopad" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Grudzień" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/src/plugins/ofonohistory.c000664 001750 001750 00000037610 13261703575 022357 0ustar00alexalex000000 000000 /* * ofonohistory.c * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #define OFONO_API_SUBJECT_TO_CHANGE #include #include #include #include #include #include "../modules/historyshm.h" #define MMGUI_HISTORY_SHM_DB_MESSAGE "\n\t%" G_GUINT64_FORMAT "\n\t%" G_GUINT64_FORMAT "\n\t%s\n\t%s\n\t%s\n\n\n" /*Driver*/ struct _mmgui_history_driver { /*Name*/ gchar *name; /*Reference count*/ guint refcount; /*Shared memory segment*/ gint shmid; mmgui_history_shm_t shmaddr; }; typedef struct _mmgui_history_driver *mmgui_history_driver_t; /*Modem*/ struct _mmgui_history_modem { /*Modem pointer*/ gpointer ofonoid; /*Modem identifier*/ gint identifier; /*Ofono driver name*/ mmgui_history_driver_t driver; }; typedef struct _mmgui_history_modem *mmgui_history_modem_t; /*Plugin internal data structure*/ struct _mmgui_history_data { /*Database*/ GDBM_FILE db; /*Current modems data*/ GHashTable *modems; /*Current drivers data*/ GHashTable *drivers; }; typedef struct _mmgui_history_data *mmgui_history_data_t; /*Global data*/ static mmgui_history_data_t historydata = NULL; guint64 mmgui_history_get_driver_from_key(const gchar *key, const gsize keylen, gchar *buf, gsize buflen) { gchar *drvstr, *timestr; gsize drvlen; guint64 localts; if ((key == NULL) || (keylen == 0) || (buf == NULL) || (buflen == 0)) return 0; drvstr = strchr(key, '@'); if (drvstr == NULL) return 0; timestr = strchr(drvstr+1, '@'); if (timestr == NULL) return 0; drvlen = timestr - drvstr - 1; if (drvlen > buflen) { drvlen = buflen; } localts = atol(timestr+1); memset(buf, 0, buflen); if (strncpy(buf, drvstr+1, drvlen) != NULL) { return localts; } else { return 0; } } gchar *mmgui_history_parse_driver_string(const gchar *path, gint *identifier) { gsize pathlen, driverlen; guint idpos; gchar *drivername; if (path == NULL) return NULL; if ((path[0] != '/') || (strchr(path+1, '_') == NULL)) return NULL; pathlen = strlen(path); driverlen = 0; /*Find delimiter (driver string is in format: /driver_identifier)*/ for (idpos=pathlen; idpos>0; idpos--) { if (path[idpos] == '_') { driverlen = idpos-1; } } if (driverlen > 0) { /*Allocate driver name buffer and copy name*/ drivername = g_try_malloc0(driverlen+1); if (drivername != NULL) { memcpy(drivername, path+1, driverlen); /*Return identifier if needed*/ if (identifier != NULL) { *identifier = atoi(path+idpos+1); } } return drivername; } return NULL; } static void mmgui_history_remove_driver(gpointer data) { mmgui_history_driver_t driver; if (data == NULL) return; driver = (mmgui_history_driver_t)data; if (driver->name != NULL) { g_free(driver->name); } g_free(driver); } static void mmgui_history_remove_modem(gpointer data) { mmgui_history_modem_t modem; if (data == NULL) return; modem = (mmgui_history_modem_t)data; g_free(modem); } static gboolean mmgui_history_create_driver_shm(mmgui_history_driver_t driver) { gchar shmname[64]; mode_t old_umask; if (driver == NULL) return FALSE; /*Shared memory segment name*/ memset(shmname, 0, sizeof(shmname)); snprintf(shmname, sizeof(shmname), MMGUI_HISTORY_SHM_SEGMENT_NAME, driver->name); /*Shared memory object*/ old_umask = umask(0); driver->shmid = shm_open(shmname, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH/*MMGUI_HISTORY_SHM_SEGMENT_PERM*/); umask(old_umask); if (driver->shmid == -1) { driver->shmaddr = NULL; return FALSE; } /*Set shared memory fragment size*/ if (ftruncate(driver->shmid, sizeof(struct _mmgui_history_shm)) == -1 ) { driver->shmaddr = NULL; close(driver->shmid); shm_unlink(shmname); return FALSE; } /*Map shared memory fragment*/ driver->shmaddr = (mmgui_history_shm_t)mmap(0, sizeof(struct _mmgui_history_shm), PROT_WRITE|PROT_READ, MAP_SHARED, driver->shmid, 0); if ((char *)driver->shmaddr == (char*)-1) { driver->shmaddr = NULL; close(driver->shmid); shm_unlink(shmname); return FALSE; } /*Set initial values*/ driver->shmaddr->flags = MMGUI_HISTORY_SHM_FLAGS_NONE; driver->shmaddr->identifier = -1; driver->shmaddr->synctime = 0; return TRUE; } static void mmgui_history_remove_synchronized_messages_foreach(gpointer data, gpointer user_data) { gchar *rmkeystr; datum key; rmkeystr = (gchar *)data; key.dptr = rmkeystr; key.dsize = strlen(rmkeystr); if (gdbm_exists(historydata->db, key)) { if (gdbm_delete(historydata->db, key) == 0) { ofono_debug("[HISTORY PLUGIN] Removed synchronized message: %s", rmkeystr); } } } static void mmgui_history_remove_driver_shm(mmgui_history_driver_t driver) { gchar shmname[64]; GSList *rmkeys; gchar *rmkeystr; datum key; gchar drvstr[128]; guint64 localts; if (driver == NULL) return; /*Shared memory segment name*/ memset(shmname, 0, sizeof(shmname)); snprintf(shmname, sizeof(shmname), MMGUI_HISTORY_SHM_SEGMENT_NAME, driver->name); /*Remove shared memory segment*/ if (driver->shmaddr != NULL) { /*Remove messages if data is synchronized*/ if (driver->shmaddr->flags & MMGUI_HISTORY_SHM_FLAGS_SYNC) { /*Form list of keys to remove*/ rmkeys = NULL; key = gdbm_firstkey(historydata->db); if (key.dptr != NULL) { do { localts = mmgui_history_get_driver_from_key(key.dptr, key.dsize, (gchar *)&drvstr, sizeof(drvstr)); if (localts != 0) { if ((g_str_equal(drvstr, driver->name)) && ((driver->shmaddr->synctime == 0) || ((driver->shmaddr->synctime != 0) && (localts <= driver->shmaddr->synctime)))) { rmkeystr = g_try_malloc0(key.dsize+1); memcpy(rmkeystr, key.dptr, key.dsize); if (rmkeystr != NULL) { rmkeys = g_slist_prepend(rmkeys, rmkeystr); } } } key = gdbm_nextkey(historydata->db, key); } while (key.dptr != NULL); } /*Work with list*/ if (rmkeys != NULL) { /*Remove messages from database*/ g_slist_foreach(rmkeys, mmgui_history_remove_synchronized_messages_foreach, NULL); /*Free list*/ g_slist_foreach(rmkeys, (GFunc)g_free, NULL); /*Reorganize*/ gdbm_reorganize(historydata->db); ofono_debug("[HISTORY PLUGIN] Messages removed for driver: %s", driver->name); } } /*Remove memory segment*/ munmap(driver->shmaddr, sizeof(struct _mmgui_history_shm)); close(driver->shmid); shm_unlink(shmname); } } static int mmgui_history_probe(struct ofono_history_context *context) { const gchar *path; mmgui_history_modem_t modem; mmgui_history_driver_t driver; gchar *drivername; if (context->modem == NULL) return 0; path = ofono_modem_get_path(context->modem); if ((path != NULL) && (historydata != NULL)) { if (historydata->modems != NULL) { modem = g_try_new0(struct _mmgui_history_modem, 1); if (modem != NULL) { /*New modem*/ modem->ofonoid = context->modem; /*Driver*/ drivername = mmgui_history_parse_driver_string(path, &(modem->identifier)); driver = g_hash_table_lookup(historydata->modems, context->modem); if (driver == NULL) { /*New driver*/ driver = g_try_new0(struct _mmgui_history_driver, 1); if (driver != NULL) { driver->name = drivername; driver->refcount = 0; /*Create shared memory segment*/ mmgui_history_create_driver_shm(driver); /*Connect modem with driver*/ modem->driver = driver; driver->refcount++; /*Insert driver into hash table*/ g_hash_table_insert(historydata->drivers, driver->name, driver); } else { modem->driver = NULL; g_free(drivername); } } else { /*Existing driver*/ modem->driver = driver; driver->refcount++; g_free(drivername); } /*Insert modem into hash table*/ g_hash_table_insert(historydata->modems, modem->ofonoid, modem); /*Debug output*/ ofono_debug("[HISTORY PLUGIN] Probe for modem: %p (%s - %i)", modem->ofonoid, modem->driver->name, modem->identifier); } } } return 0; } static void mmgui_history_remove(struct ofono_history_context *context) { mmgui_history_modem_t modem; if (historydata != NULL) { if (historydata->modems != NULL) { modem = g_hash_table_lookup(historydata->modems, context->modem); if (modem != NULL) { /*Modem exists*/ if (modem->driver != NULL) { /*Debug output*/ ofono_debug("[HISTORY PLUGIN] Remove modem: %p (%s)", modem->ofonoid, modem->driver->name); modem->driver->refcount--; if (modem->driver->refcount == 0) { /*Remove shared memory segment*/ mmgui_history_remove_driver_shm(modem->driver); /*Remove driver*/ g_hash_table_remove(historydata->drivers, modem->driver->name); } } /*Remove from hash table*/ g_hash_table_remove(historydata->modems, context->modem); } } } } static void mmgui_history_call_ended(struct ofono_history_context *context, const struct ofono_call *call, time_t start, time_t end) { ofono_debug("[HISTORY PLUGIN] Call Ended on modem: %p", context->modem); } static void mmgui_history_call_missed(struct ofono_history_context *context, const struct ofono_call *call, time_t when) { ofono_debug("[HISTORY PLUGIN] Call Missed on modem: %p", context->modem); } static void mmgui_history_sms_received(struct ofono_history_context *context, const struct ofono_uuid *uuid, const char *from, const struct tm *remote, const struct tm *local, const char *text) { mmgui_history_modem_t modem; datum key, data; const gchar *uuidstr; gchar msgid[128]; gsize msgidlen; guint64 localts, remotets; gchar *messagexml; if (historydata == NULL) return; if (historydata->modems == NULL) return; modem = g_hash_table_lookup(historydata->modems, context->modem); if (modem == NULL) return; if ((modem->driver != NULL) && (historydata->db != NULL)) { /*Test if modem already opened with application - no need to cache message*/ if ((modem->driver->shmaddr->identifier != -1) && (modem->driver->shmaddr->identifier == modem->identifier) && (modem->driver->shmaddr->flags & MMGUI_HISTORY_SHM_FLAGS_SYNC)) { return; } /*Message identifier (uuid@driver@timestamp)*/ uuidstr = ofono_uuid_to_str(uuid); localts = (guint64)time(NULL); memset(msgid, 0, sizeof(msgid)); msgidlen = snprintf(msgid, sizeof(msgid), "%s@%s@%" G_GUINT64_FORMAT, uuidstr, modem->driver->name, localts); key.dptr = (gchar *)msgid; key.dsize = msgidlen; /*Timestamp*/ localts = (guint64)mktime((struct tm *)local); remotets = (guint64)mktime((struct tm *)remote); /*Form XML*/ messagexml = g_strdup_printf(MMGUI_HISTORY_SHM_DB_MESSAGE, localts, remotets, modem->driver->name, from, text); data.dptr = messagexml; data.dsize = strlen(messagexml); /*Save to database*/ if (gdbm_store(historydata->db, key, data, GDBM_REPLACE) == -1) { gdbm_close(historydata->db); g_free(messagexml); return; } /*Synchronize database*/ gdbm_sync(historydata->db); g_free(messagexml); /*Set driver state unsynchronized*/ modem->driver->shmaddr->flags = MMGUI_HISTORY_SHM_FLAGS_NONE; ofono_debug("[HISTORY PLUGIN] Incoming SMS on modem: %p (%s)", context->modem, modem->driver->name); } } static void mmgui_history_sms_send_pending(struct ofono_history_context *context, const struct ofono_uuid *uuid, const char *to, time_t when, const char *text) { char buf[128]; ofono_debug("[HISTORY PLUGIN] Sending SMS on modem: %p", context->modem); ofono_debug("InternalMessageId: %s", ofono_uuid_to_str(uuid)); ofono_debug("To: %s:", to); strftime(buf, 127, "%Y-%m-%dT%H:%M:%S%z", localtime(&when)); buf[127] = '\0'; ofono_debug("Local Time: %s", buf); ofono_debug("Text: %s", text); } static void mmgui_history_sms_send_status(struct ofono_history_context *context, const struct ofono_uuid *uuid, time_t when, enum ofono_history_sms_status s) { char buf[128]; strftime(buf, 127, "%Y-%m-%dT%H:%M:%S%z", localtime(&when)); buf[127] = '\0'; switch (s) { case OFONO_HISTORY_SMS_STATUS_PENDING: break; case OFONO_HISTORY_SMS_STATUS_SUBMITTED: ofono_debug("SMS %s submitted successfully", ofono_uuid_to_str(uuid)); ofono_debug("Submission Time: %s", buf); break; case OFONO_HISTORY_SMS_STATUS_SUBMIT_FAILED: ofono_debug("Sending SMS %s failed", ofono_uuid_to_str(uuid)); ofono_debug("Failure Time: %s", buf); break; case OFONO_HISTORY_SMS_STATUS_SUBMIT_CANCELLED: ofono_debug("Submission of SMS %s was canceled", ofono_uuid_to_str(uuid)); ofono_debug("Cancel time: %s", buf); break; case OFONO_HISTORY_SMS_STATUS_DELIVERED: ofono_debug("SMS delivered, msg_id: %s, time: %s", ofono_uuid_to_str(uuid), buf); break; case OFONO_HISTORY_SMS_STATUS_DELIVER_FAILED: ofono_debug("SMS undeliverable, msg_id: %s, time: %s", ofono_uuid_to_str(uuid), buf); break; default: break; } } static struct ofono_history_driver mmgui_driver = { .name = "MMGUI SMS History", .probe = mmgui_history_probe, .remove = mmgui_history_remove, .call_ended = mmgui_history_call_ended, .call_missed = mmgui_history_call_missed, .sms_received = mmgui_history_sms_received, .sms_send_pending = mmgui_history_sms_send_pending, .sms_send_status = mmgui_history_sms_send_status, }; static int mmgui_history_init(void) { int res; ofono_debug("[HISTORY PLUGIN] Init"); if (historydata == NULL) { /*Global data segment*/ historydata = g_try_new0(struct _mmgui_history_data, 1); if (historydata == NULL) { return -ENOMEM; } /*Create database directory if not exists*/ if (g_mkdir_with_parents(MMGUI_HISTORY_SHM_DB_PATH, MMGUI_HISTORY_SHM_DB_PERM) != 0) { ofono_debug("Error while creating database directory: %s", strerror(errno)); return -ENOENT; } /*Open database*/ historydata->db = gdbm_open(MMGUI_HISTORY_SHM_DB_FILE, 0, GDBM_WRCREAT, MMGUI_HISTORY_SHM_DB_PERM, 0); if (historydata->db == NULL) { ofono_debug("Error while opening database"); return -ENOENT; } /*Create modems hash table*/ historydata->modems = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, mmgui_history_remove_modem); /*Create drivers hash table*/ historydata->drivers = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, mmgui_history_remove_driver); } res = ofono_history_driver_register(&mmgui_driver); return res; } static void mmgui_history_exit(void) { ofono_debug("[HISTORY PLUGIN] Exit"); if (historydata != NULL) { /*Close database*/ if (historydata->db != NULL) { gdbm_sync(historydata->db); gdbm_close(historydata->db); } /*Destroy modems hash table*/ if (historydata->modems != NULL) { g_hash_table_destroy(historydata->modems); } /*Destroy drivers hash table*/ if (historydata->drivers != NULL) { g_hash_table_destroy(historydata->drivers); } /*Free memory segment*/ g_free(historydata); historydata = NULL; } ofono_history_driver_unregister(&mmgui_driver); } OFONO_PLUGIN_DEFINE(mmgui_history, "MMGUI SMS History Plugin", OFONO_VERSION, OFONO_PLUGIN_PRIORITY_DEFAULT, mmgui_history_init, mmgui_history_exit) modem-manager-gui-0.0.19.1/src/connection-editor-window.c000664 001750 001750 00000176232 13261703575 023070 0ustar00alexalex000000 000000 /* * connection-editor-window.c * * Copyright 2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "devices-page.h" #include "connection-editor-window.h" void mmgui_main_connection_editor_apn_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint exlen, i, count; gchar *extext, *result; /*Text that already exists*/ extext = (gchar *)gtk_entry_get_text(entry); exlen = gtk_entry_get_text_length(entry); /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { if ((!isalnum(text[i])) && ((text[i] != '.') || ((text[i] == '.') && ((extext[0] == '.') || (extext[exlen-1] == '.'))))) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_apn_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_apn_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } void mmgui_main_connection_editor_id_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint i, count; gchar *result; /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { if (!isdigit(text[i])) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_id_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_id_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } void mmgui_main_connection_editor_number_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint i, count; gchar *result; /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { if ((!isdigit(text[i])) && (text[i] != '*') && (text[i] != '#')) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_number_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_number_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } void mmgui_main_connection_editor_credentials_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint i, count; gchar *result; /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { if (!isalnum(text[i])) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_credentials_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_credentials_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } void mmgui_main_connection_editor_dns_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint exlen, i, count; gchar *extext, *result; /*Text that already exists*/ extext = (gchar *)gtk_entry_get_text(entry); exlen = gtk_entry_get_text_length(entry); /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { if ((!isdigit(text[i])) && ((text[i] != '.') || ((text[i] == '.') && ((extext[0] == '.') || (extext[exlen-1] == '.'))))) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_dns_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_connection_editor_dns_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } static gboolean mmgui_main_connection_editor_validate_apn(const gchar *apn, gsize len) { gboolean result; if ((apn == NULL) || (len == 0) || (len > 63)) return FALSE; result = TRUE; /*APN must not be started and ended with '.' and must not contain '*'*/ if ((apn[0] == '.') || (apn[len-1] == '.') || (strchr(apn, '*') != NULL)) { result = FALSE; } /*APN must not be started with words 'rnc', 'rac', 'lac' and 'sgsn'*/ if ((result) && (len > 3)) { if ((strncmp(apn, "rnc", 3) == 0) || (strncmp(apn, "rac", 3) == 0) || (strncmp(apn, "lac", 3) == 0) || (strncmp(apn, "sgsn", 4) == 0)) { result = FALSE; } } /*APN must not be ended with word '.gprs'*/ if ((result) && (len > 5)) { if (strncmp(apn + len - 5, ".gprs", 5) == 0) { result = FALSE; } } return result; } static gboolean mmgui_main_connection_editor_validate_ip(const gchar *ip, gsize len) { GInetAddress *address; gboolean result; if ((ip == NULL) || (len == 0)) return FALSE; result = FALSE; /*Address validated with Glib function*/ address = g_inet_address_new_from_string(ip); if (address != NULL) { result = TRUE; g_object_unref(address); } return result; } static void mmgui_main_connection_editor_handle_simple_parameter_change(mmgui_application_t mmguiapp, GtkEntry *entry, guint columnid) { GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean new, changed, removed; gchar *text, *name, *caption; if ((mmguiapp == NULL) || (entry == NULL)) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (selection != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { /*Get current parameter value*/ text = (gchar *)gtk_entry_get_text(entry); /*Update parameter value*/ if ((new) || (changed)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, columnid, text, -1); } else { caption = g_strdup_printf("%s", name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, columnid, text, -1); g_free(caption); } } /*Free resources*/ if (name != NULL) { g_free(name); } } } } static void mmgui_main_connection_editor_handle_validated_parameter_change(mmgui_application_t mmguiapp, GtkEntry *entry, guint columnid, const gchar *paramname, gboolean (*validator)(const gchar *parameter, gsize len)) { GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean new, changed, removed; gint len; gchar *text, *name, *caption, *message; if ((mmguiapp == NULL) || (entry == NULL) || (validator == NULL)) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (selection != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { text = (gchar *)gtk_entry_get_text(entry); len = gtk_entry_get_text_length(entry); if (len > 0) { if (validator((const gchar *)text, len)) { /*Valid parameter*/ if ((new) || (changed)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, columnid, text, -1); } else { caption = g_strdup_printf("%s", name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, columnid, text, -1); g_free(caption); } /*Hide warning*/ #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(entry, GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(entry, GTK_ENTRY_ICON_SECONDARY, NULL); } else { /*Show warning*/ #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(entry, GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); #else gtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CAPS_LOCK_WARNING); #endif message = g_strdup_printf(_("%s is not valid\nIt won't be saved and used on connection initialization"), paramname); gtk_entry_set_icon_tooltip_markup(entry, GTK_ENTRY_ICON_SECONDARY, message); g_free(message); } } else { /*Empty IP address*/ if ((new) || (changed)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, columnid, text, -1); } else { caption = g_strdup_printf("%s", name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, columnid, text, -1); g_free(caption); } /*Pretend it is valid*/ #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(entry, GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(entry, GTK_ENTRY_ICON_SECONDARY, NULL); } /*Free resources*/ if (name != NULL) { g_free(name); } } } } } void mmgui_main_connection_editor_name_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean new, changed, removed; gint len; gchar *text, *name, *caption; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (selection != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { text = (gchar *)gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->connnameentry)); len = gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->connnameentry)); if (new) { if (len > 0) { caption = g_strdup_printf("%s", text); } else { caption = g_strdup_printf("%s", _("Unnamed connection")); text = NULL; } gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, text, -1); } else { if (len > 0) { caption = g_strdup_printf("%s", text); } else { caption = g_strdup_printf("%s", _("Unnamed connection")); text = NULL; } gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, text, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, -1); } if (caption != NULL) { g_free(caption); } if (name != NULL) { g_free(name); } } } } } void mmgui_main_connection_editor_apn_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_validated_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->connnameapnentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, _("APN name"), mmgui_main_connection_editor_validate_apn); } void mmgui_main_connection_editor_home_only_toggled_signal(GtkToggleButton *togglebutton, gpointer data) { mmgui_application_t mmguiapp; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean new, changed, removed; gboolean value; gchar *name, *caption; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (selection != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { /*Get current parameter value*/ value = gtk_toggle_button_get_active(togglebutton); /*Update parameter value*/ if ((new) || (changed)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, !value, -1); } else { caption = g_strdup_printf("%s", name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, !value, -1); g_free(caption); } } /*Free resources*/ if (name != NULL) { g_free(name); } } } } void mmgui_main_connection_editor_network_id_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean new, changed, removed; guint value; gchar *name, *caption; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (selection != NULL) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { /*Get current parameter value*/ value = (guint)atoi(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->connnetidspinbutton))); /*Update parameter value*/ if ((new) || (changed)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, value, -1); } else { caption = g_strdup_printf("%s", name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, value, -1); g_free(caption); } } /*Free resources*/ if (name != NULL) { g_free(name); } } } } void mmgui_main_connection_editor_number_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_simple_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->connauthnumberentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER); } void mmgui_main_connection_editor_username_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_simple_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->connauthusernameentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME); } void mmgui_main_connection_editor_password_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_simple_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->connauthpassentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD); } void mmgui_main_connection_editor_dns1_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_validated_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->conndns1entry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, _("First DNS server IP address"), mmgui_main_connection_editor_validate_ip); } void mmgui_main_connection_editor_dns2_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_handle_validated_parameter_change(mmguiapp, GTK_ENTRY(mmguiapp->window->conndns2entry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, _("Second DNS server IP address"), mmgui_main_connection_editor_validate_ip); } void mmgui_main_connection_editor_add_button_clicked_signal(GtkToolButton *toolbutton, gpointer data) { mmgui_application_t mmguiapp; mmgui_providers_db_entry_t curentry, recentry; GSList *providers, *piterator; gchar *caption; gint networkid, mcc, mnc, mul; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; guint type; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (mmguiapp->core->device != NULL) { type = mmguiapp->core->device->type; } else { type = MMGUI_DEVICE_TYPE_GSM; } if (model != NULL) { gtk_list_store_append(GTK_LIST_STORE(model), &iter); if (type == MMGUI_DEVICE_TYPE_GSM) { /*Find recommended provider database entry*/ recentry = NULL; if (mmguicore_devices_get_registered(mmguiapp->core)) { providers = mmgui_providers_get_list(mmguiapp->providersdb); if (providers != NULL) { /*Convert operator code to compatible network ID*/ mcc = (mmguiapp->core->device->operatorcode & 0xffff0000) >> 16; mnc = mmguiapp->core->device->operatorcode & 0x0000ffff; mul = 1; while (mul <= mnc) { mul *= 10; } if (mnc < 10) { networkid = mcc * mul * 10 + mnc; } else { networkid = mcc * mul + mnc; } /*Find provider with same network ID*/ for (piterator = providers; piterator != NULL; piterator = piterator->next) { curentry = (mmgui_providers_db_entry_t)piterator->data; if ((curentry->tech == MMGUI_DEVICE_TYPE_GSM) && (curentry->usage == MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET)) { if (mmgui_providers_provider_get_network_id(curentry) == networkid) { recentry = curentry; break; } } } } } /*Add connection*/ if (recentry != NULL) { caption = g_strdup_printf("%s", recentry->name); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, recentry->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, "*99#", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, recentry->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, recentry->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, recentry->apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, mmgui_providers_provider_get_network_id(recentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, recentry->tech, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, recentry->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, recentry->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); g_free(caption); } else { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, "New connection", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, "New connection", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, "*99#", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, "internet", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, "internet", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, "internet", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, 10000, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } } else if (type == MMGUI_DEVICE_TYPE_CDMA) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, "New connection", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, "New connection", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, "*777#", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, "internet", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, "internet", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } /*Select it*/ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); gtk_tree_selection_select_iter(selection, &iter); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->contreeview), "cursor-changed", NULL); } } void mmgui_main_connection_editor_remove_button_clicked_signal(GtkToolButton *toolbutton, gpointer data) { mmgui_application_t mmguiapp; GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; gchar *name, *caption; gboolean removed; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if ((selection != NULL) && (model != NULL)) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (!removed) { /*Update caption*/ if (name != NULL) { caption = g_strdup_printf("%s", name); g_free(name); } else { caption = g_strdup_printf("%s", _("Unnamed connection")); } gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, TRUE, -1); /*Update control panel*/ gtk_widget_set_sensitive(mmguiapp->window->connnameentry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connnameapnentry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connnetroamingcheckbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connnetidspinbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connauthnumberentry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connauthusernameentry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connauthpassentry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->conndns1entry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->conndns2entry, FALSE); gtk_widget_set_sensitive(mmguiapp->window->connremovetoolbutton, FALSE); /*Free resources*/ g_free(caption); } } } } static void mmgui_main_connection_editor_add_db_entry(GtkMenuItem *menuitem, gpointer data) { mmgui_application_t mmguiapp; mmgui_providers_db_entry_t dbentry; GtkTreeIter iter; GtkTreeModel *model; gchar *caption; GtkTreeSelection *selection; mmguiapp = (mmgui_application_t)data; dbentry = (mmgui_providers_db_entry_t)g_object_get_data(G_OBJECT(menuitem), "dbentry"); if ((mmguiapp == NULL) || (dbentry == NULL)) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (model != NULL) { /*Create caption*/ caption = g_strdup_printf("%s", dbentry->name); /*Add connection*/ gtk_list_store_append(GTK_LIST_STORE(model), &iter); if (dbentry->tech == MMGUI_DEVICE_TYPE_GSM) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, dbentry->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, "*99#", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, dbentry->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, dbentry->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, dbentry->apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, mmgui_providers_provider_get_network_id(dbentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, dbentry->tech, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, dbentry->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, dbentry->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } else if (dbentry->tech == MMGUI_DEVICE_TYPE_CDMA) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, caption, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, dbentry->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, NULL, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, "*777#", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, dbentry->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, dbentry->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, mmgui_providers_provider_get_network_id(dbentry), MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, dbentry->tech, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, dbentry->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, dbentry->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, TRUE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } /*Select it*/ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); gtk_tree_selection_select_iter(selection, &iter); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->contreeview), "cursor-changed", NULL); /*Free resources*/ g_free(caption); } } static void mmgui_main_connection_editor_window_forget_changes(mmgui_application_t mmguiapp) { mmguiconn_t connection; GtkTreeModel *model; GtkTreeIter iter; GSList *rmlist, *rmiter, *connlist, *conniter; GtkTreePath *rmpath; GtkTreeRowReference *rmref; gboolean new, changed, removed; gchar *uuid; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); connlist = mmguicore_connections_get_list(mmguiapp->core); rmlist = NULL; if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { /*First get UUID and flags*/ gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, &uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); if (new) { /*Add reference to row for deletion*/ rmpath = gtk_tree_model_get_path(model, &iter); rmref = gtk_tree_row_reference_new(model, rmpath); rmlist = g_slist_prepend(rmlist, rmref); gtk_tree_path_free(rmpath); } else if ((changed) || (removed)) { if ((uuid != NULL) && (connlist != NULL)) { for (conniter = connlist; conniter != NULL; conniter = conniter->next) { connection = (mmguiconn_t)conniter->data; if (g_strcmp0(connection->uuid, uuid) == 0) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, connection->number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, connection->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, connection->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, connection->apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, connection->networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, connection->homeonly, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, connection->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, connection->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); break; } } } } /*Free UUID*/ if (uuid != NULL) { g_free(uuid); } } while (gtk_tree_model_iter_next(model, &iter)); } /*Cleanup new rows*/ if (rmlist != NULL) { for (rmiter = rmlist; rmiter != NULL; rmiter = rmiter->next) { rmpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)rmiter->data); if (rmpath != NULL) { if (gtk_tree_model_get_iter(model, &iter, rmpath)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } } } g_slist_foreach(rmlist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(rmlist); } } } static void mmgui_main_connection_editor_window_save_changes(mmgui_application_t mmguiapp) { mmguiconn_t connection; GtkTreeModel *model; GtkTreeIter iter; GSList *rmlist, *rmiter; GtkTreePath *rmpath; GtkTreeRowReference *rmref; gboolean new, changed, removed, protected; gchar *name, *uuid, *activeuuid, *number, *username, *password, *apn, *dns1, *dns2; guint networkid, type; gboolean homeonly; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); rmlist = NULL; if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { /*First get UUID and flags*/ gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, &uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); /*Protected flag*/ protected = FALSE; if (uuid != NULL) { activeuuid = mmguicore_connections_get_active_uuid(mmguiapp->core); if (activeuuid != NULL) { protected = (g_strcmp0(uuid, activeuuid) == 0); g_free(activeuuid); } } /*Available actions*/ if (new) { /*Get connection parameters*/ gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, &number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, &username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, &password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, &apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, &networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, &type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, &homeonly, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, &dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, &dns2, -1); if (name == NULL) { name = g_strdup(_("Unnamed connection")); } /*Add new connection (object must be returned)*/ connection = mmguicore_connections_add(mmguiapp->core, name, number, username, password, apn, networkid, type, homeonly, dns1, dns2); if (connection != NULL) { /*Add connection to list on devices page*/ mmgui_main_connection_add_to_list(mmguiapp, connection->name, connection->uuid, connection->type, NULL); /*Add UUID, change caption*/ gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, connection->uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } /*Free resources*/ if (name != NULL) { g_free(name); } if (number != NULL) { g_free(number); } if (username != NULL) { g_free(username); } if (password != NULL) { g_free(password); } if (apn != NULL) { g_free(apn); } if (dns1 != NULL) { g_free(dns1); } if (dns2 != NULL) { g_free(dns2); } } else if (changed) { if (!protected) { /*Get connection parameters*/ gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, &number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, &username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, &password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, &apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, &networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, &homeonly, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, &dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, &dns2, -1); if (name == NULL) { name = g_strdup(_("Unnamed connection")); } /*Update connection*/ mmguicore_connections_update(mmguiapp->core, uuid, name, number, username, password, apn, networkid, homeonly, dns1, dns2); /*Update connection name on devices page*/ mmgui_main_connection_update_name_in_list(mmguiapp, name, uuid); /*Change caption and free resources*/ gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); if (name != NULL) { g_free(name); } if (number != NULL) { g_free(number); } if (username != NULL) { g_free(username); } if (password != NULL) { g_free(password); } if (apn != NULL) { g_free(apn); } if (dns1 != NULL) { g_free(dns1); } if (dns2 != NULL) { g_free(dns2); } } } else if (removed) { if (!protected) { /*Add reference to row for deletion*/ rmpath = gtk_tree_model_get_path(model, &iter); rmref = gtk_tree_row_reference_new(model, rmpath); rmlist = g_slist_prepend(rmlist, rmref); gtk_tree_path_free(rmpath); /*Delete connection with known UUID*/ if (uuid != NULL) { mmguicore_connections_remove(mmguiapp->core, uuid); mmgui_main_connection_remove_from_list(mmguiapp, uuid); } } } /*Free UUID*/ if (uuid != NULL) { g_free(uuid); } } while (gtk_tree_model_iter_next(model, &iter)); } /*Cleanup removed rows*/ if (rmlist != NULL) { for (rmiter = rmlist; rmiter != NULL; rmiter = rmiter->next) { rmpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)rmiter->data); if (rmpath != NULL) { if (gtk_tree_model_get_iter(model, &iter, rmpath)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } } } g_slist_foreach(rmlist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(rmlist); } } } static gint mmgui_main_connection_editor_provider_menu_compare_entries(gconstpointer a, gconstpointer b) { mmgui_providers_db_entry_t aentry, bentry; gchar *acasefold, *bcasefold; gint res; if ((a == NULL) || (b == NULL)) return 0; aentry = (mmgui_providers_db_entry_t)a; bentry = (mmgui_providers_db_entry_t)b; acasefold = g_utf8_casefold(mmgui_providers_provider_get_country_name(aentry), -1); bcasefold = g_utf8_casefold(mmgui_providers_provider_get_country_name(bentry), -1); res = g_utf8_collate(acasefold, bcasefold); g_free(acasefold); g_free(bcasefold); return res; } void mmgui_main_connection_editor_window_open(mmgui_application_t mmguiapp) { gint response; gchar *countryid, *langenv; GSList *providers, *piterator, *providerlist; GList *countries, *citerator; mmgui_providers_db_entry_t dbentry; GHashTable *countryhash; GtkWidget *submenu; GtkWidget *cmenuitem, *pmenuitem; GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; gchar *curuuid, *uuid; if (mmguiapp == NULL) return; if (mmguiapp->core->device == NULL) return; if (mmguiapp->window->providersmenu == NULL) { /*Fill menu with providers names*/ providers = mmgui_providers_get_list(mmguiapp->providersdb); if (providers != NULL) { /*Get current country ID if possible*/ countryid = NULL; langenv = getenv("LANG"); if (langenv != NULL) { countryid = nl_langinfo(_NL_ADDRESS_COUNTRY_AB2); } /*Create menu*/ mmguiapp->window->providersmenu = gtk_menu_new(); /*Sort operators by countries*/ countryhash = g_hash_table_new(g_str_hash, g_str_equal); for (piterator = providers; piterator != NULL; piterator = piterator->next) { dbentry = (mmgui_providers_db_entry_t)piterator->data; if (dbentry->usage == MMGUI_PROVIDERS_DB_ENTRY_USAGE_INTERNET) { providerlist = (GSList *)g_hash_table_lookup(countryhash, dbentry->country); providerlist = g_slist_prepend(providerlist, dbentry); g_hash_table_insert(countryhash, dbentry->country, providerlist); } } /*Sort country names alphabetically*/ countries = g_list_sort(g_hash_table_get_keys(countryhash), mmgui_main_connection_editor_provider_menu_compare_entries); /*Build providers menu*/ for (citerator = countries; citerator != NULL; citerator = citerator->next) { if (g_ascii_strcasecmp((gchar *)citerator->data, countryid) == 0) { providerlist = (GSList *)g_hash_table_lookup(countryhash, (gchar *)citerator->data); /*Separator between suggested provider entries and countries submenus*/ pmenuitem = gtk_separator_menu_item_new(); gtk_menu_shell_prepend(GTK_MENU_SHELL(mmguiapp->window->providersmenu), pmenuitem); /*Providers*/ for (piterator = providerlist; piterator != NULL; piterator = piterator->next) { dbentry = (mmgui_providers_db_entry_t)piterator->data; pmenuitem = gtk_menu_item_new_with_label(dbentry->name); gtk_menu_shell_prepend(GTK_MENU_SHELL(mmguiapp->window->providersmenu), pmenuitem); g_object_set_data(G_OBJECT(pmenuitem), "dbentry", dbentry); g_signal_connect(G_OBJECT(pmenuitem), "activate", G_CALLBACK(mmgui_main_connection_editor_add_db_entry), mmguiapp); } } else { providerlist = g_slist_reverse((GSList *)g_hash_table_lookup(countryhash, (gchar *)citerator->data)); cmenuitem = gtk_menu_item_new_with_label(mmgui_providers_provider_get_country_name((mmgui_providers_db_entry_t)providerlist->data)); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->providersmenu), cmenuitem); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(cmenuitem), submenu); for (piterator = providerlist; piterator != NULL; piterator = piterator->next) { dbentry = (mmgui_providers_db_entry_t)piterator->data; pmenuitem = gtk_menu_item_new_with_label(dbentry->name); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), pmenuitem); g_object_set_data(G_OBJECT(pmenuitem), "dbentry", dbentry); g_signal_connect(G_OBJECT(pmenuitem), "activate", G_CALLBACK(mmgui_main_connection_editor_add_db_entry), mmguiapp); } } /*Free providers list*/ g_slist_free(providerlist); } /*Free resources*/ g_list_free(countries); g_hash_table_destroy(countryhash); /*Add menu to toolbar*/ gtk_widget_show_all(mmguiapp->window->providersmenu); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(mmguiapp->window->connaddtoolbutton), GTK_WIDGET(mmguiapp->window->providersmenu)); } } /*Prepare controls*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnameentry), G_CALLBACK(mmgui_main_connection_editor_name_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameentry), ""); gtk_widget_set_sensitive(mmguiapp->window->connnameentry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnameentry), G_CALLBACK(mmgui_main_connection_editor_name_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameapnentry), ""); gtk_widget_set_sensitive(mmguiapp->window->connnameapnentry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), mmguiapp); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->connnetroamingcheckbutton), FALSE); gtk_widget_set_sensitive(mmguiapp->window->connnetroamingcheckbutton, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), mmguiapp); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mmguiapp->window->connnetidspinbutton), 0.0); gtk_widget_set_sensitive(mmguiapp->window->connnetidspinbutton, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthnumberentry), G_CALLBACK(mmgui_main_connection_editor_number_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthnumberentry), ""); gtk_widget_set_sensitive(mmguiapp->window->connauthnumberentry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthnumberentry), G_CALLBACK(mmgui_main_connection_editor_number_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthusernameentry), G_CALLBACK(mmgui_main_connection_editor_username_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthusernameentry), ""); gtk_widget_set_sensitive(mmguiapp->window->connauthusernameentry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthusernameentry), G_CALLBACK(mmgui_main_connection_editor_username_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthpassentry), G_CALLBACK(mmgui_main_connection_editor_password_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthpassentry), ""); gtk_widget_set_sensitive(mmguiapp->window->connauthpassentry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthpassentry), G_CALLBACK(mmgui_main_connection_editor_password_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->conndns1entry), G_CALLBACK(mmgui_main_connection_editor_dns1_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns1entry), ""); gtk_widget_set_sensitive(mmguiapp->window->conndns1entry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->conndns1entry), G_CALLBACK(mmgui_main_connection_editor_dns1_changed_signal), mmguiapp); g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->conndns2entry), G_CALLBACK(mmgui_main_connection_editor_dns2_changed_signal), mmguiapp); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns2entry), ""); gtk_widget_set_sensitive(mmguiapp->window->conndns2entry, FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->conndns2entry), G_CALLBACK(mmgui_main_connection_editor_dns2_changed_signal), mmguiapp); /*Select active connection*/ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); uuid = mmgui_main_connection_get_active_uuid(mmguiapp); if (uuid != NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if ((selection != NULL) && (model != NULL)) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, &curuuid, -1); if (curuuid != NULL) { if (g_strcmp0(uuid, curuuid) == 0) { gtk_tree_selection_select_iter(selection, &iter); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->contreeview), "cursor-changed", mmguiapp); g_free(curuuid); break; } g_free(curuuid); } } while (gtk_tree_model_iter_next(model, &iter)); } } g_free(uuid); } /*Show dialog window*/ response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->conneditdialog)); if (response == GTK_RESPONSE_OK) { mmgui_main_connection_editor_window_save_changes(mmguiapp); } else { mmgui_main_connection_editor_window_forget_changes(mmguiapp); } gtk_widget_hide(mmguiapp->window->conneditdialog); } static void mmgui_main_connection_editor_window_list_cursor_changed_signal(GtkTreeView *tree_view, gpointer data) { mmgui_application_t mmguiapp; GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; gchar *name, *uuid, *activeuuid, *number, *username, *password, *apn, *dns1, *dns2; guint networkid, type; gboolean homeonly, new, changed, removed, protected; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contreeview)); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if ((selection != NULL) && (model != NULL)) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, &name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, &uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, &number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, &username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, &password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, &apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, &networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, &type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, &homeonly, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, &dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, &dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, &new, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, &changed, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, &removed, -1); /*Protected flag*/ protected = FALSE; if (uuid != NULL) { activeuuid = mmguicore_connections_get_active_uuid(mmguiapp->core); if (activeuuid != NULL) { protected = (g_strcmp0(uuid, activeuuid) == 0); g_free(activeuuid); } g_free(uuid); } /*Name*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnameentry), G_CALLBACK(mmgui_main_connection_editor_name_changed_signal), data); if (name != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameentry), name); g_free(name); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameentry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnameentry), G_CALLBACK(mmgui_main_connection_editor_name_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnameentry, !(removed || protected)); /*APN*/ if (type == MMGUI_DEVICE_TYPE_GSM) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), data); if (apn != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameapnentry), apn); g_free(apn); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameapnentry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnameapnentry, !(removed || protected)); #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->connnameapnentry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->connnameapnentry), GTK_ENTRY_ICON_SECONDARY, NULL); #endif } else if (type == MMGUI_DEVICE_TYPE_CDMA) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), data); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connnameapnentry), ""); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnameapnentry), G_CALLBACK(mmgui_main_connection_editor_apn_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnameapnentry, FALSE); } /*Home only*/ if (type == MMGUI_DEVICE_TYPE_GSM) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), data); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->connnetroamingcheckbutton), !homeonly); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnetroamingcheckbutton, !(removed || protected)); } else if (type == MMGUI_DEVICE_TYPE_CDMA) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), data); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mmguiapp->window->connnetroamingcheckbutton), FALSE); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetroamingcheckbutton), G_CALLBACK(mmgui_main_connection_editor_home_only_toggled_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnetroamingcheckbutton, FALSE); } /*Network id*/ if (type == MMGUI_DEVICE_TYPE_GSM) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), data); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mmguiapp->window->connnetidspinbutton), (gdouble)networkid); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnetidspinbutton, !(removed || protected)); } else if (type == MMGUI_DEVICE_TYPE_CDMA) { g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), data); gtk_spin_button_set_value(GTK_SPIN_BUTTON(mmguiapp->window->connnetidspinbutton), (gdouble)10000); g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connnetidspinbutton), G_CALLBACK(mmgui_main_connection_editor_network_id_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connnetidspinbutton, FALSE); } /*Number*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthnumberentry), G_CALLBACK(mmgui_main_connection_editor_number_changed_signal), data); if (number != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthnumberentry), number); g_free(number); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthnumberentry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthnumberentry), G_CALLBACK(mmgui_main_connection_editor_number_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connauthnumberentry, !(removed || protected)); /*Username*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthusernameentry), G_CALLBACK(mmgui_main_connection_editor_username_changed_signal), data); if (username != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthusernameentry), username); g_free(username); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthusernameentry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthusernameentry), G_CALLBACK(mmgui_main_connection_editor_username_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connauthusernameentry, !(removed || protected)); /*Password*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->connauthpassentry), G_CALLBACK(mmgui_main_connection_editor_password_changed_signal), data); if (password != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthpassentry), password); g_free(password); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->connauthpassentry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->connauthpassentry), G_CALLBACK(mmgui_main_connection_editor_password_changed_signal), data); gtk_widget_set_sensitive(mmguiapp->window->connauthpassentry, !(removed || protected)); /*DNS 1*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->conndns1entry), G_CALLBACK(mmgui_main_connection_editor_dns1_changed_signal), data); if (dns1 != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns1entry), dns1); g_free(dns1); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns1entry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->conndns1entry), G_CALLBACK(mmgui_main_connection_editor_dns1_changed_signal), data); #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->conndns1entry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->conndns1entry), GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->conndns1entry), GTK_ENTRY_ICON_SECONDARY, NULL); gtk_widget_set_sensitive(mmguiapp->window->conndns1entry, !(removed || protected)); /*DNS 2*/ g_signal_handlers_block_by_func(G_OBJECT(mmguiapp->window->conndns2entry), G_CALLBACK(mmgui_main_connection_editor_dns2_changed_signal), data); if (dns2 != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns2entry), dns2); g_free(dns2); } else { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->conndns2entry), ""); } g_signal_handlers_unblock_by_func(G_OBJECT(mmguiapp->window->conndns2entry), G_CALLBACK(mmgui_main_connection_editor_dns2_changed_signal), data); #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->conndns2entry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->conndns2entry), GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->conndns2entry), GTK_ENTRY_ICON_SECONDARY, NULL); gtk_widget_set_sensitive(mmguiapp->window->conndns2entry, !(removed || protected)); /*Remove tool button*/ gtk_widget_set_sensitive(mmguiapp->window->connremovetoolbutton, !(removed || protected)); } } } void mmgui_main_connection_editor_window_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Connection"), renderer, "markup", MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contreeview), column); store = gtk_list_store_new(MMGUI_CONNECTION_EDITOR_WINDOW_LIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contreeview), GTK_TREE_MODEL(store)); g_object_unref(store); g_signal_connect(G_OBJECT(mmguiapp->window->contreeview), "cursor-changed", G_CALLBACK(mmgui_main_connection_editor_window_list_cursor_changed_signal), mmguiapp); mmguiapp->window->providersmenu = NULL; } static void mmgui_main_connection_editor_window_add_to_list(mmgui_application_t mmguiapp, mmguiconn_t connection, GtkTreeModel *model) { GtkTreeIter iter; if ((mmguiapp == NULL) || (connection == NULL)) return; if (mmguiapp->window == NULL) return; if (model == NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); } gtk_list_store_append(GTK_LIST_STORE(model), &iter); if (connection->type == MMGUI_DEVICE_TYPE_GSM) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, connection->uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, connection->number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, connection->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, connection->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_APN, connection->apn, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, connection->networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, connection->type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_HOME_ONLY, connection->homeonly, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, connection->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, connection->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } else if (connection->type == MMGUI_DEVICE_TYPE_CDMA) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CAPTION, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NAME, connection->name, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_UUID, connection->uuid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NUMBER, connection->number, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_USERNAME, connection->username, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_PASSWORD, connection->password, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NETWORK_ID, connection->networkid, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_TYPE, connection->type, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS1, connection->dns1, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_DNS2, connection->dns2, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_NEW, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_CHANGED, FALSE, MMGUI_CONNECTION_EDITOR_WINDOW_LIST_REMOVED, FALSE, -1); } } void mmgui_main_connection_editor_window_list_fill(mmgui_application_t mmguiapp) { GtkTreeModel *model; GSList *connections; GSList *iterator; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contreeview)); if (model != NULL) { g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contreeview), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); connections = mmguicore_connections_get_list(mmguiapp->core); if (connections != NULL) { /*Add connection entries to list*/ for (iterator=connections; iterator; iterator=iterator->next) { mmgui_main_connection_editor_window_add_to_list(mmguiapp, (mmguiconn_t)iterator->data, model); } } gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contreeview), model); g_object_unref(model); } } modem-manager-gui-0.0.19.1/man/uz@Latn/uz@Latn.po000664 001750 001750 00000007256 13261703575 021251 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Umidjon Almasov , 2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Latin) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Latn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Latn\n" "Plural-Forms: nplurals=1; plural=0;\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Foydalanuvchi buyruqlari" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "NOMI" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - Modem Manager demoni uchun oddiy grafik interfeys." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "" #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "TAVSIFI" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "MUALLIF" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "XATOLAR HAQIDA XABAR BERISH" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "MUALLIFLIK HUQUQI" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/appdata/pl_PL.po000664 001750 001750 00000007473 13261703575 020165 0ustar00alexalex000000 000000 # # Translators: # Wiktor Jezioro , 2015,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (Poland) (http://www.transifex.com/ethereal/modem-manager-gui/language/pl_PL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl_PL\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Kontrola EDGE / 3G / 4G - specyficznych funkcji modemu szerokopasmowego" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Możesz sprawdzić saldo karty SIM, wysyłać i odbierać wiadomości SMS, bez jakichkolwiek ograniczeń kontrolować ruch mobilny i więcej za pomocą prorgamu Modem Manager GUI." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Aktualne funkcje:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Wysyłanie i odbieranie wiadomości SMS i przechowywanie w bazie" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Inicjowanie żądania USSD i przeczytanie odpowiedzi (również za pomocą sesji interaktywnych)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Wyświetlanie informacji o urządzeniu: nazwę operatora, tryb urządzenia, IMEI, IMSI, poziom sygnału" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Skanuj dostępne sieci mobilne" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Wyświetl statystyki ruchu sieci mobilnych i ustaw limity" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Należy pamiętać, że niektóre funkcje mogą być niedostępne ze względu na ograniczenia różnych usług systemowych, a nawet różne wersje usługi systemowej w użyciu." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/appdata/000775 001750 001750 00000000000 13261711676 016605 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/meson.build000664 001750 001750 00000000350 13261703575 020105 0ustar00alexalex000000 000000 helper = join_paths(meson.source_root(), 'man', 'manhelper.py') install_man('modem-manager-gui.1') subdir('de') subdir('id') subdir('pl') subdir('pt_BR') subdir('ru') subdir('uk') subdir('tr') subdir('uz@Cyrl') subdir('uz@Latn') modem-manager-gui-0.0.19.1/packages/debian/000775 001750 001750 00000000000 13261745303 020165 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/figures/000775 001750 001750 00000000000 13261703575 017750 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/tr/tr.po000664 001750 001750 00000062525 13261703575 017546 0ustar00alexalex000000 000000 # # Translators: # Batuhan Demir , 2015 # Ozancan Karataş , 2015 # ReYHa , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: ReYHa \n" "Language-Team: Turkish (http://www.transifex.com/ethereal/modem-manager-gui/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Modem Manager GUI hakkında bilgi." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "Modem Manager GUI hakkında" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Kod sağlama" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Çeviriler" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Modem Manager GUI'ya yardım etmek için" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Kullanılabilir mobil ağları tarayın" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "Mobil trafik istatistiklerini görüntüleyin ve sınırlamalar uygulayın" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Kullanım" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Projeye katkı" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Yasal bilgi" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Lisans" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Bu çalışma CreativeCommons Attribution-Share Alike 3.0 Unported lisansı altında dağıtılmıştır." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Özgürsünüz" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Paylaşmakta" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Karıştır" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Çalışmayı uyarla" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Hatalar raporu" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Konfigürasyon" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Kişi listeleri" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Mobil ağlar hakkında bilgi al" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Ağ bilgisi" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modemler" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Ulaşılabilir ağları ara" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Ağ Ara" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/resources/pixmaps/000775 001750 001750 00000000000 13261703575 020665 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/uz@Cyrl/meson.build000664 001750 001750 00000000363 13261703575 021501 0ustar00alexalex000000 000000 custom_target('man-uz@Cyrl', input: 'uz@Cyrl.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'uz@Cyrl', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/man/de/de.po000664 001750 001750 00000010537 13261703575 017273 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Mario Blättermann , 2013-2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: German (http://www.transifex.com/ethereal/modem-manager-gui/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Benutzer-Befehle" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "BEZEICHNUNG" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - Einfache grafische Oberfläche für den ModemManager-Daemon." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "ÜBERSICHT" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m Modul ] [ -c Modul ] [ -l ] …" #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "BESCHREIBUNG" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Dieses Programm ist eine einfache grafische Benutzeroberfläche für Modem Manager 0.6/0.7, Wader- und oFono-Daemons, welche auf die DBus-Schnittstelle aufsetzt." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "öffnet beim Start kein Fenster." #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "verwendet das angegebene Module zur Modemverwaltung." #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "verwendet das angegebene Modul zur Verbindungsverwaltung." #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "listet alle verfügbaren Module auf und beendet das Programm." #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "AUTOR" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Geschrieben von Alex. Im Informationsdialog finden Sie eine Liste aller Mitwirkenden." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "FEHLER MELDEN" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "COPYRIGHT" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Dies ist freie Software. Sie können Kopien davon unter den Bedingungen der GNU General Public License Ehttp://www.gnu.org/licenses/gpl.htmlE weitergeben." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "SIEHE AUCH" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/resources/pixmaps/signal-25.png000664 001750 001750 00000006113 13261703575 023075 0ustar00alexalex000000 000000 PNG  IHDR}\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FvIDATxڴN0FNt(IxF^ /R66!P<e*w3:NI(7E'"1@5Mgҕz}(&IoSYaðױ%IdZZʽEd8k=`V@f3b^cY:杊 (SR+)1T(2AAj `?Th@`0HdM?݃ g8PT()]=촞Q\#.@ktޗ)AA0zK)0@ɔ}GH Activate your modem devices. Mario Blättermann mario.blaettermann@gmail.com

Creative Commons Share Alike 3.0

Modems

After starting Modem Manager GUI, the following window will be displayed:

The startup window of Modem Manager GUI.

You can see the modem devices available on your system. Click on one of the entries to use that device.

After clicking on a device, it might be needed to activate it first, if it was not otherwise activated on your system. Modem Manager GUI will ask you for confirmation in that case.

Be patient after connecting a removable device such as an USB stick or PCMCIA card. It may take a while until the system detects it.

You cannot use multiple modems at the same time. If you click on another entry in the device list, the previously activated one will be disabled.

modem-manager-gui-0.0.19.1/man/uz@Cyrl/uz@Cyrl.po000664 001750 001750 00000007540 13261703575 021273 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Umidjon Almasov , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Cyrillic) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Cyrl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Cyrl\n" "Plural-Forms: nplurals=1; plural=0;\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Фойдаланувчи буйруқлари" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "НОМИ" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - Modem Manager демони учун оддий графика интерфейси." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "ТАВСИФИ" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "" #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "МУАЛЛИФ" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "" #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "ХАТОЛАР ҲАҚИДА ХАБАР БЕРИШ" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "" #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "МУАЛЛИФЛИК ҲУҚУҚИ" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "" #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/src/main.h000664 001750 001750 00000030730 13261703575 017061 0ustar00alexalex000000 000000 /* * main.h * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __MAIN_H__ #define __MAIN_H__ #include #include "../resources.h" #include "settings.h" #include "modem-settings.h" #include "notifications.h" #include "ayatana.h" #include "providersdb.h" #include "addressbooks.h" #if RESOURCE_SPELLCHECKER_ENABLED #include #endif #if RESOURCE_INDICATOR_ENABLED #include #endif #define MMGUI_MAIN_DEFAULT_DEVICE_IDENTIFIER "00000000000000000000000" #define MMGUI_MAIN_DEFAULT_CONNECTION_UUID "00000000-0000-4000-0000-000000000000" #define MMGUI_MAIN_OPERATION_TIMEOUT 120 enum _mmgui_main_pages { MMGUI_MAIN_PAGE_DEVICES = 0, MMGUI_MAIN_PAGE_SMS, MMGUI_MAIN_PAGE_USSD, MMGUI_MAIN_PAGE_INFO, MMGUI_MAIN_PAGE_SCAN, MMGUI_MAIN_PAGE_TRAFFIC, MMGUI_MAIN_PAGE_CONTACTS, MMGUI_MAIN_PAGE_NUMBER }; /*Infobar types*/ enum _mmgui_main_infobar_type { MMGUI_MAIN_INFOBAR_TYPE_INFO = 0, MMGUI_MAIN_INFOBAR_TYPE_WARNING, MMGUI_MAIN_INFOBAR_TYPE_ERROR, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS_UNSTOPPABLE }; /*Infobar results*/ enum _mmgui_main_infobar_result { MMGUI_MAIN_INFOBAR_RESULT_INTERRUPT = 0, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, MMGUI_MAIN_INFOBAR_RESULT_FAIL, MMGUI_MAIN_INFOBAR_RESULT_TIMEOUT }; typedef gboolean (*mmgui_infobar_close_func)(gpointer data); struct _mmgui_main_window { /*Window*/ GtkWidget *window; GtkWidget *windowbox; GtkWidget *toolbar; GtkWidget *statusbar; GtkWidget *infobar; GtkWidget *infobarspinner; GtkWidget *infobarimage; GtkWidget *infobarlabel; GtkWidget *infobarstopbutton; mmgui_infobar_close_func infobarcallback; guint infobartimeout; guint sbcontext; guint menuitemcount; gboolean infobarlock; GtkWidget *signalimage; GdkPixbuf *signal0icon; GdkPixbuf *signal25icon; GdkPixbuf *signal50icon; GdkPixbuf *signal75icon; GdkPixbuf *signal100icon; GdkPixbuf *mainicon; GdkPixbuf *symbolicicon; /*Dialogs*/ GtkWidget *aboutdialog; GtkWidget *prefdialog; GtkWidget *questiondialog; GtkWidget *errordialog; GtkWidget *exitdialog; GtkWidget *pinentrydialog; /*Welcome window*/ GtkWidget *welcomewindow; GtkWidget *welcomeimage; GtkWidget *welcomenotebook; GtkWidget *welcomemmcombo; GtkWidget *welcomecmcombo; GtkWidget *welcomeenablecb; GtkWidget *welcomebutton; GtkWidget *welcomeacttreeview; /*New SMS dialog*/ GtkWidget *newsmsdialog; GtkWidget *smsnumberentry; GtkWidget *smsnumbercombo; GtkWidget *smstextview; GtkWidget *newsmssendtb; GtkWidget *newsmssavetb; GtkWidget *newsmsspellchecktb; GtkWidget *newsmscounterlabel; GtkWidget *newsmslanguagelabel; GtkTreeStore *smsnumlistmodel; GtkTreePath *smsnumlistmodempath; GtkTreePath *smsnumlistgnomepath; GtkTreePath *smsnumlistkdepath; GSList *smsnumlisthistory; GtkEntryCompletion *smscompletion; GtkListStore *smscompletionmodel; #if RESOURCE_SPELLCHECKER_ENABLED GtkSpellChecker *newsmsspellchecker; GtkWidget *newsmslangmenu; GSList *newsmscodes; #endif /*Toolbar*/ GtkWidget *devbutton; GtkWidget *smsbutton; GtkWidget *ussdbutton; GtkWidget *infobutton; GtkWidget *scanbutton; GtkWidget *contactsbutton; GtkWidget *trafficbutton; /*Pages*/ GtkWidget *notebook; /*Devices page*/ GtkWidget *devlist; GtkWidget *devconnctl; GtkWidget *devconneditor; GtkWidget *devconncb; /*Connections dialog*/ GtkWidget *conneditdialog; GtkWidget *connaddtoolbutton; GtkWidget *connremovetoolbutton; GtkWidget *contreeview; GtkWidget *connnameentry; GtkWidget *connnameapnentry; GtkWidget *connnetroamingcheckbutton; GtkWidget *connnetidspinbutton; GtkWidget *connauthnumberentry; GtkWidget *connauthusernameentry; GtkWidget *connauthpassentry; GtkWidget *conndns1entry; GtkWidget *conndns2entry; GtkWidget *providersmenu; /*PIN entry dialog*/ GtkWidget *pinentry; GtkWidget *pinentryapplybutton; /*SMS page*/ GtkWidget *smslist; GtkWidget *smstext; GtkWidget *newsmsbutton; GtkWidget *removesmsbutton; GtkWidget *answersmsbutton; GdkPixbuf *smsreadicon; GdkPixbuf *smsunreadicon; GdkPixbuf *smsrecvfoldericon; GdkPixbuf *smssentfoldericon; GdkPixbuf *smsdraftsfoldericon; GtkTreePath *incomingpath; GtkTreePath *sentpath; GtkTreePath *draftspath; GtkTextTag *smsheadingtag; GtkTextTag *smsdatetag; /*Info page*/ GtkWidget *devicevlabel; GtkWidget *operatorvlabel; GtkWidget *operatorcodevlabel; GtkWidget *regstatevlabel; GtkWidget *modevlabel; GtkWidget *imeivlabel; GtkWidget *imsivlabel; GtkWidget *signallevelprogressbar; GtkWidget *info3gpplocvlabel; GtkWidget *infogpslocvlabel; GtkWidget *equipmentimage; GtkWidget *networkimage; GtkWidget *locationimage; /*USSD page*/ GtkWidget *ussdentry; GtkWidget *ussdcombobox; GtkWidget *ussdeditor; GtkWidget *ussdsend; GtkWidget *ussdtext; GtkTextTag *ussdrequesttag; GtkTextTag *ussdhinttag; GtkTextTag *ussdanswertag; GtkEntryCompletion *ussdcompletion; GtkListStore *ussdcompletionmodel; /*Scan page*/ GtkWidget *scanlist; GtkWidget *startscanbutton; GtkWidget *scancreateconnectionbutton; /*Traffic page*/ GtkWidget *trafficparamslist; GtkWidget *trafficdrawingarea; GtkWidget *trafficlimitbutton; GtkWidget *trafficconnbutton; /*Contacts page*/ GtkWidget *newcontactbutton; GtkWidget *removecontactbutton; GtkWidget *smstocontactbutton; GtkWidget *contactstreeview; GtkWidget *contactssmsmenu; GtkTreePath *contmodempath; GtkTreePath *contgnomepath; GtkTreePath *contkdepath; /*New contact dialog*/ GtkWidget *newcontactdialog; GtkWidget *contactnameentry; GtkWidget *contactnumberentry; GtkWidget *contactemailentry; GtkWidget *contactgroupentry; GtkWidget *contactname2entry; GtkWidget *contactnumber2entry; GtkWidget *newcontactaddbutton; /*Limits dialog*/ GtkWidget *trafficlimitsdialog; GtkWidget *trafficlimitcheckbutton; GtkWidget *trafficamount; GtkWidget *trafficunits; GtkWidget *trafficmessage; GtkWidget *trafficaction; GtkWidget *timelimitcheckbutton; GtkWidget *timeamount; GtkWidget *timeunits; GtkWidget *timemessage; GtkWidget *timeaction; /*Connections dialog*/ GtkAccelGroup *connaccelgroup; GtkWidget *conndialog; GtkWidget *connscrolledwindow; GtkWidget *conntreeview; GtkWidget *conntermtoolbutton; /*Traffic statistics dialog*/ GtkWidget *trafficstatsdialog; GtkWidget *trafficstatstreeview; GtkWidget *trafficstatsmonthcb; GtkWidget *trafficstatsyearcb; /*USSD editor dialog*/ GtkAccelGroup *ussdaccelgroup; GtkWidget *ussdeditdialog; GtkWidget *ussdedittreeview; GtkWidget *newussdtoolbutton; GtkWidget *removeussdtoolbutton; GtkWidget *ussdencodingtoolbutton; /*Preferences*/ GtkWidget *prefsmsconcat; GtkWidget *prefsmsexpand; GtkWidget *prefsmsoldontop; GtkWidget *prefsmsvalidityscale; GtkWidget *prefsmsreportcb; GtkWidget *prefsmscommandentry; GtkWidget *preftrafficrxcolor; GtkWidget *preftraffictxcolor; GtkWidget *preftrafficmovdircombo; GtkWidget *prefbehavioursounds; GtkWidget *prefbehaviourhide; GtkWidget *prefbehaviourgeom; GtkWidget *prefbehaviourautostart; GtkWidget *prefenabletimeoutscale; GtkWidget *prefsendsmstimeoutscale; GtkWidget *prefsendussdtimeoutscale; GtkWidget *prefscannetworkstimeoutscale; GtkWidget *prefmodulesmmcombo; GtkWidget *prefmodulescmcombo; GtkWidget *prefactivepagessmscb; GtkWidget *prefactivepagesussdcb; GtkWidget *prefactivepagesinfocb; GtkWidget *prefactivepagesscancb; GtkWidget *prefactivepagestrafficcb; GtkWidget *prefactivepagescontactscb; /*Exit dialog*/ GtkWidget *exitaskagain; GtkWidget *exitcloseradio; GtkWidget *exithideradio; /*Keyboard acceletators*/ GtkAccelGroup *accelgroup; /*Pages menu section*/ GMenu *appsection; /*Page shortcuts*/ GSList *pageshortcuts; /*Closures for Devices page*/ GClosure *conneditorclosure; GClosure *connactivateclosure; /*Closures for SMS page*/ GClosure *newsmsclosure; GClosure *removesmsclosure; GClosure *answersmsclosure; /*Closures for USSD page*/ GClosure *ussdeditorclosure; GClosure *ussdsendclosure; /*Closures for Scan page*/ GClosure *startscanclosure; /*Closures for Traffic page*/ GClosure *trafficlimitclosure; GClosure *trafficconnclosure; GClosure *trafficstatsclosure; /*Closures for Contacts page*/ GClosure *newcontactclosure; GClosure *removecontactclosure; GClosure *smstocontactclosure; /*Indicator*/ AppIndicator *indicator; GtkWidget *indmenu; GtkWidget *showwin_ind, *sep1_ind, *newsms_ind, *sep2_ind, *quit_ind; gulong traysigid; }; typedef struct _mmgui_main_window *mmgui_main_window_t; struct _mmgui_cli_options { gboolean invisible; gboolean minimized; gboolean hidenotifyshown; /*SMS*/ gboolean concatsms; gboolean smsexpandfolders; gboolean smsoldontop; gboolean smsdeliveryreport; gint smsvalidityperiod; gchar *smscustomcommand; /*Traffic graph*/ #if GTK_CHECK_VERSION(3,4,0) GdkRGBA rxtrafficcolor; GdkRGBA txtrafficcolor; #else GdkColor rxtrafficcolor; GdkColor txtrafficcolor; #endif gboolean graphrighttoleft; /*Behaviour*/ gboolean usesounds; gboolean hidetotray; gboolean askforhide; gboolean savegeometry; /*Window geometry*/ gint wgwidth; gint wgheight; gint wgposx; gint wgposy; /*Active pages*/ gboolean smspageenabled; gboolean ussdpageenabled; gboolean infopageenabled; gboolean scanpageenabled; gboolean trafficpageenabled; gboolean contactspageenabled; }; typedef struct _mmgui_cli_options *mmgui_cli_options_t; struct _mmgui_application { /*GTK+ application object*/ GtkApplication *gtkapplication; /*Allocated structures*/ mmgui_main_window_t window; mmgui_cli_options_t options; mmgui_core_options_t coreoptions; /*Objects*/ mmguicore_t core; settings_t settings; modem_settings_t modemsettings; mmgui_libpaths_cache_t libcache; mmgui_notifications_t notifications; mmgui_addressbooks_t addressbooks; mmgui_ayatana_t ayatana; mmgui_providers_db_t providersdb; }; typedef struct _mmgui_application *mmgui_application_t; struct _mmgui_application_data { mmgui_application_t mmguiapp; gpointer data; }; typedef struct _mmgui_application_data *mmgui_application_data_t; gboolean mmgui_main_ui_question_dialog_open(mmgui_application_t mmguiapp, gchar *caption, gchar *text); gboolean mmgui_main_ui_error_dialog_open(mmgui_application_t mmguiapp, gchar *caption, gchar *text); void mmgui_ui_infobar_show_result(mmgui_application_t mmguiapp, gint result, gchar *message); void mmgui_ui_infobar_show(mmgui_application_t mmguiapp, gchar *message, gint type, mmgui_infobar_close_func callback, gchar *buttoncaption); gboolean mmgui_main_ui_test_device_state(mmgui_application_t mmguiapp, guint setpage); void mmgui_main_ui_devices_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_sms_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_ussd_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_info_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_scan_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_traffic_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_ui_contacts_button_toggled_signal(GObject *object, gpointer data); void mmgui_main_window_update_active_pages(mmgui_application_t mmguiapp); gboolean mmgui_main_ui_window_delete_event_signal(GtkWidget *widget, GdkEvent *event, gpointer data); void mmgui_main_ui_window_destroy_signal(GObject *object, gpointer data); gchar *mmgui_main_ui_message_validity_scale_value_format(GtkScale *scale, gdouble value, gpointer user_data); gchar *mmgui_main_ui_timeout_scale_value_format(GtkScale *scale, gdouble value, gpointer user_data); void mmgui_main_ui_controls_disable(mmgui_application_t mmguiapp, gboolean disable, gboolean firstpage, gboolean updatestate); void mmgui_main_ui_interrupt_operation_button_clicked_signal(GObject *object, gpointer data); gboolean mmgui_main_ui_update_statusbar_from_thread(gpointer data); #endif /* __MAIN_H__ */ modem-manager-gui-0.0.19.1/packages/fedora/modem-manager-gui.spec000644 001750 001750 00000004576 13261745211 024362 0ustar00alexalex000000 000000 Summary: Modem Manager GUI Name: modem-manager-gui Version: 0.0.19.1 Release: 1%{dist} License: GPLv3 Group: Applications/Communications URL: https://linuxonly.ru/page/modem-manager-gui Source: %{name}-%{version}.tar.gz Vendor: Alex #BuildArch: x86_64 Requires: gtk3 >= 3.4.0, glib2 >= 2.32.1, gdbm >= 1.10, libnotify >= 0.7.5, gtkspell3 >= 3.0.3, libappindicator-gtk3 >= 0.4.92 BuildRequires: pkgconfig, po4a, itstool, meson >= 0.37.0, gtk3-devel >= 3.4.0, glib2-devel >= 2.32.1, gdbm-devel >= 1.10, gtkspell3-devel >= 3.0.3, libappindicator-gtk3-devel >= 0.4.92, ofono-devel >= 1.09, desktop-file-utils %description Simple graphical interface compatible with Modem manager, Wader and oFono system services able to control EDGE/3G/4G broadband modem specific functions. Current features: - Create and control mobile broadband connections - Send and receive SMS messages and store messages in database - Initiate USSD requests and read answers (also using interactive sessions) - View device information: operator name, device mode, IMEI, IMSI, signal level - Scan available mobile networks - View mobile traffic statistics and set limits %prep %autosetup %build %meson %meson_build %install %meson_install desktop-file-install --dir %{buildroot}%{_datadir}/applications --delete-original %{buildroot}%{_datadir}/applications/%{name}.desktop %find_lang %{name} %clean rm -rf %{buildroot} %files -f %{name}.lang %defattr(-,root,root,-) %doc LICENSE %doc AUTHORS %doc Changelog %{_bindir}/%{name} %{_libdir}/%{name}/modules/*.so %{_libdir}/ofono/plugins/libmmgui-ofono-history.so %{_sysconfdir}/NetworkManager/dispatcher.d/95-mmgui-timestamp-notifier %{_datadir}/icons/hicolor/128x128/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/icons/hicolor/symbolic/apps/%{name}-symbolic.svg %{_datadir}/%{name}/pixmaps/*.png %{_datadir}/%{name}/sounds/message.ogg %{_datadir}/%{name}/ui/%{name}.ui %{_datadir}/help/* %{_datadir}/metainfo/%{name}.appdata.xml %{_datadir}/polkit-1/actions/ru.linuxonly.%{name}.policy %{_datadir}/applications/%{name}.desktop %{_mandir}/* %changelog * Fri Apr 6 2018 Alex - 0.0.19.1-1.fc27 - Version 0.0.19.1 * Sun Dec 31 2017 Alex - 0.0.19-1.fc27 - Version 0.0.19 * Sat Jul 6 2013 Alex - 0.0.16-1.fc19 - Version 0.0.16 fixes * Wed Aug 08 2012 Alex - released spec modem-manager-gui-0.0.19.1/src/main.c000664 001750 001750 00000363663 13261704634 017067 0ustar00alexalex000000 000000 /* * main.c * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #ifdef __GLIBC__ #include #define __USE_GNU #include #include #endif #include #include #include #include #include #include #include "settings.h" #include "ussdlist.h" #include "encoding.h" #include "libpaths.h" #include "notifications.h" #include "addressbooks.h" #include "ayatana.h" #include "strformat.h" #include "mmguicore.h" #include "smsdb.h" #include "trafficdb.h" #include "netlink.h" #include "../resources.h" #include "contacts-page.h" #include "traffic-page.h" #include "scan-page.h" #include "info-page.h" #include "ussd-page.h" #include "sms-page.h" #include "devices-page.h" #include "preferences-window.h" #include "welcome-window.h" #include "connection-editor-window.h" #include "main.h" #if GTK_CHECK_VERSION(3,12,0) #define mmgui_add_accelerator(application, accelerator, action) \ gtk_application_set_accels_for_action(application, action, (const gchar*[]) {accelerator, NULL}); #define mmgui_add_accelerator_with_parameter(application, accelerator, action, parameter) \ gtk_application_set_accels_for_action(application, action"::"parameter, (const gchar*[]) {accelerator, NULL}); #else #define mmgui_add_accelerator(application, accelerator, action) \ gtk_application_add_accelerator(application, accelerator, action, NULL); #define mmgui_add_accelerator_with_parameter(application, accelerator, action, parameter) \ gtk_application_add_accelerator(application, accelerator, action, g_variant_new_string(parameter)); #endif #define MMGUI_MAIN_DEFAULT_RX_GRAPH_RGBA_COLOR "rgba(7,139,45,1.0)" #define MMGUI_MAIN_DEFAULT_TX_GRAPH_RGBA_COLOR "rgba(153,17,77,1.0)" #define MMGUI_MAIN_DEFAULT_RX_GRAPH_RGB_COLOR "#078b2d" #define MMGUI_MAIN_DEFAULT_TX_GRAPH_RGB_COLOR "#99114d" enum _mmgui_main_control_shortcuts { MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_EDITOR = 0, MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_ACTIVATE, MMGUI_MAIN_CONTROL_SHORTCUT_SMS_NEW, MMGUI_MAIN_CONTROL_SHORTCUT_SMS_REMOVE, MMGUI_MAIN_CONTROL_SHORTCUT_SMS_ANSWER, MMGUI_MAIN_CONTROL_SHORTCUT_USSD_EDITOR, MMGUI_MAIN_CONTROL_SHORTCUT_USSD_SEND, MMGUI_MAIN_CONTROL_SHORTCUT_SCAN_START, MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_LIMIT, MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_CONNECTIONS, MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_STATS, MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_NEW, MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_REMOVE, MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_SMS, MMGUI_MAIN_CONTROL_SHORTCUT_NUMBER }; /*Exit dialog response codes*/ enum _mmgui_main_exit_dialog_result { MMGUI_MAIN_EXIT_DIALOG_CANCEL = -1, MMGUI_MAIN_EXIT_DIALOG_EXIT = 0, MMGUI_MAIN_EXIT_DIALOG_HIDE = 1 }; /*Widget list used during UI creation process*/ struct _mmgui_main_widgetset { gchar *name; GtkWidget **widget; }; /*Pixbuf list used during UI creation process*/ struct _mmgui_main_pixbufset { gchar *name; GdkPixbuf **pixbuf; }; /*Closure list used during UI creation process*/ struct _mmgui_main_closureset { guint identifier; GClosure **closure; }; /*EVENTS*/ static void mmgui_main_event_callback(enum _mmgui_event event, gpointer mmguicore, gpointer data, gpointer userdata); static gboolean mmgui_main_handle_extend_capabilities(mmgui_application_t mmguiapp, gint id); /*UI*/ static void mmgui_main_ui_page_control_disable(mmgui_application_t mmguiapp, guint page, gboolean disable, gboolean onlylimited); static void mmgui_main_ui_page_setup_shortcuts(mmgui_application_t mmguiapp, guint setpage); static void mmgui_main_ui_page_use_shortcuts_signal(gpointer data); static void mmgui_main_ui_open_page(mmgui_application_t mmguiapp, guint page); static void mmgui_main_ui_application_menu_set_page(mmgui_application_t mmguiapp, guint page); static void mmgui_main_ui_application_menu_set_state(mmgui_application_t mmguiapp, gboolean enabled); static enum _mmgui_main_exit_dialog_result mmgui_main_ui_window_hide_dialog(mmgui_application_t mmguiapp); static void mmgui_main_ui_window_save_geometry(mmgui_application_t mmguiapp); static void mmgui_main_ui_exit_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data); static void mmgui_main_ui_help_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data); static void mmgui_main_ui_about_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data); static void mmgui_main_ui_section_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data); /*Tray*/ static gboolean mmgui_main_tray_handle_state_change_from_thread(gpointer data); static void mmgui_main_tray_icon_window_show_signal(GtkCheckMenuItem *checkmenuitem, gpointer data); static void mmgui_main_tray_icon_new_sms_signal(GtkMenuItem *menuitem, gpointer data); static void mmgui_main_tray_icon_exit_signal(GtkMenuItem *menuitem, gpointer data); static void mmgui_main_tray_icon_build(mmgui_application_t mmguiapp); static void mmgui_main_tray_icon_init(mmgui_application_t mmguiapp); /*Ayatana*/ static void mmgui_main_ayatana_event_callback(enum _mmgui_ayatana_event event, gpointer ayatana, gpointer data, gpointer userdata); /*Initialization*/ static void mmgui_main_application_unresolved_error(mmgui_application_t mmguiapp, gchar *caption, gchar *text); static gboolean mmgui_main_contacts_load_from_thread(gpointer data); static gboolean mmgui_main_settings_ui_load(mmgui_application_t mmguiapp); static gboolean mmgui_main_settings_load(mmgui_application_t mmguiapp); static GdkPixbuf *mmgui_main_application_load_image_to_pixbuf(GtkIconTheme *theme, const gchar *name, const gchar *path, gint size, gboolean scalable); static gboolean mmgui_main_application_build_user_interface(mmgui_application_t mmguiapp); static void mmgui_main_application_terminate(mmgui_application_t mmguiapp); static void mmgui_main_application_startup_signal(GtkApplication *application, gpointer data); static void mmgui_main_continue_initialization(mmgui_application_t mmguiapp, mmguicore_t mmguicore); static void mmgui_main_application_activate_signal(GtkApplication *application, gpointer data); static void mmgui_main_application_shutdown_signal(GtkApplication *application, gpointer data); static void mmgui_main_modules_list(mmgui_application_t mmguiapp); #ifdef __GLIBC__ static void mmgui_main_application_backtrace_signal_handler(int sig, siginfo_t *info, ucontext_t *ucontext); #endif static void mmgui_main_application_termination_signal_handler(int sig, siginfo_t *info, ucontext_t *ucontext); /*EVENTS*/ static void mmgui_main_event_callback(enum _mmgui_event event, gpointer mmguicore, gpointer data, gpointer userdata) { mmguidevice_t device; mmgui_application_t mmguiapp; mmgui_application_data_t appdata; guint id; mmguiapp = (mmgui_application_t)userdata; switch (event) { case MMGUI_EVENT_DEVICE_ADDED: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_added_from_thread, appdata); break; case MMGUI_EVENT_DEVICE_REMOVED: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_removed_from_thread, appdata); break; case MMGUI_EVENT_DEVICE_OPENED: mmguiapp->modemsettings = mmgui_modem_settings_open(mmguiapp->core->device->persistentid); /*Devices*/ if (mmguicore_devices_get_enabled(mmguiapp->core)) { /*Update connections list if available*/ if (mmguicore_connections_enum(mmguiapp->core)) { mmgui_main_connection_editor_window_list_fill(mmguiapp); } mmgui_main_device_connections_list_fill(mmguiapp); mmgui_main_device_restore_settings_for_modem(mmguiapp); } /*SMS*/ mmgui_main_sms_list_clear(mmguiapp); mmgui_main_sms_list_fill(mmguiapp); mmgui_main_sms_restore_settings_for_modem(mmguiapp); /*USSD*/ mmgui_main_ussd_state_clear(mmguiapp); mmgui_main_ussd_restore_settings_for_modem(mmguiapp); /*Info*/ mmgui_main_info_state_clear(mmguiapp); mmgui_main_info_update_for_modem(mmguiapp); /*Scan*/ mmgui_main_scan_state_clear(mmguiapp); /*Traffic*/ mmgui_main_traffic_restore_settings_for_modem(mmguiapp); /*Contacts*/ mmgui_main_contacts_state_clear(mmguiapp); mmgui_main_contacts_list_fill(mmguiapp); /*Show network name*/ g_idle_add(mmgui_main_ui_update_statusbar_from_thread, mmguiapp); g_idle_add(mmgui_main_tray_handle_state_change_from_thread, mmguiapp); break; case MMGUI_EVENT_DEVICE_CLOSING: mmgui_modem_settings_close(mmguiapp->modemsettings); break; case MMGUI_EVENT_DEVICE_ENABLED_STATUS: appdata = g_new0(struct _mmgui_application_data, 1); if (GPOINTER_TO_UINT(data)) { /*Update connections list*/ if (mmguicore_connections_enum(mmguiapp->core)) { mmgui_main_connection_editor_window_list_fill(mmguiapp); } mmgui_main_device_connections_list_fill(mmguiapp); mmgui_main_device_restore_settings_for_modem(mmguiapp); } appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_enabled_status_from_thread, appdata); g_idle_add(mmgui_main_tray_handle_state_change_from_thread, mmguiapp); break; case MMGUI_EVENT_DEVICE_BLOCKED_STATUS: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_blocked_status_from_thread, appdata); g_idle_add(mmgui_main_tray_handle_state_change_from_thread, mmguiapp); break; case MMGUI_EVENT_DEVICE_PREPARED_STATUS: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_prepared_status_from_thread, appdata); g_idle_add(mmgui_main_tray_handle_state_change_from_thread, mmguiapp); break; case MMGUI_EVENT_DEVICE_CONNECTION_STATUS: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_device_handle_connection_status_from_thread, appdata); break; case MMGUI_EVENT_SIGNAL_LEVEL_CHANGE: device = (mmguidevice_t)data; mmgui_main_info_handle_signal_level_change(mmguiapp, device); /*Update level bars*/ g_idle_add(mmgui_main_ui_update_statusbar_from_thread, mmguiapp); break; case MMGUI_EVENT_NETWORK_MODE_CHANGE: device = (mmguidevice_t)data; mmgui_main_info_handle_network_mode_change(mmguiapp, device); break; case MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE: device = (mmguidevice_t)data; mmgui_main_info_handle_network_registration_change(mmguiapp, device); /*Show new network name*/ g_idle_add(mmgui_main_ui_update_statusbar_from_thread, mmguiapp); g_idle_add(mmgui_main_tray_handle_state_change_from_thread, mmguiapp); break; case MMGUI_EVENT_LOCATION_CHANGE: device = (mmguidevice_t)data; mmgui_main_info_handle_location_change(mmguiapp, device); break; case MMGUI_EVENT_MODEM_ENABLE_RESULT: if (GPOINTER_TO_UINT(data)) { /*Update connections list*/ if (mmguicore_connections_enum(mmguiapp->core)) { mmgui_main_connection_editor_window_list_fill(mmguiapp); } mmgui_main_device_connections_list_fill(mmguiapp); mmgui_main_device_restore_settings_for_modem(mmguiapp); /*Update device partameters*/ mmgui_main_device_handle_enabled_local_status(mmguiapp); mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } break; case MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT: if (GPOINTER_TO_UINT(data)) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } break; case MMGUI_EVENT_MODEM_CONNECTION_RESULT: if (GPOINTER_TO_UINT(data)) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } /*Unblock device selection*/ mmgui_main_device_list_block_selection(mmguiapp, FALSE); /*Update status*/ mmgui_main_device_connections_update_state(mmguiapp); break; case MMGUI_EVENT_SCAN_RESULT: if (data != NULL) { /*Show found networks*/ mmgui_main_scan_list_fill(mmguiapp, (mmguicore_t)mmguicore, (GSList *)data); mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } break; case MMGUI_EVENT_USSD_RESULT: if (data != NULL) { /*Show USSD answer*/ mmgui_main_ussd_request_send_end(mmguiapp, (mmguicore_t)mmguicore, (const gchar *)data); mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } break; case MMGUI_EVENT_SMS_COMPLETED: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_sms_get_message_from_thread, appdata); break; case MMGUI_EVENT_SMS_LIST_READY: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = data; g_idle_add(mmgui_main_sms_get_message_list_from_thread, appdata); break; case MMGUI_EVENT_SMS_SENT: if (GPOINTER_TO_UINT(data)) { /*Better to save message here*/ mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_SUCCESS, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } break; case MMGUI_EVENT_SMS_NEW_DAY: g_idle_add(mmgui_main_sms_handle_new_day_from_thread, mmguiapp); break; case MMGUI_EVENT_NET_STATUS: g_idle_add(mmgui_main_ui_update_statusbar_from_thread, mmguiapp); g_idle_add(mmgui_main_traffic_stats_update_from_thread, mmguiapp); if ((GTK_IS_WIDGET(mmguiapp->window->trafficstatsdialog)) && (gtk_widget_get_visible(mmguiapp->window->trafficstatsdialog))) { g_idle_add(mmgui_main_traffic_stats_history_update_from_thread, mmguiapp); } break; case MMGUI_EVENT_TRAFFIC_LIMIT: case MMGUI_EVENT_TIME_LIMIT: appdata = g_new0(struct _mmgui_application_data, 1); appdata->mmguiapp = mmguiapp; appdata->data = GINT_TO_POINTER(event); g_idle_add(mmgui_main_traffic_limits_show_message_from_thread, appdata); break; case MMGUI_EVENT_UPDATE_CONNECTIONS_LIST: g_idle_add(mmgui_main_traffic_connections_update_from_thread, mmguiapp); break; case MMGUI_EVENT_EXTEND_CAPABILITIES: id = GPOINTER_TO_INT(data); mmgui_main_handle_extend_capabilities(mmguiapp, id); break; case MMGUI_EVENT_SERVICE_ACTIVATION_STARTED: mmgui_welcome_window_activation_page_open(mmguiapp); break; case MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_CHANGED: mmgui_welcome_window_activation_page_add_service(mmguiapp, (gchar *)data); break; case MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ACTIVATED: mmgui_welcome_window_activation_page_set_state(mmguiapp, NULL); break; case MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ERROR: mmgui_welcome_window_activation_page_set_state(mmguiapp, (gchar *)data); break; case MMGUI_EVENT_SERVICE_ACTIVATION_FINISHED: mmgui_welcome_window_close(mmguiapp); mmgui_main_continue_initialization(mmguiapp, mmguicore); break; case MMGUI_EVENT_SERVICE_ACTIVATION_AUTH_ERROR: mmgui_main_application_unresolved_error(mmguiapp, _("Error while initialization"), _("Unable to start needed system services without correct credentials")); break; case MMGUI_EVENT_SERVICE_ACTIVATION_STARTUP_ERROR: mmgui_main_application_unresolved_error(mmguiapp, _("Error while initialization"), _("Unable to communicate with available system services")); break; case MMGUI_EVENT_SERVICE_ACTIVATION_OTHER_ERROR: mmgui_main_application_unresolved_error(mmguiapp, _("Error while initialization"), (gchar *)data); break; case MMGUI_EVENT_ADDRESS_BOOKS_EXPORT_FINISHED: g_idle_add(mmgui_main_contacts_load_from_thread, userdata); break; default: g_debug("Unknown event (%u) got from core\n", event); break; } } static gboolean mmgui_main_handle_extend_capabilities(mmgui_application_t mmguiapp, gint id) { if (mmguiapp == NULL) return FALSE; switch (id) { case MMGUI_CAPS_SMS: break; case MMGUI_CAPS_USSD: break; case MMGUI_CAPS_LOCATION: break; case MMGUI_CAPS_SCAN: break; case MMGUI_CAPS_CONTACTS: /*Update contacts list*/ mmgui_main_contacts_list_fill(mmguiapp); mmgui_main_sms_restore_contacts_for_modem(mmguiapp); break; case MMGUI_CAPS_CONNECTIONS: /*Update connections list*/ if (mmguicore_connections_enum(mmguiapp->core)) { mmgui_main_connection_editor_window_list_fill(mmguiapp); } mmgui_main_device_connections_list_fill(mmguiapp); mmgui_main_device_restore_settings_for_modem(mmguiapp); break; case MMGUI_CAPS_NONE: default: break; } return TRUE; } /*UI*/ gboolean mmgui_main_ui_question_dialog_open(mmgui_application_t mmguiapp, gchar *caption, gchar *text) { gint response; if ((mmguiapp == NULL) || (caption == NULL) || (text == NULL)) return FALSE; gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(mmguiapp->window->questiondialog), caption); gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(mmguiapp->window->questiondialog), "%s", text); response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->questiondialog)); gtk_widget_hide(mmguiapp->window->questiondialog); return (response == GTK_RESPONSE_YES); } gboolean mmgui_main_ui_error_dialog_open(mmgui_application_t mmguiapp, gchar *caption, gchar *text) { gint response; if ((mmguiapp == NULL) || (caption == NULL) || (text == NULL)) return FALSE; gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(mmguiapp->window->errordialog), caption); gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(mmguiapp->window->errordialog), "%s", text); response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->errordialog)); gtk_widget_hide(mmguiapp->window->errordialog); return (response == GTK_RESPONSE_CLOSE); } static gboolean mmgui_ui_infobar_show_result_timer(gpointer data) { mmgui_application_t mmguiapp; guint page; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return G_SOURCE_REMOVE; /*Mark timer removed*/ mmguiapp->window->infobartimeout = 0; /*Hide infobar*/ gtk_widget_set_visible(mmguiapp->window->infobar, FALSE); /*Update state*/ if (mmguiapp->window->infobarlock) { mmguiapp->window->infobarlock = FALSE; page = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiapp, page); } return G_SOURCE_REMOVE; } void mmgui_ui_infobar_show_result(mmgui_application_t mmguiapp, gint result, gchar *message) { gchar *iconname, *defmessage, *resmessage; if (mmguiapp == NULL) return; switch (result) { case MMGUI_MAIN_INFOBAR_RESULT_SUCCESS: iconname = "emblem-default"; defmessage = _("Success"); mmguiapp->window->infobartimeout = g_timeout_add_seconds(2, mmgui_ui_infobar_show_result_timer, mmguiapp); break; case MMGUI_MAIN_INFOBAR_RESULT_FAIL: iconname = "emblem-important"; defmessage = _("Failed"); mmguiapp->window->infobartimeout = g_timeout_add_seconds(2, mmgui_ui_infobar_show_result_timer, mmguiapp); break; case MMGUI_MAIN_INFOBAR_RESULT_TIMEOUT: iconname = "appointment-missed"; defmessage = _("Timeout"); mmguiapp->window->infobartimeout = g_timeout_add_seconds(2, mmgui_ui_infobar_show_result_timer, mmguiapp); break; case MMGUI_MAIN_INFOBAR_RESULT_INTERRUPT: default: /*Hide infobar instantly*/ gtk_widget_set_visible(mmguiapp->window->infobar, FALSE); return; } /*Show result in infobar*/ gtk_image_set_from_icon_name(GTK_IMAGE(mmguiapp->window->infobarimage), iconname, GTK_ICON_SIZE_BUTTON); gtk_widget_set_visible(mmguiapp->window->infobarimage, TRUE); gtk_widget_set_visible(mmguiapp->window->infobarspinner, FALSE); gtk_spinner_stop(GTK_SPINNER(mmguiapp->window->infobarspinner)); if (message != NULL) { resmessage = g_strdup_printf("%s (%s)", gtk_label_get_label(GTK_LABEL(mmguiapp->window->infobarlabel)), message); } else { resmessage = g_strdup_printf("%s (%s)", gtk_label_get_label(GTK_LABEL(mmguiapp->window->infobarlabel)), defmessage); } gtk_label_set_label(GTK_LABEL(mmguiapp->window->infobarlabel), resmessage); g_free(resmessage); gtk_widget_set_visible(mmguiapp->window->infobarstopbutton, FALSE); /*Show infobar if not visible*/ if (!gtk_widget_get_visible(mmguiapp->window->infobar)) { /*Workaround for GNOME bug #710888 (https://bugzilla.gnome.org/show_bug.cgi?id=710888)*/ g_object_ref(mmguiapp->window->infobar); gtk_container_remove(GTK_CONTAINER(mmguiapp->window->windowbox), mmguiapp->window->infobar); gtk_box_pack_start(GTK_BOX(mmguiapp->window->windowbox), mmguiapp->window->infobar, FALSE, TRUE, 0); gtk_widget_set_vexpand(GTK_WIDGET(mmguiapp->window->infobar), FALSE); gtk_box_reorder_child(GTK_BOX(mmguiapp->window->windowbox), mmguiapp->window->infobar, 1); /*Show infobar*/ gtk_widget_set_visible(mmguiapp->window->infobar, TRUE); } /*Unblock controls*/ mmgui_main_ui_controls_disable(mmguiapp, FALSE, FALSE, TRUE); } static gboolean mmgui_ui_infobar_timeout_timer(gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return G_SOURCE_REMOVE; if (mmguicore_interrupt_operation(mmguiapp->core)) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_TIMEOUT, NULL); } /*Mark timer removed*/ mmguiapp->window->infobartimeout = 0; return G_SOURCE_REMOVE; } void mmgui_ui_infobar_show(mmgui_application_t mmguiapp, gchar *message, gint type, mmgui_infobar_close_func callback, gchar *buttoncaption) { gchar *iconname; GtkMessageType msgtype; if ((mmguiapp == NULL) || (message == NULL)) return; if (mmguiapp->window->infobarlock) return; /*First of all remove timeout timer (if any)*/ if (mmguiapp->window->infobartimeout > 0) { g_source_remove(mmguiapp->window->infobartimeout); mmguiapp->window->infobartimeout = 0; } /*Pick infobar parameters*/ switch (type) { case MMGUI_MAIN_INFOBAR_TYPE_INFO: iconname = "dialog-information"; msgtype = GTK_MESSAGE_INFO; break; case MMGUI_MAIN_INFOBAR_TYPE_WARNING: iconname = "dialog-warning"; msgtype = GTK_MESSAGE_WARNING; break; case MMGUI_MAIN_INFOBAR_TYPE_ERROR: iconname = "dialog-error"; msgtype = GTK_MESSAGE_ERROR; break; default: iconname = NULL; msgtype = GTK_MESSAGE_INFO; break; } /*Show needed widgets*/ if ((type == MMGUI_MAIN_INFOBAR_TYPE_PROGRESS) || (type == MMGUI_MAIN_INFOBAR_TYPE_PROGRESS_UNSTOPPABLE)) { /*Lock infobar for progress operation*/ mmguiapp->window->infobarlock = TRUE; /*Block controls*/ mmgui_main_ui_controls_disable(mmguiapp, TRUE, FALSE, FALSE); /*Prepare infobar*/ gtk_info_bar_set_message_type(GTK_INFO_BAR(mmguiapp->window->infobar), msgtype); gtk_widget_set_visible(mmguiapp->window->infobarimage, FALSE); gtk_widget_set_visible(mmguiapp->window->infobarspinner, TRUE); gtk_spinner_start(GTK_SPINNER(mmguiapp->window->infobarspinner)); if (type == MMGUI_MAIN_INFOBAR_TYPE_PROGRESS) { gtk_button_set_label(GTK_BUTTON(mmguiapp->window->infobarstopbutton), _("_Stop")); gtk_widget_set_visible(mmguiapp->window->infobarstopbutton, TRUE); } else { gtk_widget_set_visible(mmguiapp->window->infobarstopbutton, FALSE); } /*Set new timeout timer*/ mmguiapp->window->infobartimeout = g_timeout_add_seconds(MMGUI_MAIN_OPERATION_TIMEOUT, mmgui_ui_infobar_timeout_timer, mmguiapp); } else { gtk_image_set_from_icon_name(GTK_IMAGE(mmguiapp->window->infobarimage), iconname, GTK_ICON_SIZE_BUTTON); gtk_info_bar_set_message_type(GTK_INFO_BAR(mmguiapp->window->infobar), msgtype); gtk_widget_set_visible(mmguiapp->window->infobarimage, TRUE); gtk_widget_set_visible(mmguiapp->window->infobarspinner, FALSE); gtk_spinner_stop(GTK_SPINNER(mmguiapp->window->infobarspinner)); if (callback != NULL) { mmguiapp->window->infobarcallback = callback; if (buttoncaption != NULL) { gtk_button_set_label(GTK_BUTTON(mmguiapp->window->infobarstopbutton), buttoncaption); } gtk_widget_set_visible(mmguiapp->window->infobarstopbutton, TRUE); } else { mmguiapp->window->infobarcallback = NULL; gtk_widget_set_visible(mmguiapp->window->infobarstopbutton, FALSE); } } /*Set infobar label text*/ gtk_widget_set_visible(mmguiapp->window->infobarlabel, TRUE); gtk_label_set_text(GTK_LABEL(mmguiapp->window->infobarlabel), message); /*Workaround for GNOME bug #710888 (https://bugzilla.gnome.org/show_bug.cgi?id=710888)*/ g_object_ref(mmguiapp->window->infobar); gtk_container_remove(GTK_CONTAINER(mmguiapp->window->windowbox), mmguiapp->window->infobar); gtk_box_pack_start(GTK_BOX(mmguiapp->window->windowbox), mmguiapp->window->infobar, FALSE, TRUE, 0); gtk_widget_set_vexpand(GTK_WIDGET(mmguiapp->window->infobar), FALSE); gtk_box_reorder_child(GTK_BOX(mmguiapp->window->windowbox), mmguiapp->window->infobar, 1); /*Show infobar*/ gtk_widget_set_visible(mmguiapp->window->infobar, TRUE); } void mmgui_main_pin_insert_text_handler(GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data) { GtkEditable *editable; gint exlen, i, count; gchar *result; /*Text that already exists*/ exlen = gtk_entry_get_text_length(entry); /*Inserted text*/ result = g_new(gchar, length); count = 0; for (i = 0; i < length; i++) { /*Only digits from 4 to 8 in length*/ if ((!isdigit(text[i])) || ((exlen + count) >= 8)) { continue; } result[count++] = text[i]; } editable = GTK_EDITABLE(entry); if (count > 0) { g_signal_handlers_block_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_pin_insert_text_handler), data); gtk_editable_insert_text(editable, result, count, position); g_signal_handlers_unblock_by_func(G_OBJECT(editable), G_CALLBACK(mmgui_main_pin_insert_text_handler), data); } g_signal_stop_emission_by_name(G_OBJECT(editable), "insert_text"); g_free(result); } void mmgui_main_pin_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; gint len; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; len = gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->pinentry)); if (len >= 4) { gtk_widget_set_sensitive(GTK_WIDGET(mmguiapp->window->pinentryapplybutton), TRUE); } else { gtk_widget_set_sensitive(GTK_WIDGET(mmguiapp->window->pinentryapplybutton), FALSE); } } void mmgui_main_pin_entry_activate_signal(GtkEntry *entry, gpointer data) { mmgui_application_t mmguiapp; gint len; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; len = gtk_entry_get_text_length(entry); if (len >= 4) { gtk_dialog_response(GTK_DIALOG(mmguiapp->window->pinentrydialog), GTK_RESPONSE_APPLY); } } static gboolean mmgui_ui_infobar_pin_callback(gpointer data) { mmgui_application_t mmguiapp; gint response; gchar *pin; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->pinentry), ""); gtk_widget_set_sensitive(GTK_WIDGET(mmguiapp->window->pinentryapplybutton), FALSE); response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->pinentrydialog)); gtk_widget_hide(mmguiapp->window->pinentrydialog); if (response == GTK_RESPONSE_APPLY) { pin = (gchar *)gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->pinentry)); if (mmguicore_devices_unlock_with_pin(mmguiapp->core, pin)) { mmgui_ui_infobar_show(mmguiapp, _("Unlocking device..."), MMGUI_MAIN_INFOBAR_TYPE_PROGRESS_UNSTOPPABLE, NULL, NULL); } } return FALSE; } static gboolean mmgui_ui_infobar_enable_callback(gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (mmguicore_devices_enable(mmguiapp->core, TRUE)) { mmgui_ui_infobar_show(mmguiapp, _("Enabling device..."), MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, NULL, NULL); } return TRUE; } void mmgui_ui_infobar_process_stop_signal(GtkInfoBar *info_bar, gint response_id, gpointer data) { mmgui_application_t mmguiapp; gboolean res; mmguiapp = (mmgui_application_t)data; if ((mmguiapp == NULL) || (response_id != GTK_RESPONSE_CLOSE)) return; /*Remove timeout timer*/ if (mmguiapp->window->infobartimeout > 0) { g_source_remove(mmguiapp->window->infobartimeout); mmguiapp->window->infobartimeout = 0; } /*Call custom function or interrupt operation*/ if (mmguiapp->window->infobarcallback != NULL) { res = (mmguiapp->window->infobarcallback)(mmguiapp); } else { res = mmguicore_interrupt_operation(mmguiapp->core); } /*Interrupt operation and hide infobar*/ if (res) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_INTERRUPT, NULL); /*Unblock controls*/ mmgui_main_ui_controls_disable(mmguiapp, FALSE, FALSE, TRUE); /*Release lock*/ if (mmguiapp->window->infobarlock) { mmguiapp->window->infobarlock = FALSE; } } } static void mmgui_main_ui_page_control_disable(mmgui_application_t mmguiapp, guint page, gboolean disable, gboolean onlylimited) { GtkTreeModel *model; GtkTreeIter iter; if ((mmguiapp == NULL) || (page > MMGUI_MAIN_PAGE_CONTACTS)) return; switch (page) { case MMGUI_MAIN_PAGE_DEVICES: if (!disable) { if (!mmguicore_devices_get_connected(mmguiapp->core)) { gtk_widget_set_sensitive(mmguiapp->window->devconncb, TRUE); gtk_widget_set_sensitive(mmguiapp->window->devconneditor, TRUE); /*Button must be sensitive only if there is selectable connection*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { gtk_widget_set_sensitive(mmguiapp->window->devconnctl, TRUE); } else { gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); } } else { gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); } } } else { gtk_widget_set_sensitive(mmguiapp->window->devconncb, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconneditor, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); } break; case MMGUI_MAIN_PAGE_SMS: gtk_widget_set_sensitive(mmguiapp->window->newsmsbutton, !disable); break; case MMGUI_MAIN_PAGE_USSD: gtk_widget_set_sensitive(mmguiapp->window->ussdentry, !disable); gtk_widget_set_sensitive(mmguiapp->window->ussdcombobox, !disable); gtk_widget_set_sensitive(mmguiapp->window->ussdeditor, !disable); gtk_widget_set_sensitive(mmguiapp->window->ussdsend, !disable); if (!disable) { g_signal_emit_by_name(G_OBJECT(mmguiapp->window->ussdentry), "changed", mmguiapp); } break; case MMGUI_MAIN_PAGE_INFO: break; case MMGUI_MAIN_PAGE_SCAN: gtk_widget_set_sensitive(mmguiapp->window->startscanbutton, !disable); break; case MMGUI_MAIN_PAGE_TRAFFIC: break; case MMGUI_MAIN_PAGE_CONTACTS: gtk_widget_set_sensitive(mmguiapp->window->newcontactbutton, !disable); break; default: break; } } static void mmgui_main_ui_page_setup_shortcuts(mmgui_application_t mmguiapp, guint setpage) { GSList *iterator; GClosure *closure; if (mmguiapp == NULL) return; if (mmguiapp->window->pageshortcuts != NULL) { for (iterator=mmguiapp->window->pageshortcuts; iterator; iterator=iterator->next) { closure = (GClosure *)iterator->data; if (closure != NULL) { g_closure_ref(closure); gtk_accel_group_disconnect(mmguiapp->window->accelgroup, closure); } } g_slist_free(mmguiapp->window->pageshortcuts); mmguiapp->window->pageshortcuts = NULL; } switch (setpage) { case MMGUI_MAIN_PAGE_DEVICES: /*Open connection editor*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_E, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->conneditorclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->conneditorclosure); /*Activate/deactivate connection*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_A, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->connactivateclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->connactivateclosure); break; case MMGUI_MAIN_PAGE_SMS: /*send sms message*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_N, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->newsmsclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->newsmsclosure); /*remove sms message*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_D, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->removesmsclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->removesmsclosure); /*answer sms message*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_A, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->answersmsclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->answersmsclosure); break; case MMGUI_MAIN_PAGE_USSD: /*edit ussd commands*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_E, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->ussdeditorclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->ussdeditorclosure); /*send ussd request*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_S, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->ussdsendclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->ussdsendclosure); break; case MMGUI_MAIN_PAGE_INFO: break; case MMGUI_MAIN_PAGE_SCAN: /*scan networks*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_S, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->startscanclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->startscanclosure); break; case MMGUI_MAIN_PAGE_TRAFFIC: /*limits*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_L, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->trafficlimitclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->trafficlimitclosure); /*connections*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_C, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->trafficconnclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->trafficconnclosure); /*statistics*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_S, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->trafficstatsclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->trafficstatsclosure); break; case MMGUI_MAIN_PAGE_CONTACTS: /*add contact*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_N, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->newcontactclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->newcontactclosure); /*remove contact*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_D, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->removecontactclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->removecontactclosure); /*send sms*/ gtk_accel_group_connect(mmguiapp->window->accelgroup, GDK_KEY_S, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE, mmguiapp->window->smstocontactclosure); mmguiapp->window->pageshortcuts = g_slist_prepend(mmguiapp->window->pageshortcuts, mmguiapp->window->smstocontactclosure); break; default: break; } } static void mmgui_main_ui_page_use_shortcuts_signal(gpointer data) { mmgui_application_data_t appdata; guint shortcut, operation, setpage, pagecaps, suppcaps; gboolean enabled, blocked, connected; appdata = (mmgui_application_data_t)data; if (appdata == NULL) return; shortcut = GPOINTER_TO_UINT(appdata->data); operation = mmguicore_devices_get_current_operation(appdata->mmguiapp->core); blocked = mmguicore_devices_get_locked(appdata->mmguiapp->core); enabled = mmguicore_devices_get_enabled(appdata->mmguiapp->core); connected = mmguicore_devices_get_connected(appdata->mmguiapp->core); setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(appdata->mmguiapp->window->notebook)); switch (setpage) { case MMGUI_MAIN_PAGE_DEVICES: if (!blocked) { pagecaps = mmguicore_connections_get_capabilities(appdata->mmguiapp->core); if (pagecaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT) { /*Open connection editor*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_EDITOR) { mmgui_main_connection_editor_window_open(appdata->mmguiapp); } /*Activate/deactivate connection*/ if (!mmguicore_connections_get_transition_flag(appdata->mmguiapp->core)) { if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_ACTIVATE) { mmgui_main_device_switch_connection_state(appdata->mmguiapp); } } } } break; case MMGUI_MAIN_PAGE_SMS: if ((enabled) && (!blocked)) { pagecaps = mmguicore_sms_get_capabilities(appdata->mmguiapp->core); /*send sms message*/ if ((pagecaps & MMGUI_SMS_CAPS_SEND) && (operation == MMGUI_DEVICE_OPERATION_IDLE)) { if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_SMS_NEW) { mmgui_main_sms_new(appdata->mmguiapp); } /*answer sms message*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_SMS_ANSWER) { mmgui_main_sms_answer(appdata->mmguiapp); } } /*remove sms message*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_SMS_REMOVE) { mmgui_main_sms_remove(appdata->mmguiapp); } } break; case MMGUI_MAIN_PAGE_USSD: if ((enabled) && (!blocked)) { pagecaps = mmguicore_ussd_get_capabilities(appdata->mmguiapp->core); if ((pagecaps & MMGUI_USSD_CAPS_SEND) && (operation == MMGUI_DEVICE_OPERATION_IDLE)) { /*send ussd request*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_USSD_SEND) { mmgui_main_ussd_request_send(appdata->mmguiapp); } /*edit ussd commands*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_USSD_EDITOR) { mmgui_main_ussd_edit(appdata->mmguiapp); } } } break; case MMGUI_MAIN_PAGE_INFO: break; case MMGUI_MAIN_PAGE_SCAN: if ((enabled) && (!blocked)) { pagecaps = mmguicore_newtworks_scan_get_capabilities(appdata->mmguiapp->core); if ((pagecaps & MMGUI_SCAN_CAPS_OBSERVE) && (operation == MMGUI_DEVICE_OPERATION_IDLE) && (!connected)) { /*scan networks*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_SCAN_START) { mmgui_main_scan_start(appdata->mmguiapp); } } } break; case MMGUI_MAIN_PAGE_TRAFFIC: /*limits*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_LIMIT) { mmgui_main_traffic_limits_dialog(appdata->mmguiapp); } /*connections*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_CONNECTIONS) { mmgui_main_traffic_connections_dialog(appdata->mmguiapp); } /*statistics*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_STATS) { mmgui_main_traffic_statistics_dialog(appdata->mmguiapp); } break; case MMGUI_MAIN_PAGE_CONTACTS: if ((enabled) && (!blocked)) { pagecaps = mmguicore_contacts_get_capabilities(appdata->mmguiapp->core); suppcaps = mmguicore_sms_get_capabilities(appdata->mmguiapp->core); if (pagecaps & MMGUI_CONTACTS_CAPS_EDIT) { /*add contact*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_NEW) { mmgui_main_contacts_new(appdata->mmguiapp); } /*remove contact*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_REMOVE) { mmgui_main_contacts_remove(appdata->mmguiapp); } } if (suppcaps & MMGUI_SMS_CAPS_SEND) { /*send sms*/ if (shortcut == MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_SMS) { mmgui_main_contacts_sms(appdata->mmguiapp); } } } break; default: break; } } gboolean mmgui_main_ui_test_device_state(mmgui_application_t mmguiapp, guint setpage) { gboolean trytoenable, trytounlock, nonfunctional, limfunctional, needreg, enabled, locked, registered, prepared; gchar /**enablemessage,*/ *nonfuncmessage, *limfuncmessage, *prepmessage, *regmessage, *lockedmessage, *notenabledmessage; guint pagecaps/*, operation*/; gint locktype; if (mmguiapp == NULL) return FALSE; if (mmguiapp->core == NULL) return FALSE; /*No devices*/ if (mmguicore_devices_get_list(mmguiapp->core) == NULL) { /*Show 'No devices' message*/ mmgui_ui_infobar_show(mmguiapp, _("No devices found in system"), MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); mmgui_main_ui_page_control_disable(mmguiapp, MMGUI_MAIN_PAGE_DEVICES, TRUE, FALSE); return TRUE; } /*Devices available*/ locked = mmguicore_devices_get_locked(mmguiapp->core); enabled = mmguicore_devices_get_enabled(mmguiapp->core); registered = mmguicore_devices_get_registered(mmguiapp->core); prepared = mmguicore_devices_get_prepared(mmguiapp->core); g_debug("Device state: locked: %u, enabled: %u, registered: %u, prepared: %u", locked, enabled, registered, prepared); /*Common messages*/ prepmessage = _("Modem is not ready for operation. Please wait while modem being prepared..."); /*enablemessage = NULL;*/ nonfuncmessage = NULL; limfuncmessage = NULL; regmessage = NULL; lockedmessage = NULL; notenabledmessage = NULL; switch (setpage) { case MMGUI_MAIN_PAGE_DEVICES: trytoenable = TRUE; trytounlock = TRUE; needreg = TRUE; /*enablemessage = _("Modem must be enabled to connect to Internet. Enable modem?");*/ notenabledmessage = _("Modem must be enabled to connect to Internet. Please enable modem."); regmessage = _("Modem must be registered in mobile network to connect to Internet. Please wait..."); lockedmessage = _("Modem must be unlocked to connect to Internet. Please enter PIN code."); nonfuncmessage = _("Connection manager does not support Internet connection management functions."); limfuncmessage = NULL; nonfunctional = FALSE; pagecaps = mmguicore_connections_get_capabilities(mmguiapp->core); if (pagecaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT) { nonfunctional = FALSE; } else { nonfunctional = TRUE; } limfunctional = FALSE; break; case MMGUI_MAIN_PAGE_SMS: trytoenable = TRUE; trytounlock = TRUE; needreg = TRUE; /*enablemessage = _("Modem must be enabled to read SMS. Enable modem?");*/ notenabledmessage = _("Modem must be enabled to read and write SMS. Please enable modem."); regmessage = _("Modem must be registered in mobile network to receive and send SMS. Please wait..."); lockedmessage = _("Modem must be unlocked to receive and send SMS. Please enter PIN code."); nonfuncmessage = _("Modem manager does not support SMS manipulation functions."); limfuncmessage = _("Modem manager does not support sending of SMS messages."); pagecaps = mmguicore_sms_get_capabilities(mmguiapp->core); if (pagecaps & MMGUI_SMS_CAPS_RECEIVE) { nonfunctional = FALSE; } else { nonfunctional = TRUE; } if (pagecaps & MMGUI_SMS_CAPS_SEND) { limfunctional = FALSE; } else { limfunctional = TRUE; } break; case MMGUI_MAIN_PAGE_USSD: trytoenable = TRUE; trytounlock = TRUE; needreg = TRUE; /*enablemessage = _("Modem must be enabled to send USSD. Enable modem?");*/ notenabledmessage = _("Modem must be enabled to send USSD. Please enable modem."); regmessage = _("Modem must be registered in mobile network to send USSD. Please wait..."); lockedmessage = _("Modem must be unlocked to send USSD. Please enter PIN code."); nonfuncmessage = _("Modem manager does not support sending of USSD requests."); limfuncmessage = NULL; pagecaps = mmguicore_ussd_get_capabilities(mmguiapp->core); if (pagecaps & MMGUI_USSD_CAPS_SEND) { nonfunctional = FALSE; } else { nonfunctional = TRUE; } limfunctional = FALSE; break; case MMGUI_MAIN_PAGE_INFO: trytoenable = FALSE; trytounlock = FALSE; needreg = FALSE; /*enablemessage = NULL;*/ regmessage = NULL; lockedmessage = NULL; nonfuncmessage = NULL; limfuncmessage = NULL; nonfunctional = FALSE; limfunctional = FALSE; break; case MMGUI_MAIN_PAGE_SCAN: trytoenable = TRUE; trytounlock = TRUE; needreg = FALSE; /*enablemessage = _("Modem must be enabled to scan for available networks. Enable modem?");*/ notenabledmessage = _("Modem must be enabled to scan for available networks. Please enable modem."); regmessage = NULL; lockedmessage = _("Modem must be unlocked to scan for available networks. Please enter PIN code."); nonfuncmessage = _("Modem manager does not support scanning for available mobile networks."); limfuncmessage = _("Modem is connected now. Please disconnect to scan."); pagecaps = mmguicore_newtworks_scan_get_capabilities(mmguiapp->core); if (pagecaps & MMGUI_SCAN_CAPS_OBSERVE) { nonfunctional = FALSE; } else { nonfunctional = TRUE; } if (mmguicore_devices_get_connected(mmguiapp->core)) { limfunctional = TRUE; } else { limfunctional = FALSE; } break; case MMGUI_MAIN_PAGE_TRAFFIC: trytoenable = FALSE; trytounlock = FALSE; needreg = FALSE; /*enablemessage = NULL;*/ notenabledmessage = NULL; regmessage = NULL; lockedmessage = NULL; nonfuncmessage = NULL; limfuncmessage = NULL; nonfunctional = FALSE; limfunctional = FALSE; break; case MMGUI_MAIN_PAGE_CONTACTS: trytoenable = TRUE; trytounlock = TRUE; needreg = FALSE; /*enablemessage = _("Modem must be enabled to export contacts from it. Enable modem?");*/ notenabledmessage = _("Modem must be enabled to export contacts from it. Please enable modem."); regmessage = NULL; lockedmessage = _("Modem must be unlocked to export contacts from it. Please enter PIN code."); nonfuncmessage = _("Modem manager does not support modem contacts manipulation functions."); limfuncmessage = _("Modem manager does not support modem contacts edition functions."); pagecaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (pagecaps & MMGUI_CONTACTS_CAPS_EXPORT) { nonfunctional = FALSE; } else { nonfunctional = TRUE; } if (pagecaps & MMGUI_CONTACTS_CAPS_EDIT) { limfunctional = FALSE; } else { limfunctional = TRUE; } break; default: trytoenable = FALSE; trytounlock = FALSE; needreg = FALSE; /*enablemessage = NULL;*/ notenabledmessage = NULL; regmessage = NULL; lockedmessage = NULL; nonfuncmessage = NULL; limfuncmessage = NULL; prepmessage = NULL; nonfunctional = FALSE; limfunctional = FALSE; break; } if (!prepared) { g_debug("Not prepared\n"); mmgui_ui_infobar_show(mmguiapp, prepmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, FALSE); } else if (locked) { g_debug("SIM locked\n"); if (trytounlock) { locktype = mmguicore_devices_get_lock_type(mmguiapp->core); if (locktype == MMGUI_LOCK_TYPE_PIN) { mmgui_ui_infobar_show(mmguiapp, lockedmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, &mmgui_ui_infobar_pin_callback, _("Enter PIN")); } else if (locktype == MMGUI_LOCK_TYPE_PUK) { lockedmessage = _("SIM card is locked with PUK code. Please contact your mobile operator for further instructions."); mmgui_ui_infobar_show(mmguiapp, lockedmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); } else { lockedmessage = _("SIM card seems non-functional. Please contact your mobile operator for further instructions."); mmgui_ui_infobar_show(mmguiapp, lockedmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); } } else { if (mmguiapp->window->infobartimeout == 0) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_INTERRUPT, NULL); } } mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, FALSE); } else { /*operation = mmguicore_devices_get_current_operation(mmguiapp->core);*/ if ((trytoenable) && (!enabled)) { g_debug("Must be enabled\n"); mmgui_ui_infobar_show(mmguiapp, notenabledmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, &mmgui_ui_infobar_enable_callback, _("Enable")); mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, TRUE); } else { if ((needreg) && (!registered)) { g_debug("Must be registered\n"); mmgui_ui_infobar_show(mmguiapp, regmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, TRUE); } else if (nonfunctional) { g_debug("Nonfunctional\n"); mmgui_ui_infobar_show(mmguiapp, nonfuncmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, FALSE); } else if (limfunctional) { g_debug("Limited functional\n"); mmgui_ui_infobar_show(mmguiapp, limfuncmessage, MMGUI_MAIN_INFOBAR_TYPE_INFO, NULL, NULL); mmgui_main_ui_page_control_disable(mmguiapp, setpage, TRUE, TRUE); } else { g_debug("Fully functional\n"); /*Do not hide infobar with status information*/ if (mmguiapp->window->infobartimeout == 0) { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_INTERRUPT, NULL); } mmgui_main_ui_page_control_disable(mmguiapp, setpage, FALSE, FALSE); } } } return TRUE; } static void mmgui_main_ui_open_page(mmgui_application_t mmguiapp, guint page) { if ((mmguiapp == NULL) || (page > MMGUI_MAIN_PAGE_CONTACTS)) return; if ((page != MMGUI_MAIN_PAGE_DEVICES) && (mmguicore_devices_get_current(mmguiapp->core) == NULL)) return; /*Test device state*/ mmgui_main_ui_test_device_state(mmguiapp, page); /*Bind shortcuts*/ mmgui_main_ui_page_setup_shortcuts(mmguiapp, page); /*Open page*/ gtk_notebook_set_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook), page); /*Set section in application main menu*/ mmgui_main_ui_application_menu_set_page(mmguiapp, page); } static void mmgui_main_ui_application_menu_set_page(mmgui_application_t mmguiapp, guint page) { GAction *action; GVariant *sectionv; if ((mmguiapp == NULL) || (page > MMGUI_MAIN_PAGE_CONTACTS)) return; action = g_action_map_lookup_action(G_ACTION_MAP(mmguiapp->gtkapplication), "section"); if (action == NULL) return; switch (page) { case MMGUI_MAIN_PAGE_DEVICES: sectionv = g_variant_new_string("devices"); break; case MMGUI_MAIN_PAGE_SMS: sectionv = g_variant_new_string("sms"); break; case MMGUI_MAIN_PAGE_USSD: sectionv = g_variant_new_string("ussd"); break; case MMGUI_MAIN_PAGE_INFO: sectionv = g_variant_new_string("info"); break; case MMGUI_MAIN_PAGE_SCAN: sectionv = g_variant_new_string("scan"); break; case MMGUI_MAIN_PAGE_TRAFFIC: sectionv = g_variant_new_string("traffic"); break; case MMGUI_MAIN_PAGE_CONTACTS: sectionv = g_variant_new_string("contacts"); break; default: sectionv = g_variant_new_string("devices"); break; } /*Set action in application menu*/ g_simple_action_set_state(G_SIMPLE_ACTION(action), sectionv); } static void mmgui_main_ui_application_menu_set_state(mmgui_application_t mmguiapp, gboolean enabled) { GAction *action; if (mmguiapp == NULL) return; /*Pages list*/ action = g_action_map_lookup_action(G_ACTION_MAP(mmguiapp->gtkapplication), "section"); if (action != NULL) { g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled); } /*Preferences entry*/ action = g_action_map_lookup_action(G_ACTION_MAP(mmguiapp->gtkapplication), "preferences"); if (action != NULL) { g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled); } } void mmgui_main_ui_devices_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_DEVICES); } } void mmgui_main_ui_sms_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_SMS); } } void mmgui_main_ui_ussd_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_USSD); } } void mmgui_main_ui_info_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_INFO); } } void mmgui_main_ui_scan_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_SCAN); } } void mmgui_main_ui_traffic_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_TRAFFIC); } } void mmgui_main_ui_contacts_button_toggled_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(object))) { mmgui_main_ui_open_page(mmguiapp, MMGUI_MAIN_PAGE_CONTACTS); } } void mmgui_main_window_update_active_pages(mmgui_application_t mmguiapp) { guint setpage; if (mmguiapp == NULL) return; setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)); switch (setpage) { case MMGUI_MAIN_PAGE_DEVICES: break; case MMGUI_MAIN_PAGE_SMS: if (!mmguiapp->options->smspageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; case MMGUI_MAIN_PAGE_USSD: if (!mmguiapp->options->ussdpageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; case MMGUI_MAIN_PAGE_INFO: if (!mmguiapp->options->infopageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; case MMGUI_MAIN_PAGE_SCAN: if (!mmguiapp->options->scanpageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; case MMGUI_MAIN_PAGE_TRAFFIC: if (!mmguiapp->options->trafficpageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; case MMGUI_MAIN_PAGE_CONTACTS: if (!mmguiapp->options->contactspageenabled) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); } break; default: break; } /*Hiding toolbar buttons*/ gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->smsbutton), mmguiapp->options->smspageenabled); gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->ussdbutton), mmguiapp->options->ussdpageenabled); gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->infobutton), mmguiapp->options->infopageenabled); gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->scanbutton), mmguiapp->options->scanpageenabled); gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->trafficbutton), mmguiapp->options->trafficpageenabled); gtk_widget_set_visible(GTK_WIDGET(mmguiapp->window->contactsbutton), mmguiapp->options->contactspageenabled); /*Rebuilding menu section*/ #if GLIB_CHECK_VERSION(2,38,0) g_menu_remove_all(mmguiapp->window->appsection); mmguiapp->window->menuitemcount = 0; #else gint i; for (i = mmguiapp->window->menuitemcount-1; i >= 0; i--) { g_menu_remove(mmguiapp->window->appsection, i); } mmguiapp->window->menuitemcount = 0; #endif g_menu_append(mmguiapp->window->appsection, _("_Devices"), "app.section::devices"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F1", "app.section", "devices"); mmguiapp->window->menuitemcount++; if (mmguiapp->options->smspageenabled) { g_menu_append(mmguiapp->window->appsection, _("_SMS"), "app.section::sms"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F2", "app.section", "sms"); mmguiapp->window->menuitemcount++; } if (mmguiapp->options->ussdpageenabled) { g_menu_append(mmguiapp->window->appsection, _("_USSD"), "app.section::ussd"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F3", "app.section", "ussd"); mmguiapp->window->menuitemcount++; } if (mmguiapp->options->infopageenabled) { g_menu_append(mmguiapp->window->appsection, _("_Info"), "app.section::info"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F4", "app.section", "info"); mmguiapp->window->menuitemcount++; } if (mmguiapp->options->scanpageenabled) { g_menu_append(mmguiapp->window->appsection, _("S_can"), "app.section::scan"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F5", "app.section", "scan"); mmguiapp->window->menuitemcount++; } if (mmguiapp->options->trafficpageenabled) { g_menu_append(mmguiapp->window->appsection, _("_Traffic"), "app.section::traffic"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F6", "app.section", "traffic"); mmguiapp->window->menuitemcount++; } if (mmguiapp->options->contactspageenabled) { g_menu_append(mmguiapp->window->appsection, _("C_ontacts"), "app.section::contacts"); mmgui_add_accelerator_with_parameter(mmguiapp->gtkapplication, "F7", "app.section", "contacts"); mmguiapp->window->menuitemcount++; } } static enum _mmgui_main_exit_dialog_result mmgui_main_ui_window_hide_dialog(mmgui_application_t mmguiapp) { gint response; if (mmguiapp == NULL) return MMGUI_MAIN_EXIT_DIALOG_CANCEL; if ((mmguiapp->options == NULL) || (mmguiapp->settings == NULL)) return MMGUI_MAIN_EXIT_DIALOG_CANCEL; response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->exitdialog)); gtk_widget_hide(mmguiapp->window->exitdialog); if (response > 0) { /*Ask again checkbox*/ mmguiapp->options->askforhide = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->exitaskagain)); gmm_settings_set_boolean(mmguiapp->settings, "behaviour_ask_to_hide", mmguiapp->options->askforhide); /*Exit and hide radiobuttons*/ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->exitcloseradio))) { /*Exit application selected*/ mmguiapp->options->hidetotray = FALSE; gmm_settings_set_boolean(mmguiapp->settings, "behaviour_hide_to_tray", mmguiapp->options->hidetotray); return MMGUI_MAIN_EXIT_DIALOG_EXIT; } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->exithideradio))) { /*Hide to tray selected*/ mmguiapp->options->hidetotray = TRUE; gmm_settings_set_boolean(mmguiapp->settings, "behaviour_hide_to_tray", mmguiapp->options->hidetotray); return MMGUI_MAIN_EXIT_DIALOG_HIDE; } else { /*Cancel clicked*/ return MMGUI_MAIN_EXIT_DIALOG_CANCEL; } } else { return MMGUI_MAIN_EXIT_DIALOG_CANCEL; } } static void mmgui_main_ui_window_save_geometry(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; if (mmguiapp->options->savegeometry) { /*Get window geometry and coordinates*/ gtk_window_get_size(GTK_WINDOW(mmguiapp->window->window), &(mmguiapp->options->wgwidth), &(mmguiapp->options->wgheight)); /*Get new coordinates only if window visible or use saved coordinates otherwise*/ if (gtk_widget_get_visible(mmguiapp->window->window)) { gtk_window_get_position(GTK_WINDOW(mmguiapp->window->window), &(mmguiapp->options->wgposx), &(mmguiapp->options->wgposy)); } /*Save it*/ if ((mmguiapp->options->wgwidth >= 1) && (mmguiapp->options->wgheight >= 1)) { /*Window geometry*/ gmm_settings_set_int(mmguiapp->settings, "window_geometry_width", mmguiapp->options->wgwidth); gmm_settings_set_int(mmguiapp->settings, "window_geometry_height", mmguiapp->options->wgheight); gmm_settings_set_int(mmguiapp->settings, "window_geometry_x", mmguiapp->options->wgposx); gmm_settings_set_int(mmguiapp->settings, "window_geometry_y", mmguiapp->options->wgposy); g_debug("Geometry: width: %i, height: %i, x: %i, y: %i\n", mmguiapp->options->wgwidth, mmguiapp->options->wgheight, mmguiapp->options->wgposx, mmguiapp->options->wgposy); } } } gboolean mmgui_main_ui_window_delete_event_signal(GtkWidget *widget, GdkEvent *event, gpointer data) { mmgui_application_t mmguiapp; enum _mmgui_notifications_sound soundmode; enum _mmgui_main_exit_dialog_result dialogres; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return TRUE; if (mmguiapp->options->askforhide) { /*Ask at exit*/ dialogres = mmgui_main_ui_window_hide_dialog(mmguiapp); if (dialogres == MMGUI_MAIN_EXIT_DIALOG_HIDE) { /*Hide application*/ gtk_widget_hide_on_delete(mmguiapp->window->window); /*Show notification*/ if (!mmguiapp->options->hidenotifyshown) { if (mmguiapp->options->usesounds) { soundmode = MMGUI_NOTIFICATIONS_SOUND_INFO; } else { soundmode = MMGUI_NOTIFICATIONS_SOUND_NONE; } mmgui_notifications_show(mmguiapp->notifications, _("Modem Manager GUI window hidden"), _("Use tray icon or messaging menu to show window again"), soundmode, NULL, NULL); mmguiapp->options->hidenotifyshown = TRUE; gmm_settings_set_boolean(mmguiapp->settings, "window_hide_notify_shown", mmguiapp->options->hidenotifyshown); } /*Set tray menu mark*/ g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), FALSE); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); /*Save window state*/ mmguiapp->options->minimized = TRUE; gmm_settings_set_boolean(mmguiapp->settings, "window_state_minimized", mmguiapp->options->minimized); return TRUE; } else if (dialogres == MMGUI_MAIN_EXIT_DIALOG_EXIT) { /*Exit application*/ mmgui_main_ui_window_save_geometry(mmguiapp); return FALSE; } else { /*Do nothing*/ return TRUE; } } else { /*Do not ask at exit*/ if (mmguiapp->options->hidetotray) { gtk_widget_hide_on_delete(mmguiapp->window->window); /*Show notification*/ if (!mmguiapp->options->hidenotifyshown) { if (mmguiapp->options->usesounds) { soundmode = MMGUI_NOTIFICATIONS_SOUND_INFO; } else { soundmode = MMGUI_NOTIFICATIONS_SOUND_NONE; } mmgui_notifications_show(mmguiapp->notifications, _("Modem Manager GUI window hidden"), _("Use tray icon or messaging menu to show window again"), soundmode, NULL, NULL); mmguiapp->options->hidenotifyshown = TRUE; gmm_settings_set_boolean(mmguiapp->settings, "window_hide_notify_shown", mmguiapp->options->hidenotifyshown); } /*Set tray menu mark*/ g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), FALSE); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); /*Save window state*/ mmguiapp->options->minimized = TRUE; gmm_settings_set_boolean(mmguiapp->settings, "window_state_minimized", mmguiapp->options->minimized); return TRUE; } else { mmgui_main_ui_window_save_geometry(mmguiapp); return FALSE; } } } void mmgui_main_ui_window_destroy_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_application_terminate(mmguiapp); } static void mmgui_main_ui_exit_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_ui_window_save_geometry(mmguiapp); mmgui_main_application_terminate(mmguiapp); } static void mmgui_main_ui_help_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data) { mmgui_application_t mmguiapp; GError *error; GtkWidget *dialog; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; error = NULL; #if GTK_CHECK_VERSION(3,22,0) if (!gtk_show_uri_on_window(GTK_WINDOW(mmguiapp->window->window), "help:modem-manager-gui", gtk_get_current_event_time(), &error)) { #else if (!gtk_show_uri(gtk_window_get_screen(GTK_WINDOW(mmguiapp->window->window)), "help:modem-manager-gui", gtk_get_current_event_time(), &error)) { #endif dialog = gtk_message_dialog_new(GTK_WINDOW(mmguiapp->window->window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s: %s", _("Error while displaying the help contents"), error->message); gtk_window_set_title(GTK_WINDOW(dialog), "Modem Manager GUI"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_error_free(error); } } static void mmgui_main_ui_about_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; gtk_dialog_run(GTK_DIALOG(mmguiapp->window->aboutdialog)); gtk_widget_hide(mmguiapp->window->aboutdialog); } static void mmgui_main_ui_section_menu_item_activate_signal(GSimpleAction *action, GVariant *parameter, gpointer data) { mmgui_application_t mmguiapp; const gchar *state; GtkWidget *toolbutton; mmguiapp = (mmgui_application_t)data; if ((mmguiapp == NULL) || (parameter == NULL)) return; state = g_variant_get_string(parameter, NULL); g_simple_action_set_state(action, g_variant_new_string(state)); if (g_str_equal(state, "devices")) { toolbutton = mmguiapp->window->devbutton; } else if (g_str_equal(state, "sms")) { toolbutton = mmguiapp->window->smsbutton; } else if (g_str_equal(state, "ussd")) { toolbutton = mmguiapp->window->ussdbutton; } else if (g_str_equal(state, "info")) { toolbutton = mmguiapp->window->infobutton; } else if (g_str_equal(state, "scan")) { toolbutton = mmguiapp->window->scanbutton; } else if (g_str_equal(state, "traffic")) { toolbutton = mmguiapp->window->trafficbutton; } else if (g_str_equal(state, "contacts")) { toolbutton = mmguiapp->window->contactsbutton; } else { toolbutton = mmguiapp->window->devbutton; } if ((gtk_widget_get_sensitive(toolbutton)) && (gtk_widget_get_visible(toolbutton))) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(toolbutton), TRUE); g_debug("Application menu item activated: %s\n", state); } } void mmgui_main_ui_controls_disable(mmgui_application_t mmguiapp, gboolean disable, gboolean firstpage, gboolean updatestate) { guint page; if (mmguiapp == NULL) return; page = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)); /*Toolbar*/ gtk_widget_set_sensitive(mmguiapp->window->smsbutton, !disable); gtk_widget_set_sensitive(mmguiapp->window->ussdbutton, !disable); gtk_widget_set_sensitive(mmguiapp->window->infobutton, !disable); gtk_widget_set_sensitive(mmguiapp->window->scanbutton, !disable); gtk_widget_set_sensitive(mmguiapp->window->trafficbutton, !disable); gtk_widget_set_sensitive(mmguiapp->window->contactsbutton, !disable); /*Application menu*/ mmgui_main_ui_application_menu_set_state(mmguiapp, !disable); if (disable) { if (firstpage) { /*Toolbar*/ gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->devbutton), TRUE); gtk_notebook_set_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook), MMGUI_MAIN_PAGE_DEVICES); /*Application menu*/ mmgui_main_ui_application_menu_set_page(mmguiapp, MMGUI_MAIN_PAGE_DEVICES); } else { gtk_widget_set_sensitive(mmguiapp->window->devbutton, FALSE); mmgui_main_ui_page_control_disable(mmguiapp, page, TRUE, FALSE); } } else { if (!firstpage) { gtk_widget_set_sensitive(mmguiapp->window->devbutton, TRUE); } } /*Update state*/ if (updatestate) { mmgui_main_ui_test_device_state(mmguiapp, page); } } gboolean mmgui_main_ui_update_statusbar_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmguidevice_t device; gchar *statusmsg; gchar rxbuffer[32], txbuffer[32]; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (mmguiapp->core == NULL) return FALSE; device = mmguicore_devices_get_current(mmguiapp->core); if (device != NULL) { /*Set signal icon*/ if ((device->siglevel == 0) && (mmguiapp->window->signal0icon != NULL)) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal0icon); } else if ((device->siglevel > 0) && (device->siglevel <= 25) && (mmguiapp->window->signal25icon != NULL)) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal25icon); } else if ((device->siglevel > 25) && (device->siglevel <= 50) && (mmguiapp->window->signal50icon != NULL)) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal50icon); } else if ((device->siglevel > 50) && (device->siglevel <= 75) && (mmguiapp->window->signal75icon != NULL)) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal75icon); } else if ((device->siglevel > 75) && (mmguiapp->window->signal100icon != NULL)) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal100icon); } /*Show connection statistics*/ if (!device->connected) { if ((device->operatorname == NULL) || ((device->operatorname != NULL) && (device->operatorname[0] == '\0'))) { /*Operator name is unknown - show registration status*/ statusmsg = g_strdup(mmgui_str_format_reg_status(device->regstatus)); } else { /*No network connection*/ statusmsg = g_strdup_printf(_("%s disconnected"), device->operatorname); } } else { /*Network connection statistics*/ statusmsg = g_strdup_printf("%s ↓ %s ↑ %s", device->operatorname, mmgui_str_format_bytes(device->rxbytes, rxbuffer, sizeof(rxbuffer), FALSE), mmgui_str_format_bytes(device->txbytes, txbuffer, sizeof(txbuffer), FALSE)); } gtk_statusbar_pop(GTK_STATUSBAR(mmguiapp->window->statusbar), mmguiapp->window->sbcontext); mmguiapp->window->sbcontext = gtk_statusbar_get_context_id(GTK_STATUSBAR(mmguiapp->window->statusbar), statusmsg); gtk_statusbar_push(GTK_STATUSBAR(mmguiapp->window->statusbar), mmguiapp->window->sbcontext, statusmsg); g_free(statusmsg); } else { /*Zero signal level indicator*/ gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal0icon); /*Clear statusbar*/ gtk_statusbar_pop(GTK_STATUSBAR(mmguiapp->window->statusbar), mmguiapp->window->sbcontext); } return FALSE; } /*TRAY*/ #if RESOURCE_INDICATOR_ENABLED static gboolean mmgui_main_tray_handle_state_change_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmguidevice_t device; guint caps; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (mmguiapp->core == NULL) return FALSE; device = mmguicore_devices_get_current(mmguiapp->core); if (device != NULL) { caps = mmguicore_sms_get_capabilities(mmguiapp->core); gtk_widget_set_sensitive(mmguiapp->window->newsms_ind, caps & MMGUI_SMS_CAPS_SEND); } else { gtk_widget_set_sensitive(mmguiapp->window->newsms_ind, FALSE); } return FALSE; } static void mmgui_main_tray_icon_window_show_signal(GtkCheckMenuItem *checkmenuitem, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if ((mmguiapp->core == NULL) || (mmguiapp->window == NULL)) return; if (gtk_widget_get_visible(mmguiapp->window->window)) { /*Save window position*/ if (mmguiapp->options->savegeometry) { gtk_window_get_position(GTK_WINDOW(mmguiapp->window->window), &(mmguiapp->options->wgposx), &(mmguiapp->options->wgposy)); } /*Hide window*/ gtk_widget_hide(mmguiapp->window->window); mmguiapp->options->minimized = TRUE; g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), FALSE); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); } else { /*Restore window position*/ if (mmguiapp->options->savegeometry) { gtk_window_move(GTK_WINDOW(mmguiapp->window->window), mmguiapp->options->wgposx, mmguiapp->options->wgposy); } /*Show window*/ gtk_widget_show(mmguiapp->window->window); mmguiapp->options->minimized = FALSE; g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), TRUE); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); } /*Save window state*/ gmm_settings_set_boolean(mmguiapp->settings, "window_state_minimized", mmguiapp->options->minimized); } static void mmgui_main_tray_icon_new_sms_signal(GtkMenuItem *menuitem, gpointer data) { mmgui_application_t mmguiapp; guint smscaps; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if ((mmguiapp->core == NULL) || (mmguiapp->window == NULL)) return; if (!gtk_widget_get_visible(mmguiapp->window->window)) { gtk_widget_show(mmguiapp->window->window); g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), TRUE); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); } else { gtk_window_present(GTK_WINDOW(mmguiapp->window->window)); } if (mmguicore_devices_get_enabled(mmguiapp->core)) { smscaps = mmguicore_sms_get_capabilities(mmguiapp->core); if (smscaps & MMGUI_SMS_CAPS_SEND) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->smsbutton), TRUE); mmgui_main_sms_new(mmguiapp); } } } static void mmgui_main_tray_icon_exit_signal(GtkMenuItem *menuitem, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_ui_window_save_geometry(mmguiapp); mmgui_main_application_terminate(mmguiapp); } static void mmgui_main_tray_icon_build(mmgui_application_t mmguiapp) { gchar *iconfilepath; if (mmguiapp == NULL) return; /*Indicator*/ iconfilepath = g_build_filename(RESOURCE_SYMBOLIC_ICONS_DIR, "modem-manager-gui-symbolic.svg", NULL); mmguiapp->window->indicator = app_indicator_new(RESOURCE_LOCALE_DOMAIN, iconfilepath, APP_INDICATOR_CATEGORY_APPLICATION_STATUS); g_free(iconfilepath); /*Indicator menu*/ mmguiapp->window->indmenu = gtk_menu_new(); /*Show window entry*/ mmguiapp->window->showwin_ind = gtk_check_menu_item_new_with_label(_("Show window")); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), FALSE); mmguiapp->window->traysigid = g_signal_connect(G_OBJECT(mmguiapp->window->showwin_ind), "toggled", G_CALLBACK(mmgui_main_tray_icon_window_show_signal), mmguiapp); /*Separator*/ mmguiapp->window->sep1_ind = gtk_separator_menu_item_new(); /*New SMS entry*/ mmguiapp->window->newsms_ind = gtk_menu_item_new_with_label(_("New SMS")); gtk_widget_set_sensitive(mmguiapp->window->newsms_ind, FALSE); g_signal_connect(G_OBJECT(mmguiapp->window->newsms_ind), "activate", G_CALLBACK(mmgui_main_tray_icon_new_sms_signal), mmguiapp); /*Separator 2*/ mmguiapp->window->sep2_ind = gtk_separator_menu_item_new(); /*Quit entry*/ mmguiapp->window->quit_ind = gtk_menu_item_new_with_label(_("Quit")); g_signal_connect(G_OBJECT(mmguiapp->window->quit_ind), "activate", G_CALLBACK(mmgui_main_tray_icon_exit_signal), mmguiapp); /*Packaging*/ gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->indmenu), mmguiapp->window->showwin_ind); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->indmenu), mmguiapp->window->sep1_ind); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->indmenu), mmguiapp->window->newsms_ind); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->indmenu), mmguiapp->window->sep2_ind); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->indmenu), mmguiapp->window->quit_ind); gtk_widget_show_all(mmguiapp->window->indmenu); /*Set status*/ app_indicator_set_status(mmguiapp->window->indicator, APP_INDICATOR_STATUS_ACTIVE); app_indicator_set_attention_icon(mmguiapp->window->indicator, "indicator-messages-new"); /*Set menu*/ app_indicator_set_menu(mmguiapp->window->indicator, GTK_MENU(mmguiapp->window->indmenu)); } static void mmgui_main_tray_icon_init(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; /*Window state*/ g_signal_handler_block(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mmguiapp->window->showwin_ind), ((!mmguiapp->options->invisible) && (!mmguiapp->options->minimized))); g_signal_handler_unblock(G_OBJECT(mmguiapp->window->showwin_ind), mmguiapp->window->traysigid); } #endif /*Ayatana*/ static void mmgui_main_ayatana_event_callback(enum _mmgui_ayatana_event event, gpointer ayatana, gpointer data, gpointer userdata) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)userdata; if (userdata == NULL) return; gtk_window_present(GTK_WINDOW(mmguiapp->window->window)); if (event == MMGUI_AYATANA_EVENT_CLIENT) { if (mmguicore_devices_get_enabled(mmguiapp->core)) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->smsbutton), TRUE); } } } /*Initialization*/ static void mmgui_main_application_unresolved_error(mmgui_application_t mmguiapp, gchar *caption, gchar *text) { GtkWidget *dialog; if ((mmguiapp == NULL) || (caption == NULL) || (text == NULL)) return; /*Show error message (Interface may be not built, so using custom message box)*/ dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s\n%s", caption, text); gtk_window_set_title(GTK_WINDOW(dialog), "Modem Manager GUI"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy (dialog); /*Close application*/ mmgui_main_application_terminate(mmguiapp); } static gboolean mmgui_main_contacts_load_from_thread(gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (data == NULL) return G_SOURCE_REMOVE; /*SMS autoconpletion for contacts*/ mmgui_main_sms_load_contacts_from_system_addressbooks(mmguiapp); /*Import contacts from system address books*/ mmgui_main_contacts_load_from_system_addressbooks(mmguiapp); return G_SOURCE_REMOVE; } static gboolean mmgui_main_settings_ui_load(mmgui_application_t mmguiapp) { gchar *strparam; if (mmguiapp == NULL) return FALSE; if ((mmguiapp->window == NULL) || (mmguiapp->settings == NULL)) return FALSE; /*Toolbar buttons*/ mmguiapp->window->menuitemcount = 0; mmgui_main_window_update_active_pages(mmguiapp); /*Get last opened device and open it*/ strparam = gmm_settings_get_string(mmguiapp->settings, "device_identifier", MMGUI_MAIN_DEFAULT_DEVICE_IDENTIFIER); mmgui_main_device_select_from_list(mmguiapp, strparam); g_free(strparam); return TRUE; } static gboolean mmgui_main_settings_load(mmgui_application_t mmguiapp) { gchar *strparam; if (mmguiapp == NULL) return FALSE; if ((mmguiapp->options == NULL) || (mmguiapp->settings == NULL)) return FALSE; #if GTK_CHECK_VERSION(3,4,0) /*RX speed graph color (default 078B2DFF)*/ strparam = gmm_settings_get_string(mmguiapp->settings, "graph_rx_color", MMGUI_MAIN_DEFAULT_RX_GRAPH_RGBA_COLOR); if (!gdk_rgba_parse(&mmguiapp->options->rxtrafficcolor, strparam)) { gdk_rgba_parse(&mmguiapp->options->rxtrafficcolor, MMGUI_MAIN_DEFAULT_RX_GRAPH_RGBA_COLOR); } g_free(strparam); /*TX speed graph color (default 99114DFF)*/ strparam = gmm_settings_get_string(mmguiapp->settings, "graph_tx_color", MMGUI_MAIN_DEFAULT_TX_GRAPH_RGBA_COLOR); if (!gdk_rgba_parse(&mmguiapp->options->txtrafficcolor, strparam)) { gdk_rgba_parse(&mmguiapp->options->txtrafficcolor, MMGUI_MAIN_DEFAULT_TX_GRAPH_RGBA_COLOR); } g_free(strparam); #else /*RX speed graph color (default 078B2D)*/ strparam = gmm_settings_get_string(mmguiapp->settings, "graph_rx_color", MMGUI_MAIN_DEFAULT_RX_GRAPH_RGB_COLOR); if (!gdk_color_parse(strparam, &mmguiapp->options->rxtrafficcolor)) { gdk_color_parse(MMGUI_MAIN_DEFAULT_RX_GRAPH_RGB_COLOR, &mmguiapp->options->rxtrafficcolor); } g_free(strparam); /*TX speed graph color (default 99114D)*/ strparam = gmm_settings_get_string(mmguiapp->settings, "graph_tx_color", MMGUI_MAIN_DEFAULT_TX_GRAPH_RGB_COLOR); if (!gdk_color_parse(strparam, &mmguiapp->options->txtrafficcolor)) { gdk_color_parse(MMGUI_MAIN_DEFAULT_TX_GRAPH_RGB_COLOR, &mmguiapp->options->txtrafficcolor); } g_free(strparam); #endif mmguiapp->options->graphrighttoleft = gmm_settings_get_boolean(mmguiapp->settings, "graph_right_to_left", FALSE); /*SMS options*/ mmguiapp->options->concatsms = gmm_settings_get_boolean(mmguiapp->settings, "sms_concatenation", FALSE); mmguiapp->options->smsexpandfolders = gmm_settings_get_boolean(mmguiapp->settings, "sms_expand_folders", TRUE); mmguiapp->options->smsoldontop = gmm_settings_get_boolean(mmguiapp->settings, "sms_old_on_top", TRUE); mmguiapp->options->smsvalidityperiod = gmm_settings_get_int(mmguiapp->settings, "sms_validity_period", -1); mmguiapp->options->smsdeliveryreport = gmm_settings_get_boolean(mmguiapp->settings, "sms_send_delivery_report", FALSE); strparam = gmm_settings_get_string(mmguiapp->settings, "sms_custom_command", ""); mmguiapp->options->smscustomcommand = g_strcompress(strparam); g_free(strparam); /*Behaviour options*/ mmguiapp->options->hidetotray = gmm_settings_get_boolean(mmguiapp->settings, "behaviour_hide_to_tray", FALSE); mmguiapp->options->usesounds = gmm_settings_get_boolean(mmguiapp->settings, "behaviour_use_sounds", TRUE); mmguiapp->options->askforhide = gmm_settings_get_boolean(mmguiapp->settings, "behaviour_ask_to_hide", TRUE); mmguiapp->options->savegeometry = gmm_settings_get_boolean(mmguiapp->settings, "behaviour_save_geometry", FALSE); /*Modules settings (coreoptions)*/ mmguiapp->coreoptions->enabletimeout = gmm_settings_get_int(mmguiapp->settings, "modules_enable_device_timeout", 20); mmguiapp->coreoptions->sendsmstimeout = gmm_settings_get_int(mmguiapp->settings, "modules_send_sms_timeout", 35); mmguiapp->coreoptions->sendussdtimeout = gmm_settings_get_int(mmguiapp->settings, "modules_send_ussd_timeout", 25); mmguiapp->coreoptions->scannetworkstimeout = gmm_settings_get_int(mmguiapp->settings, "modules_scan_networks_timeout", 60); /*Preferred modules*/ if (mmguiapp->coreoptions->mmmodule == NULL) { mmguiapp->coreoptions->mmmodule = gmm_settings_get_string(mmguiapp->settings, "modules_preferred_modem_manager", NULL); } if (mmguiapp->coreoptions->cmmodule == NULL) { mmguiapp->coreoptions->cmmodule = gmm_settings_get_string(mmguiapp->settings, "modules_preferred_connection_manager", NULL); } /*Active pages*/ mmguiapp->options->smspageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_sms_enabled", TRUE); mmguiapp->options->ussdpageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_ussd_enabled", TRUE); mmguiapp->options->infopageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_info_enabled", TRUE); mmguiapp->options->scanpageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_scan_enabled", TRUE); mmguiapp->options->trafficpageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_traffic_enabled", TRUE); mmguiapp->options->contactspageenabled = gmm_settings_get_boolean(mmguiapp->settings, "pages_contacts_enabled", TRUE); /*Window geometry*/ mmguiapp->options->wgwidth = gmm_settings_get_int(mmguiapp->settings, "window_geometry_width", -1); mmguiapp->options->wgheight = gmm_settings_get_int(mmguiapp->settings, "window_geometry_height", -1); mmguiapp->options->wgposx = gmm_settings_get_int(mmguiapp->settings, "window_geometry_x", -1); mmguiapp->options->wgposy = gmm_settings_get_int(mmguiapp->settings, "window_geometry_y", -1); /*If window was minimized on exit*/ mmguiapp->options->minimized = gmm_settings_get_boolean(mmguiapp->settings, "window_state_minimized", FALSE); /*If hide notification already shown*/ mmguiapp->options->hidenotifyshown = gmm_settings_get_boolean(mmguiapp->settings, "window_hide_notify_shown", FALSE); return TRUE; } static GdkPixbuf *mmgui_main_application_load_image_to_pixbuf(GtkIconTheme *theme, const gchar *name, const gchar *path, gint size, gboolean scalable) { GdkPixbuf *pixbuf; GError *error; gchar *iconname, *filepath; if ((theme == NULL) || (name == NULL) || (path == NULL) || (size == 0)) return NULL; /*First try to load icon from theme*/ error = NULL; if (g_str_has_prefix(name, "modem-manager-gui")) { iconname = g_strdup(name); } else { iconname = g_strdup_printf("modem-manager-gui-%s", name); } g_debug("Loading icon \'%s\' from current icon theme", iconname); pixbuf = gtk_icon_theme_load_icon(theme, iconname, size, 0, &error); if (pixbuf == NULL) { if (error != NULL) { g_debug("Error while loading icon \'%s\' from current icon theme: %s", iconname, error->message); g_error_free(error); } /*Then try to load embedded icon*/ if (scalable) { filepath = g_strdup_printf("%s%s%s.svg", path, G_DIR_SEPARATOR_S, name); } else { filepath = g_strdup_printf("%s%s%s.png", path, G_DIR_SEPARATOR_S, name); } error = NULL; g_debug("Loading icon from file \'%s\'", filepath); pixbuf = gdk_pixbuf_new_from_file_at_size(filepath, size, size, &error); if (pixbuf == NULL) { if (error != NULL) { g_debug("Error while loading icon from file \'%s\': %s\n", filepath, error->message); g_error_free(error); } } g_free(filepath); } g_free(iconname); /*Show missing icon if requested one isn't loaded*/ if (pixbuf == NULL) { error = NULL; g_debug("Loading failback icon \'image-missing\' from current icon theme"); pixbuf = gtk_icon_theme_load_icon(theme, "image-missing", size, 0, &error); if (pixbuf == NULL) { if (error != NULL) { g_debug("Error while failback loading icon \'image-missing\' from current icon theme: %s\n", error->message); g_error_free(error); } } } return pixbuf; } static gboolean mmgui_main_application_build_user_interface(mmgui_application_t mmguiapp) { gchar *uifilepath; GtkBuilder *builder; GtkIconTheme *icontheme; GError *error; GtkStyleContext *context; GtkWidget *image; GdkPixbuf *pixbuf; gint i; static struct _mmgui_application_data shortcutsdata[MMGUI_MAIN_CONTROL_SHORTCUT_NUMBER]; /*Widgets*/ struct _mmgui_main_widgetset widgetset[] = { /*Window*/ {"window", &(mmguiapp->window->window)}, /*Controls*/ {"windowbox", &(mmguiapp->window->windowbox)}, {"toolbar", &(mmguiapp->window->toolbar)}, {"statusbar", &(mmguiapp->window->statusbar)}, {"infobar", &(mmguiapp->window->infobar)}, {"infobarspinner", &(mmguiapp->window->infobarspinner)}, {"infobarimage", &(mmguiapp->window->infobarimage)}, {"infobarlabel", &(mmguiapp->window->infobarlabel)}, {"infobarstopbutton", &(mmguiapp->window->infobarstopbutton)}, {"notebook", &(mmguiapp->window->notebook)}, {"signalimage", &(mmguiapp->window->signalimage)}, /*Toolbar buttons*/ {"devbutton", &(mmguiapp->window->devbutton)}, {"smsbutton", &(mmguiapp->window->smsbutton)}, {"ussdbutton", &(mmguiapp->window->ussdbutton)}, {"infobutton", &(mmguiapp->window->infobutton)}, {"scanbutton", &(mmguiapp->window->scanbutton)}, {"trafficbutton", &(mmguiapp->window->trafficbutton)}, {"contactsbutton", &(mmguiapp->window->contactsbutton)}, /*Dialogs*/ {"aboutdialog", &(mmguiapp->window->aboutdialog)}, {"prefdialog", &(mmguiapp->window->prefdialog)}, {"questiondialog", &(mmguiapp->window->questiondialog)}, {"errordialog", &(mmguiapp->window->errordialog)}, {"exitdialog", &(mmguiapp->window->exitdialog)}, {"pinentrydialog", &(mmguiapp->window->pinentrydialog)}, /*SMS send dialog*/ {"newsmsdialog", &(mmguiapp->window->newsmsdialog)}, {"smsnumberentry", &(mmguiapp->window->smsnumberentry)}, {"smsnumbercombo", &(mmguiapp->window->smsnumbercombo)}, {"smstextview", &(mmguiapp->window->smstextview)}, {"newsmssendtb", &(mmguiapp->window->newsmssendtb)}, {"newsmssavetb", &(mmguiapp->window->newsmssavetb)}, {"newsmsspellchecktb", &(mmguiapp->window->newsmsspellchecktb)}, {"newsmscounterlabel", &(mmguiapp->window->newsmscounterlabel)}, /*Devices page*/ {"devlist", &(mmguiapp->window->devlist)}, {"devconnctl", &(mmguiapp->window->devconnctl)}, {"devconneditor", &(mmguiapp->window->devconneditor)}, {"devconncb", &(mmguiapp->window->devconncb)}, /*Connections dialog*/ {"conneditdialog", &(mmguiapp->window->conneditdialog)}, {"connaddtoolbutton", &(mmguiapp->window->connaddtoolbutton)}, {"connremovetoolbutton", &(mmguiapp->window->connremovetoolbutton)}, {"contreeview", &(mmguiapp->window->contreeview)}, {"connnameentry", &(mmguiapp->window->connnameentry)}, {"connnameapnentry", &(mmguiapp->window->connnameapnentry)}, {"connnetroamingcheckbutton", &(mmguiapp->window->connnetroamingcheckbutton)}, {"connnetidspinbutton", &(mmguiapp->window->connnetidspinbutton)}, {"connauthnumberentry", &(mmguiapp->window->connauthnumberentry)}, {"connauthusernameentry", &(mmguiapp->window->connauthusernameentry)}, {"connauthpassentry", &(mmguiapp->window->connauthpassentry)}, {"conndns1entry", &(mmguiapp->window->conndns1entry)}, {"conndns2entry", &(mmguiapp->window->conndns2entry)}, /*PIN entry dialog*/ {"pinentry", &(mmguiapp->window->pinentry)}, {"pinentryapplybutton", &(mmguiapp->window->pinentryapplybutton)}, /*SMS page*/ {"smslist", &(mmguiapp->window->smslist)}, {"smstext", &(mmguiapp->window->smstext)}, {"newsmsbutton", &(mmguiapp->window->newsmsbutton)}, {"removesmsbutton", &(mmguiapp->window->removesmsbutton)}, {"answersmsbutton", &(mmguiapp->window->answersmsbutton)}, /*Info page*/ {"devicevlabel", &(mmguiapp->window->devicevlabel)}, {"operatorvlabel", &(mmguiapp->window->operatorvlabel)}, {"operatorcodevlabel", &(mmguiapp->window->operatorcodevlabel)}, {"regstatevlabel", &(mmguiapp->window->regstatevlabel)}, {"modevlabel", &(mmguiapp->window->modevlabel)}, {"imeivlabel", &(mmguiapp->window->imeivlabel)}, {"imsivlabel", &(mmguiapp->window->imsivlabel)}, {"signallevelprogressbar", &(mmguiapp->window->signallevelprogressbar)}, {"3gpplocationvlabel", &(mmguiapp->window->info3gpplocvlabel)}, {"gpslocationvlabel", &(mmguiapp->window->infogpslocvlabel)}, {"equipmentimage", &(mmguiapp->window->equipmentimage)}, {"networkimage", &(mmguiapp->window->networkimage)}, {"locationimage", &(mmguiapp->window->locationimage)}, /*USSD page*/ {"ussdentry", &(mmguiapp->window->ussdentry)}, {"ussdcombobox", &(mmguiapp->window->ussdcombobox)}, {"ussdeditor", &(mmguiapp->window->ussdeditor)}, {"ussdsend", &(mmguiapp->window->ussdsend)}, {"ussdtext", &(mmguiapp->window->ussdtext)}, /*Scan page*/ {"scanlist", &(mmguiapp->window->scanlist)}, {"startscanbutton", &(mmguiapp->window->startscanbutton)}, {"scancreateconnectionbutton", &(mmguiapp->window->scancreateconnectionbutton)}, /*Contacts page*/ {"newcontactbutton", &(mmguiapp->window->newcontactbutton)}, {"removecontactbutton", &(mmguiapp->window->removecontactbutton)}, {"smstocontactbutton", &(mmguiapp->window->smstocontactbutton)}, {"contactstreeview", &(mmguiapp->window->contactstreeview)}, /*New contact dialog*/ {"newcontactdialog", &(mmguiapp->window->newcontactdialog)}, {"contactnameentry", &(mmguiapp->window->contactnameentry)}, {"contactnumberentry", &(mmguiapp->window->contactnumberentry)}, {"contactemailentry", &(mmguiapp->window->contactemailentry)}, {"contactgroupentry", &(mmguiapp->window->contactgroupentry)}, {"contactname2entry", &(mmguiapp->window->contactname2entry)}, {"contactnumber2entry", &(mmguiapp->window->contactnumber2entry)}, {"newcontactaddbutton", &(mmguiapp->window->newcontactaddbutton)}, /*Traffic page*/ {"trafficparamslist", &(mmguiapp->window->trafficparamslist)}, {"trafficdrawingarea", &(mmguiapp->window->trafficdrawingarea)}, /*Traffic limits dialog*/ {"trafficlimitsdialog", &(mmguiapp->window->trafficlimitsdialog)}, {"trafficlimitcheckbutton", &(mmguiapp->window->trafficlimitcheckbutton)}, {"trafficamount", &(mmguiapp->window->trafficamount)}, {"trafficunits", &(mmguiapp->window->trafficunits)}, {"trafficmessage", &(mmguiapp->window->trafficmessage)}, {"trafficaction", &(mmguiapp->window->trafficaction)}, {"timelimitcheckbutton", &(mmguiapp->window->timelimitcheckbutton)}, {"timeamount", &(mmguiapp->window->timeamount)}, {"timeunits", &(mmguiapp->window->timeunits)}, {"timemessage", &(mmguiapp->window->timemessage)}, {"timeaction", &(mmguiapp->window->timeaction)}, /*Connections dialog*/ {"conndialog", &(mmguiapp->window->conndialog)}, {"connscrolledwindow", &(mmguiapp->window->connscrolledwindow)}, {"conntreeview", &(mmguiapp->window->conntreeview)}, {"conntermtoolbutton", &(mmguiapp->window->conntermtoolbutton)}, /*Traffic statistics dialog*/ {"trafficstatsdialog", &(mmguiapp->window->trafficstatsdialog)}, {"trafficstatstreeview", &(mmguiapp->window->trafficstatstreeview)}, {"trafficstatsmonthcb", &(mmguiapp->window->trafficstatsmonthcb)}, {"trafficstatsyearcb", &(mmguiapp->window->trafficstatsyearcb)}, /*USSD edition dialog*/ {"ussdeditdialog", &(mmguiapp->window->ussdeditdialog)}, {"ussdedittreeview", &(mmguiapp->window->ussdedittreeview)}, {"newussdtoolbutton", &(mmguiapp->window->newussdtoolbutton)}, {"removeussdtoolbutton", &(mmguiapp->window->removeussdtoolbutton)}, {"ussdencodingtoolbutton", &(mmguiapp->window->ussdencodingtoolbutton)}, /*Preferences dialog*/ {"prefsmsconcat", &(mmguiapp->window->prefsmsconcat)}, {"prefsmsexpand", &(mmguiapp->window->prefsmsexpand)}, {"prefssmsoldontop", &(mmguiapp->window->prefsmsoldontop)}, {"prefsmsvalidityscale", &(mmguiapp->window->prefsmsvalidityscale)}, {"prefsmsreportcb", &(mmguiapp->window->prefsmsreportcb)}, {"prefsmscommandentry", &(mmguiapp->window->prefsmscommandentry)}, {"preftrafficrxcolor", &(mmguiapp->window->preftrafficrxcolor)}, {"preftraffictxcolor", &(mmguiapp->window->preftraffictxcolor)}, {"preftrafficmovdircombo", &(mmguiapp->window->preftrafficmovdircombo)}, {"prefbehavioursounds", &(mmguiapp->window->prefbehavioursounds)}, {"prefbehaviourhide", &(mmguiapp->window->prefbehaviourhide)}, {"prefbehaviourgeom", &(mmguiapp->window->prefbehaviourgeom)}, {"prefbehaviourautostart", &(mmguiapp->window->prefbehaviourautostart)}, {"prefenabletimeoutscale", &(mmguiapp->window->prefenabletimeoutscale)}, {"prefsendsmstimeoutscale", &(mmguiapp->window->prefsendsmstimeoutscale)}, {"prefsendussdtimeoutscale", &(mmguiapp->window->prefsendussdtimeoutscale)}, {"prefscannetworkstimeoutscale", &(mmguiapp->window->prefscannetworkstimeoutscale)}, {"prefmodulesmmcombo", &(mmguiapp->window->prefmodulesmmcombo)}, {"prefmodulescmcombo", &(mmguiapp->window->prefmodulescmcombo)}, {"prefactivepagessmscb", &(mmguiapp->window->prefactivepagessmscb)}, {"prefactivepagesussdcb", &(mmguiapp->window->prefactivepagesussdcb)}, {"prefactivepagesinfocb", &(mmguiapp->window->prefactivepagesinfocb)}, {"prefactivepagesscancb", &(mmguiapp->window->prefactivepagesscancb)}, {"prefactivepagestrafficcb", &(mmguiapp->window->prefactivepagestrafficcb)}, {"prefactivepagescontactscb", &(mmguiapp->window->prefactivepagescontactscb)}, /*Exit dialog*/ {"exitaskagain", &(mmguiapp->window->exitaskagain)}, {"exitcloseradio", &(mmguiapp->window->exitcloseradio)}, {"exithideradio", &(mmguiapp->window->exithideradio)}, /*Welcome window*/ {"welcomewindow", &(mmguiapp->window->welcomewindow)}, {"welcomeimage", &(mmguiapp->window->welcomeimage)}, {"welcomenotebook", &(mmguiapp->window->welcomenotebook)}, {"welcomemmcombo", &(mmguiapp->window->welcomemmcombo)}, {"welcomecmcombo", &(mmguiapp->window->welcomecmcombo)}, {"welcomeenablecb", &(mmguiapp->window->welcomeenablecb)}, {"welcomebutton", &(mmguiapp->window->welcomebutton)}, {"welcomeacttreeview", &(mmguiapp->window->welcomeacttreeview)}, }; /*Toolbar image buttons*/ struct _mmgui_main_widgetset buttonimgset[] = { {"dev-tb", &(mmguiapp->window->devbutton)}, {"sms-tb", &(mmguiapp->window->smsbutton)}, {"ussd-tb", &(mmguiapp->window->ussdbutton)}, {"info-tb", &(mmguiapp->window->infobutton)}, {"scan-tb", &(mmguiapp->window->scanbutton)}, {"cont-tb", &(mmguiapp->window->contactsbutton)}, {"traffic-tb", &(mmguiapp->window->trafficbutton)} }; /*Image widgets*/ struct _mmgui_main_widgetset imgwidgetset[] = { {"info-equipment", &(mmguiapp->window->equipmentimage)}, {"info-network", &(mmguiapp->window->networkimage)}, {"info-location", &(mmguiapp->window->locationimage)} }; /*Pixbufs*/ struct _mmgui_main_pixbufset pixbufset[] = { {"signal-0", &(mmguiapp->window->signal0icon)}, {"signal-25", &(mmguiapp->window->signal25icon)}, {"signal-50", &(mmguiapp->window->signal50icon)}, {"signal-75", &(mmguiapp->window->signal75icon)}, {"signal-100", &(mmguiapp->window->signal100icon)}, {"sms-read", &(mmguiapp->window->smsreadicon)}, {"sms-unread", &(mmguiapp->window->smsunreadicon)}, {"message-received", &(mmguiapp->window->smsrecvfoldericon)}, {"message-sent", &(mmguiapp->window->smssentfoldericon)}, {"message-drafts", &(mmguiapp->window->smsdraftsfoldericon)}, }; /*Application windows*/ GtkWidget **appwindows[] = { &(mmguiapp->window->window), &(mmguiapp->window->prefdialog), &(mmguiapp->window->aboutdialog), &(mmguiapp->window->questiondialog), &(mmguiapp->window->errordialog), &(mmguiapp->window->newsmsdialog), &(mmguiapp->window->ussdeditdialog), &(mmguiapp->window->trafficlimitsdialog), &(mmguiapp->window->conndialog), &(mmguiapp->window->trafficstatsdialog), &(mmguiapp->window->conneditdialog), &(mmguiapp->window->newcontactdialog), &(mmguiapp->window->welcomewindow), &(mmguiapp->window->conneditdialog) }; /*Accelerator closures*/ struct _mmgui_main_closureset closureset[] = { /*Closures for Devices page*/ /*Open connections editor*/ {MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_EDITOR, &(mmguiapp->window->conneditorclosure)}, /*Activate/deactivate connection*/ {MMGUI_MAIN_CONTROL_SHORTCUT_DEVICES_CONNECTION_ACTIVATE, &(mmguiapp->window->connactivateclosure)}, /*Closures for SMS page*/ /*send sms message*/ {MMGUI_MAIN_CONTROL_SHORTCUT_SMS_NEW, &(mmguiapp->window->newsmsclosure)}, /*remove sms message*/ {MMGUI_MAIN_CONTROL_SHORTCUT_SMS_REMOVE, &(mmguiapp->window->removesmsclosure)}, /*answer sms message*/ {MMGUI_MAIN_CONTROL_SHORTCUT_SMS_ANSWER, &(mmguiapp->window->answersmsclosure)}, /*Closures for USSD page*/ /*edit ussd commands*/ {MMGUI_MAIN_CONTROL_SHORTCUT_USSD_EDITOR, &(mmguiapp->window->ussdeditorclosure)}, /*send ussd request*/ {MMGUI_MAIN_CONTROL_SHORTCUT_USSD_SEND, &(mmguiapp->window->ussdsendclosure)}, /*Closures for Scan page*/ /*scan networks*/ {MMGUI_MAIN_CONTROL_SHORTCUT_SCAN_START, &(mmguiapp->window->startscanclosure)}, /*Closures for Traffic page*/ /*limits*/ {MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_LIMIT, &(mmguiapp->window->trafficlimitclosure)}, /*connections*/ {MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_CONNECTIONS, &(mmguiapp->window->trafficconnclosure)}, /*statistics*/ {MMGUI_MAIN_CONTROL_SHORTCUT_TRAFFIC_STATS, &(mmguiapp->window->trafficstatsclosure)}, /*Closures for Contacts page*/ /*add contact*/ {MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_NEW, &(mmguiapp->window->newcontactclosure)}, /*remove contact*/ {MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_REMOVE, &(mmguiapp->window->removecontactclosure)}, /*send sms*/ {MMGUI_MAIN_CONTROL_SHORTCUT_CONTACTS_SMS, &(mmguiapp->window->smstocontactclosure)} }; if (mmguiapp == NULL) return FALSE; /*Building user interface*/ error = NULL; builder = gtk_builder_new(); uifilepath = g_build_filename(RESOURCE_UI_DIR, "modem-manager-gui.ui", NULL); if (gtk_builder_add_from_file(builder, uifilepath, &error) == 0) { g_printf("User interface file parse error: %s\n", (error->message != NULL) ? error->message : "Unknown"); g_error_free(error); g_free(uifilepath); return FALSE; } g_free(uifilepath); /*Translation domain*/ gtk_builder_set_translation_domain(builder, RESOURCE_LOCALE_DOMAIN); /*Loading widgets*/ for (i = 0; i < sizeof(widgetset)/sizeof(struct _mmgui_main_widgetset); i++) { *(widgetset[i].widget) = GTK_WIDGET(gtk_builder_get_object(builder, widgetset[i].name)); if (*(widgetset[i].widget) == NULL) { g_debug("Unable to reference widget %s", widgetset[i].name); } } /*Loading images*/ icontheme = gtk_icon_theme_get_default(); /*Main icon*/ mmguiapp->window->mainicon = mmgui_main_application_load_image_to_pixbuf(icontheme, "modem-manager-gui", RESOURCE_SCALABLE_ICONS_DIR, 128, TRUE); /*Symbolic icon*/ mmguiapp->window->symbolicicon = mmgui_main_application_load_image_to_pixbuf(icontheme, "modem-manager-gui-symbolic", RESOURCE_SYMBOLIC_ICONS_DIR, 16, TRUE); /*Images for toolbar buttons*/ for (i = 0; i < sizeof(buttonimgset)/sizeof(struct _mmgui_main_widgetset); i++) { pixbuf = mmgui_main_application_load_image_to_pixbuf(icontheme, buttonimgset[i].name, RESOURCE_PIXMAPS_DIR, 32, FALSE); if (pixbuf != NULL) { image = gtk_image_new_from_pixbuf(pixbuf); gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(*(buttonimgset[i].widget)), GTK_WIDGET(image)); gtk_widget_show(image); g_object_unref(pixbuf); } } /*Image widgets*/ for (i = 0; i < sizeof(imgwidgetset)/sizeof(struct _mmgui_main_widgetset); i++) { pixbuf = mmgui_main_application_load_image_to_pixbuf(icontheme, imgwidgetset[i].name, RESOURCE_PIXMAPS_DIR, 48, FALSE); if (pixbuf != NULL) { gtk_image_set_from_pixbuf(GTK_IMAGE(*(imgwidgetset[i].widget)), pixbuf); g_object_unref(pixbuf); } } /*Pixbufs*/ for (i = 0; i < sizeof(pixbufset)/sizeof(struct _mmgui_main_pixbufset); i++) { *(pixbufset[i].pixbuf) = mmgui_main_application_load_image_to_pixbuf(icontheme, pixbufset[i].name, RESOURCE_PIXMAPS_DIR, 22, FALSE); } /*Using images*/ gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(mmguiapp->window->aboutdialog), GDK_PIXBUF(mmguiapp->window->mainicon)); gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->welcomeimage), GDK_PIXBUF(mmguiapp->window->mainicon)); /*Collecting application windows*/ for (i = 0; i < sizeof(appwindows)/sizeof(GtkWidget **); i++) { gtk_window_set_application(GTK_WINDOW(*(appwindows[i])), GTK_APPLICATION(mmguiapp->gtkapplication)); if ((*(appwindows[i]) != NULL) && (mmguiapp->window->mainicon != NULL)) { gtk_window_set_icon(GTK_WINDOW(*(appwindows[i])), mmguiapp->window->mainicon); } } /*Setting per-page shortcuts*/ mmguiapp->window->pageshortcuts = NULL; mmguiapp->window->accelgroup = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(mmguiapp->window->window), mmguiapp->window->accelgroup); for (i=0; iwindow->window), "application", mmguiapp->gtkapplication, NULL); gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(mmguiapp->window->window), TRUE); /*Default signal level icon*/ if (mmguiapp->window->signal0icon != NULL) { gtk_image_set_from_pixbuf(GTK_IMAGE(mmguiapp->window->signalimage), mmguiapp->window->signal0icon); } /*Initialize lists and text fields*/ mmgui_main_device_list_init(mmguiapp); mmgui_main_device_connections_list_init(mmguiapp); mmgui_main_connection_editor_window_list_init(mmguiapp); mmgui_main_sms_list_init(mmguiapp); mmgui_main_ussd_list_init(mmguiapp); mmgui_main_ussd_accelerators_init(mmguiapp); mmgui_main_scan_list_init(mmguiapp); mmgui_main_contacts_list_init(mmguiapp); mmgui_main_traffic_list_init(mmguiapp); mmgui_main_traffic_accelerators_init(mmguiapp); mmgui_main_traffic_connections_list_init(mmguiapp); mmgui_main_traffic_traffic_statistics_list_init(mmguiapp); /*Toolbar style*/ context = gtk_widget_get_style_context(GTK_WIDGET(mmguiapp->window->toolbar)); gtk_style_context_add_class(context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR); /*Binding signal handlers defined by Glade*/ gtk_builder_connect_signals(builder, mmguiapp); /*Builder object is not needed anymore*/ g_object_unref(G_OBJECT(builder)); #if RESOURCE_INDICATOR_ENABLED mmgui_main_tray_icon_build(mmguiapp); #endif return TRUE; } static void mmgui_main_application_terminate(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; #if GLIB_CHECK_VERSION(2,32,0) g_application_quit(G_APPLICATION(mmguiapp->gtkapplication)); #else GtkWidget *win; GList *wlist, *wnext; wlist = gtk_application_get_windows(GTK_APPLICATION(mmguiapp->gtkapplication)); while (wlist) { win = wlist->data; wnext = wlist->next; gtk_widget_destroy(GTK_WIDGET(win)); wlist = wnext; } #endif } static void mmgui_main_application_startup_signal(GtkApplication *application, gpointer data) { mmgui_application_t mmguiapp; GtkSettings *gtksettings; gboolean showappmenu, showmenubar; GMenu *menu, *actsection, *prefsection, *helpsection, *quitsection; static GActionEntry app_actions[] = { { "section", mmgui_main_ui_section_menu_item_activate_signal, "s", "'devices'", NULL }, { "preferences", mmgui_preferences_window_activate_signal, NULL, NULL, NULL }, { "help", mmgui_main_ui_help_menu_item_activate_signal, NULL, NULL, NULL }, { "about", mmgui_main_ui_about_menu_item_activate_signal, NULL, NULL, NULL }, { "quit", mmgui_main_ui_exit_menu_item_activate_signal, NULL, NULL, NULL }, }; mmguiapp = (mmgui_application_t)data; if ((application == NULL) || (mmguiapp == NULL)) return; g_action_map_add_action_entries(G_ACTION_MAP(application), app_actions, G_N_ELEMENTS(app_actions), mmguiapp); showappmenu = FALSE; showmenubar = FALSE; gtksettings = gtk_settings_get_default(); g_object_get(G_OBJECT(gtksettings), "gtk-shell-shows-app-menu", &showappmenu, "gtk-shell-shows-menubar", &showmenubar, NULL); /*Main menu*/ menu = g_menu_new(); if ((showmenubar) || ((!showappmenu) && (!showmenubar))) { /*Classic menubar*/ /*Pages - empty section to be filled later*/ mmguiapp->window->appsection = g_menu_new(); /*Quit*/ quitsection = g_menu_new(); g_menu_append(quitsection, _("_Quit"), "app.quit"); mmgui_add_accelerator(application, "q", "app.quit"); /*Actions menu*/ actsection = g_menu_new(); g_menu_append_section(actsection, NULL, G_MENU_MODEL(mmguiapp->window->appsection)); g_menu_append_section(actsection, NULL, G_MENU_MODEL(quitsection)); g_menu_append_submenu(menu, _("_Actions"), G_MENU_MODEL(actsection)); /*Preferences*/ prefsection = g_menu_new(); g_menu_append(prefsection, _("_Preferences"), "app.preferences"); mmgui_add_accelerator(application, "p", "app.preferences"); /*Edit menu*/ g_menu_append_submenu(menu, _("_Edit"), G_MENU_MODEL(prefsection)); /*Help*/ helpsection = g_menu_new(); g_menu_append(helpsection, _("_Help"), "app.help"); mmgui_add_accelerator(application, "F1", "app.help"); g_menu_append(helpsection, _("_About"), "app.about"); /*Help menu*/ g_menu_append_submenu(menu, _("_Help"), G_MENU_MODEL(helpsection)); /*Set application menubar*/ gtk_application_set_menubar(application, G_MENU_MODEL(menu)); } else if (showappmenu) { /*GNOME 3 - style appmenu*/ /*Toolbar actions - empty section to be filled later*/ mmguiapp->window->appsection = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(mmguiapp->window->appsection)); /*Preferences*/ prefsection = g_menu_new(); g_menu_append(prefsection, _("Preferences"), "app.preferences"); mmgui_add_accelerator(application, "p", "app.preferences"); g_menu_append_section(menu, NULL, G_MENU_MODEL(prefsection)); /*Help*/ helpsection = g_menu_new(); g_menu_append(helpsection, _("Help"), "app.help"); mmgui_add_accelerator(application, "F1", "app.help"); g_menu_append(helpsection, _("About"), "app.about"); g_menu_append_section(menu, NULL, G_MENU_MODEL(helpsection)); /*Quit*/ quitsection = g_menu_new(); g_menu_append(quitsection, _("Quit"), "app.quit"); mmgui_add_accelerator(application, "q", "app.quit"); g_menu_append_section(menu, NULL, G_MENU_MODEL(quitsection)); /*Set application menu*/ gtk_application_set_app_menu(application, G_MENU_MODEL(menu)); } g_object_unref(menu); } static void mmgui_main_continue_initialization(mmgui_application_t mmguiapp, mmguicore_t mmguicore) { if (mmguiapp == NULL) return; /*Upadate library cache: name needed libraries first*/ mmguiapp->libcache = mmgui_libpaths_cache_new("libnotify", "libebook-1.2", "libmessaging-menu", "libindicate", NULL); /*Notifications object*/ mmguiapp->notifications = mmgui_notifications_new(mmguiapp->libcache, mmguiapp->window->mainicon); /*Address books object*/ mmguiapp->addressbooks = mmgui_addressbooks_new(mmgui_main_event_callback, mmguiapp->libcache, mmguiapp); /*Open ayatana interface*/ mmguiapp->ayatana = mmgui_ayatana_new(mmguiapp->libcache, mmgui_main_ayatana_event_callback, mmguiapp); /*Load providers database*/ mmguiapp->providersdb = mmgui_providers_db_create(); /*Get available devices*/ if (mmguicore_devices_enum(mmguiapp->core)) { mmgui_main_device_list_fill(mmguiapp); } /*Open home page*/ mmgui_main_ui_test_device_state(mmguiapp, MMGUI_MAIN_PAGE_DEVICES); mmgui_main_ui_page_setup_shortcuts(mmguiapp, MMGUI_MAIN_PAGE_DEVICES); /*Load UI-specific settings and open device if any*/ mmgui_main_settings_ui_load(mmguiapp); /*Finally show window*/ if ((!mmguiapp->options->invisible) && (!mmguiapp->options->minimized)) { gtk_widget_show(mmguiapp->window->window); } /*Init SMS spellchecker*/ #if RESOURCE_SPELLCHECKER_ENABLED mmgui_main_sms_spellcheck_init(mmguiapp); #endif #if RESOURCE_INDICATOR_ENABLED mmgui_main_tray_icon_init(mmguiapp); #endif /*Restore window geometry*/ if (mmguiapp->options->savegeometry) { if ((mmguiapp->options->wgwidth >= 1) && (mmguiapp->options->wgheight >= 1)) { gtk_window_resize(GTK_WINDOW(mmguiapp->window->window), mmguiapp->options->wgwidth, mmguiapp->options->wgheight); gtk_window_move(GTK_WINDOW(mmguiapp->window->window), mmguiapp->options->wgposx, mmguiapp->options->wgposy); } } /*Redraw traffic graph signal*/ g_signal_connect(G_OBJECT(mmguiapp->window->trafficdrawingarea), "draw", G_CALLBACK(mmgui_main_traffic_speed_plot_draw), mmguiapp); } static void mmgui_main_application_activate_signal(GtkApplication *application, gpointer data) { mmgui_application_t mmguiapp; GList *windowlist; mmguiapp = (mmgui_application_t)data; if ((application == NULL) || (mmguiapp == NULL)) return; windowlist = gtk_application_get_windows(GTK_APPLICATION(application)); if (windowlist != NULL) { /*Present main window*/ gtk_window_present(GTK_WINDOW(windowlist->data)); /*Save window state*/ mmguiapp->options->minimized = FALSE; gmm_settings_set_boolean(mmguiapp->settings, "window_state_minimized", mmguiapp->options->minimized); } else { if (mmgui_main_application_build_user_interface(mmguiapp)) { /*Add main window to application window list*/ gtk_application_add_window(GTK_APPLICATION(application), GTK_WINDOW(mmguiapp->window->window)); /*Settings object*/ mmguiapp->settings = gmm_settings_open(RESOURCE_LOCALE_DOMAIN, "settings.conf"); /*Load global settings*/ mmgui_main_settings_load(mmguiapp); /*Core object*/ mmguiapp->core = mmguicore_init(mmgui_main_event_callback, mmguiapp->coreoptions, mmguiapp); if (mmguiapp->core == NULL) { mmgui_main_application_unresolved_error(mmguiapp, _("Error while initialization"), _("Unable to find MMGUI modules. Please check if application installed correctly")); return; } /*Show start dialog to select preferred modules*/ if ((mmguiapp->coreoptions->mmmodule == NULL) || (mmguiapp->coreoptions->cmmodule == NULL)) { mmgui_welcome_window_services_page_open(mmguiapp); } else { mmguicore_start(mmguiapp->core); } } else { /*If GtkBuilder is unable to load .ui file*/ mmgui_main_application_unresolved_error(mmguiapp, _("Error while initialization"), _("Interface building error")); return; } } } static void mmgui_main_application_shutdown_signal(GtkApplication *application, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if ((application == NULL) || (mmguiapp == NULL)) return; /*Close library cache*/ mmgui_libpaths_cache_close(mmguiapp->libcache); /*Close notifications interface*/ mmgui_notifications_close(mmguiapp->notifications); /*Close addressbooks interface*/ mmgui_addressbooks_close(mmguiapp->addressbooks); /*Close providers database*/ mmgui_providers_db_close(mmguiapp->providersdb); /*Close ayatana interface*/ mmgui_ayatana_close(mmguiapp->ayatana); /*Close core interface*/ mmguicore_close(mmguiapp->core); /*Close settings interface*/ gmm_settings_close(mmguiapp->settings); } static void mmgui_main_modules_list(mmgui_application_t mmguiapp) { GSList *modulelist; GSList *iterator; mmguimodule_t module; guint mtype; guint mtypes[2] = {MMGUI_MODULE_TYPE_MODEM_MANAGER, MMGUI_MODULE_TYPE_CONNECTION_MANGER}; if (mmguiapp == NULL) return; /*Create MMGUI core object*/ mmguiapp->core = mmguicore_init(NULL, NULL, NULL); if (mmguiapp->core == NULL) { g_printf(_("Unable to find MMGUI modules. Please check if application installed correctly")); return; } /*Enumerate modules*/ modulelist = mmguicore_modules_get_list(mmguiapp->core); if (modulelist != NULL) { for (mtype = 0; mtype < sizeof(mtypes)/sizeof(guint); mtype++) { /*New module type*/ switch (mtype) { case MMGUI_MODULE_TYPE_MODEM_MANAGER: g_printf(_("Modem management modules:\n")); g_printf(" %21s | %s\n", _("Module"), _("Description")); break; case MMGUI_MODULE_TYPE_CONNECTION_MANGER: g_printf(_("Connection management modules:\n")); g_printf(" %21s | %s\n", _("Module"), _("Description")); break; default: break; } for (iterator=modulelist; iterator; iterator=iterator->next) { module = (mmguimodule_t)iterator->data; if (module->type == mtypes[mtype]) { /*New module*/ g_printf("%3s%3s %15s | %s\n", (module->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA) ? "[A]" : "[-]", module->applicable ? "[R]" : "[-]", module->shortname, module->description); } } } g_slist_free(modulelist); } mmguicore_close(mmguiapp->core); } #ifdef __GLIBC__ static void mmgui_main_application_backtrace_signal_handler(int sig, siginfo_t *info, ucontext_t *ucontext) { void *trace[10]; gchar **tracepoints = (char **)NULL; gint i, tracelen = 0; if (sig == SIGSEGV) { tracelen = backtrace(trace, 10); #if (defined(__i386__)) trace[1] = (void *) ucontext->uc_mcontext.gregs[REG_EIP]; #elif (defined(__x86_64__)) trace[1] = (void *) ucontext->uc_mcontext.gregs[REG_RIP]; #elif (defined(__ppc__) || defined(__powerpc__)) trace[1] = (void *) ucontext->uc_mcontext.regs->nip; #elif (defined(__arm__)) trace[1] = (void *) ucontext->uc_mcontext.arm_pc; #endif g_printf(_("Segmentation fault at address: %p\n"), info->si_addr); if (tracelen > 0) { g_printf(_("Stack trace:\n")); tracepoints = backtrace_symbols(trace, tracelen); for (i=1; ioptions = g_new0(struct _mmgui_cli_options, 1); mmguiapp->window = g_new0(struct _mmgui_main_window, 1); mmguiapp->coreoptions = g_new0(struct _mmgui_core_options, 1); /*Default core options*/ mmguiapp->options->invisible = FALSE; mmguiapp->coreoptions->mmmodule = NULL; mmguiapp->coreoptions->cmmodule = NULL; mmguiapp->coreoptions->trafficenabled = FALSE; mmguiapp->coreoptions->trafficamount = 150; mmguiapp->coreoptions->trafficunits = 0; mmguiapp->coreoptions->trafficmessage = NULL; mmguiapp->coreoptions->trafficaction = 0; mmguiapp->coreoptions->trafficfull = 0; mmguiapp->coreoptions->trafficexecuted = FALSE; mmguiapp->coreoptions->timeenabled = FALSE; mmguiapp->coreoptions->timeamount = 60; mmguiapp->coreoptions->timeunits = 0; mmguiapp->coreoptions->timemessage = NULL; mmguiapp->coreoptions->timeaction = 0; mmguiapp->coreoptions->timefull = 0; mmguiapp->coreoptions->timeexecuted = FALSE; listmodules = FALSE; /*Predefined CLI options*/ GOptionEntry entries[] = { { "invisible", 'i', 0, G_OPTION_ARG_NONE, &mmguiapp->options->invisible, _("Do not show window on start"), NULL }, { "mmmodule", 'm', 0, G_OPTION_ARG_STRING, &mmguiapp->coreoptions->mmmodule, _("Use specified modem management module"), NULL }, { "cmmodule", 'c', 0, G_OPTION_ARG_STRING, &mmguiapp->coreoptions->cmmodule, _("Use specified connection management module"), NULL }, { "listmodules", 'l', 0, G_OPTION_ARG_NONE, &listmodules, _("List all available modules and exit"), NULL }, { NULL } }; /*Locale*/ #ifndef LC_ALL #define LC_ALL 0 #endif /*Backtrace handler*/ #ifdef __GLIBC__ struct sigaction btsa; btsa.sa_sigaction = (void *)mmgui_main_application_backtrace_signal_handler; sigemptyset(&btsa.sa_mask); btsa.sa_flags = SA_RESTART | SA_SIGINFO; /*Segmentation fault signal*/ sigaction(SIGSEGV, &btsa, NULL); #endif /*Termination handler*/ termsa.sa_sigaction = (void *)mmgui_main_application_termination_signal_handler; sigemptyset(&termsa.sa_mask); termsa.sa_flags = SA_RESTART | SA_SIGINFO; /*Termination, interrruption and hungup signals*/ sigaction(SIGTERM, &termsa, NULL); sigaction(SIGINT, &termsa, NULL); sigaction(SIGHUP, &termsa, NULL); setlocale(LC_ALL, ""); bindtextdomain(RESOURCE_LOCALE_DOMAIN, RESOURCE_LOCALE_DIR); bind_textdomain_codeset(RESOURCE_LOCALE_DOMAIN, "UTF-8"); textdomain(RESOURCE_LOCALE_DOMAIN); g_set_application_name("Modem Manager GUI"); /*CLI options parsing*/ optcontext = g_option_context_new(_("- tool for EDGE/3G/4G modem specific functions control")); g_option_context_add_main_entries(optcontext, entries, RESOURCE_LOCALE_DOMAIN); g_option_context_add_group(optcontext, gtk_get_option_group(TRUE)); error = NULL; if (!g_option_context_parse(optcontext, &argc, &argv, &error)) { g_printf(_("Command line option parsing failed: %s\n"), (error->message != NULL) ? error->message : "Unknown"); g_option_context_free(optcontext); g_error_free(error); g_free(mmguiapp->options); g_free(mmguiapp->window); g_free(mmguiapp); return EXIT_FAILURE; } g_option_context_free(optcontext); if (listmodules) { /*Modules listing*/ mmgui_main_modules_list(mmguiapp); /*Exit*/ g_free(mmguiapp->coreoptions); g_free(mmguiapp->options); g_free(mmguiapp->window); g_free(mmguiapp); return EXIT_SUCCESS; } /*Run GTK+ application*/ mmguiapp->gtkapplication = gtk_application_new("ru.linuxonly.modem-manager-gui", 0); g_signal_connect(mmguiapp->gtkapplication, "startup", G_CALLBACK(mmgui_main_application_startup_signal), mmguiapp); g_signal_connect(mmguiapp->gtkapplication, "activate", G_CALLBACK(mmgui_main_application_activate_signal), mmguiapp); g_signal_connect(mmguiapp->gtkapplication, "shutdown", G_CALLBACK(mmgui_main_application_shutdown_signal), mmguiapp); status = g_application_run(G_APPLICATION(mmguiapp->gtkapplication), argc, argv); /*Free previously allocated resources*/ g_object_unref(G_OBJECT(mmguiapp->gtkapplication)); if (mmguiapp->options != NULL) { if (mmguiapp->options->smscustomcommand != NULL) { g_free(mmguiapp->options->smscustomcommand); } g_free(mmguiapp->options); } if (mmguiapp->window != NULL) { g_free(mmguiapp->window); } if (mmguiapp->coreoptions != NULL) { if (mmguiapp->coreoptions->mmmodule != NULL) { g_free(mmguiapp->coreoptions->mmmodule); } if (mmguiapp->coreoptions->cmmodule != NULL) { g_free(mmguiapp->coreoptions->cmmodule); } if (mmguiapp->coreoptions->trafficmessage != NULL) { g_free(mmguiapp->coreoptions->trafficmessage); } if (mmguiapp->coreoptions->timemessage != NULL) { g_free(mmguiapp->coreoptions->timemessage); } g_free(mmguiapp->coreoptions); } if (mmguiapp != NULL) { g_free(mmguiapp); } return status; } modem-manager-gui-0.0.19.1/src/devices-page.h000664 001750 001750 00000006026 13261703575 020472 0ustar00alexalex000000 000000 /* * devices-page.h * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __DEVICES_PAGE_H__ #define __DEVICES_PAGE_H__ #include #include "main.h" enum _mmgui_main_devlist_columns { MMGUI_MAIN_DEVLIST_ENABLED = 0, MMGUI_MAIN_DEVLIST_DESCRIPTION, MMGUI_MAIN_DEVLIST_ID, MMGUI_MAIN_DEVLIST_IDENTIFIER, MMGUI_MAIN_DEVLIST_SENSITIVE, MMGUI_MAIN_DEVLIST_COLUMNS }; enum _mmgui_main_connlist_columns { MMGUI_MAIN_CONNLIST_NAME = 0, MMGUI_MAIN_CONNLIST_UUID, MMGUI_MAIN_CONNLIST_TYPE, MMGUI_MAIN_CONNLIST_COLUMNS }; /*Devices*/ gboolean mmgui_main_device_handle_added_from_thread(gpointer data); gboolean mmgui_main_device_handle_removed_from_thread(gpointer data); void mmgui_main_device_handle_enabled_local_status(mmgui_application_t mmguiapp); gboolean mmgui_main_device_handle_enabled_status_from_thread(gpointer data); gboolean mmgui_main_device_handle_blocked_status_from_thread(gpointer data); gboolean mmgui_main_device_handle_prepared_status_from_thread(gpointer data); gboolean mmgui_main_device_handle_connection_status_from_thread(gpointer data); void mmgui_main_device_list_block_selection(mmgui_application_t mmguiapp, gboolean block); gboolean mmgui_main_device_select_from_list(mmgui_application_t mmguiapp, gchar *identifier); void mmgui_main_connection_update_name_in_list(mmgui_application_t mmguiapp, const gchar *name, const gchar *uuid); void mmgui_main_connection_remove_from_list(mmgui_application_t mmguiapp, const gchar *uuid); void mmgui_main_connection_add_to_list(mmgui_application_t mmguiapp, const gchar *name, const gchar *uuid, guint type, GtkTreeModel *model); gboolean mmgui_main_device_connection_select_from_list(mmgui_application_t mmguiapp, const gchar *uuid); gchar *mmgui_main_connection_get_active_uuid(mmgui_application_t mmguiapp); void mmgui_main_device_list_fill(mmgui_application_t mmguiapp); void mmgui_main_device_list_init(mmgui_application_t mmguiapp); void mmgui_main_device_connections_list_init(mmgui_application_t mmguiapp); void mmgui_main_device_connections_list_fill(mmgui_application_t mmguiapp); void mmgui_main_device_restore_settings_for_modem(mmgui_application_t mmguiapp); void mmgui_main_device_connections_update_state(mmgui_application_t mmguiapp); void mmgui_main_device_switch_connection_state(mmgui_application_t mmguiapp); #endif /* __DEVICES_PAGE_H__ */ modem-manager-gui-0.0.19.1/man/fr/meson.build000664 001750 001750 00000000344 13261703575 020517 0ustar00alexalex000000 000000 custom_target('man-fr', input: 'fr.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'fr', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/Makefile000664 001750 001750 00000002732 13261703575 016636 0ustar00alexalex000000 000000 include Makefile_h DESTDIR=$(PREFIX)/bin all: modem-manager-gui modem-manager-gui: (cd src && ${MAKE} all) (cd src/modules && ${MAKE} all) (cd src/plugins && ${MAKE} all) (cd po && ${MAKE} all) (cd man && ${MAKE} all) (cd help && ${MAKE} all) (cd appdata && ${MAKE} all) (cd polkit && ${MAKE} all) install: (cd src && ${MAKE} install) (cd src/modules && ${MAKE} install) (cd src/plugins && ${MAKE} install) (cd src/scripts && ${MAKE} install) (cd resources && ${MAKE} install) (cd po && ${MAKE} install) (cd man && ${MAKE} install) (cd help && ${MAKE} install) (cd appdata && ${MAKE} install) (cd polkit && ${MAKE} install) uninstall: (cd src && ${MAKE} uninstall) (cd src/modules && ${MAKE} uninstall) (cd src/plugins && ${MAKE} uninstall) (cd src/scripts && ${MAKE} uninstall) (cd resources && ${MAKE} uninstall) (cd po && ${MAKE} uninstall) (cd man && ${MAKE} uninstall) (cd help && ${MAKE} uninstall) (cd appdata && ${MAKE} uninstall) (cd polkit && ${MAKE} uninstall) clean: (cd src && ${MAKE} clean) (cd src/modules && ${MAKE} clean) (cd src/plugins && ${MAKE} clean) (cd po && ${MAKE} clean) (cd man && ${MAKE} clean) (cd help && ${MAKE} clean) (cd appdata && ${MAKE} clean) (cd polkit && ${MAKE} clean) messages: (cd appdata && ${MAKE} messages) (cd help && ${MAKE} messages) (cd man && ${MAKE} messages) (cd po && ${MAKE} messages) (cd polkit && ${MAKE} messages) upload-translations-sources: tx push -s download-translations: tx pull -a modem-manager-gui-0.0.19.1/src/modules/pppd245.c000664 001750 001750 00000043231 13261703575 020776 0ustar00alexalex000000 000000 /* * pppd245.c * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../mmguicore.h" #define MMGUI_MODULE_SERVICE_NAME "/usr/sbin/pppd" #define MMGUI_MODULE_SYSTEMD_NAME "NULL" #define MMGUI_MODULE_IDENTIFIER 245 #define MMGUI_MODULE_DESCRIPTION "pppd >= 2.4.5" #define MMGUI_MODULE_COMPATIBILITY "org.freedesktop.ModemManager;org.freedesktop.ModemManager1;org.ofono;" //Internal definitions #define MODULE_INT_PPPD_DB_FILE_PATH_1 "/var/run/pppd2.tdb" #define MODULE_INT_PPPD_DB_FILE_PATH_2 "/var/run/ppp/pppd2.tdb" #define MODULE_INT_PPPD_LOCK_FILE_PATH "/var/run/%s.pid" #define MODULE_INT_PPPD_DB_FILE_START_PARAMETER "ORIG_UID=" #define MODULE_INT_PPPD_DB_FILE_END_PARAMETER "USEPEERDNS=" #define MODULE_INT_PPPD_DB_FILE_DEVICE_PARAMETER "DEVICE=" #define MODULE_INT_PPPD_DB_FILE_INTERFACE_PARAMETER "IFNAME=" #define MODULE_INT_PPPD_DB_FILE_PID_PARAMETER "PPPD_PID=" #define MODULE_INT_PPPD_SYSFS_DEVICE_PATH "/sys/dev/char/%u:%u" #define MODULE_INT_PPPD_SYSFS_START_PARAMETER "devices/pci" #define MODULE_INT_PPPD_SYSFS_END_PARAMETER '/' //Private module variables struct _mmguimoduledata { //Device serial gchar devserial[32]; //Connected device information gchar conndevice[256]; gchar connserial[32]; gchar connifname[IFNAMSIZ]; //pppd service pid pid_t pid; //Last error message gchar *errormessage; }; typedef struct _mmguimoduledata *moduledata_t; static void mmgui_module_handle_error_message(mmguicore_t mmguicore, gchar *message) { moduledata_t moduledata; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->cmoduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (message != NULL) { moduledata->errormessage = g_strdup(message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static gchar *mmgui_module_pppd_strrstr(gchar *source, gsize sourcelen, gchar *entry, gsize entrylen) { gboolean found; gchar *sourceptr, *curptr; gsize ind; if ((source == NULL) || (entry == NULL)) return NULL; if ((sourcelen == 0) || (entrylen == 0)) return source; sourceptr = source + sourcelen - entrylen; for (curptr=sourceptr; curptr>=source; curptr--) { found = TRUE; for (ind=0; ind (bufsize - 1)) datalen = bufsize - 1; memcpy(buffer, segstart+paramlen, datalen); buffer[datalen] = '\0'; return buffer; } static gchar *mmgui_module_pppd_get_config_string(gpointer dbmapping, gsize dbsize) { gchar *segend, *segstart; gchar *result; if ((dbmapping == NULL) || (dbsize == 0)) return NULL; segend = mmgui_module_pppd_strrstr(dbmapping, dbsize, MODULE_INT_PPPD_DB_FILE_END_PARAMETER, strlen(MODULE_INT_PPPD_DB_FILE_END_PARAMETER)); if ((segend == NULL) || ((segend != NULL) && ((*segend) >= dbsize))) return NULL; segstart = mmgui_module_pppd_strrstr(dbmapping, dbsize-(*segend), MODULE_INT_PPPD_DB_FILE_START_PARAMETER, strlen(MODULE_INT_PPPD_DB_FILE_START_PARAMETER)); if ((segstart == NULL) || ((segstart != NULL) && (segend <= segstart))) return NULL; result = g_malloc0(segend-segstart+1); if (result == NULL) return NULL; memcpy(result, segstart, segend-segstart); return result; } static gchar *mmgui_module_pppd_get_device_serial(gchar *string, gchar *buffer, gsize bufsize) { gchar *segend, *segstart; gsize datalen, paramlen; if ((string == NULL) || (buffer == NULL) || (bufsize == 0)) return NULL; paramlen = strlen(MODULE_INT_PPPD_SYSFS_START_PARAMETER); segstart = strstr(string, MODULE_INT_PPPD_SYSFS_START_PARAMETER); if (segstart == NULL) return NULL; segstart = strchr(segstart + paramlen, MODULE_INT_PPPD_SYSFS_END_PARAMETER); if (segstart == NULL) return NULL; segend = strchr(segstart+paramlen, MODULE_INT_PPPD_SYSFS_END_PARAMETER); if (segend == NULL) return NULL; datalen = segend - segstart - 1; if (datalen > (bufsize - 1)) datalen = bufsize - 1; memcpy(buffer, segstart + 1, datalen); buffer[datalen] = '\0'; return buffer; } static gboolean mmgui_module_pppd_get_daemon_running(moduledata_t moduledata) { gchar pidfilepath[32], pidfiledata[32]; gint pidfilefd, status; /*struct flock pidfilelock;*/ if (moduledata == NULL) return FALSE; if (moduledata->connifname[0] == '\0') return FALSE; memset(pidfilepath, 0, sizeof(pidfilepath)); memset(pidfiledata, 0, sizeof(pidfiledata)); snprintf(pidfilepath, sizeof(pidfilepath), MODULE_INT_PPPD_LOCK_FILE_PATH, moduledata->connifname); pidfilefd = open(pidfilepath, O_RDONLY); if (pidfilefd == -1) return FALSE; status = read(pidfilefd, pidfiledata, sizeof(pidfiledata)); close(pidfilefd); if ((status != -1) && ((pid_t)atoi(pidfiledata) == moduledata->pid)) { return TRUE; } else { return FALSE; } } static void mmgui_module_pppd_set_connection_status(gpointer mmguicore, gboolean connected) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return; if (connected) { memset(mmguicorelc->device->interface, 0, IFNAMSIZ); strncpy(mmguicorelc->device->interface, moduledata->connifname, IFNAMSIZ); mmguicorelc->device->connected = TRUE; } else { memset(mmguicorelc->device->interface, 0, IFNAMSIZ); mmguicorelc->device->connected = FALSE; } } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_CONNECTION_MANGER; module->requirement = MMGUI_MODULE_REQUIREMENT_FILE; module->priority = MMGUI_MODULE_PRIORITY_LOW; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; mmguicorelc->cmcaps = MMGUI_CONNECTION_MANAGER_CAPS_BASIC; moduledata = (moduledata_t *)&mmguicorelc->cmoduledata; (*moduledata) = g_new0(struct _mmguimoduledata, 1); (*moduledata)->errormessage = NULL; return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); if (moduledata != NULL) { if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } g_free(moduledata); } return TRUE; } G_MODULE_EXPORT guint mmgui_module_connection_enum(gpointer mmguicore, GSList **connlist) { return 0; } G_MODULE_EXPORT mmguiconn_t mmgui_module_connection_add(gpointer mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2) { return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_connection_update(gpointer mmguicore, mmguiconn_t connection, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2) { return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_connection_remove(gpointer mmguicore, mmguiconn_t connection) { return FALSE; } G_MODULE_EXPORT gchar *mmgui_module_connection_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); return moduledata->errormessage; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (device->sysfspath == NULL) { mmgui_module_handle_error_message(mmguicorelc, "Device data not available"); return FALSE; } if (mmgui_module_pppd_get_device_serial(device->sysfspath, moduledata->devserial, sizeof(moduledata->devserial)) == NULL) { mmgui_module_handle_error_message(mmguicorelc, "Device serial not available"); return FALSE; } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; memset(moduledata->devserial, 0, sizeof(moduledata->devserial)); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_status(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; gint dbfd, state; struct stat statbuf; gpointer dbmapping; gchar *pppdconfig; gchar intbuf[16], sysfspath[128], sysfslink[128]; gchar *parameter; gint status, devmajor, devminor; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->devserial[0] == '\0') return FALSE; /*Usual PPPD database path*/ dbfd = open(MODULE_INT_PPPD_DB_FILE_PATH_1, O_RDONLY); /*Try special path first*/ if (dbfd == -1) { /*Special PPPD database path (Fedora uses it)*/ dbfd = open(MODULE_INT_PPPD_DB_FILE_PATH_2, O_RDONLY); /*No database found*/ if (dbfd == -1) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("Failed to open PPPD database file\n"); return TRUE; } } state = fstat(dbfd, &statbuf); if (state == -1) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("Failed to get PPPD database file size\n"); close(dbfd); return TRUE; } dbmapping = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, dbfd, 0); if(dbmapping == (void *)-1) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); mmgui_module_handle_error_message(mmguicorelc, "Failed to map PPPD database file into memory"); close(dbfd); return TRUE; } pppdconfig = mmgui_module_pppd_get_config_string(dbmapping, statbuf.st_size); if (pppdconfig == NULL) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); mmgui_module_handle_error_message(mmguicorelc, "Failed to get config"); munmap(dbmapping, statbuf.st_size); close(dbfd); return TRUE; } munmap(dbmapping, statbuf.st_size); close(dbfd); parameter = mmgui_module_pppd_get_config_fragment(pppdconfig, MODULE_INT_PPPD_DB_FILE_DEVICE_PARAMETER, moduledata->conndevice, sizeof(moduledata->conndevice)); if (parameter == NULL) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("Device entry not found in PPPD database\n"); g_free(pppdconfig); return TRUE; } parameter = mmgui_module_pppd_get_config_fragment(pppdconfig, MODULE_INT_PPPD_DB_FILE_INTERFACE_PARAMETER, moduledata->connifname, sizeof(moduledata->connifname)); if (parameter == NULL) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("Interface entry not found in PPPD database\n"); g_free(pppdconfig); return TRUE; } parameter = mmgui_module_pppd_get_config_fragment(pppdconfig, MODULE_INT_PPPD_DB_FILE_PID_PARAMETER, intbuf, sizeof(intbuf)); if (parameter == NULL) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("PPPD pid not found in PPPD database\n"); g_free(pppdconfig); return TRUE; } else { moduledata->pid = (pid_t)atoi(parameter); } g_free(pppdconfig); if (!mmgui_module_pppd_get_daemon_running(moduledata)) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("PPPD daemon is not running\n"); return TRUE; } status = stat(moduledata->conndevice, &statbuf); if ((status == -1) || ((status == 0) && (!S_ISCHR(statbuf.st_mode)))) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); g_debug("Device not suitable\n"); return TRUE; } devmajor = major(statbuf.st_rdev); devminor = minor(statbuf.st_rdev); memset(sysfspath, 0, sizeof(sysfspath)); memset(sysfslink, 0, sizeof(sysfslink)); snprintf(sysfspath, sizeof(sysfspath), MODULE_INT_PPPD_SYSFS_DEVICE_PATH, devmajor, devminor); status = readlink((const char *)sysfspath, sysfslink, sizeof(sysfslink)); if (status == -1) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); mmgui_module_handle_error_message(mmguicorelc, "Device sysfs path not available"); return TRUE; } sysfslink[status] = '\0'; if (mmgui_module_pppd_get_device_serial(sysfslink, moduledata->connserial, sizeof(moduledata->connserial)) == NULL) { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); mmgui_module_handle_error_message(mmguicorelc, "Device serial not available"); return TRUE; } if (g_str_equal(moduledata->connserial, moduledata->devserial)) { mmgui_module_pppd_set_connection_status(mmguicore, TRUE); } else { mmgui_module_pppd_set_connection_status(mmguicore, FALSE); } return TRUE; } G_MODULE_EXPORT guint64 mmgui_module_device_connection_timestamp(gpointer mmguicore) { mmguicore_t mmguicorelc; /*moduledata_t moduledata;*/ gchar lockfilepath[128]; guint64 timestamp; struct stat statbuf; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; /*if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata;*/ if (mmguicorelc->device == NULL) return FALSE; /*Get current timestamp*/ timestamp = (guint64)time(NULL); /*Form lock file path*/ memset(lockfilepath, 0, sizeof(lockfilepath)); g_snprintf(lockfilepath, sizeof(lockfilepath), MODULE_INT_PPPD_LOCK_FILE_PATH, mmguicorelc->device->interface); /*Get lock file modification timestamp*/ if (stat(lockfilepath, &statbuf) == 0) { timestamp = (guint64)statbuf.st_mtime; } return timestamp; } G_MODULE_EXPORT gchar *mmgui_module_device_connection_get_active_uuid(gpointer mmguicore) { return NULL; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_connect(gpointer mmguicore, mmguiconn_t connection) { return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_disconnect(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; gchar *stderrdata = NULL; gint exitstatus = 0; gchar *argv[3] = {"/sbin/ifdown", NULL, NULL}; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->devserial[0] == '\0') return FALSE; //If device already disconnected, return TRUE if (!mmguicorelc->device->connected) return TRUE; error = NULL; argv[1] = mmguicorelc->device->interface; if(g_spawn_sync(NULL, argv, NULL, G_SPAWN_STDOUT_TO_DEV_NULL, NULL, NULL, NULL, &stderrdata, &exitstatus, &error)) { //Disconnected - update device state memset(mmguicorelc->device->interface, 0, sizeof(mmguicorelc->device->interface)); mmguicorelc->device->connected = FALSE; return TRUE; } else { //Failed to disconnect if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error->message); g_error_free(error); } else if (stderrdata != NULL) { mmgui_module_handle_error_message(mmguicorelc, stderrdata); g_free(stderrdata); } return FALSE; } } modem-manager-gui-0.0.19.1/src/devices-page.c000664 001750 001750 00000066103 13261703575 020467 0ustar00alexalex000000 000000 /* * devices-page.c * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "settings.h" #include "encoding.h" #include "notifications.h" #include "ayatana.h" #include "mmguicore.h" #include "devices-page.h" #include "info-page.h" #include "connection-editor-window.h" #include "main.h" static gboolean mmgui_main_device_list_unselect_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static void mmgui_main_device_list_select_signal(GtkCellRendererToggle *cell_renderer, gchar *path, gpointer data); static void mmgui_main_device_remove_from_list(mmgui_application_t mmguiapp, guint devid); static void mmgui_main_device_add_to_list(mmgui_application_t mmguiapp, mmguidevice_t device, GtkTreeModel *model); /*Devices*/ gboolean mmgui_main_device_handle_added_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; mmguidevice_t device; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; device = (mmguidevice_t)mmguiappdata->data; /*Add device to list*/ mmgui_main_device_add_to_list(mmguiappdata->mmguiapp, device, NULL); /*If no device opened, open that one*/ if (mmguicore_devices_get_current(mmguiappdata->mmguiapp->core) == NULL) { mmgui_main_device_select_from_list(mmguiappdata->mmguiapp, device->persistentid); } g_free(mmguiappdata); return FALSE; } gboolean mmgui_main_device_handle_removed_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; guint id; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; id = GPOINTER_TO_UINT(mmguiappdata->data); /*Remove device from list*/ mmgui_main_device_remove_from_list(mmguiappdata->mmguiapp, id); /*Look for available devices*/ if (!g_slist_length(mmguicore_devices_get_list(mmguiappdata->mmguiapp->core))) { /*No devices available, lock control buttons*/ mmgui_main_ui_controls_disable(mmguiappdata->mmguiapp, TRUE, TRUE, TRUE); /*Update connections controls*/ mmgui_main_device_connections_update_state(mmguiappdata->mmguiapp); } else if (mmguicore_devices_get_current(mmguiappdata->mmguiapp->core) == NULL) { /*If no device opened, open default one*/ mmgui_main_device_select_from_list(mmguiappdata->mmguiapp, NULL); } g_free(mmguiappdata); return FALSE; } void mmgui_main_device_handle_enabled_local_status(mmgui_application_t mmguiapp) { guint setpage; gboolean enabled; if (mmguiapp == NULL) return; enabled = mmguicore_devices_get_enabled(mmguiapp->core); if (enabled) { /*Update device information*/ mmgui_main_info_update_for_modem(mmguiapp); } /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiapp, setpage); } gboolean mmgui_main_device_handle_enabled_status_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; gboolean enabledstatus; guint setpage; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; enabledstatus = (gboolean)GPOINTER_TO_UINT(mmguiappdata->data); if (mmguiappdata->mmguiapp == NULL) return FALSE; if (enabledstatus) { //Update device information mmgui_main_info_update_for_modem(mmguiappdata->mmguiapp); } /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiappdata->mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiappdata->mmguiapp, setpage); g_free(mmguiappdata); return FALSE; } gboolean mmgui_main_device_handle_blocked_status_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; gboolean blockedstatus; guint setpage; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; blockedstatus = (gboolean)GPOINTER_TO_UINT(mmguiappdata->data); if (mmguiappdata->mmguiapp == NULL) return FALSE; /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiappdata->mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiappdata->mmguiapp, setpage); g_free(mmguiappdata); g_debug("Device blocked status: %u\n", blockedstatus); return FALSE; } gboolean mmgui_main_device_handle_prepared_status_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; gboolean preparedstatus; guint setpage; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; preparedstatus = (gboolean)GPOINTER_TO_UINT(mmguiappdata->data); if (mmguiappdata->mmguiapp == NULL) return FALSE; /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiappdata->mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiappdata->mmguiapp, setpage); g_free(mmguiappdata); g_debug("Device prepared status: %u\n", preparedstatus); return FALSE; } gboolean mmgui_main_device_handle_connection_status_from_thread(gpointer data) { mmgui_application_data_t mmguiappdata; gboolean connstatus; guint setpage; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return FALSE; connstatus = (gboolean)GPOINTER_TO_UINT(mmguiappdata->data); if (mmguiappdata->mmguiapp == NULL) return FALSE; /*Update current page state*/ setpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiappdata->mmguiapp->window->notebook)); mmgui_main_ui_test_device_state(mmguiappdata->mmguiapp, setpage); /*Update connection controls*/ mmgui_main_device_connections_update_state(mmguiappdata->mmguiapp); g_free(mmguiappdata); g_debug("Device connection status: %u\n", connstatus); return FALSE; } static void mmgui_main_device_list_set_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { mmgui_application_t mmguiapp; gboolean sensitive; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; gtk_tree_model_get(tree_model, iter, MMGUI_MAIN_DEVLIST_SENSITIVE, &sensitive, -1); g_object_set(cell, "sensitive", sensitive, NULL); } void mmgui_main_device_list_block_selection(mmgui_application_t mmguiapp, gboolean block) { GtkTreeModel *model; GtkTreeIter iter; gboolean valid; gboolean enabled; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); if (model != NULL) { for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtk_tree_model_iter_next(model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_DEVLIST_ENABLED, &enabled, -1); if (!enabled) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_DEVLIST_SENSITIVE, !block, -1); } } } } static gboolean mmgui_main_device_list_unselect_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { mmgui_application_t mmguiapp; gboolean enabled; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return TRUE; gtk_tree_model_get(model, iter, MMGUI_MAIN_DEVLIST_ENABLED, &enabled, -1); if (enabled) { gtk_list_store_set(GTK_LIST_STORE(model), iter, MMGUI_MAIN_DEVLIST_ENABLED, FALSE, -1); return TRUE; } return FALSE; } static void mmgui_main_device_list_select_signal(GtkCellRendererToggle *cell_renderer, gchar *path, gpointer data) { mmgui_application_t mmguiapp; GtkTreeIter iter; GtkTreeModel *model; gboolean enabled; guint id; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); if (gtk_tree_model_get_iter_from_string(model, &iter, path)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_DEVLIST_ENABLED, &enabled, MMGUI_MAIN_DEVLIST_ID, &id, -1); if (!enabled) { gtk_tree_model_foreach(model, mmgui_main_device_list_unselect_foreach, mmguiapp); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_DEVLIST_ENABLED, TRUE, -1); if (!mmguicore_devices_open(mmguiapp->core, id, TRUE)) { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error opening device"), mmguicore_get_last_error(mmguiapp->core)); } } } } gboolean mmgui_main_device_select_from_list(mmgui_application_t mmguiapp, gchar *identifier) { GtkTreeModel *model; GtkTreeIter iter; gboolean valid; gboolean selected; guint curid; gchar *curidentifier; if (mmguiapp == NULL) return FALSE; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); if (model == NULL) return FALSE; selected = FALSE; //Select requested device if (identifier != NULL) { for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtk_tree_model_iter_next(model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_DEVLIST_ID, &curid, MMGUI_MAIN_DEVLIST_IDENTIFIER, &curidentifier, -1); if (g_str_equal(identifier, curidentifier)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_DEVLIST_ENABLED, TRUE, -1); selected = TRUE; break; } } } //If needed device not found, select first one if (!selected) { for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtk_tree_model_iter_next(model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_DEVLIST_ID, &curid, MMGUI_MAIN_DEVLIST_IDENTIFIER, &curidentifier, -1); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_DEVLIST_ENABLED, TRUE, -1); selected = TRUE; break; } } if (selected) { if (mmguicore_devices_open(mmguiapp->core, curid, TRUE)) { mmgui_main_ui_controls_disable(mmguiapp, FALSE, FALSE, TRUE); gmm_settings_set_string(mmguiapp->settings, "device_identifier", identifier); return TRUE; } else { mmgui_main_ui_controls_disable(mmguiapp, TRUE, TRUE, TRUE); mmgui_main_device_connections_update_state(mmguiapp); mmgui_main_ui_error_dialog_open(mmguiapp, _("Error opening device"), mmguicore_get_last_error(mmguiapp->core)); } } else { g_debug("No devices to select\n"); mmgui_main_ui_controls_disable(mmguiapp, TRUE, TRUE, TRUE); mmgui_main_device_connections_update_state(mmguiapp); } return FALSE; } static void mmgui_main_device_remove_from_list(mmgui_application_t mmguiapp, guint devid) { GtkTreeModel *model; GtkTreeIter iter; gboolean valid; guint currentid; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); if (model != NULL) { for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtk_tree_model_iter_next(model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_DEVLIST_ID, ¤tid, -1); if (currentid == devid) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); break; } } } } static void mmgui_main_device_add_to_list(mmgui_application_t mmguiapp, mmguidevice_t device, GtkTreeModel *model) { GtkTreeIter iter; gchar *markup; gchar *devtype; gchar *devmanufacturer, *devmodel, *devversion; if ((mmguiapp == NULL) || (device == NULL)) return; if (mmguiapp->window == NULL) return; if (model == NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); } devtype = NULL; if (device->type == MMGUI_DEVICE_TYPE_GSM) { devtype = "GSM"; } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { devtype = "CDMA"; } devmanufacturer = encoding_clear_special_symbols(g_strdup(device->manufacturer), strlen(device->manufacturer)); devmodel = encoding_clear_special_symbols(g_strdup(device->model), strlen(device->model)); devversion = encoding_clear_special_symbols(g_strdup(device->version), strlen(device->version)); markup = g_strdup_printf(_("%s %s\nVersion:%s Port:%s Type:%s"), devmanufacturer, devmodel, devversion, device->port, devtype); gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_DEVLIST_ENABLED, FALSE, MMGUI_MAIN_DEVLIST_DESCRIPTION, markup, MMGUI_MAIN_DEVLIST_ID, device->id, MMGUI_MAIN_DEVLIST_IDENTIFIER, device->persistentid, MMGUI_MAIN_DEVLIST_SENSITIVE, TRUE, -1); g_free(devmanufacturer); g_free(devmodel); g_free(devversion); g_free(markup); } void mmgui_main_device_list_fill(mmgui_application_t mmguiapp) { GtkTreeModel *model; GSList *devices; GSList *iterator; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->devlist)); if (model != NULL) { g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->devlist), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); devices = mmguicore_devices_get_list(mmguiapp->core); if (devices != NULL) { for (iterator=devices; iterator; iterator=iterator->next) { mmgui_main_device_add_to_list(mmguiapp, (mmguidevice_t)iterator->data, model); } } gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->devlist), model); g_object_unref(model); } } void mmgui_main_device_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *tbrenderer; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; if (mmguiapp == NULL) return; tbrenderer = gtk_cell_renderer_toggle_new(); column = gtk_tree_view_column_new_with_attributes(_("Selected"), tbrenderer, "active", MMGUI_MAIN_DEVLIST_ENABLED, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->devlist), column); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(tbrenderer), TRUE); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(column), tbrenderer, mmgui_main_device_list_set_sensitive, mmguiapp, NULL); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Device"), renderer, "markup", MMGUI_MAIN_DEVLIST_DESCRIPTION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->devlist), column); store = gtk_list_store_new(MMGUI_MAIN_DEVLIST_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->devlist), GTK_TREE_MODEL(store)); g_object_unref(store); /*Device selection signal*/ g_signal_connect(G_OBJECT(tbrenderer), "toggled", G_CALLBACK(mmgui_main_device_list_select_signal), mmguiapp); } void mmgui_main_device_connections_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkListStore *store; if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(mmguiapp->window->devconncb), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(mmguiapp->window->devconncb), renderer, "text", 0, NULL); store = gtk_list_store_new(MMGUI_MAIN_CONNLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT); gtk_combo_box_set_model(GTK_COMBO_BOX(mmguiapp->window->devconncb), GTK_TREE_MODEL(store)); g_object_unref(store); } void mmgui_main_connection_update_name_in_list(mmgui_application_t mmguiapp, const gchar *name, const gchar *uuid) { GtkTreeModel *model; GtkTreeIter iter; gchar *curuuid; if ((mmguiapp == NULL) || (name == NULL) || (uuid == NULL)) return; model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &curuuid, -1); if (uuid != NULL) { if (g_strcmp0(uuid, curuuid) == 0) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_CONNLIST_NAME, name, -1); g_free(curuuid); break; } g_free(curuuid); } } while (gtk_tree_model_iter_next(model, &iter)); } } } void mmgui_main_connection_remove_from_list(mmgui_application_t mmguiapp, const gchar *uuid) { GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *activepath, *curpath; gchar *curuuid; gboolean changeconn; if ((mmguiapp == NULL) || (uuid == NULL)) return; model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); activepath = NULL; changeconn = FALSE; if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter)) { activepath = gtk_tree_model_get_path(model, &iter); } if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &curuuid, -1); if (uuid != NULL) { if (g_strcmp0(uuid, curuuid) == 0) { /*Check if selected connection has to be removed*/ if (activepath != NULL) { curpath = gtk_tree_model_get_path(model, &iter); if (curpath != NULL) { if (gtk_tree_path_compare((const GtkTreePath *)activepath, (const GtkTreePath *)curpath) == 0) { changeconn = TRUE; } gtk_tree_path_free(curpath); } } /*Remove connection*/ gtk_list_store_remove(GTK_LIST_STORE(model), &iter); /*Select first connection if current connection was removed*/ if (changeconn) { gtk_combo_box_set_active(GTK_COMBO_BOX(mmguiapp->window->devconncb), 0); } g_free(curuuid); break; } g_free(curuuid); } } while (gtk_tree_model_iter_next(model, &iter)); } if (activepath != NULL) { gtk_tree_path_free(activepath); } } } void mmgui_main_connection_add_to_list(mmgui_application_t mmguiapp, const gchar *name, const gchar *uuid, guint type, GtkTreeModel *model) { GtkTreeModel *localmodel; GtkTreeIter iter; if ((mmguiapp == NULL) || (name == NULL) || (uuid == NULL)) return; if (mmguiapp->core->device == NULL) return; if (mmguiapp->core->device->type != type) return; /*Model is supplied only on initial list filling stage*/ if (model == NULL) { localmodel = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); } else { localmodel = model; } if (localmodel != NULL) { /*Add connection*/ gtk_list_store_append(GTK_LIST_STORE(localmodel), &iter); gtk_list_store_set(GTK_LIST_STORE(localmodel), &iter, MMGUI_MAIN_CONNLIST_NAME, name, MMGUI_MAIN_CONNLIST_UUID, uuid, MMGUI_MAIN_CONNLIST_TYPE, type, -1); /*Show added connection if there is no active one*/ if ((model == NULL) && (!mmguicore_devices_get_connected(mmguiapp->core))) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter); /*Set connection activation button sensitive*/ gtk_widget_set_sensitive(mmguiapp->window->devconnctl, TRUE); } } } gboolean mmgui_main_device_connection_select_from_list(mmgui_application_t mmguiapp, const gchar *uuid) { GtkTreeModel *model; GtkTreeIter iter; gboolean selected; gchar *curuuid; if (mmguiapp == NULL) return FALSE; model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model == NULL) return FALSE; selected = FALSE; /*Select requested connection*/ if (uuid != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &curuuid, -1); if (uuid != NULL) { if (g_strcmp0(uuid, curuuid) == 0) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter); selected = TRUE; break; } g_free(curuuid); } } while (gtk_tree_model_iter_next(model, &iter)); } } /*If requested connection not found, select first one*/ if (!selected) { if (gtk_tree_model_get_iter_first(model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &curuuid, -1); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter); selected = TRUE; } } /*Save UUID for future use*/ if (selected) { g_free(curuuid); return TRUE; } return FALSE; } gchar *mmgui_main_connection_get_active_uuid(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeIter iter; gchar *uuid; if (mmguiapp == NULL) return NULL; uuid = NULL; model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &uuid, -1); } } return uuid; } void mmgui_main_device_connections_list_fill(mmgui_application_t mmguiapp) { GtkTreeModel *model; GSList *connections; GSList *iterator; mmguiconn_t connection; if (mmguiapp == NULL) return; /*Fill combo box*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { g_object_ref(model); gtk_combo_box_set_model(GTK_COMBO_BOX(mmguiapp->window->devconncb), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); connections = mmguicore_connections_get_list(mmguiapp->core); if (connections != NULL) { for (iterator=connections; iterator; iterator=iterator->next) { connection = (mmguiconn_t)iterator->data; mmgui_main_connection_add_to_list(mmguiapp, connection->name, connection->uuid, connection->type, model); } } gtk_combo_box_set_model(GTK_COMBO_BOX(mmguiapp->window->devconncb), model); g_object_unref(model); } } void mmgui_main_device_restore_settings_for_modem(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; /*Update state*/ mmgui_main_device_connections_update_state(mmguiapp); } void mmgui_main_device_connections_update_state(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeIter iter; gchar *uuid, *curuuid, *lastuuid; guint conncaps; if (mmguiapp == NULL) return; if (mmguiapp->core == NULL) return; conncaps = mmguicore_connections_get_capabilities(mmguiapp->core); if ((conncaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT) && (mmguicore_devices_get_current(mmguiapp->core) != NULL) && (mmguicore_devices_get_enabled(mmguiapp->core))) { if (!mmguicore_devices_get_connected(mmguiapp->core)) { model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { /*Select last used connection*/ lastuuid = mmgui_modem_settings_get_string(mmguiapp->modemsettings, "connection_used", MMGUI_MAIN_DEFAULT_CONNECTION_UUID); if (lastuuid != NULL) { mmgui_main_device_connection_select_from_list(mmguiapp, lastuuid); g_free(lastuuid); } gtk_widget_set_sensitive(mmguiapp->window->devconnctl, TRUE); } else { gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); } } /*Update controls state*/ gtk_widget_set_sensitive(mmguiapp->window->devconncb, TRUE); gtk_widget_set_sensitive(mmguiapp->window->devconneditor, TRUE); gtk_button_set_label(GTK_BUTTON(mmguiapp->window->devconnctl), _("Activate")); } else { uuid = mmguicore_connections_get_active_uuid(mmguiapp->core); if (uuid != NULL) { model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_tree_model_get_iter_first(model, &iter)) { do { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_UUID, &curuuid, -1); if (curuuid != NULL) { if (g_strcmp0(uuid, curuuid) == 0) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter); g_free(curuuid); break; } g_free(curuuid); } } while (gtk_tree_model_iter_next(model, &iter)); } } g_free(uuid); } gtk_widget_set_sensitive(mmguiapp->window->devconncb, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconneditor, TRUE); gtk_widget_set_sensitive(mmguiapp->window->devconnctl, TRUE); gtk_button_set_label(GTK_BUTTON(mmguiapp->window->devconnctl), _("Deactivate")); } } else { /*Block controls*/ gtk_widget_set_sensitive(mmguiapp->window->devconncb, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconneditor, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); gtk_button_set_label(GTK_BUTTON(mmguiapp->window->devconnctl), _("Activate")); model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { gtk_list_store_clear(GTK_LIST_STORE(model)); } } } void mmgui_main_device_switch_connection_state(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeIter iter; gchar *name, *uuid, *statusmsg; if (mmguiapp == NULL) return; if (mmguiapp->core == NULL) return; if (mmguicore_devices_get_current(mmguiapp->core) == NULL) return; model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->devconncb)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->devconncb), &iter)) { /*Get needed information*/ gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONNLIST_NAME, &name, MMGUI_MAIN_CONNLIST_UUID, &uuid, -1); if ((name != NULL) && (uuid != NULL)) { if (!mmguicore_devices_get_connected(mmguiapp->core)) { /*Initiate connection*/ mmguicore_connections_connect(mmguiapp->core, uuid); /*Save connection identifier*/ mmgui_modem_settings_set_string(mmguiapp->modemsettings, "connection_used", uuid); /*Show progress infobar*/ statusmsg = g_strdup_printf(_("Connecting to %s..."), name); mmgui_ui_infobar_show(mmguiapp, statusmsg, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS_UNSTOPPABLE, NULL, NULL); /*Deactivate controls*/ gtk_widget_set_sensitive(mmguiapp->window->devconncb, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); /*Block devices list*/ mmgui_main_device_list_block_selection(mmguiapp, TRUE); /*Free resources*/ g_free(statusmsg); } else { /*Show progress infobar*/ statusmsg = g_strdup_printf(_("Disconnecting from %s..."), name); mmgui_ui_infobar_show(mmguiapp, statusmsg, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS_UNSTOPPABLE, NULL, NULL); /*Disconnect from network*/ mmguicore_connections_disconnect(mmguiapp->core); /*Activate controls*/ gtk_widget_set_sensitive(mmguiapp->window->devconncb, FALSE); gtk_widget_set_sensitive(mmguiapp->window->devconnctl, FALSE); /*Block devices list*/ mmgui_main_device_list_block_selection(mmguiapp, TRUE); /*Free resources*/ g_free(statusmsg); } g_free(name); g_free(uuid); } } } } void mmgui_main_conn_edit_button_clicked_signal(GtkButton *button, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_connection_editor_window_open(mmguiapp); } void mmgui_main_conn_ctl_button_clicked_signal(GtkButton *button, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_device_switch_connection_state(mmguiapp); } modem-manager-gui-0.0.19.1/po/zh_CN.po000664 001750 001750 00000117546 13261705371 017163 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # 周磊 , 2017 # 周磊 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Chinese (China) (http://www.transifex.com/ethereal/modem-manager-gui/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "未读短信" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "未读消息" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "%s 是无效的\n它不会被保存以及用于连接初始化" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "未命名的连接" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "APN名称" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "主要DNS服务器IP地址" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "备用DNS服务器IP地址" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "连接" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "添加联系人出错" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "删除联系人" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "真的要删除联系人吗?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "添加联系人出错" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "联系人未从设备中删除" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "未选择联系人" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Modem联系人" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr " GNOME联系人" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr " KDE联系人" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "名字" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "头号" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "邮箱" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "群组" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "中间名" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "第二个号码" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "设备打开出错" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\n版本:%s 端口:%s 类型:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "已选" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "设备" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "启用" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "停用" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "连接到%s..." #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "从%s断开连接..." #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "不支持" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "初始化失败" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "没有正确的凭据,无法启动所需的系统服务" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "无法与可用的系统服务通信" #: ../src/main.c:506 msgid "Success" msgstr "成功" #: ../src/main.c:511 msgid "Failed" msgstr "失败" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "超时" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "正在启用设备..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "在系统中找不到设备" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "调制解调器未准备好操作。正在准备调制解调器,请稍候..." #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "调制解调器必须解锁才能连接到互联网。 请输入PIN码。" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "网络管理器不支持互联网连接管理功能。" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "必须启用调制解调器才能读取和写入短信。 请启用调制解调器" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "调制解调器必须在移动网络上注册才能收发短信。 请稍候..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "调制解调器必须解锁才能接收和发送短信。 请输入PIN码。" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "调制解调器管理器不支持短信操作功能。" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "调制解调器管理器不支持发送短信。" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "必须启用调制解调器才能发送USSD。请启用调制解调器。" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "调制解调器必须在移动网络上注册才能发送USSD。 请稍候..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "调制解调器必须解锁才能发送USSD。 请输入PIN码。" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "调制解调器管理器不支持发送USSD请求。" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "必须启用调制解调器才能扫描可用的网络。 请启用调制解调器" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "必须解锁调制解调器才能扫描可用的网络。 请输入PIN码。" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "调制解调器管理器不支持扫描可用的移动网络。" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "调制解调器已连接。 请断开连接再扫描。" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "必须启用调制解调器才能从中导出联系人。 请启用调制解调器。" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "调制解调器必须解锁才能从中导出联系人。 请输入PIN码。" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "调制解调器管理器不支持联系人操作功能。" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "调制解调器管理器不支持联系人编辑功能" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Devices" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Modem Manager GUI 窗口隐藏" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "界面构建错误" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "正在扫描网络..." #: ../src/scan-page.c:46 msgid "Device error" msgstr "" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "短信" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "未知" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "搜索中" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "流量和时间限制值错误" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "流量限制值错误" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "时间限制值错误" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "已断开" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "限制" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "秒" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "RX速度" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "TX速度" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "参数" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "值" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "示例指令" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "发送USSD出错" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "错误的USSD请求或设备未准备好" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "错误的USSD请求" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "指令" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "成功" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "欢迎" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "连接管理" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "欢迎使用Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "激活后启用服务" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "删除选择的消息 CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "删除" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "回复选择的消息 CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "回复" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "请求" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "发送" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "发送UUSD请求 CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "编辑USSD指令列表 CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "设备" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "模式" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "信号等级" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "操作员代码" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "注册" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "网络" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "位置" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "开始扫描" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "设置限制" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "连接" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "统计" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "传输速度" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "新联系人" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "从调制解调器地址簿删除联系人 CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "发送短信到指定联系人 CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Copyright 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "主页" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "English: Alex " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "添加新的宽带连接" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "添加连接" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "删除选择的连接" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "删除连接" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "名称" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "错误" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "再问我一次" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "退出或最小化?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "你想在窗户关闭时应用程序做什么?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "直接退出" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "新的短信" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "保存" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "号码" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "关闭时隐藏窗口到托盘" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "保存窗口大小和位置" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "添加程序到自启动列表" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "行为" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "行为" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "连接消息" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "展开文件夹" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "将旧信息放在顶部" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "介绍" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "有效期" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "如果可能的话发送递送报告" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "消息参数" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "自定义指令" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "RX速度图表颜色" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "TX速度图表颜色" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "运动方向" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "从左到右" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "从右到左" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "图表" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "启用设备" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "发送短信" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "发送USSD请求" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "扫描网络" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "模块" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "页面" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "问题" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "流量限制" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "启用时间限制" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "信息" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "动作" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "显示消息" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "断开" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "时间" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "分" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "时" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "流量统计" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "选定统计期间" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "一月" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "二月" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "三月" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "四月" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "五月" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "六月" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "七月" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "八月" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "九月" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "十月" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "十一月" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "十二月" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "USSD指令" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "添加新的USSD指令 CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "添加" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "删除选择的USSD指令 CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/resources/pixmaps/signal-50.png000664 001750 001750 00000006051 13261703575 023074 0ustar00alexalex000000 000000 PNG  IHDR}\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FTIDATxԕ;N1Ey.J ЄLKEIP (#dʾ9FXTTBN'wӵV h7MӔ;>ܥl$a?HӴŷf\I^5̴TA7"߈*ecJE8ʦb˜k k_9EGm69&kmZA{>y&IeNKb/3( h avU(;WbE(|7"߁K5HP[+v:ZG=&eu\|yna0ժh V9BIENDB`modem-manager-gui-0.0.19.1/man/fr/fr.po000664 001750 001750 00000011054 13261703575 017324 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # L'Africain , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: L'Africain \n" "Language-Team: French (http://www.transifex.com/ethereal/modem-manager-gui/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "Nov 2017" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "Modem Manager GUI v0.0.19" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Commandes utilisateur" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "NOM" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "Modem-manager-gui - interface graphique simple pour le daemon de Modem Manager." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "SYNOPSIS" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "DESCRIPTION" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Cette application est une interface graphique simple pour les daemons Modem Manager 0.6 / 0.7, Wader et oFono utilisant l'interface dbus." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Ne pas afficher la fenêtre au démarrage" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Utiliser le module de gestion de modem spécifié" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Utiliser le module de gestion des connexions spécifié" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Énumérer tous les modules disponibles et quitter" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "AUTEUR" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Écrit par Alex. Voir la boîte de dialogue à propos de tous les contributeurs." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "SIGNALER DES BUGS" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "Veuillez reporter tous bugs à Ealex@linuxonly.ruE, ou bien dans la section support du forum : Ehttps://linuxonly.ru/forum/modem-manager-gui/E." #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "DROITS D'AUTEUR" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "Droits d'auteurs \\(co 2012-2017 Alex" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Ceci est un logiciel libre. Vous pouvez redistribuer des copies de celui-ci sous les termes de la licence publique générale GNU Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "VOIR AUSSI" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/polkit/ar.po000664 001750 001750 00000003124 13261703575 017436 0ustar00alexalex000000 000000 # # Translators: # Eslam Maolaoy , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Eslam Maolaoy \n" "Language-Team: Arabic (http://www.transifex.com/ethereal/modem-manager-gui/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "شغل وإبدأ خدمات إدارة المودم" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "خدمات ادارة المودم لا تعمل. تحتاج للمصادقة لجعلها تعمل." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "استخدم خدمة ادارة المودم" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "خدمة ادارةالمودم تحتاج اعتمادك. تحتاج للتوثيق لإستخدام هذه الخدمة." modem-manager-gui-0.0.19.1/po/pt_BR.po000664 001750 001750 00000117072 13261705223 017156 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Rafael Fontenelle , 2013 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/ethereal/modem-manager-gui/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Erro ao abrir dispositivo" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersão:%s Porta:%s Tipo:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Selecionada" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Dispositivo" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Nenhum dispositivo encontrado no sistema" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Modem está conectado agora. Por favor, desconecte para buscar." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s desconectado" #: ../src/main.c:2056 msgid "Show window" msgstr "Mostrar janela" #: ../src/main.c:2062 msgid "New SMS" msgstr "Novo SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Preferências" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Sobre" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Descrição" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Erro no dispositivo" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Disponibilidade: %s Tecn. accesso: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Erro ao buscar redes" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operador" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Recebidas %u novas mensagens SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Recebidas novas mensagens SMS" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Remetente da mensagem:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Número de SMS inválido\nsomente números de 2 a 20 dígitos sem letras e símbolos podem ser usados" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Texto de SMS inválido\nPor favor, escreva algum texto para enviar" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Número incorreto ou dispositivo não pronto" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Essa é a pasta para suas mensagens SMS recebidas.\nVocê pode responder uma mensagem selecionada usando o botão \"Responder\"." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Essa é a pasta para suas mensagens SMS enviadas." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Essa é a pasta para seus rascunhos de mensagens SMS.\nSelecione uma mensagem e clique no botão \"Responder\" para começar a editar." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Recebidas\nMensagens recebidas" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Enviadas\nMensagens enviadas" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Rascunhos\nRascunhos de mensagens" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u s" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u s" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g kB" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g kB" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g MB" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g MB" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g GB" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g GB" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g TB" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g TB" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Desconhecido" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Aplicativo" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protocolo" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Estado" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Buffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Porta" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Destino" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Limite de tráfego excedido" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Limite de tempo excedido" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tráfego: %s, limite definido para: %s\nTempo: %s, limite definido para: %s\nPor favor, verifique os valores inseridos e tente novamente" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Valores incorretos de limites de tráfego e tempo " #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tráfego: %s, limite definido para: %s\nPor favor, verifique os valores inseridos e tente novamente" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Valor incorreto de limite de tráfego" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tempo: %s, limite definido para: %s\nPor favor, verifique os valores inseridos e tente novamente" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Valor incorreto de limite de tempo" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Desconectado" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Limite" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Desabilitado" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "s" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Velocidade de RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Velocidade de TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parâmetro" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Valor" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Dados recebidos" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Dados transmitidos" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Velocidade de recebimento" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Velocidade de transmissão" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Tempo da sessão" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Tráfego restante" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Tempo restante" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Limite de tráfego excedido... É hora de descansar \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Limite de tempo excedido... Vá dormir e tenha bons sonhos -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Comando exemplo" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "Requisição USSD inválida\nA requisição deve possuir 160 símbolos\niniciada com \"*\" e terminada com \"#\"" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Erro ao enviar USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Requisição incorreta de USSD ou dispositivo não pronto" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Sessão USSD terminada. Você pode enviar nova requisição" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Requisição incorreta de USSD" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nsessão USSD está ativa. Esperando por sua entrada...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Comando" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Dispositivos" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Info" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Buscar" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Tráfego" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Nova" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Remover" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Responder" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Requisitar" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Enviar" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Modo" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Nível de sinal" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Começar busca" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Definir limite" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Conexões" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Velocidade de transmissão" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Ferramenta para controle de funções específicas de modem EDGE/3G/4G" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Página web" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Português (Brasil): Rafael Ferreira " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Conexões ativas" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Terminar aplicativo" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Erro" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Nova mensagem SMS" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Número" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Concatenar mensagens" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Expandir pastas" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Cor do gráfico da velocidade de RX" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Cor do gráfico da velocidade de TX" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Tráfego" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Questão" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Limites de tráfego" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Habilitar limite de tempo" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "MB" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "GB" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "TB" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Mensagem" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Ação" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Exibir mensagem" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Desconectar" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Tempo" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Minutos" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Horas" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Adicionar" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Excluir" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/appdata/zh_CN.po000664 001750 001750 00000007304 13261703575 020151 0ustar00alexalex000000 000000 # # Translators: # 周磊 , 2017 # 周磊 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: 周磊 \n" "Language-Team: Chinese (China) (http://www.transifex.com/ethereal/modem-manager-gui/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Alex" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "控制EDGE/3G/4G宽带调制解调器的特定功能" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "兼容Modem管理器,Wader和oFono系统服务的简单的图形界面,并能够控制EDGE/3G/4G宽带调制解调器的特定功能。" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "您可以使用Modem Manager GUI检查您的SIM卡的余额,发送或接收短信,控制移动流量使用情况和更多功能。" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "当前特性:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "创建并控制移动宽带连接" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "发送和接收短信,并存储消息到数据库中" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "启动USSD请求并查看回复(使用交互式会话)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "查看设备信息:运营商名称,设备模式,IMEI,IMSI,信号强度" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "扫描可用的移动网络" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "查看移动流量统计信息并设置限制" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "请注意,由于不同系统服务的限制或甚至使用的不同版本的系统服务,某些功能可能无法使用。" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "宽带设备概述" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "短信列表" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "传输控制" modem-manager-gui-0.0.19.1/help/C/figures/sms-window.png000664 001750 001750 00000130125 13261703575 022567 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxy|E=W&\B9DnTdDCaAQǟxʵJP\A@aE^D9CIΜݿ?tdf2 z+>>oUI{Q@ c͚5>j;##rI @ 1b]~s=ʜ9s@@ k#Gjq **}ٕ@ @p?5kHu7p@ r s=ʧ~z!@ q:PZZ@ez=FBTTꀮq Z@ OQQ,k\.n͆j%::8$d"\.@ ]eQ`0r())!77 .PXX )) NwM/*દO>< F ( l6F#͚5#""B;.2:h[.GfKbbb j?Iswp8xG)..**=zd "eՕJompb lӧq\аaCzmWCOrʀ KQQv@˖-1 ;?iѢvbnZJ?hR4_kt:+++cܹdeeѶm[G9x [ltFhȲLyy9.F!InMѨQ#\.+=|-İ~=JƍYj111jx-;v믿ɓ1`ڷov1>o~X&۷/ b>|4~ioʕ+qtܙ /:=x ~)gϞLF6l-[>ȁ8r<Ӥ&##~Ȉ#xxꩧѣG5;x d~?>X,͛G p\ $Iȑ#~-O l6nh‚VF}1DGGcٰl_5ϙ3&Mйsg܍7rQFr-ኢMlb[HT۷cǎ1`5k֬aʔ)8pns^u֬Yd[ر#- nsϱb eٲe˸n8~פOff&>,֭cǎj*~Kޢ"֭=M6eztRRSS!33YfU+%K7PZZJX`vXXX5ꫯw}\wuuٺu+<;w<Ν;ǹs爋a m:Olb[\.NX[r}gϞe֭^bccq:\jn|=^[h9sXnn 6h5h W#V^^n pD \ԯ_۳qFrrrtӇ lYldҤI||W,[ p6lF 11Q{5ou7EQp:fiv… y[.ϟwޡiӦmVGrB _v3m4~7Nĉ^4N:a4>}:G?G;祿<*A%<<\2ΦHFcu޽{ٳg.@nn.f+@[xqU4h@NN ha;KiӦxJNN,C '77u뒓S)NլM6={==IHHܹs9sFgmu"冀 kIʧO4>~{yѸqcz)JKKb(|ٳ9u'OfڴiL6cz j~ii)ڵ{[Ν;swT*۫ jRVVlyC1͔]Ml廉( Z"%%x ~:tHw!իKJJĉ(ǽ«[nEӱn:~m[z5wuW=5/"ׯ`ڵK_-ѳN8&J35ܪݻ3dgg( ?0z_/@Xu&ڱz$Ipxi2a7n̴iHOOg<Á$Iw\|'?~7x뮻)Spi>Smank׮et֍͛7jժJT>fQ~}]%!!cǎE \[1uTV+ 4jŅ-Æ 7o%''Iؾ};PQTϻ{YlZE]cǎs ȭފ=z xzv*Z&B-CMorr2|dggsӧOfΜҥK71l0vÇ0amڴ|}1p@x ֮]Ç_uKCף)++#22XAA< SNe„ XJyN[ SN9HYY_ݫb߶mgtܙVZ1}tEѦ %|O,˕*,\x kEQ A=УG;w.+7t=Zfy)**c7W_}U p0g 6lM #%%QFK꫼[>|0i$>8U'PTTʕ+_x'xWK?v;sa…]={( t֍=zht YYx6;N&Mxڵ+EEEIX,XV{L4<#DDD nƴ@+h䦛nrwi'Odiӆ\nfƏϞ={V @{>A!IM6گNGrXѬY3Ν;xdd$ud2jG'IDEE( .\ 99+<^O\\ш,8NʸpTĦNQQΝ #99YPq\Ǔ(lܸ'i $QNr픔xKLL/,,IIՋ(a@ IB'|߾}/Or)4h|Oȣ>o ѣx=v sNn7vC h4zgٲevڷoСCW @RK ر#p _Çk322᭷ޢ^z222xZ̝;7x6mPTTɓ'*1 ̛7^}UW76wܹsl̚5 IxXt) :O޽{5k+x~ @ *Lʮ]ܹ3n]emfc˖-=łj%66:uPZZ_"Z^^ݻ>|8C=ĦM1b%%%ՋLt::LΜ9&--D7nFҶ%KPVVƞ={6lvĀ*](J龘k1͛9r$. g`0еkW>GYAԿ,b O@ _R# cz[.SLAQƏό38q"qqqӇٳgWr;P?,|跚ѣG3|׿RVVF:u뮻ΪҾ}{^xl6:u@ G$(/Q<٪xii)$dBv)..vcXpp\j:ŢMp84 u羼^unLff&111 :f͚]t֭[^^zAϳl߾۷WK0zEjj,ѣZ >B Usi6mĉ'$dl6#INRV+999撜-~Uacz iȐ!?Q̛7o: 2,W__QF#ϟgX,y1]"f"##IJJ xΞ={XvEin0xᇉRrrr(--aGhVСj.\Ȏ;IIIbPE|Qנ(,,d߾}8Ft36&|y/QN_|/`\zcǎqF{9ZhQ\+\8*s\|'Kyyy?s VYB),,vӣGF*F#f >;$ #lL wAߺuWj_l=z4M4cǎ8N\.n[cqIdd$-Z ##?dkÇbT t:ywW`DGGSn]]*_cZAY9+:s SN%>>;CK2soۍn'66{n5^<מH6&ٲeKf:NƌCvHOOZ޷l6Ӯ];t:;v젼<4{ЧO>sf3m۶~ w I~{jj*h޼LF&c~˲>ײ VG3IVOujk%߆l&==TqXVpT Jƍ)))n_ ItZSh4Ү];a0`Ke*KHHছnl6s1>:ג t$IB>|Vg}(nFm4ȑ#`00w\2>Nǚ5k2e )))MWgʕ$&&>}:uԩRO|ԨQ$&&^t. .%Tѣ=~Ϲm0T͒0`6uNc…_6 4w^}t:JKKY|9EEE¨-:'22VZri:듒BLL aaaȲLII 999deeQZZf7ndԨQor%dY$>>KNǼyf@ {gnzC!_yfv-RnӧOxG|n77p۷oS_~%%:9rDDD I~5?[A(tҴiS`es-iժ?#,_6f,3b6xvӴiSnݪښor2d-[DeV+WfݺuȲ`UV$$$믿:`N:E6m\%իZN:L&z=aaaѴiSn(--%??K#NGTT۷o[o%<ݺu#""B nk{,i\lGfܸq,Yqie}u2< UCw}t:sraX1bO<XN6ބ/h~{-$*sN,˜>}իW#hSQi&6l@Ν6loWˈ;A\\[nK.^;v'O&,,L&&&ҺukzMLLLI&,_zQsM8zh%͝N%.˲V;NMGh4j^u=gxvűw^nJq:{,WٳڹݻwE9s3gSO=]p8x뭷p8L2N4@bzIN֤@nEQx/0Lն eCӑ9~8III 0[o P5$::G}ٌ('h$j,XO)..?!777j,\~Mk8q":˗sq;ƌCǎϙ2e 7|3| zJ s9sr$I4e=Caa!+VjA~hҤ z,f3ܹs$%%a2駟8{,{;},_ܫBƍ+9R-2N0mߜ9sb.]G}Dƍ9y$| 3f ==b/_N~~~*8qBK?{7jԈ!Chzso{Pl *lٲe>|ELL ڵO>DEE(*ϗ;6wq͚5c,^9U٠o\p8x߿Ç)..!X;E3On7/W7dbĈL:R/E… ȲL||EC: 2x5kFϞ=|ך,tڕ(N<$Iȑ#呖FQQ_|?0w}7WR`Ϟ=GZ8:wdb=zTڸqcn7fٳ\.~ڶm *vm\wu8h4ʪe˖i9ĉYdfCjeryB.(‘#G(((=?t:ׯ|yWOxIOO{ᆱ׬ TAZ$&Nkƒ%K.G… ٹs'nn!C`4x70sssyg(..f̙3Ʉn믿槟~DƎKZZZ[+WRRRbws=vJ{V,7oެi=zT["zҤIL<hɁ())[oynϟѣGȲ̚5kСNÇkajxVͯiu>ʉ'~#WG39P[)3j߱c-~dddСC{='`̞=9sػw/+VBD۷o7f( X,\.v]0͘1rUϟ?T B/..XJP{&.._|ŋ3m4 /B5ΝC$/X,fN'ǏfiVJ_[(_^Pm'd2-ƍ׀W Z6u&ϖ" )E mԩ7;D(jgro"IgϞe…t֍[oUxGGlڴf͚Ѯ];^}UygЩϟM4+.SEuޝ?sAJJJ[*uajqRVu:u0yd.]IOOgРAڠU_< #&&^{ B۶m\0Tr"##5k7pP'>g0tPf3|g|W?ޫR߱cGmFvv6ƍVt]* 99l ׷W4x^U;U{S;Տ\bQeΝwީ-vdZq:4jԈ6m Ik׮j$PS2khRJ~U#X^s݌3ˎ|㔐baɒ% >+m0}Jbcc@jR =j[w@P['<j$Eciw%11aÆU٥SO=ŤIȠe˖qzjn|۴imڴAQf̙A1ڵݻwӥK-\$$$ IgΜaÆ^aUuM˖-[eE1uTm:,,vnmY5^oCQ|ML&3f̙3ۏXu?.K+z=z?t^f/HJJ"::kyW6-g gς1չsrr4wh!LJJvV)^O߾} 8xv@÷N Ujo=?ZT<999$$$TKBmƆ '33;v0vXnF$I_f…ڵ ۭ|_wu <$..NxV頦;sV֔0atdbL<^tGTTטEQEez=Zi ZgΝiٲ%p9hҤ <III̝;gb2Zr_UvS&~l+Բ>(<^Y_$b D͋*0ժZtt4lݺ|}OUْGznU"«λS MT%!!͗vsix)..2k0#<^h4bZ)))4OeSN1{lN8A k׮̜9,9zm.ݻn:~'v귰4Ltޝ/\E!;; .Ty\vܩ 2LAGKD\\\%cjaIll6]^GN <xVDE񫹯;JAA?Vkݺu4m+Nje_dر^?t\XVƎˉ'ؠg%=EM&:t`ѢEOogϞ@+VhRTTw}GC:K ;D |H3k|U%,,n%KP^^N~~>| =zuX,t:\^^Nyy9:Cرc2diiiHM7Dnn.VM֭1 WCU=XYBFDDPZZ7oEk.1_\\iQRR1ʹnҥKX,ԯ_'ү_?ƍǣ>URSSy?~<,Xuisl64`\jM`yMz5P4uTv;_=? V7 /@XXXyMeFڵkYr%@EW_}ž}jT)RPj!n2eؼy:srr8zҊ:n6픕1|pJJJʑo׷?Ǝ3))6m0sLҠ( Gf+G^ҥ /&==J4ju%77W\Q~m~M_^:^OXX6g_/\pa6iѢF4PQ,cZpGem4 #%9^| *Gu]Vqq֚>zH/?RUVѸqcm>h_.zz益YЩKݻ]<^tԩSG[8F+4/((*/ɜ>}K$IA)(( 33>}xQ qgԩ$''Wz[,FɩSxy饗0ڹU` ۲,jB(6J&v:vP4S㩾[mFY۷o|zW<8?5Es]:(JxRR/fРA{]N:{uyl6zƎKV*U\._~,t깫*kԊf۱X,\pf|^jSO=Űaؽ{7ӦMcϞ=\wu4k I8vǏ'%%-Zh $ѫW/bԩMW/E@bklذ^^`@qiN84oޜӵkWԩ믿UWGΝƭ*JU( O5ߕ=ߑ,|r, W}o6.t/S(OE0mλS ME˖-诋_cZcڵߟod @EIii)ݻݻwtR1 ^6( ;wRL>ǫ$U,ӭ[*]<1Lvm1@M-P]y7o\ J[U+Bf8zh@Vpʫfg}O?kLa? O |=g1|k Ivvf,3w\[S4h\LzP<ǽKÆ 5wyիWӢE f̘Nɓ1k9qQ`4lؐ[oM6u '''3gMAj6*6Brrr())h4Vj9vz3BkHQ֬YÚ5k TpQQ٘@ @lѣ.򧶸~Ѩ2sСWEJYU2dHscFSs̚5|_tUˁ? < d*P2Ê+0LlܸGVZP5t̞=￟7xW^y}~zM#-jf:}fqenݺOҸqc$I/`ᤦrJ`2o9r լC0 FttWQQ+0'Odܹm۶m6v9uvkMo߾R`Ԥ|-s!w(^W7Nyǫuavv6'OԽ-I Z7&;;kA\poݨQ#bW+X-[RPN'.&L)IiiiA\oq} ,˘Sp]6X|^[4 (4nܘwyxkF/jԊ[[tw|efS6M$zBG8++_|?qo&E'4Jy[GOM0:t ΝIs4w K:KQ"##ܹ3iiiaeΝ#n^ʟ_999,^XPҖɓ>}zw!sM[onСO8GEE֭[]9fl;ݛsitdffb4 pHzΝ;[ՆٔYOj޴dZ)**wnil:󫦦B~Gl֭[̙3XF Z3p@كdjUW 7 .R5!;wFAZT@DD#F`׮]VΙ30ܗ:g;pFCxx8C%##V 7i=?Y,۷YOќət1 \s5>}F#Kh;dС|$9wFs})~{ xwЗ߆ _OhhhG>êU>|+ɓ' PTVVk\!lt:l6f^&إaٰZ(Vߟ(jb0P???l6[\ l68V'PN>-u+B ObAQSS l6X,|nn0͜8qBNe*\,\sZSS޽{R7[,<ѣ}U !B˗Opsk8,E:㬪"++ ???M6[t>|XmsbۤNEB!(;4 jݒbPZZFi6榛nGqIМ⋀7[*Bxx8Totj2&Ξ:Ք3gzjV^g}۩9l6xK&ݎlv)ӝs.wO!I>7h4QPP@ttkkk)..&**JmNqq1~-#G56L4 :DAAL&_FΝpɷ7pMNj?5\EAGUU???K7=l6L&AAAjo5y1&11-vr8=F!ۄ; $$$f3'O$..WzVXW^d⵵,_tv;CnCדΊ+x?ILL Gg78ph$%%;*ZggΜQtr%֭[y6 NLtt4.e3zhO\[oqi^|EpI>CRRR(((dddGFFO>:u>t`0 " Vgx+ܐjX&""Bk.L&ƍcĉTTT~?~ѣGsuyӦM#88]vXV&NW_ͩSK.TVVRVVCtt4^\:BT!8w[,JJJvS;vx:t@ǎnΉ'3fZW?PEr׮]\q̘1cұcGbbbR),,$44ByttH{Sg'Oka钀 !'ኢLN8x ;ҩS']To[o?R555|̞=` ӦMc u^sISSS:k生aϞ=߿fwo^O? ]=~8W۟Ջ'N֭Ս敔`Z9uz }QKDZcUqxSs/+{ Zԑ4vK95rc69u{׮]mtCgjjK]?4 XV/HzZTTTлwo$h4Tg)))HB!%Ƨ(M%aaaDEE?0x`]k. ̆ˀX|9&MR>}EQxyժMMM%##zyw08Z0DEEl Koyԩ ?۶m#;;~a2P70MW7:9ot^`07:$%%΀(..bЩS'1hr+49;!нpCҁ󉈈hwc $&&N:?s YWAAA 6GADD)))pHaa!z(bccٳg6RU99iB!ĥ3& gΜ!??Ν;wߑFdd$P7dzz:Ҭ—ѳgfSEnu)))꫄Jxx8]P5ta^G???'>>LAA~~~5ܛ(RSSٽ{7ݺuSñcǶYLmŝ'FVK~~>yyytE:ҘEaFKV1hm%Pi V)?t/= !Ѫ(撜L\\}eS\\͛۷/qqq$''KyyQ. ?~vV^wBj%77WmzCVVz5u&BKϽ8VUUO.]-###4h6l`ذaDFF?w҅|BBB25sLl2oܹ|<#TWWҋ^wҹsg. _vltyy9&J\s&|pIADї6}O?ѻwo ƍZѽ{wkʐ!CYnZΝ;ӧOuvСkSKc::n?Q}C?Z@grkE! {Wz=:t @q9ǻKTTWWܹklu7vؑ2hjR:B!O3o<;j|rII F\sZ` ++9VUUEee%`Z-6cǎhh4bZl8L&999h4zMmmš 00P"rR; )LU_:p8!((^OIIe_B!pߘi6"<<NGMjM-tSUUv Iv;:ZEX1Lm\~S _\ʜ􄆆Ru4էSqr:]C{K^THxh bx5XB!D{Z CV`E?ߚnc4)..Wɫԫ111k_:|'R笋pjhv(OfVF^fI !sp稄mx;ᅠ፤NGtt:X}h4h4nrq}@@d oBQF)y;]!pgQZY0 FFUSSSfCz\n脺$l6Kth4j2"*Ҁt9˺)!B\|J;v1bAAAߦ&hs2l۶ͥg ` 5Yt:uzvt:7gJ***ҥK{`0pqv P_[V?#Bq)  !!7|_ h4t֍/4:.]Mfff;<}8pGaʕڵBbbbbbb:u*saذanS!h$>ȬYrcFaĈ,ZuFffa B{G[oJ_$k֬b'??ݻ$WfѢE0?q'N/ࡇbƌxaK<_޽{>}:: 6M|k<|W'Oxb8BfKƍGll,|e]g_ F *Gq9rHn6rssٲe $g8<3f ɔ߻w^.\ΤIh4|aXp!ɤ6ѣGIHH`񤧧o>׳_]]wqAj7|Ä ilܸ%fҤI_m!$<((l?PQQApp0 'lt%\Ѩ]/Kx,GqiZ^{5wo~:%;jB 3fᠨH}{kZx >}:fpp8xwYhQ1dF#SLa̙M.4i_l-J}O>D}Xd ;wSN,^ !5GDDmطo_vqr^~dGgYYY?>իKukll| 8@bb"WٳgO1`4\oSN.***-_y 55UM&O,IBy&\qr&Nz^}(˲Im||Dzhyy&kSN' Q\B qsy| ̙3:uc/))ifi\{|P(++sYVZZ !i;!ąeРA㬬,E'ávA0`޽{Qw&׽w޽.mL!-^ zc_3!l[oej3zHtZNnp-[( s2yd.A:u]ǎ;Zg>}Zp!-&12z󳙔{1pƍٸqc0/Kvx]t̟?]hsW_}5ƍS)gҥ\uUl߾]]WBx& oDB\LBjj*|?8ӧiii.p 0>~b:v쨎ٳgؕ6OӳgOV^MQQL?|mӯCt DTp<|e#vHOp 0Y*؛ܒ$DOp:EuW3mkmDucpb4Aђ[rT(8_3sxVe`kI옊aeM ORB!xٯ(m>U+q#]QUUfncٰX,q0Ֆc]'$uϘ޿!CյdCHE{ FEthg +r(!:3#{HA?Sm95j"ctHAy6~A0]"571N4uVidrd'_81^,ZKrlBq.("N`AupW⶙XBC? S+Ch5ZEopDzvpi&x}s1g=}dp8z3FOTHNJ]ۭ7]Iu fSWLpW/.}&;jkk R-Y{֭[}nK_PQQ+oM~ZTƹv1yεs[ff& $$$0w\FHJJ>P_c20afN!hsrcͤa?łno|-V޿y{ c?S]VV@AE~)@]~C@2mnn4樻7Y繋_7_4 5n_\'-DoAө.48;V+z\ӅÅbp}q-+hjnM6}*G!|q1( ^ljbZlp80Ls^}U>3?<\?cǎ믻i&.]A[ &ǁy~)C%..zhXp!{^c$7o&Nƍls |.!_1|t.FDDpB6m{GQQ-N[½IxCPQQAuu5儆2rH DTT2g0qs0kFwi"no)ņ/;JH`8AFPn.AA! ͙+(׃;[sdždbݺu̟?4 zyԲON~~>˼ cdǎ$88hfϞl9[F^~e&NܹsuY/22^z}v֮]˄ j>Ӑ/vwy:GMbb"Zhӽ%pލmT/t@hh(!`۩@Ql6U( !!:Z hbYq̑ŸwQN9lٹ{}Zo>m*fr6ʚ3mމKNt{, ~ر#-bʕgϞ{ 0m-}Saa!z5ȫuccc(œ9s\^gZ.Q㽊=;sLxӱl͵ԃ;[sdž.t5>v0p/9c4j/=zSL/ȑ#⋍{{[N}ԃc\ܶm˖-#77ł(L&:mM\BF]hH(9F܁;w{z?Nq+(*?-J*ӨQ5j,]_ϧGIs^u a/_ 6h=۷o_ټy3SNϫm ]n@@@ ֜X4 'NPoTt=;),,$$$Ke4曹-9r$>,:u[nnonvWNKys ;ߚ[VQQyǸk CQuڸk(ζ%c'QZRJii)eeTTdnwި "BS'+am/{-յe􈽂 ñk8/3߹r)vAMM z`uN!!!1ŋSUUEQQ˖-s!)44Ç˃?~Z"44aÆd)..ov|Q^^LJJJuXx1תrZ1|sl6cۉ <\K^(j=z(v3}{'6Arp5s W"mXY + 6~Gy&ol /0c z=Ǐoor'xgy)S`49s&YYY~ŋ3g*++a̙ >ܧZ;&L' h6z= ,;ݻwg̙M&m+;$!!z fR?8 ,`FMơC\p;qQΝKEE <~ɲkk9-vw[f4yyg"))iӦ.N[ 4w\k۴i͛=3?I~\?^L&Pgeg9討ؘ??Eѹk!Z0ŁVG]a!'c$%Ea}j֮]ŋ#ZNTskݺul޼^?(m69㩩!8AihRZzdРZB马nrrv{,?8 W=ަ1d 3yL$.fׯjrWw(l:6˸q;ԩ͛u fEK|N>K3Ν+Cj:wVjt(JӃu4͚дRɚk B رct<2e+L&x  e̘1o.jRB6M6ʺn"j Q76K5 ZlEjL5v~Ё_=t??f~HAyP7 `舢(-Þo62uTՔX땷Q} ۬HH&!'zuw}cCFEDIxwS͗ >tZ?*ͥl? fK%)~E4VG֩t2N|ο"8F^U=CKraÆᒑG}a\RNhg6(LLJ)|́bwPCKqA 6VM#"Oct'fh4 h8 I4 ʓx+ `HI|5F3ٰ'@}0/BvtٚJ-m ):qrҳ-?CO])oc_s8+6}ODf&=cઞٰ]Ғ'޶~W?qb)\<{-CX!rզtŒXkk.eK ZKziPFD%ut:NDѵW^:8( v}c( ~Z=ቬK~:"Cb9V#:ǥcEBq @!x/gxuC'"HNq(uMt}֏Q `H Ԫj),~!eٿif>D&05 -Cضm//]ϵ1.Dh~5Zc N=еW1GCp0b 0AOHBX:s16Ch\7]C-eѸչwW(|wVG/;]ZҺObdh&e6;ʇ;_dþwiq?_՗~+.6n5\Cqqq?ĥ 2ȏՋ[fȐ!Yͷyc$ވj 4 xNE$$S<,>˰ܲZn9>zի;y%.5 o네u>޴91\ PoQ0t>Q! <֫>6-V?s}ڃ|jرc(gΜq)wӦM\5;f?Z[ުU6mFbʔ)Xo_z/fȐ!۲.s_(.`wu4E's_Pc5%sUrk6?nMjZh9V˂ o~Ù3g(((_Gnzj7oAAA-rl…?~^{xrss  "" ҥKJJJxGXhˈy_}o&~{%K4֔W\\?kƐ!C ??!CGAAܹ.]Ό3عs'Vյ/<ڐSӇ~p|?ftޝūyh_oYbUUUp&ϏC6y<?S}`="9b;$q̺!;C{L>\SӟĆ ?[n{!$$ޢĺu?> h4`$&&j; ==ݥ{wp1cov{)OѠj9vUUUÐлwoө"''9ssN2dk׮'44n6K8n/$YkyUUUl۶ロbbb[}͛'ӧO'??e^FFW1;wSYYɎ;Hpp0̞=Xj'l۶I&0i$֮] p^5宻"$$Xnv֮]uxʫT_>pOx{q;~:3;VRԳgO˫Q(..N]GQQQ.((@Qtm۶l2rssX,(dR\ڧ jkkMњ:vȢEXr%ٳ'{/ --t:t@ꪫxW0LdddC9s\bZ.q7[ob|ob4䩼Bi./&&F}会v՝<Fc).V/J:t(QQQDGGb :t@n݀u|r? i4mi*iT88{[q[aa!!!!@]bK\ys.oy~Jyy9'NTl6>#$ܝ jg34u~;gL5.3erˆ#Xx1UUUl2m||\=~ywoox]ݹ[ eذa,Yjy!O璧[vᆪ~˗/̾}8r2.)K,q0n OOSGS<} w= ̘1^,X;tޝ3g͖׿?yTVVSO=E=xyg"))iӦMتl6o6<.7t3p@:Drr2Pw#֊+ԟ~a/^̜9s$&&3g2|6ŗ=={6ls=\{'xg2e F3g6ꏾ-yY`'Oh42m4:^}t.y:|)^QFѻaÆի=&yՔ#FpM7a2k;m}y>S!3h͛=MBNZBڵkYx1}Y{Ⓥ5n!DuֱyW~=BxnݺAZvv66=z_ƍayt-p*B!d2OPTTDhh(cƌiq=I…B\RRR裏; ]q !S!B!DI.B!y&IB!$B!Bg퍙k|D\\^{O{9O\੧⩧~9n!B!iÇ2X-هjv:r)Fu\vtt4K,o>G!,, Z~߱b :u*!!!w}8}]F#deeh"u7߬>:t(7|>0a>]KOj׮-I*(((UGӮ]_跿#],UAA~ըa9al߾]zRNԩS'}8p$qƒ$ݮ_ xΓ'OI&qn\*o=~ᅲeY zQBBzB_ހ]5ҊK5RW&MԡCկ__Tt'[nRBB4n8W~_/eĔ7o,:rv;KRP)U&&nneffʲ,%&&nP~ԢE 4=Wԩ#UqƍkJKKә3g *>>^QQQz4vXժUK}>3IEOTuM6Mmڴӧokݺu}kIp'R ӡh5mT]tWaaa1`(J4U)Rrds'xc5ydMP:\Ȼ6(ߝ/ǣQ $I11ѨQRPPPOr*ÙPH'O/Ν;KrrrsxP*p˲sKl6jK,SNvrlQ Y!m6|>/PyyyžN:SN\+̔W&M3Ϩ~ȑ#5rH}g*((PJJn͝;WGcǎի}Fҧ~*ۭg}VmۦORnʜ$[Niii5f̘nOOOW0TttRRRԲeKIÇsp())IiiiڸqUJ#S]; ~+)y!Vzmɓr#K teg乓jոU衇}ݧN:cǎ߿v>&55U#FPrr$>М9s4w\IEN:vI&iÆ zWkiԩڹs֬YSn[m۶ĉkʔ)={{1eddh…Z|yaծ][RҶKҐ!C4zhIҦM4o<͟?_4k,?^ ҥK͹2@w\j>Qϟ-ZVbI!Y:sX,ՎW&5ُ_Mo=<at6xVyyڰkcM0AwvܩCiԩ5j|A|>mݺUNŋ%-a\oYԹsg}H 0@ԱcGl%Ie#&&FݺuէOxJLLeY%nCiժU˓eY˓T믿kzwhU6MuU||%nolzsuvAvτzl5M#EƩQL2NjנA4h 8P>|+WN3P0,u:QlOU]ӧOҥKաCeffjeJW- lr8ŶqQ:b }v7<΁ԢE IEwd=zT.{y^b^e(''Gڵ IMM-u_~}ynZ[lрq@7>rp8ԢEbwngΜE?|ذaeFxlln=Z|0.7ǣg}Vn[.KNSӦM+u{tt&Mx@%0͘1CZbzZj]<P=lO>u-hȐ!W{.B$YF׋/xgLڼysͽKٳG .T0T\\fΜy"IIIJJJ@k #ksss<kF8<kQÈp0"0 #Èrڽ{F$S_՞jeٳg爈*!!Az^9*_7|m귿/̙3u]wU1gd/t:eY!B"իW+:w޽լY38qB;wԾ}GiŪUV|r\?$iԨQ:t׶jߞPvis<Bl6ի͛2tˀA>w|aM0AҲe?Qҏw~a߿_{ոq4a߿_SVVvG 7P4k,͚5K_|%y=޿g-ZHǎSծ];Kflպ&}jۮ ^NN72PTx:tЈ#$I_rN5mTtYEDD{ԪU+ڵKO=rrr$IGw~/iOhϞ=ڵnnZ;w@TmwTdT^oſ/7ߨw$#m q6kL?\o3g%bcco>cǎڿrssuAtM2e֭['wI'I>}{JHHPdd_'jj\}>5mBX|g.]j[o[IR/׫WKZvm:wEy-\P͓$v[/bccy|9Ӯ]_Ir  #ǣ .(Q&:s&c>|Xׯ$ t:@1ch֭JOOv{ .׷o__^VXm۶M~aC o{Y}1^rrr=z(XX(O ϷoWFbRMrG:qvءP(D?\oذyfy<ݻܼyseee7Б#Gd5eIս{w5jHx<:uTx:Tp$v)˲nAS-˓&OQzTN =6Po߮49rD;w֔)SbŊr/x畘gjΝz*|ӦMS6mti5⒔Ǐ?͛ռysM8Q8u;ᖊg8EGEiӦҥ~Ce 3cLMUE\9G^۷믿^;G^O %B˲Ըac~z"/vVfc.Uв$L@ 6׵'ۭ|w܅rlWࡐpȞH7&‹ұ6~QZS P#G_ dtdl k'o^ݺ1%ږ\ qͦ]_qqjfvE\*( oR˺pA?*V~%Ye)>>^wVקss3q$)ꖁ:W?^ހ_׫ /hw߾e?;;[={Ԍ3m3fn긤&;;4k,w}6mn%@QOG~J yԦU廋m5h KRDL=zȊRT-?TϧdÙ:v G^swЃGrrr[[lnWvvV^x,sUeɝ$65mTqS'i۶hY^BVsW_|nvkȐ!Zzuxnn^yeffI&zg_in:)""B~_Çט1c.===]`PJIIQ˖-%}[s='á$iƍ}WzdԧOl9RÇ_|aÆ)\2 h„ |;C{رct:zRիJ#S]E\+)ynOm[Kh}r8L<)WVewwh3K"<55U#FPrr$>М9s4w\kڰaj׮-qi%iȐ!=z$iӦM7oϟ/h5h -]ۭ$… %W_ȑ#fI߮;wuzUi\.o-+$YͲxk~5}LLF>{V]}э7ިDYUvI:tVZ}tM>]K.UǗ9QQQQQt@lK?0XNIdE;T(R޽uH%''kɒ%z'dz:(''Gڵ IMM-uWÆ %阘nZ[lрQy\LLڴiM6iРA׿U_nN%tz~&իWOƍ+q̙3h"g6,>n\.NMVhM4I*Q֬Y_ʳ¯IzzzgPD6IDAT3k5N/Ş={pBAi̙W{J"«HRR4PT(Fׄ^y׌p]y aD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8PCDDD\_y(@ WjIj׮՞pMؼy3Qӈp0"0 #*#GT<"OPWգ sɶzu*e*9?Kvվzv}+S{fsUׄݥNxiN.r8l9ڗd'H k5)^֖#'Xld)Ps;wN>OO:Uϟ˕"ϧ`0N-Z$%$$ӱcǴvZy<AIҽޫ޽{8?>GttƏf͚ܹszꩧjժbO6M˗/ Uϕy瞫xa 6R PUIdqi?kώq9l E$(++K^WʒYfIR8̙ 4gM:Um۶$v:^dddZjf̘Q<+3Vij|KRaa*Uv'rNJ㊌%_,R=c%''O?U߾}|>~mkVڵ5vbb}r[233xbl6u-wӕ!á@ wΟ?UVԩSl馛4|p8qB˖-Saa4hG}TkwȐ!ڽ{ 5qDu$v뭷ɓ'ԠA=Êr1y^M6MNSg.<'5U.G)mIi"].Y6IpI۷֬YnIv+£t=詧R6mԺukѣ@/Pc+3ֲet=())IJ<@o/_ZjI*.I-RΝ5eIRxb :4|޵kjĉjJwmۦk*55}K,ѠAԽ{wIҖ-[r%ͥ:x`;Qy$.;)+*R%U|u7o\m߾][Vddd_{o7h޼y;4|x6//O,.?^ uz}*##㢢Ծ}{+֭:v믿^~__~yqqqz*v޿/c\.z)IjӦ2~޽[gΜ q(/i.Ν+v-e @MR;YvR˥+y * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "uuid.h" #include "../mmguicore.h" #define MMGUI_MODULE_SERVICE_NAME "org.freedesktop.NetworkManager" #define MMGUI_MODULE_SYSTEMD_NAME "NetworkManager.service" #define MMGUI_MODULE_IDENTIFIER 90 #define MMGUI_MODULE_DESCRIPTION "Network Manager >= 0.9.0" #define MMGUI_MODULE_COMPATIBILITY "org.freedesktop.ModemManager;org.freedesktop.ModemManager1;" //Internal definitions #define MODULE_INT_NM_TIMESTAMPS_FILE_PATH "/var/run/modem-manager-gui/timestamps" #define MODULE_INT_NM_TIMESTAMPS_FILE_SECTION "timestamps" #define MODULE_INT_NM_ERROR_CODE_NO_SECRETS 36 //Internal enumerations //Modem state internal flags typedef enum { MODULE_INT_DEVICE_STATE_UNKNOWN = 0, //The device is in an unknown state. MODULE_INT_DEVICE_STATE_UNMANAGED = 10, //The device is recognized but not managed by NetworkManager. MODULE_INT_DEVICE_STATE_UNAVAILABLE = 20, //The device cannot be used (carrier off, rfkill, etc). MODULE_INT_DEVICE_STATE_DISCONNECTED = 30, //The device is not connected. MODULE_INT_DEVICE_STATE_PREPARE = 40, //The device is preparing to connect. MODULE_INT_DEVICE_STATE_CONFIG = 50, //The device is being configured. MODULE_INT_DEVICE_STATE_NEED_AUTH = 60, //The device is awaiting secrets necessary to continue connection. MODULE_INT_DEVICE_STATE_IP_CONFIG = 70, //The IP settings of the device are being requested and configured. MODULE_INT_DEVICE_STATE_IP_CHECK = 80, //The device's IP connectivity ability is being determined. MODULE_INT_DEVICE_STATE_SECONDARIES = 90, //The device is waiting for secondary connections to be activated. MODULE_INT_DEVICE_STATE_ACTIVATED = 100, //The device is active. MODULE_INT_DEVICE_STATE_DEACTIVATING = 110, //The device's network connection is being torn down. MODULE_INT_DEVICE_STATE_FAILED = 120 //The device is in a failure state following an attempt to activate it. } ModuleIntDeviceState; //Device type internal flags typedef enum { MODULE_INT_DEVICE_TYPE_UNKNOWN = 0, //The device type is unknown. MODULE_INT_DEVICE_TYPE_ETHERNET = 1, //The device is wired Ethernet device. MODULE_INT_DEVICE_TYPE_WIFI = 2, //The device is an 802.11 WiFi device. MODULE_INT_DEVICE_TYPE_UNUSED1 = 3, //Unused MODULE_INT_DEVICE_TYPE_UNUSED2 = 4, //Unused MODULE_INT_DEVICE_TYPE_BT = 5, //The device is Bluetooth device that provides PAN or DUN capabilities. MODULE_INT_DEVICE_TYPE_OLPC_MESH = 6, //The device is an OLPC mesh networking device. MODULE_INT_DEVICE_TYPE_WIMAX = 7, //The device is an 802.16e Mobile WiMAX device. MODULE_INT_DEVICE_TYPE_MODEM = 8, //The device is a modem supporting one or more of analog telephone, CDMA/EVDO, GSM/UMTS/HSPA, or LTE standards to access a cellular or wireline data network. MODULE_INT_DEVICE_TYPE_INFINIBAND = 9, //The device is an IP-capable InfiniBand interface. MODULE_INT_DEVICE_TYPE_BOND = 10, //The device is a bond master interface. MODULE_INT_DEVICE_TYPE_VLAN = 11, //The device is a VLAN interface. MODULE_INT_DEVICE_TYPE_ADSL = 12, //The device is an ADSL device supporting PPPoE and PPPoATM protocols. MODULE_INT_DEVICE_TYPE_BRIDGE = 13 //The device is a bridge interface. } ModuleIntDeviceType; //Active connection state internal flags typedef enum { MODULE_INT_ACTIVE_CONNECTION_STATE_UNKNOWN = 0, /*The active connection is in an unknown state.*/ MODULE_INT_ACTIVE_CONNECTION_STATE_ACTIVATING = 1, /*The connection is activating.*/ MODULE_INT_ACTIVE_CONNECTION_STATE_ACTIVATED = 2, /*The connection is activated.*/ MODULE_INT_ACTIVE_CONNECTION_STATE_DEACTIVATING = 3, /*The connection is being torn down and cleaned up.*/ MODULE_INT_ACTIVE_CONNECTION_STATE_DEACTIVATED = 4 /*The connection is no longer active.*/ } ModuleIntActiveConnectionState; /*Private module variables*/ struct _mmguimoduledata { /*DBus connection*/ GDBusConnection *connection; /*DBus proxy objects*/ GDBusProxy *nmproxy; GDBusProxy *setproxy; GDBusProxy *devproxy; /*Dbus object paths*/ //gchar *nmdevpath; /*Signal handlers*/ gulong statesignal; /*Internal state flags*/ gboolean opinitiated; gboolean opstate; /*Last error message*/ gchar *errormessage; /*UUID RNG*/ GRand *uuidrng; /*Version information*/ gint vermajor; gint verminor; gint verrevision; }; typedef struct _mmguimoduledata *moduledata_t; static void mmgui_module_get_updated_interface_state(mmguicore_t mmguicore, gboolean checkstate); static void mmgui_module_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static gchar *mmgui_module_get_variant_string(GVariant *variant, const gchar *name, const gchar *defvalue); static gboolean mmgui_module_get_variant_boolean(GVariant *variant, const gchar *name, gboolean defvalue); static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error); static gboolean mmgui_module_check_service_version(mmguicore_t mmguicore, gint major, gint minor, gint revision); static mmguiconn_t mmgui_module_connection_get_params(mmguicore_t mmguicore, const gchar *connpath); static GVariant *mmgui_module_connection_serialize(const gchar *uuid, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2); static void mmgui_module_get_updated_interface_state(mmguicore_t mmguicore, gboolean checkstate) { moduledata_t moduledata; GDBusProxy *devproxy; GError *error; GVariant *devproperty; guint devstate; const gchar *devinterface; gsize strlength; if (mmguicore == NULL) return; moduledata = (moduledata_t)(mmguicore->cmoduledata); error = NULL; if (!mmgui_module_check_service_version(mmguicore, 1, 0, 0)) { /*Old NetworkManager does not update properties on opened proxy objects*/ devproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES, NULL, "org.freedesktop.NetworkManager", g_dbus_proxy_get_object_path(moduledata->devproxy), "org.freedesktop.NetworkManager.Device", NULL, &error); } else { devproxy = moduledata->devproxy; } if ((devproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return; } else { if (checkstate) { devproperty = g_dbus_proxy_get_cached_property(devproxy, "State"); devstate = g_variant_get_uint32(devproperty); g_variant_unref(devproperty); } if ((!checkstate) || (checkstate && (devstate == MODULE_INT_DEVICE_STATE_ACTIVATED))) { devproperty = g_dbus_proxy_get_cached_property(devproxy, "IpInterface"); if (devproperty != NULL) { strlength = IFNAMSIZ; devinterface = g_variant_get_string(devproperty, &strlength); if ((devinterface != NULL) && (devinterface[0] != '\0')) { memset(mmguicore->device->interface, 0, IFNAMSIZ); strncpy(mmguicore->device->interface, devinterface, IFNAMSIZ); mmguicore->device->connected = TRUE; } g_variant_unref(devproperty); } } else if (checkstate && (devstate != MODULE_INT_DEVICE_STATE_ACTIVATED)) { memset(mmguicore->device->interface, 0, IFNAMSIZ); mmguicore->device->connected = FALSE; } if (!mmgui_module_check_service_version(mmguicore, 1, 0, 0)) { g_object_unref(devproxy); } } } static void mmgui_module_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicorelc; moduledata_t moduledata; guint oldstate, newstate, reason; if (data == NULL) return; mmguicorelc = (mmguicore_t)data; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); if (g_str_equal(signal_name, "StateChanged")) { g_variant_get(parameters, "(uuu)", &newstate, &oldstate, &reason); switch (newstate) { case MODULE_INT_DEVICE_STATE_DISCONNECTED: /*Update internal info*/ memset(mmguicorelc->device->interface, 0, IFNAMSIZ); mmguicorelc->device->connected = FALSE; /*Update connection transition flag*/ mmguicorelc->device->conntransition = FALSE; /*Generate signals*/ if (moduledata->opinitiated) { /*Connection deactivated by MMGUI*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection deactivated by another mean*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicorelc, GUINT_TO_POINTER(FALSE)); } } break; case MODULE_INT_DEVICE_STATE_ACTIVATED: /*Update internal info*/ mmgui_module_get_updated_interface_state(mmguicorelc, FALSE); /*Update connection transition flag*/ mmguicorelc->device->conntransition = FALSE; /*Generate signals*/ if (moduledata->opinitiated) { /*Connection activated by MMGUI*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(moduledata->opstate)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } else { /*Connection activated by another mean*/ if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicorelc, GUINT_TO_POINTER(TRUE)); } } break; case MODULE_INT_DEVICE_STATE_FAILED: /*Operation state flag*/ moduledata->opstate = FALSE; /*Update connection transition flag*/ mmguicorelc->device->conntransition = TRUE; break; default: /*Update connection transition flag*/ mmguicorelc->device->conntransition = TRUE; break; } g_debug("State change: %u - %u - %u\n", oldstate, newstate, reason); } } static gchar *mmgui_module_get_variant_string(GVariant *variant, const gchar *name, const gchar *defvalue) { GVariant *strvar; const gchar *str; gchar *res; if ((variant == NULL) || (name == NULL)) return NULL; res = NULL; strvar = g_variant_lookup_value(variant, name, G_VARIANT_TYPE_STRING); if (strvar != NULL) { str = g_variant_get_string(strvar, NULL); if ((str != NULL) && (str[0] != '\0')) { res = g_strdup(str); } else { if (defvalue != NULL) { res = g_strdup(defvalue); } } g_variant_unref(strvar); } return res; } static gboolean mmgui_module_get_variant_boolean(GVariant *variant, const gchar *name, gboolean defvalue) { GVariant *booleanvar; gboolean res; if ((variant == NULL) || (name == NULL)) return defvalue; res = defvalue; booleanvar = g_variant_lookup_value(variant, name, G_VARIANT_TYPE_BOOLEAN); if (booleanvar != NULL) { res = g_variant_get_boolean(booleanvar); g_variant_unref(booleanvar); } return res; } static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error) { moduledata_t moduledata; if ((mmguicore == NULL) || (error == NULL)) return; moduledata = (moduledata_t)mmguicore->cmoduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (error->message != NULL) { moduledata->errormessage = g_strdup(error->message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static gboolean mmgui_module_check_service_version(mmguicore_t mmguicore, gint major, gint minor, gint revision) { moduledata_t moduledata; gboolean compatiblever; if (mmguicore == NULL) return FALSE; moduledata = (moduledata_t)mmguicore->cmoduledata; compatiblever = (moduledata->vermajor >= major); if ((moduledata->vermajor == major) && (minor != -1)) { compatiblever = compatiblever && (moduledata->verminor >= minor); if ((moduledata->verminor == minor) && (revision != -1)) { compatiblever = compatiblever && (moduledata->verrevision >= revision); } } return compatiblever; } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_CONNECTION_MANGER; module->requirement = MMGUI_MODULE_REQUIREMENT_SERVICE; module->priority = MMGUI_MODULE_PRIORITY_NORMAL; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; GError *error; GVariant *version; const gchar *verstr; gchar **verstrarr; gint i; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; mmguicorelc->cmcaps = MMGUI_CONNECTION_MANAGER_CAPS_BASIC | MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT | MMGUI_CONNECTION_MANAGER_CAPS_MONITORING; moduledata = (moduledata_t *)&mmguicorelc->cmoduledata; (*moduledata) = g_new0(struct _mmguimoduledata, 1); error = NULL; (*moduledata)->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); (*moduledata)->errormessage = NULL; if (((*moduledata)->connection == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(mmguicorelc->moduledata); return FALSE; } error = NULL; (*moduledata)->nmproxy = g_dbus_proxy_new_sync((*moduledata)->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager", "org.freedesktop.NetworkManager", NULL, &error); if (((*moduledata)->nmproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->cmoduledata); return FALSE; } /*Get version of the system service*/ (*moduledata)->vermajor = 0; (*moduledata)->verminor = 0; (*moduledata)->verrevision = 0; version = g_dbus_proxy_get_cached_property((*moduledata)->nmproxy, "Version"); if (version != NULL) { verstr = g_variant_get_string(version, NULL); if ((verstr != NULL) && (verstr[0] != '\0')) { verstrarr = g_strsplit(verstr, ".", -1); if (verstrarr != NULL) { i = 0; while (verstrarr[i] != NULL) { switch (i) { case 0: (*moduledata)->vermajor = atoi(verstrarr[i]); break; case 1: (*moduledata)->verminor = atoi(verstrarr[i]); break; case 2: (*moduledata)->verrevision = atoi(verstrarr[i]); break; default: break; } i++; } g_strfreev(verstrarr); } } g_variant_unref(version); } (*moduledata)->setproxy = g_dbus_proxy_new_sync((*moduledata)->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings", "org.freedesktop.NetworkManager.Settings", NULL, &error); if (((*moduledata)->setproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->cmoduledata); return FALSE; } //(*moduledata)->nmdevpath = NULL; (*moduledata)->devproxy = NULL; (*moduledata)->uuidrng = mmgui_uuid_init(); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); if (moduledata != NULL) { if (moduledata->uuidrng != NULL) { g_rand_free(moduledata->uuidrng); } if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (moduledata->setproxy != NULL) { g_object_unref(moduledata->setproxy); moduledata->setproxy = NULL; } if (moduledata->nmproxy != NULL) { g_object_unref(moduledata->nmproxy); moduledata->nmproxy = NULL; } if (moduledata->connection != NULL) { g_object_unref(moduledata->connection); moduledata->connection = NULL; } g_free(moduledata); } return TRUE; } static mmguiconn_t mmgui_module_connection_get_params(mmguicore_t mmguicore, const gchar *connpath) { moduledata_t moduledata; GDBusProxy *connproxy; GError *error; GVariant *conninfo, *passinfo; GVariant *connparams, *passparams; GVariant *connconsec, *connipv4sec, *conntechsec; GVariant *conndnsvar; gchar *conntypestr, *connparamstr; gint i, addrint; GVariant *addrvar; gchar *techstr; mmguiconn_t connection; if ((mmguicore == NULL) || (connpath == NULL)) return NULL; if (mmguicore->cmoduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicore->cmoduledata; connection = NULL; techstr = "gsm"; error = NULL; connproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", connpath, "org.freedesktop.NetworkManager.Settings.Connection", NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return NULL; } conninfo = g_dbus_proxy_call_sync(connproxy, "GetSettings", NULL, 0, -1, NULL, &error); if (error != NULL) { g_object_unref(connproxy); mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return NULL; } connparams = g_variant_get_child_value(conninfo, 0); if (connparams != NULL) { connconsec = g_variant_lookup_value(connparams, "connection", G_VARIANT_TYPE_ARRAY); if (connconsec != NULL) { conntypestr = mmgui_module_get_variant_string(connconsec, "type", NULL); if (conntypestr != NULL) { if (g_str_equal(conntypestr, "gsm") || (g_str_equal(conntypestr, "cdma"))) { connection = g_new0(struct _mmguiconn, 1); /*UUID*/ connection->uuid = mmgui_module_get_variant_string(connconsec, "uuid", NULL); /*Name*/ connection->name = mmgui_module_get_variant_string(connconsec, "id", NULL); /*GSM section*/ if (g_str_equal(conntypestr, "gsm")) { conntechsec = g_variant_lookup_value(connparams, "gsm", G_VARIANT_TYPE_ARRAY); if (conntechsec != NULL) { /*Number*/ connection->number = mmgui_module_get_variant_string(conntechsec, "number", NULL); /*Username*/ connection->username = mmgui_module_get_variant_string(conntechsec, "username", NULL); /*APN*/ connection->apn = mmgui_module_get_variant_string(conntechsec, "apn", NULL); /*Network ID*/ connparamstr = mmgui_module_get_variant_string(conntechsec, "network-id", NULL); if (connparamstr != NULL) { connection->networkid = (guint)atoi(connparamstr); g_free(connparamstr); } /*Home only*/ connection->homeonly = mmgui_module_get_variant_boolean(conntechsec, "home-only", FALSE); /*Type*/ connection->type = MMGUI_DEVICE_TYPE_GSM; techstr = "gsm"; /*Free resources*/ g_variant_unref(conntechsec); } } else if (g_str_equal(conntypestr, "cdma")) { conntechsec = g_variant_lookup_value(connparams, "cdma", G_VARIANT_TYPE_ARRAY); if (conntechsec != NULL) { /*Number*/ connection->number = mmgui_module_get_variant_string(conntechsec, "number", NULL); /*Username*/ connection->username = mmgui_module_get_variant_string(conntechsec, "username", NULL); /*Type*/ connection->type = MMGUI_DEVICE_TYPE_CDMA; techstr = "cdma"; /*Free resources*/ g_variant_unref(conntechsec); } } /*ipv4 section*/ connipv4sec = g_variant_lookup_value(connparams, "ipv4", G_VARIANT_TYPE_ARRAY); if (connipv4sec != NULL) { /*DNS*/ conndnsvar = g_variant_lookup_value(connipv4sec, "dns", G_VARIANT_TYPE_ARRAY); for (i = 0; i < g_variant_n_children(conndnsvar); i++) { addrvar = g_variant_get_child_value(conndnsvar, i); addrint = ntohl(g_variant_get_uint32(addrvar)); if (connection->dns1 == NULL) { connection->dns1 = g_strdup_printf("%u.%u.%u.%u", (addrint >> 24) & 0xFF, (addrint >> 16) & 0xFF, (addrint >> 8) & 0xFF, addrint & 0xFF); } else if (connection->dns2 == NULL) { connection->dns2 = g_strdup_printf("%u.%u.%u.%u", (addrint >> 24) & 0xFF, (addrint >> 16) & 0xFF, (addrint >> 8) & 0xFF, addrint & 0xFF); } g_variant_unref(addrvar); } g_variant_unref(connipv4sec); } /*Password*/ passinfo = g_dbus_proxy_call_sync(connproxy, "GetSecrets", g_variant_new("(s)", techstr), 0, -1, NULL, &error); if ((passinfo != NULL) && (error == NULL)) { passparams = g_variant_get_child_value(passinfo, 0); if (passparams != NULL) { conntechsec = g_variant_lookup_value(passparams, techstr, G_VARIANT_TYPE_ARRAY); if (conntechsec != NULL) { /*Password*/ connection->password = mmgui_module_get_variant_string(conntechsec, "password", NULL); g_variant_unref(conntechsec); } g_variant_unref(passparams); } } else { if (error->code != MODULE_INT_NM_ERROR_CODE_NO_SECRETS) { /*We can safely ignore 'NoSecrets' error*/ mmgui_module_handle_error_message(mmguicore, error); } g_error_free(error); } } g_free(conntypestr); } g_variant_unref(connconsec); } g_variant_unref(connparams); } g_variant_unref(conninfo); g_object_unref(connproxy); return connection; } G_MODULE_EXPORT guint mmgui_module_connection_enum(gpointer mmguicore, GSList **connlist) { mmguicore_t mmguicorelc; moduledata_t moduledata; guint connnum; GError *error; GVariant *connvar; GVariantIter conniter, conniter2; GVariant *connnode, *connnode2; const gchar *connpath; mmguiconn_t connection; if ((mmguicore == NULL) || (connlist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return 0; if (mmguicorelc->cmoduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->cmoduledata; connnum = 0; error = NULL; connvar = g_dbus_proxy_call_sync(moduledata->setproxy, "ListConnections", NULL, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } g_variant_iter_init(&conniter, connvar); while ((connnode = g_variant_iter_next_value(&conniter)) != NULL) { g_variant_iter_init(&conniter2, connnode); while ((connnode2 = g_variant_iter_next_value(&conniter2)) != NULL) { connpath = g_variant_get_string(connnode2, NULL); if ((connpath != NULL) && (connpath[0] != '\0')) { connection = mmgui_module_connection_get_params(mmguicorelc, connpath); if (connection != NULL) { *connlist = g_slist_prepend(*connlist, connection); connnum++; } } g_variant_unref(connnode2); } g_variant_unref(connnode); } return connnum; } static GVariant *mmgui_module_connection_serialize(const gchar *uuid, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2) { GVariantBuilder *paramsbuilder, *connbuilder, *serialbuilder, *pppbuilder, *techbuilder, *ipv4builder, *ipv6builder, *dnsbuilder; GVariant *connparams; GInetAddress *address; guint8 *addrbytes; gchar strbuf[32]; if ((uuid == NULL) || (name == NULL)) return NULL; /*Connection parameters*/ connbuilder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(connbuilder, "{sv}", "id", g_variant_new_string(name)); g_variant_builder_add(connbuilder, "{sv}", "uuid", g_variant_new_string(uuid)); g_variant_builder_add(connbuilder, "{sv}", "autoconnect", g_variant_new_boolean(FALSE)); if (type == MMGUI_DEVICE_TYPE_GSM) { g_variant_builder_add(connbuilder, "{sv}", "type", g_variant_new_string("gsm")); } else if (type == MMGUI_DEVICE_TYPE_CDMA) { g_variant_builder_add(connbuilder, "{sv}", "type", g_variant_new_string("cdma")); } /*Serial port parameters*/ serialbuilder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(serialbuilder, "{sv}", "baud", g_variant_new_uint32(115200)); /*PPP protocol parameters*/ pppbuilder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(pppbuilder, "{sv}", "lcp-echo-failure", g_variant_new_uint32(5)); g_variant_builder_add(pppbuilder, "{sv}", "lcp-echo-interval", g_variant_new_uint32(30)); /*Broadband connection parameters*/ techbuilder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); if ((number != NULL) && (strlen(number) > 0)) { g_variant_builder_add(techbuilder, "{sv}", "number", g_variant_new_string(number)); } if ((username != NULL) && (strlen(username) > 0)) { g_variant_builder_add(techbuilder, "{sv}", "username", g_variant_new_string(username)); } if ((password != NULL) && (strlen(password) > 0)) { g_variant_builder_add(techbuilder, "{sv}", "password", g_variant_new_string(password)); } if (type == MMGUI_DEVICE_TYPE_GSM) { if ((apn != NULL) && (strlen(apn) > 0)) { g_variant_builder_add(techbuilder, "{sv}", "apn", g_variant_new_string(apn)); } if (networkid > 9999) { memset(strbuf, 0, sizeof(strbuf)); snprintf(strbuf, sizeof(strbuf), "%u", networkid); g_variant_builder_add(techbuilder, "{sv}", "network-id", g_variant_new_string(strbuf)); g_variant_builder_add(techbuilder, "{sv}", "home-only", g_variant_new_boolean(homeonly)); } } /*IPv4 parameters*/ ipv4builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(ipv4builder, "{sv}", "method", g_variant_new_string("auto")); /*DNS*/ if (((dns1 != NULL) && (strlen(dns1) > 0)) || ((dns2 != NULL) && (strlen(dns2) > 0))) { dnsbuilder = g_variant_builder_new(G_VARIANT_TYPE("au")); if ((dns1 != NULL) && (strlen(dns1) > 0)) { address = g_inet_address_new_from_string(dns1); if (address != NULL) { addrbytes = (guint8 *)g_inet_address_to_bytes(address); g_variant_builder_add(dnsbuilder, "u", htonl((addrbytes[0] << 24) | (addrbytes[1] << 16) | (addrbytes[2] << 8) | (addrbytes[3]))); g_object_unref(address); } } if ((dns2 != NULL) && (strlen(dns2) > 0)) { address = g_inet_address_new_from_string(dns2); if (address != NULL) { addrbytes = (guint8 *)g_inet_address_to_bytes(address); g_variant_builder_add(dnsbuilder, "u", htonl((addrbytes[0] << 24) | (addrbytes[1] << 16) | (addrbytes[2] << 8) | (addrbytes[3]))); g_object_unref(address); } } g_variant_builder_add(ipv4builder, "{sv}", "dns", g_variant_new("au", dnsbuilder)); } /*IPv6 parameters*/ ipv6builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(ipv6builder, "{sv}", "method", g_variant_new_string("ignore")); /*Parameters representation*/ paramsbuilder = g_variant_builder_new(G_VARIANT_TYPE("a{sa{sv}}")); g_variant_builder_add(paramsbuilder, "{sa{sv}}", "connection", connbuilder); g_variant_builder_add(paramsbuilder, "{sa{sv}}", "serial", serialbuilder); g_variant_builder_add(paramsbuilder, "{sa{sv}}", "ppp", pppbuilder); if (type == MMGUI_DEVICE_TYPE_GSM) { g_variant_builder_add(paramsbuilder, "{sa{sv}}", "gsm", techbuilder); } else if (type == MMGUI_DEVICE_TYPE_CDMA) { g_variant_builder_add(paramsbuilder, "{sa{sv}}", "cdma", techbuilder); } g_variant_builder_add(paramsbuilder, "{sa{sv}}", "ipv4", ipv4builder); g_variant_builder_add(paramsbuilder, "{sa{sv}}", "ipv6", ipv6builder); connparams = g_variant_new("(a{sa{sv}})", paramsbuilder); return connparams; } G_MODULE_EXPORT mmguiconn_t mmgui_module_connection_add(gpointer mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguiconn_t connection; gchar *uuid; GVariant *connparams, *connpath; GError *error; if ((mmguicore == NULL) || (name == NULL)) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return NULL; if (mmguicorelc->cmoduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->cmoduledata; /*UUID*/ uuid = mmgui_uuid_generate(moduledata->uuidrng); /*Serialize*/ connparams = mmgui_module_connection_serialize(uuid, name, number, username, password, apn, networkid, type, homeonly, dns1, dns2); /*Add new connection*/ error = NULL; connpath = g_dbus_proxy_call_sync(moduledata->setproxy, "AddConnection", connparams, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_variant_unref(connpath); g_variant_unref(connparams); g_free(uuid); return NULL; } /*Create new connection struct*/ connection = g_new0(struct _mmguiconn, 1); connection->uuid = uuid; connection->name = g_strdup(name); connection->number = g_strdup(number); connection->username = g_strdup(username); connection->password = g_strdup(password); connection->apn = g_strdup(apn); connection->networkid = networkid; connection->type = type; connection->homeonly = homeonly; connection->dns1 = g_strdup(dns1); connection->dns2 = g_strdup(dns2); return connection; } G_MODULE_EXPORT gboolean mmgui_module_connection_update(gpointer mmguicore, mmguiconn_t connection, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *connpath, *connparams; gchar *path; GDBusProxy *connproxy; GError *error; if ((mmguicore == NULL) || (connection == NULL) || (name == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return FALSE; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; /*Get connection object path*/ error = NULL; connpath = g_dbus_proxy_call_sync(moduledata->setproxy, "GetConnectionByUuid", g_variant_new("(s)", connection->uuid), 0, -1, NULL, &error); if ((connpath == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } g_variant_get(connpath, "(o)", &path); g_variant_unref(connpath); /*Open connection proxy*/ connproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", path, "org.freedesktop.NetworkManager.Settings.Connection", NULL, &error); if ((connproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(path); return FALSE; } g_free(path); /*Serialize connection data*/ connparams = mmgui_module_connection_serialize(connection->uuid, name, number, username, password, apn, networkid, connection->type, homeonly, dns1, dns2); /*Call update method*/ g_dbus_proxy_call_sync(connproxy, "Update", connparams, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_variant_unref(connparams); g_object_unref(connproxy); return FALSE; } /*Update data*/ if (connection->name != NULL) { g_free(connection->name); } connection->name = g_strdup(name); if (connection->number != NULL) { g_free(connection->number); } connection->number = g_strdup(number); if (connection->username != NULL) { g_free(connection->username); } connection->username = g_strdup(username); if (connection->password != NULL) { g_free(connection->password); } connection->password = g_strdup(password); if (connection->apn != NULL) { g_free(connection->apn); } connection->apn = g_strdup(apn); connection->networkid = networkid; connection->homeonly = homeonly; if (connection->dns1 != NULL) { g_free(connection->dns1); } connection->dns1 = g_strdup(dns1); if (connection->dns2 != NULL) { g_free(connection->dns2); } connection->dns2 = g_strdup(dns2); /*Free resources*/ g_object_unref(connproxy); return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_connection_remove(gpointer mmguicore, mmguiconn_t connection) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *connpath; gchar *path; GDBusProxy *connproxy; GError *error; if ((mmguicore == NULL) || (connection == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (!(mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT)) return FALSE; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; /*Get connection object path*/ error = NULL; connpath = g_dbus_proxy_call_sync(moduledata->setproxy, "GetConnectionByUuid", g_variant_new("(s)", connection->uuid), 0, -1, NULL, &error); if ((connpath == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } g_variant_get(connpath, "(o)", &path); g_variant_unref(connpath); /*Open connection proxy*/ connproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", path, "org.freedesktop.NetworkManager.Settings.Connection", NULL, &error); if ((connproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(path); return FALSE; } g_free(path); /*Call update method*/ g_dbus_proxy_call_sync(connproxy, "Delete", NULL, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref(connproxy); return FALSE; } /*Free resources*/ g_object_unref(connproxy); return FALSE; } G_MODULE_EXPORT gchar *mmgui_module_connection_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); return moduledata->errormessage; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *nmdevices; GVariantIter nmdeviterl1, nmdeviterl2; GVariant *nmdevnodel1, *nmdevnodel2; gsize strlength; const gchar *valuestr; GDBusProxy *nmdevproxy; GVariant *devproperties; const gchar *nmdevpath, *nmdevinterface; guint nmdevtype, nmdevstate; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (device == NULL) return FALSE; if (device->objectpath == NULL) return FALSE; error = NULL; /*First time just set it to NULL*/ moduledata->devproxy = NULL; /*Initialize local variables*/ nmdevtype = MODULE_INT_DEVICE_TYPE_UNKNOWN; nmdevpath = NULL; /*Network Manager interface*/ if (moduledata->nmproxy != NULL) { nmdevices = g_dbus_proxy_call_sync(moduledata->nmproxy, "GetDevices", NULL, 0, -1, NULL, &error); if ((nmdevices != NULL) && (error == NULL)) { g_variant_iter_init(&nmdeviterl1, nmdevices); while ((nmdevnodel1 = g_variant_iter_next_value(&nmdeviterl1)) != NULL) { g_variant_iter_init(&nmdeviterl2, nmdevnodel1); while ((nmdevnodel2 = g_variant_iter_next_value(&nmdeviterl2)) != NULL) { /*Device path*/ strlength = 256; valuestr = g_variant_get_string(nmdevnodel2, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { /*Device proxy*/ error = NULL; nmdevproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES, NULL, "org.freedesktop.NetworkManager", valuestr, "org.freedesktop.NetworkManager.Device", NULL, &error); if ((nmdevproxy != NULL) && (error == NULL)) { /*Device path*/ devproperties = g_dbus_proxy_get_cached_property(nmdevproxy, "Udi"); if (devproperties != NULL) { strlength = 256; nmdevpath = g_variant_get_string(devproperties, &strlength); g_variant_unref(devproperties); } /*Device type*/ devproperties = g_dbus_proxy_get_cached_property(nmdevproxy, "DeviceType"); if (devproperties != NULL) { nmdevtype = g_variant_get_uint32(devproperties); g_variant_unref(devproperties); } if ((nmdevpath != NULL) && (nmdevpath[0] != '\0')) { /*Is it device we looking for*/ if ((nmdevtype == MODULE_INT_DEVICE_TYPE_MODEM) && (g_str_equal(device->objectpath, nmdevpath))) { /*Get device state*/ devproperties = g_dbus_proxy_get_cached_property(nmdevproxy, "State"); nmdevstate = g_variant_get_uint32(devproperties); g_variant_unref(devproperties); if ((nmdevstate != MODULE_INT_DEVICE_STATE_UNKNOWN) && (nmdevstate != MODULE_INT_DEVICE_STATE_UNMANAGED)) { /*If device connected, get interface name*/ if (nmdevstate == MODULE_INT_DEVICE_STATE_ACTIVATED) { devproperties = g_dbus_proxy_get_cached_property(nmdevproxy, "IpInterface"); strlength = IFNAMSIZ; nmdevinterface = g_variant_get_string(devproperties, &strlength); if ((nmdevinterface != NULL) && (nmdevinterface[0] != '\0')) { memset(mmguicorelc->device->interface, 0, IFNAMSIZ); strncpy(mmguicorelc->device->interface, nmdevinterface, IFNAMSIZ); mmguicorelc->device->connected = TRUE; } else { memset(mmguicorelc->device->interface, 0, IFNAMSIZ); mmguicorelc->device->connected = FALSE; } g_variant_unref(devproperties); } else { memset(mmguicorelc->device->interface, 0, IFNAMSIZ); mmguicorelc->device->connected = FALSE; } /*Update connection transition flag*/ mmguicorelc->device->conntransition = !((nmdevstate == MODULE_INT_DEVICE_STATE_DISCONNECTED) || (nmdevstate == MODULE_INT_DEVICE_STATE_ACTIVATED)); /*Save device proxy*/ moduledata->devproxy = nmdevproxy; moduledata->statesignal = g_signal_connect(moduledata->devproxy, "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); break; } else { g_object_unref(nmdevproxy); } } else { g_object_unref(nmdevproxy); } } } else { //Failed to create Network Manager device proxy /*mmgui_module_device_connection_get_timestamp(mmguicorelc);*/ g_error_free(error); } } g_variant_unref(nmdevnodel2); } g_variant_unref(nmdevnodel1); } g_variant_unref(nmdevices); } else { //No devices found by Network Manager mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } if (moduledata->devproxy != NULL) { return TRUE; } else { return FALSE; } } G_MODULE_EXPORT gboolean mmgui_module_device_connection_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->cmoduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; /*Handle device disconnection*/ if (moduledata->opinitiated) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; } if (moduledata->devproxy != NULL) { if (g_signal_handler_is_connected(moduledata->devproxy, moduledata->statesignal)) { g_signal_handler_disconnect(moduledata->devproxy, moduledata->statesignal); } g_object_unref(moduledata->devproxy); moduledata->devproxy = NULL; } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_status(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->devproxy == NULL) return FALSE; mmgui_module_get_updated_interface_state(mmguicorelc, TRUE); return TRUE; } G_MODULE_EXPORT guint64 mmgui_module_device_connection_timestamp(gpointer mmguicore) { mmguicore_t mmguicorelc; GError *error; guint64 curts, realts; GKeyFile *tsfile; /*Get current timestamp*/ curts = (guint64)time(NULL); if (mmguicore == NULL) return curts; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->device == NULL) return curts; if (!mmguicorelc->device->connected) return curts; error = NULL; /*Retrieve timestamp from Network Manager timestamps ini file*/ tsfile = g_key_file_new(); if (!g_key_file_load_from_file(tsfile, MODULE_INT_NM_TIMESTAMPS_FILE_PATH, G_KEY_FILE_NONE, &error)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_key_file_free(tsfile); return curts; } /*File has only one section 'timestamps' with elements 'interface=timestamp'*/ realts = g_key_file_get_uint64(tsfile, MODULE_INT_NM_TIMESTAMPS_FILE_SECTION, mmguicorelc->device->interface, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_key_file_free(tsfile); return curts; } /*Free resources*/ g_key_file_free(tsfile); return realts; } G_MODULE_EXPORT gchar *mmgui_module_device_connection_get_active_uuid(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *connpathv, *connuuidv; gchar *connpath, *connuuid; GDBusProxy *connproxy; GError *error; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->cmoduledata); if (moduledata->devproxy == NULL) return NULL; if (!mmguicorelc->device->connected) return NULL; connuuid = NULL; /*First get path to active connection object (if there's no active connection, path equals '/')*/ connpathv = g_dbus_proxy_get_cached_property(moduledata->devproxy, "ActiveConnection"); if (connpathv != NULL) { connpath = (gchar *)g_variant_get_string(connpathv, NULL); if ((connpath != NULL) && (g_strcmp0(connpath, "/") != 0)) { /*Create connection proxy to read it's property*/ error = NULL; connproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.NetworkManager", connpath, "org.freedesktop.NetworkManager.Connection.Active", NULL, &error); if ((connproxy != NULL) && (error == NULL)) { /*Connection proxy is ready - get 'Uuid' property value*/ connuuidv = g_dbus_proxy_get_cached_property(connproxy, "Uuid"); if (connuuidv != NULL) { connuuid = (gchar *)g_variant_get_string(connuuidv, NULL); if (connuuid != NULL) { connuuid = g_strdup(connuuid); } g_variant_unref(connuuidv); } g_object_unref(connproxy); } else { /*No such connection - handle error*/ mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } g_variant_unref(connpathv); } return connuuid; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_connect(gpointer mmguicore, mmguiconn_t connection) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *connpath, *conndesc; gchar *path; GError *error; if ((mmguicore == NULL) || (connection == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->devproxy == NULL) return FALSE; /*If device already connected, return TRUE*/ if (mmguicorelc->device->connected) return TRUE; /*Get connection object path*/ error = NULL; connpath = g_dbus_proxy_call_sync(moduledata->setproxy, "GetConnectionByUuid", g_variant_new("(s)", connection->uuid), 0, -1, NULL, &error); if ((connpath == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } g_variant_get(connpath, "(o)", &path); g_variant_unref(connpath); /*Set flag*/ moduledata->opinitiated = TRUE; moduledata->opstate = TRUE; /*Call activate connection method*/ conndesc = g_variant_new("(ooo)", path, g_dbus_proxy_get_object_path(moduledata->devproxy), "/"); g_dbus_proxy_call_sync(moduledata->nmproxy, "ActivateConnection", conndesc, 0, -1, NULL, &error); if (error != NULL) { moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_variant_unref(conndesc); return FALSE; } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_device_connection_disconnect(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->cmoduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->devproxy == NULL) return FALSE; /*If device already disconnected, return TRUE*/ if (!mmguicorelc->device->connected) return TRUE; /*Set flag*/ moduledata->opinitiated = TRUE; moduledata->opstate = TRUE; /*Call disconnect method*/ error = NULL; g_dbus_proxy_call_sync(moduledata->devproxy, "Disconnect", NULL, 0, -1, NULL, &error); if (error != NULL) { moduledata->opinitiated = FALSE; moduledata->opstate = FALSE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } /*Update device state*/ mmguicorelc->device->connected = FALSE; return TRUE; } modem-manager-gui-0.0.19.1/po/Makefile000664 001750 001750 00000001355 13261703575 017254 0ustar00alexalex000000 000000 include ../Makefile_h LOCALEDIR = $(PREFIX)/share/locale all: while read lang; do \ msgfmt $$lang.po -f -v -o $$lang.mo; \ done < LINGUAS install: while read lang; do \ install -d $(INSTALLPREFIX)$(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES; \ cp $$lang.mo $(INSTALLPREFIX)$(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES/modem-manager-gui.mo; \ done < LINGUAS uninstall: while read lang; do \ rm -f $(INSTALLPREFIX)$(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES/modem-manager-gui.mo; \ done < LINGUAS messages: xgettext -k_ -kN_ ../src/*.c -o modem-manager-gui.pot xgettext -j -L Glade ../resources/ui/*.ui -o modem-manager-gui.pot while read lang; do \ msgmerge -U $$lang.po modem-manager-gui.pot; \ done < LINGUAS clean: rm -f *.mo modem-manager-gui-0.0.19.1/help/id/id.po000664 001750 001750 00000110035 13261703575 017452 0ustar00alexalex000000 000000 # # Translators: # Alex , 2015 # Arif Budiman , 2014 # Muhammad Ridwan , 2017 # Rendiyono Wahyu Saputro , 2015 # windi anto , 2017 # Rendiyono Wahyu Saputro , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Muhammad Ridwan \n" "Language-Team: Indonesian (http://www.transifex.com/ethereal/modem-manager-gui/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Arif Budiman , 2014" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Informasi tentang Modem Manager GUI." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Berbagi Serupa 3.0 Creative Commons" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "Tentang Modem Manager GUI" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "Manajer Modem GUI ditulis oleh Alex. Untuk mencari informasi lebih lanjut tentang Manajer Modem GUI, kunjungi  LamanManajer Modem GUI" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "Untuk melaporkan kutu atau memberi sugesti mengenai aplikasi atau manual ini, gunakan Forum dukungan  Manajer Modem GUI" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "Program ini didistribusikan di bawah syarat-syarat lisensi dari GNU General Public license versi 3, seperti yang diterbitkan oleh Free Software Foundation. Salinan lisensi ini dapat ditemukan di Tautan, atau dalam file COPYING yang disertakan dengan kode sumber dari program ini." #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "Bagaimana kamu bisa membantu membuat Modem Manager GUI menjadi lebih baik." #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Menyediakan kode" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "Manajer Modem GUI memiliki kontrol versi di Bitbucket.com. Anda bisa menggandakan repositori menggunakan command berikut: " #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-gui" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "Catatan, perintah klon ini tidak memberikan akses tulis ke repositori." #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "Untuk bantuan tentang cara kerj Bitbucket, lihat dokumentasi Bitbucket" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "Kode sumber Manajer Modem GUI ditaruh di dalam repositori Mercurial, jadi Anda tidak perlu membaca tutorial Git; hanya unþuk memastikan Anda mengetahui perintah dasar Mercurial dan bisa untuk membuat pulll request dalam platform Bitbucket " #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "Terjemahkan Modem Manager GUI ke dalam bahasa asli anda" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Terjemahan" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "Antarmuka pengguna grafis, halaman manual tradisional dan manual pengguna gaya Gnome dari\nModem Manager GUI bisa diterjemahkan dalam bahasamu." #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "Ada sebuah halaman proyek di Transifex di mana terjemahan ditaruh dan juga terjemahan yang baru bisa diberikan." #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "Untuk bantuan umum bagaimana Transifex bekerja, lihat Bantuan Transifex." #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "Untuk pekerjaan anda, anda harus melihat pada aturan dan kamus lokal Team terjemahan Gnome . Meskipun Modem Manager GUI tidak dipertimbangkan sebagai perangkat lunak Gnome murni, Ini lebih sering digunakan dalam lingkungan yang berbasis GTK dan harus sesuai dengan dunia konseptual dari aplikasi tertentu." #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Bantuan untuk Modem Manager GUI." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "Logo GNOME HelloPanduan Modem Manager GUI" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "Modem Manager GUI adalah sebuah antarmuka grafis untuk daemon ModemManager yang dapat mengendalikan fungsi khusus modem." #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "Kamu dapat menggunakan Modem Manager GUI untuk tugas berikut:" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Pindai jaringan seluler yang tersedia" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Pemakaian" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Kontribusi pada proyek" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Informasi Legal." #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Lisensi" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Karya ini didistribusikan di bawah lisensi CreativeCommons Attribution-Share Alike 3.0 Unported." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Anda bebas:" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Untuk berbagi" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "Untuk menyalin, mendistribusikan dan mengirimkan karya." #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Untuk mencampur" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Untuk mengadaptasi karya." #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "Di bawah kondisi berikut:" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Atribusi" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "Anda harus mengatribusi karya dengan cara yang ditentukan oleh pengarang atau pemberi lisensi (tapi tidak dengan cara apa pun yang mengesankan bahwa mereka mendorong Anda atau penggunaan Anda terhadap karya)." #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "Share Alike" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "Jika anda mengubah, mentransformasi, atau membangun atas dasar karya ini, anda bisa mendistribusikan karya yang dihasilkan di bawah lisensi yang sama, mirip atau kompatibel. " #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "Untuk teks penuh dari lisensi, lihat Website CreativeCommons, atau baca penuh Commons Deed." #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Laporkan bug dan meminta fitur baru" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Laporkan bug" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "Konfigurasi aplikasi agar sesuai dengan kebutuhan Anda." #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Konfigurasi" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Gunakan daftar kontak mu" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Daftar kontak" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "Modem Broadband memiliki akses ke kontak yang tersimpan pada kartu SIM. Beberapa modem juga bisa menyimpan kontak di memori internal. Modem Manager GUI dapat bekerja dengan kontak dari penyimpanan ini dan juga dapat mengekspor kontak dari penyimpanan kontak sistem. Penyimpanan kontak sistem yang didukung adalah: Evolution Data Server yang digunakan oleh aplikasi GNOME (bagian kontak GNOME) dan server Akonadi yang digunakan oleh aplikasi KDE (bagian kontak KDE)." #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "Jendela kontak dariModem Manager GUI." #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Dapatkan informasi tentang jaringan selular." #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Informasi jaringan" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "Operator jaringanmu menyediakan beberapa informasi yang bisa kamu lihat di Modem Manager GUI. Klik pada tombol Informasi di bilah alat." #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "Pada jendela berikut anda bisa melihat semua informasi tersedia yang diberikan oleh operator anda:" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "Jendela Informasi jaringan dari Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "Kebanyakan informasi telah dijelaskan dan diketahui dari ponsel tradisional atau ponsel pintar. Catatan, GPS berbasis deteksi lokasi (di bagian bawah jendela) tidak akan bekerja dalam beberapa kasus karena perangkat mobile broadband biasanya tidak memiliki sensor GPS." #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Aktifkan perangkat modemmu." #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modem" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "Setelah memulai Modem Manager GUI, jendela berikut akan ditampilkan:" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "Jendela startup dari <_:app-1/>." #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "Anda bisa melihat perangkat modem yang tersedia dalam sistem anda. Pilih satu dari entri untuk menggunakan perangkat tersebut." #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "Setelah mengklik pada perangkat, mungkin diperlukan untuk mengaktifkannya terlebih dahulu, jika sebelumnya tidak aktif pada sistem anda Modem Manager GUI akan menanyakanmu untuk konfirmasi pada kasus ini." #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "Bersabarlah setelah menghubungkan perangkat yang dapat dilepas seperti USB stick atau kartu PCMCIA. Ini mungkin memerlukan waktu hingga sistem mendeteksinya." #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "Anda tidak bisa menggunakan beberapa modem pada waktu yang sama. Jika Anda klik pada entri lain dalam daftar perangkat, yang sebelumnya diaktifkan akan dinonaktifkan." #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Mencari jaringan yang tersedia." #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Pencarian Jaringan" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "Modem Manager GUI dapat digunakan untuk mencari jaringan yang tersedia. Klik tombol Scan/Pindai di toolbar." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "Jendela pencarian jaringan dari <_:app-1/>." #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "Jika satu jaringan seluler muncul lebih dari satu kali dalam daftar, jaringan seluler ini menggunakan standar penyiaran yang berbeda. Sudah jelas bahwa Anda tidak dapat memindai jaringan bergerak menggunakan standar penyiaran yang tidak didukung oleh modem Anda." #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Gunakan Modem Manager GUI untuk mengirim dan menerima SMS." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "Kebanyakan modem broadband bisa mengirim dan menerima pesan SMS sama seperti handphone manapun. Anda bisa menggunakan Modem Manager GUI jika ingin mengirim atau membaca pesan SMS yang diterima. Klik pada tombol SMS di toolbar." #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "Seperti yang bisa Anda lihat, semua pesan disimpan dalam tiga folder. Anda dapat menemukan pesan yang diterima dalam folder Incoming, mengirim pesan dalam folder Terkirim dan pesan tersimpan dalam folder Draf." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "Jendela SMS dari <_:app-1/>." #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "Anda bisa men-tweak message sorting order dan SMS special parameters menggunakan jendela Preferences." #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "Gunakan tombol Baru untuk menulis dan mengirim atau menyimpan pesan, tombol Remove untuk menghapus pilihan pesan(bisa lebih dari satu) dan tombol Jawab untuk menjawab pesan yang dipilih (jika pesan ini memiliki nomor yang benar). Jangan lupa bahwa Anda bisa memilih lebih dari satu pesan sekaligus." #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Dapatkan statistik tentang trafik jaringan" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Trafik jaringan" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "Modem Manager GUI mengumpulkan statistik lalu lintas mobile broadband dan dapat memutuskan modem saat konsumsi lalu lintas atau waktu sesi melebihi batas yang ditentukan pengguna. Untuk menggunakan fungsi seperti itu, klik tombol Lalu Lintas di toolbar." #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "Jendela lalu lintas jaringan memiliki daftar dengan informasi konsumsi lalu lintas sesi, bulan dan tahun di sebelah kiri dan representasi grafis dari kecepatan koneksi jaringan saat ini di sebelah kanan." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "Jendela lalu lintas jaringan dari <_:app-1/>." #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "Gunakan tombol Tetapkan batas untuk menetapkan batasan sesi yang sedang berjalan, tombol Koneksi untuk melihat list koneksi aktif dan bisa juga memutuskan aplikasi yang menggunakan data terlalu banyak dan tombol Statistik untuk melihat statistik konsumsi data di bulan yang dipilih. " #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "Statistik lalu lintas hanya dikumpulkan saat Modem Manager GUI berjalan, sehingga nilai hasil tidak akurat dan harus diperlakukan sebagai referensi saja. Statistik lalu lintas yang paling akurat dikumpulkan oleh operator seluler." #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "Gunakan Modem Manager GUI untuk mengirim kode USSD dan menerima jawaban." #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "Kode USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "Modem Manager GUI dapat mengirim kode USSD. Kode ini mengendalikan beberapa fungsi jaringan, sebagai contoh visibilitas nomor telepon Anda saat mengirim SMS.." #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "Untuk menggunakan fungsi USSD, klik pada USSD tombol pada bilah alat." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "external ref='figures/ussd-window.png' md5='c1f2437ed53d67408c1fdfeb270f001a'" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "Jendela USSD dari <_:app-1/>." #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "Pada entri teks di atas jendela, kode *100# telah ditampilkan. Kode ini adalah salah satu yang biasa untuk meminta saldo kartu prabayar. Jika Anda ingin mengirim kode lain, klik pada tombol Sunting di sebelah kanan" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "Modem Manager GUI mendukung sesi USSD yang interaktif, jadi perhatikan petunjuk yang ditampilkan di bawah jawaban USSD. Anda dapat mengirim tanggapan USSD menggunakan entri teks untuk perintah USSD. Jika Anda akan mengirim perintah USSD baru saat sesi USSD aktif, sesi ini akan ditutup secara otomatis." #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "Jika Anda menggunakan perangkat Huawei dan mendapatkan jawaban USSD yang tidak terbaca, Anda dapat mencoba mengeklik tombol Edit dan mengaktifkan tombol Ubah pesan enkode di toolbar jendela yang terbuka." #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "Kode USSD hanya tersedia pada jaringan yang menggunakan Standar 3GPP ." #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "Anda dapat menggunakan kode tersebut untuk berbagai tujuan seperti: mengubah plan, memeriksa saldo, blokir nomor, dll." #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" modem-manager-gui-0.0.19.1/po/bn_BD.po000664 001750 001750 00000123006 13261704715 017113 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Md. Emruz Hossain , 2017 # Reazul Iqbal , 2013 # Reazul Iqbal , 2013,2016-2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/ethereal/modem-manager-gui/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "অপঠিত এসএমএস" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "অপঠিত বার্তা" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "যোগাযোগ যোগ করতে ত্রুটি হয়েছে।" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "যোগাযোগ অপসারণ করুন" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "যোগাযোগ সত্যিই কি অপসারণ করতে চান? " #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "যোগাযোগ অপসারণ করতে ত্রুটি হয়েছে" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "ডিভাইস হতে যোগাযোগ অপসারণ করা হয়নি" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "যোগাযোগ নির্বাচন করা হয়নি" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "মডেমের যোগাযোগ সমূহ" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME যোগাযোগ সমূহ" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE যোগাযোগ সমূহ" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "প্রথম নাম" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "প্রথম নাম্বার" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "ইমেইল" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "গ্রুপ" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "দ্বিতীয় নাম" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "দ্বিতীয় নাম্বার" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "ডিভাইস খুলতে এরর (ত্রুটি) হয়েছে" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nভার্সন: %s পোর্ট: %s টাইপ: %s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "নির্বাচিত" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "ডিভাইস" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "সমর্থন করবে না" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "আরম্ভ করার সময় ত্রুটি হয়েছে" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "মডেমটি এখন সংযুক্ত আছে। স্ক্যান করতে দয়াকরে সংযোগ ছিন্ন করুন।" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "বর্ণনা" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "ডিভাইস এঁরর (ত্রুটি)" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s আই ডি: %u প্রাপ্যতা: %s টেকনোলজি: %s " #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "নেটওয়ার্ক স্ক্যানে এরর (ত্রুটি) হয়েছে" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "অপারেটর" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u নূতন মেসেজ গৃহীত হয়েছে" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "নূতন মেসেজ গৃহীত হয়েছে" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "মেসেজ প্রেরক:" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "এস এম এস নাম্বারটি বৈধ নয়\nশুধুমাত্র ২ থেকে ২০ সংখ্যার বর্ণমালা ও চিহ্ন ব্যতীত সংখ্যা ব্যবহার করা যাবে" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "এস এম এস মেসেজটি বৈধ নয়\nদয়াকরে মেসেজ লিখুন" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "নাম্বার ভুল অথবা ডিভাইস প্রস্তুত নয়" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "এই ফোল্ডারটি আগত মেসেজগুলোর জন্য।\nআপনি 'উত্তর' বাটন ব্যাবহার করে উত্তর দিতে পারবেন।" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "এই ফোল্ডারটি প্রেরিত মেসেজগুলোর জন্য।" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "এই ফোল্ডারটি খসড়া মেসেজগুলোর জন্য।\nআপনি 'উত্তর' বাটন ব্যবহার করে সম্পাদনা করতে পারবেন।" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "আগত\nআগত মেসেজগুলো" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "প্রেরিত\nপ্রেরিত মেসেজগুলো" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "খসড়া\nখসড়া মেসেজগুলো" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "এস এম এস" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f কে বি পি এস" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f কে বি পি এস" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g এম বি পি এস" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g জি বি পি এস" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g জি বি পি এস" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u সেক" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u সেক" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g কে বি" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g কে বি" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "অজানা" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "প্রয়োগ" #: ../src/traffic-page.c:486 msgid "PID" msgstr "পি আই " #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "প্রোটকল" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "অবস্থা" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "ব্যাফার" #: ../src/traffic-page.c:502 msgid "Port" msgstr "পোর্ট" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "গন্তব্য" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "ট্রাফিক: %s, সীমা: %s\nসময়: %s, সীমা: %s\nদয়াকরে প্রবেশকৃত মানগুলো পরীক্ষা করুন এবং আবার চেষ্টা করুন" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "ভুল ট্রাফিক এবং সময় সীমা মান" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "ট্রাফিক: %s, সীমা: %s\nদয়াকরে প্রবেশকৃত মানগুলো পরীক্ষা করুন এবং আবার চেষ্টা করুন" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "ভুল ট্রাফিক সীমা মান" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "সময়: %s, সীমা: %s\nদয়াকরে প্রবেশকৃত মানগুলো পরীক্ষা করুন এবং আবার চেষ্টা করুন" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "ভুল সময় সীমা মান" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "কেবিপিএস" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "সেক" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "আর এক্স গতি" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "টি এক্স গতি" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "প্যারামিটার" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "মান" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "গৃহীত ডাটা" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "প্রেরিত ডাটা" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "গ্রহণ গতি" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "প্রেরণ গতি" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "সেশন সময়" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "ট্রাফিক বাকি" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "সময় বাকি" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "স্যাম্পল কমান্ড" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "USSD রেকোয়েস্ট বৈধ নয়\nরেকোয়েস্ট ১৬০ চিহ্নের এবং '*' দিয়ে শুরু এবং '#' দিয়ে শেষ হতে হবে" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "USSD পাঠাতে এরর (ত্রুটি) হয়েছে" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "ভুল USSD রেকোয়েস্ট অথবা ডিভাইস প্রস্তুত নয়" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "USSD সেশন বাতিল করা হয়েছে। আপনি নূতন রিকোয়েস্ট পাঠাতে " #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "ভুল USSD " #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "কমান্ড" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/man/zh_CN/meson.build000664 001750 001750 00000000355 13261703575 021113 0ustar00alexalex000000 000000 custom_target('man-zh_CN', input: 'zh_CN.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'zh_CN', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/man/tr/tr.po000664 001750 001750 00000011152 13261703575 017357 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ozancan Karataş , 2015 # ReYHa , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: ReYHa \n" "Language-Team: Turkish (http://www.transifex.com/ethereal/modem-manager-gui/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "Kasım 2017" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "Modem Manager GUI v0.0.19" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Kullanıcı Komutları" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "AD" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - Modem Manager planı için basit görsel arabirim." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "ÖZET" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "AÇIKLAMA" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Bu program Modem Manager 0.6/0.7 için basit görsel arabirim, Wader ve oFono planları için dbus arabirimini kullanır." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Başlangıçta bu pencere görüntülenmesin" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Belirtilen modem yönetim modülünü kullan" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Belirtilen bağlantı yönetim modülünü kullan" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Kullanılabilir tüm modülleri listele ve çık" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "YAZAR" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Alex tarafından yazılmıştır. Tüm katılımcılar için hakkında iletişim kutusuna bakın." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "SORUN RAPORLAMA" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "Sorun raporlamak için E1alex@linuxonly.ruE2, ya da E3http://linuxonly.ruE4 sitesindeki sorun izleyicisi oturumunu kullanın.\nReport bugs to E1alex@linuxonly.ruE2, or to the bug tracker section on site E3http://linuxonly.ruE4." #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "TELİF HAKKI" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "Telif Hakkı \\(co 2012-2017 Alex" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Bu özgür yazılımdır. Kopyaları GNU Genel Kamu Lisansı koşulları altında yeniden dağıtılabilir Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "AYRICA BAKIN" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/packages/debian/modem-manager-gui.lintian-overrides000664 001750 001750 00000000202 13261703575 027037 0ustar00alexalex000000 000000 spelling-error-in-binary usr/bin/modem-manager-gui reencode re-encode spelling-error-in-binary usr/bin/modem-manager-gui Nam Name modem-manager-gui-0.0.19.1/src/Makefile000664 001750 001750 00000002276 13261703575 017430 0ustar00alexalex000000 000000 include ../Makefile_h BINDIR = $(PREFIX)/bin GCC = gcc ifeq ($(ADDLIBSNAMES),) INC = `pkg-config --cflags gtk+-3.0 gthread-2.0 gmodule-2.0` LIB = `pkg-config --libs gtk+-3.0 gthread-2.0 gmodule-2.0` -lgdbm -lm else INC = `pkg-config --cflags gtk+-3.0 gthread-2.0 gmodule-2.0 $(ADDLIBSNAMES)` LIB = `pkg-config --libs gtk+-3.0 gthread-2.0 gmodule-2.0 $(ADDLIBSNAMES)` -lgdbm -lm endif OBJ = settings.o strformat.o libpaths.o dbus-utils.o notifications.o addressbooks.o ayatana.o smsdb.o trafficdb.o providersdb.o modem-settings.o ussdlist.o encoding.o vcard.o netlink.o polkit.o svcmanager.o mmguicore.o contacts-page.o traffic-page.o scan-page.o info-page.o ussd-page.o sms-page.o devices-page.o preferences-window.o welcome-window.o connection-editor-window.o main.o all: modem-manager-gui modem-manager-gui: $(OBJ) $(GCC) $(INC) $(LDFLAGS) $(OBJ) $(LIB) -o modem-manager-gui .c.o: $(GCC) $(INC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ install: install -d $(INSTALLPREFIX)$(DESTDIR)$(BINDIR) install modem-manager-gui $(INSTALLPREFIX)$(DESTDIR)$(BINDIR) uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(BINDIR)/modem-manager-gui clean: rm -f *.o rm -f modem-manager-gui modem-manager-gui-0.0.19.1/src/polkit.h000664 001750 001750 00000004126 13261703575 017437 0ustar00alexalex000000 000000 /* * polkit.h * * Copyright 2015 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __POLKIT_H__ #define __POLKIT_H__ #include #include enum _mmgui_polkit_auth { MMGUI_POLKIT_NOT_AUTHORIZED = 0, MMGUI_POLKIT_AUTHENTICATION_REQUIRED = 1, MMGUI_POLKIT_ADMINISTRATOR_AUTHENTICATION_REQUIRED = 2, MMGUI_POLKIT_AUTHENTICATION_REQUIRED_RETAINED = 3, MMGUI_POLKIT_ADMINISTRATOR_AUTHENTICATION_REQUIRED_RETAINED = 4, MMGUI_POLKIT_AUTHORIZED = 5 }; struct _mmgui_polkit_action { enum _mmgui_polkit_auth anyauth; enum _mmgui_polkit_auth inactiveauth; enum _mmgui_polkit_auth activeauth; gchar **implyactions; }; typedef struct _mmgui_polkit_action *mmgui_polkit_action_t; struct _mmgui_polkit { /*Polkit authentication interface*/ GDBusConnection *connection; GDBusProxy *proxy; guint64 starttime; GHashTable *actions; }; typedef struct _mmgui_polkit *mmgui_polkit_t; mmgui_polkit_t mmgui_polkit_open(void); void mmgui_polkit_close(mmgui_polkit_t polkit); gboolean mmgui_polkit_action_needed(mmgui_polkit_t polkit, const gchar *actionname, gboolean strict); gboolean mmgui_polkit_request_password(mmgui_polkit_t polkit, const gchar *actionname); gboolean mmgui_polkit_revoke_authorization(mmgui_polkit_t polkit, const gchar *actionname); #endif /* __POLKIT_H__ */ modem-manager-gui-0.0.19.1/appdata/bn_BD.po000664 001750 001750 00000012021 13261703575 020104 0ustar00alexalex000000 000000 # # Translators: # Reazul Iqbal , 2015-2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/ethereal/modem-manager-gui/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "মডেম ম্যানেজার গুই" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "EDGE/3G/4G ব্রডব্যান্ড মডেমের কার্যকারিতা নিয়ন্ত্রণ করুন" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "সহজ গ্রাফিক্যাল ইন্টারফেস যা মডেম ম্যানেজার, ওয়েডার, এবং ওফোনও সিস্টেম ব্যবহার করে EDGE/3G/4G ব্রডব্যান্ড মডেমের নির্দিষ্ট ফাংশন নিয়ন্ত্রণ করতে সক্ষম।" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "মডেম ম্যানেজার গ্রাফিক্যাল ইউজার ইন্টারফেস ব্যবহার করে আপনি আপনার সিম কার্ডের ব্যালেন্স চেক করতে, এসএমএস পাঠানো বা গ্রহণ, মোবাইল ট্রাফিক ব্যবহার এবং আরো অনেক কিছু নিয়ন্ত্রণ করতে পারবেন." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "বর্তমান সুবিধাসমূহ:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "এসএমএস পাঠান ও গ্রহণ করুন এবং ডাটাবেজে জমা করুন।" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "ইউএসএসডি অনুরোধ পাঠান এবং উত্তর পুড়ন (ইন্টারেক্টিভ সেশান সহযোগে)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "ডিভাইস তথ্য দেখুন: অপারেটরের নাম, ডিভাইস মোড, IMEI, IMSI, সিগনাল লেবেল" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "মোবাইল নেটওয়ার্ক স্ক্যান করুন" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "মোবাইল ট্রাফিক পরিসংখ্যান ও নির্ধারিত সীমা দেখুন" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "অনুগ্রহ করে লক্ষ্য করুন যে কিছু সুবিধা বিভিন্ন সিস্টেম পরিষেবার সীমাবদ্ধতা বা সিস্টেমে সেবা এমনকি বিভিন্ন সংস্করণ কারণে উপলব্ধ নাও হতে পারে." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/polkit/pl.po000664 001750 001750 00000003010 13261703575 017441 0ustar00alexalex000000 000000 # # Translators: # Swift Geek , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Swift Geek \n" "Language-Team: Polish (http://www.transifex.com/ethereal/modem-manager-gui/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Włącz modem i uruchom usługi zarządzania modemem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Usługi zarządzania modem nie są uruchomione. Aby włączyć oraz uruchomić te usługi należy się uwierzytelnić" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "" modem-manager-gui-0.0.19.1/po/fr.po000664 001750 001750 00000140016 13261705007 016551 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # L'Africain , 2016 # L'Africain , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: French (http://www.transifex.com/ethereal/modem-manager-gui/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "SMS non lu" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Messages non lus" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "%s n'est pas valide\nIl ne sera pas enregistré et utilisé à l'initialisation de la connexion" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "Connexion sans nom" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "Nom de l'APN" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "Adresse IP du premier serveur DNS" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "Adresse IP du second serveur DNS" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "Connexion" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Une errreur est survenue durant l'ajout de contact" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Suppprimer un contact" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Voulez-vous vraiment supprimer le contact ?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Une erreur est survenue durant la suppression du contact." #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Le contact n'a pas été supprimé du périphérique" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Le contact n'a pas été sélectionné" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Contacts du modem" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "Contacts GNOME" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "Contacts KDE" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Premier nom" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Premier numéro" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Courriel" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Groupe" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Deuxième nom" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Deuxième numéro" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Erreur durant l'ouverture du périphérique" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersion : %s Port : %s Type : %s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Sélectionné" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Périphérique" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "Activer" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "Désactivé" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "Connexion dans %s…" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "Déconnecté depuis %s…" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Non supporté" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Erreur durant l'initialisation" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "Impossible de démarrer les services système requis sans informations d'identification correctes" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "Impossible de communiquer avec les services système disponibles" #: ../src/main.c:506 msgid "Success" msgstr "Réussi" #: ../src/main.c:511 msgid "Failed" msgstr "Échec" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Délai d'attente" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "_Arrêter" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Activation du périphérique…" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Pas de périphériques trouvés sur le système" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "Le modem n'est pas prêt pour l'opération. Veuillez patienter pendant sa préparation…" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "Le modem doit être déverrouillé pour se connecter à internet. Veuillez entrer votre code PIN." #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "Network manager ne supporte pas les fonctions de gestion des connexions internet" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "Le modem a besoin d'être activé pour lire et écrire des SMS. Veuillez activer le modem." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "Le modem doit être enregistré sur un réseau mobile pour recevoir et envoyer des SMS. Veuillez patienter…" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "Le modem doit être déverrouillé pour recevoir et envoyer des SMS. Veuillez saisir le code PIN." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Le gestionnaire de modem ne prend pas en charge les fonctions de manipulation SMS." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Le gestionnaire de modem ne prend pas en charge l'envoi de messages SMS." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "Le modem a besoin d'être activé pour envoyer des codes USSD. Veuillez activer le modem." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "Le modem doit être enregistré sur un réseau mobile pour envoyer des codes USSD. Veuillez patienter…" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "Le modem doit être déverrouillé pour pouvoir entrer des codes USSD. Veuillez entrer le code PIN." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Le gestionnaire de modem ne prend pas en charge l'envoi de requêtes USSD." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Le modem a besoin d'être activé pour pouvoir scanner les réseaux disponibles. Veuillez activer le modem." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Le modem doit être déverrouillé pour pouvoir scanner les réseaux disponibles. Veuillez entrer le code PIN." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Le gestionnaire de modem ne prend pas en charge la recherche des réseaux mobiles disponibles." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Le modem est actuellement connecté. Veuillez vous déconnecter pour scanner le réseau." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Le modem a besoin d'être activé pour pouvoir exporter les contacts. Veuillez activer le modem." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Le modem doit être déverrouillé pour exporter des contacts. Veuillez saisir le code PIN." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Le gestionnaire de modem ne prend pas en charge les fonctions de manipulation des contacts." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Le gestionnaire de modem ne prend pas en charge les fonctions de manipulation d'édition des contacts." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Périphériques" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Information" #: ../src/main.c:1600 msgid "S_can" msgstr "S_canner" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Trafic" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "C_ontacts" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "La fenêtre de Modem Manager GUI est réduite" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Utiliser l'icône de notification ou le menu message pour montrer à nouveau la fenêtre" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "Erreur d'affichage du contenu de l'aide" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s est déconnecté" #: ../src/main.c:2056 msgid "Show window" msgstr "Montrer la fenêtre" #: ../src/main.c:2062 msgid "New SMS" msgstr "Nouveau SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Quitter" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Quitter" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Actions" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Préférences" #: ../src/main.c:2692 msgid "_Edit" msgstr "_Édition" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Aide" #: ../src/main.c:2697 msgid "_About" msgstr "À _propos" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Préférences" #: ../src/main.c:2714 msgid "Help" msgstr "Aide" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "À propos" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "Impossible de trouver les modules MMGUI. Veuillez vérifier si l'application est installée correctement" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Erreur dans la construction de l'interface" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "Modules de gestion du modem :\n" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Module" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Description" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "Modules de gestion des connexions :\n" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Erreur de segmentation à l'adresse : %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Trace de la pile :\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Ne pas montrer la fenêtre au démarrage" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "Utiliser le module de gestion de modem spécifié" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "Utiliser le module de gestion des connexions spécifié" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "Énumérer tous les modules disponibles et quitter" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- outil de contrôle des fonctions spécifiques aux modems EDGE/3G/4G" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Échec de l'analyse de l'option de ligne de commande : %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "Indéfinie" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "Scanne des réseaux…" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Erreur de périphérique" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n ID %s : %u Accessibilité : %s Tech accès : %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Erreur durant la recherche des réseaux" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Opérateur" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Réception de %u nouveaux messages SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Nouveau messages SMS reçus" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Expéditeur du message :" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Le numéro du SMS n'est pas valide\nSeuls les nombres de 2 à 20 chiffres, sans\nlettres ni symboles peuvent être utilisés" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Le texte du SMS text n'est pas valide\nVeuillez écrire du texte pour envoyer" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "Envoi du SMS au némuro \"%s\"…" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Mauvais numéro ou le périphérique n'est pas prêt" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "Enregistrement du SMS…" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "Voulez-vous vraiment supprimer les messages (%u) ?" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Supprimer les messages" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "Certains messages n'ont pas été supprimés (%u)" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Messages reçus" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Ce dossier contient vos SMS entrants.\nVous pouvez répondre à un message sélectionné en utilisant le bouton 'Répondre'." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Messages envoyés" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Ce dossier contient vos SMS envoyés." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Brouillons" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Ce dossier contient vos SMS brouillons.\nSélectionnez un message et cliquez sur le bouton 'Répondre' pour l'éditer." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Entrants\nMessages entrants" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Envoyés\nMessages envoyés" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Brouillons\nMessages brouillons" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "Désactivé" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u sec" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u sec" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Aujourd'hui, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Inconnu" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Hier, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Disponible" #: ../src/strformat.c:248 msgid "Current" msgstr "Courant" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Interdit" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Non enregistré" #: ../src/strformat.c:288 msgid "Home network" msgstr "Réseau familial" #: ../src/strformat.c:290 msgid "Searching" msgstr "Recherche en cours" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Enregistrement refusé" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Statut inconnu" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Réseau d'itinérance" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f minutes" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f heures" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f jours" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f semaines" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f sec" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u min, %u sec" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "Tâche annulée" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "Le délai de systemd est atteint" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "L'activation du service a échoué" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "Le service dépend de celui déjà en échec" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "Service ignoré" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Erreur inconnue" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "Type d'entité inconnue" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Jour" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Données reçues" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Données transmises" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Durée de la session" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Application" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protocole" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "État" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Mémoire" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Port" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Destination" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Limite de trafic dépassée" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Limite de temps dépassée" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafic : %s, limite configurée à : %s\nDurée : %s, limite configurée à : %s\nVeuillez vérifier les valeurs saisies et essayer une nouvelle fois" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Mauvaise valeur de la limite du trafic et de la durée" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Trafic : %s, limite configurée à : %s\nVeuillez vérifier les valeurs saisies et essayer une nouvelle fois" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Mauvaise valeur de la limite du trafic" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Durée : %s, limite configurée à : %s\nVeuillez vérifier les valeurs saisies et essayer une nouvelle fois" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Mauvaise valeur de la limite de la durée" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Déconnecté" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Limite" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Désactivé" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "sec" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Vitesse RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Vitesse TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Paramètres" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Valeur" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Session" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Données reçues" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Données transmises" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Vitesse de réception" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Vitesse de transmission" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Durée de la session" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Trafic restant" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Temps restant" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Mois" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Durée totale" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Année" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Limite de trafic dépassée ... Il est temps de prendre du repos \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Temps dépassé… Allez dormir et faites de beaux rêves -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Exemple de commande" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "La requête USSD n'est pas valide\nLa requête doit avoir 160 symboles de long\ndébuter avec une '*' et terminer avec '#'" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "Envoi de la requête USSD %s…" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "Envoi d'une réponse USSDe %s…" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Erreur durant l'envoi de la requête USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Mauvaise requête USSD ou le périphérique n'est pas prêt" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Session USSD terminée. Vous pouvez envoyer une nouvelle requête" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Mauvaise requête USSD" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nLa session USSD est active. En attente de votre saisie…\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "\nAucune réponse reçue…" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Commande" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "_Commençons !" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Service" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Fermer" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Activation…" #: ../src/welcome-window.c:330 msgid "Success" msgstr "Réussi" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Bienvenue" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "Malgré son nom, Modem Manager GUI prend en charge différents programmes internes. Veuillez sélectionner les programmes internes que vous envisagez utiliser. Si vous n'êtes pas sûr, ne rien changer." #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Gestionnaire du modem" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Gestionnaire de connexion" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Bienvenue dans Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "Activer les services après l'activation" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "Activation des services" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "Modem Manager GUI utilise des services système spéciaux pour communiquer avec les modems et la pile du réseau. Veuillez attendre que tous les services nécessaires soient activés." #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Afficher et sélectionner les périphériques disponibles CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Périphériques" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "Envoyer et recevoir des messages SMS CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "Envoyer des requêtes USSD CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Afficher les informations relatives à l'appareil actif CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Information" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Rechercher des réseaux mobiles existants CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Scanner" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Surveiller le trafic réseau CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Trafic" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Afficher les carnets d'adresse du système et du modem CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Contacts" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "Éditer" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "Ouvrir l'éditeur de connexion CTRL+E" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "Activer ou désactiver la connexionCTRL+A1" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Envoyer un nouveau message SMS CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Nouveau" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Supprimer le message séléctionné CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr " Supprimer" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Répondre au message sélectionné CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Répondre" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Requête" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Envoyer" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "Envoyer une requête ussd CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "Éditer la liste des commandes USSD CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Équipement" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Mode" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Puissance du signal" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Code opérateur" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Enregistrement" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Réseau" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "Emplacement 3GPP \nMCC/MNC/LAC/RNC/CID" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Emplacement" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Rechercher les réseaux mobiles disponibles CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Démarrer la recherche du réseau" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "Créer une connexion" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Définir la quantité de trafic ou la limite de temps pour la déconnexion CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Définir une limite" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Afficher la liste des connexions réseau actives CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Connexions" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Afficher les statistiques du trafic quotidien CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Statistiques" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Vitesse de transmission" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Ajouter un nouveau contact au carnet d'adresses du modem CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Nouveau contact" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Supprimer le contact du carnet d'adresses du modem" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Supprimer le contact" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Envoyer un message SMS au contact sélectionné CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "Envoyer un SMS" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "Droits d'auteurs 2012-2017 Alex" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "Outil de contrôle des fonctions spécifiques aux modems EDGE/3G/4G" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Page d'accueil" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Anglais : Alex " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Activer les connexions" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "Terminer l'application sélectionnée en utilisant le signal SIGTERM CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Terminer l'application" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "Ajouter une nouvelle connexion haut débit" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "Ajouter une connexion" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "Supprimer la connexion sélectionnée" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "Supprimer une connexion" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Nom" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "APN" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Connexion" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "ID du réseau" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "Activer le roaming" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "Numéro d'accès" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Nom d'utilisateur" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Mot de passe" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Authentification" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Erreur" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Toujours demander" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Quitter ou réduire ?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Que doit faire l'application à la fermeture de la fenêtre ?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Uniquement quitter" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Réduire dans la zone de notification ou dans le menu de messagerie" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Nouveau message SMS" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Enregistrer" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Numéro" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Utiliser les sons pour les notifications" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Réduire la fenêtre dans la zone de notification à la fermeture" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Sauvegarder la taille et l'emplacement de la fenêtre" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "Ajouter dans la liste des applications lancées au démarrage" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Comportement" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "Comportement" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Enchaîner les messages" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Ouvrir les dossiers" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Placer les anciens messages en haut" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Affichage" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "Période de validité" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "Envoyer si possible un accusé de réception" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Paramètres des messages" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "Commande personnalisée" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Couleur du graphique de la vitesse de réception" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Couleur du graphique de la vitesse de transmission" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "Direction du mouvement" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "De gauche à droite" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "De droite à gauche" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Trafic" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "Graphiques" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "Programmes internes préférés" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Activer le périphérique" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "Envoyer un message SMS" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "Envoyer une requête USSD" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Rechercher les réseaux" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Modules" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "Pages actives" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "Pages" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Question" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Limites du trafic" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Activer la limite de temps " #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Mb" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Gb" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Tb" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Message" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Action" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Montrer le message" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Déconnecté" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Heure" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Minutes" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Heure" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Statistiques du trafic" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Période de statistiques sélectionnée" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Janvier" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Février" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Mars" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Avril" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Mai" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Juin" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Juillet" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Août" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Septembre" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Octobre" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Novembre" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Décembre" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "Commandes USSD" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Ajouter une nouvelle commande USSD CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Ajouter" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Supprimer la commande USSD sélectionnée CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Supprimer" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "Forcer le changement de codage de réponse USSD de GSM7 à UCS2 (utile pour les modems Huawei) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Modifier l'encodage du message" modem-manager-gui-0.0.19.1/src/polkit.c000664 001750 001750 00000024223 13261704140 017417 0ustar00alexalex000000 000000 /* * polkit.c * * Copyright 2015 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "polkit.h" static guint64 mmgui_polkit_get_process_start_time(void); static void mmgui_polkit_action_destroy_key(gpointer data); static void mmgui_polkit_action_destroy_value(gpointer data); static guint64 mmgui_polkit_get_process_start_time(void) { pid_t curpid; guint64 starttime; gchar *statfilepath; gchar *statfilecont; gchar *statfilecontptr; gsize statfilelen; GError *error; gchar *statfiletoken; gint statfiletokenid; gchar *valueendptr; starttime = 0; statfilecont = NULL; /*Current process PID*/ curpid = getpid(); /*Name of procfs file with process information*/ statfilepath = g_strdup_printf("/proc/%u/stat", (guint)curpid); /*Getting contents of procfs file*/ error = NULL; if (!g_file_get_contents((const gchar *)statfilepath, &statfilecont, &statfilelen, &error)) { if (error != NULL) { g_debug("Unable to read procfs file: %s", error->message); g_error_free(error); } g_free(statfilepath); return starttime; } g_free(statfilepath); /*Procfs file contents parser*/ statfiletokenid = 0; statfilecontptr = statfilecont; while ((statfiletoken = strsep(&statfilecontptr, " ")) != NULL) { if (statfiletokenid == 0) { if (curpid != strtoul(statfiletoken, &valueendptr, 10)) { g_debug("Wrong PID in procfs file"); break; } } else if (statfiletokenid == 21) { starttime = strtoull(statfiletoken, &valueendptr, 10); break; } statfiletokenid++; } g_free(statfilecont); return starttime; } static void mmgui_polkit_action_destroy_key(gpointer data) { gchar *key; if (data == NULL) return; key = (gchar *)data; g_free(key); } static void mmgui_polkit_action_destroy_value(gpointer data) { mmgui_polkit_action_t action; if (data == NULL) return; action = (mmgui_polkit_action_t)data; if (action->implyactions != NULL) { g_strfreev(action->implyactions); } g_free(action); } mmgui_polkit_t mmgui_polkit_open(void) { mmgui_polkit_t polkit; GError *error; gchar *locale; GVariant *actionsv; GVariantIter actionsiter, actionsiter2; GVariant *actionsnode, *actionsnode2; GVariant *actiondescv; GVariantIter actiondesciter; gchar *actiondesckey, *actiondescvalue; mmgui_polkit_action_t action; gchar *actionname; polkit = g_new0(struct _mmgui_polkit, 1); error = NULL; /*DBus system bus connection*/ polkit->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); if (polkit->connection == NULL) { if (error != NULL) { g_debug("Error getting system bus connection: %s", error->message); g_error_free(error); } g_free(polkit); return NULL; } /*Polkit proxy object*/ polkit->proxy = g_dbus_proxy_new_sync(polkit->connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, "org.freedesktop.PolicyKit1", "/org/freedesktop/PolicyKit1/Authority", "org.freedesktop.PolicyKit1.Authority", NULL, &error); if (polkit->proxy == NULL) { if (error != NULL) { g_debug("Error creating DBus proxy object for polkit interface: %s", error->message); g_error_free(error); } g_object_unref(polkit->connection); g_free(polkit); return NULL; } /*Process start time in special procfs format*/ polkit->starttime = mmgui_polkit_get_process_start_time(); if (polkit->starttime == 0) { g_debug("Error getting process start time from /proc filesystem"); g_object_unref(polkit->proxy); g_object_unref(polkit->connection); g_free(polkit); return NULL; } /*Get system locale*/ locale = getenv("LANG"); if (locale == NULL) { locale = "C"; } /*Get polkit actions enumeration*/ actionsv = g_dbus_proxy_call_sync(polkit->proxy, "EnumerateActions", g_variant_new("(s)", locale), 0, -1, NULL, &error); if (actionsv == NULL) { if (error != NULL) { g_debug("Error while enumerating polkit actions: %s", error->message); g_error_free(error); } g_object_unref(polkit->proxy); g_object_unref(polkit->connection); g_free(polkit); return NULL; } /*Actions hash table*/ polkit->actions = g_hash_table_new_full(g_str_hash, g_str_equal, mmgui_polkit_action_destroy_key, mmgui_polkit_action_destroy_value); /*Fill table*/ g_variant_iter_init(&actionsiter, actionsv); while ((actionsnode = g_variant_iter_next_value(&actionsiter)) != NULL) { g_variant_iter_init(&actionsiter2, actionsnode); while ((actionsnode2 = g_variant_iter_next_value(&actionsiter2)) != NULL) { /*New action*/ action = g_new0(struct _mmgui_polkit_action, 1); g_variant_get(actionsnode2, "(ssssssuuua{ss})", &actionname, NULL, NULL, NULL, NULL, NULL, &action->anyauth, &action->inactiveauth, &action->activeauth, NULL); /*Imply section of action description*/ actiondescv = g_variant_get_child_value(actionsnode2, 9); if (g_variant_n_children(actiondescv) > 0) { g_variant_iter_init(&actiondesciter, actiondescv); while (g_variant_iter_loop(&actiondesciter, "{ss}", &actiondesckey, &actiondescvalue)) { if (g_str_equal(actiondesckey, "org.freedesktop.policykit.imply")) { action->implyactions = g_strsplit(actiondescvalue, " ", -1); } } } /*Insert action into hash table*/ g_hash_table_insert(polkit->actions, g_strdup(actionname), action); g_variant_unref(actionsnode2); } g_variant_unref(actionsnode); } g_variant_unref(actionsv); return polkit; } void mmgui_polkit_close(mmgui_polkit_t polkit) { if (polkit == NULL) return; /*Polkit actions hash table*/ if (polkit->actions != NULL) { g_hash_table_destroy(polkit->actions); polkit->actions = NULL; } /*Polkit proxy object*/ if (polkit->proxy != NULL) { g_object_unref(polkit->proxy); polkit->proxy = NULL; } /*DBus system bus connection*/ if (polkit->connection != NULL) { g_object_unref(polkit->connection); polkit->connection = NULL; } g_free(polkit); } gboolean mmgui_polkit_action_needed(mmgui_polkit_t polkit, const gchar *actionname, gboolean strict) { mmgui_polkit_action_t action; gint i; gboolean res; if ((polkit == NULL) || (actionname == NULL)) return FALSE; res = FALSE; if (polkit->actions == NULL) { g_debug("Polkit actions table is empty"); return res; } action = g_hash_table_lookup(polkit->actions, actionname); if (action == NULL) { g_debug("No such action in polkit actions table"); return res; } if (action->implyactions == NULL) { /*Action is implemented*/ res = TRUE; } else { /*Action contains imply list*/ res = strict; i = 0; while (action->implyactions[i] != NULL) { if (strict) { /*All actions must be available*/ res = res && (g_hash_table_lookup(polkit->actions, action->implyactions[i]) != NULL); if (!res) break; } else { /*At least one action must be available*/ res = res || (g_hash_table_lookup(polkit->actions, action->implyactions[i]) != NULL); if (res) break; } i++; } } return res; } gboolean mmgui_polkit_request_password(mmgui_polkit_t polkit, const gchar *actionname) { GVariantBuilder builder; GVariant *variant; guint32 curpid; GVariant *requestsubject; GVariant *requestdetails; GVariant *request; GVariant *answer; GError *error; gboolean authstatus; if ((polkit == NULL) || (actionname == NULL)) return FALSE; /*Test action*/ if (g_hash_table_lookup(polkit->actions, actionname) == NULL) { g_debug("Action not found in polkit actions table"); return FALSE; } /*Form request*/ g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}")); /*Process PID*/ curpid = (guint32)getpid(); variant = g_variant_new("u", curpid); g_variant_builder_add(&builder, "{sv}", "pid", variant); /*Process start time*/ variant = g_variant_new("t", polkit->starttime); g_variant_builder_add(&builder, "{sv}", "start-time", variant); /*Polkit request subject*/ requestsubject = g_variant_new("(sa{sv})", "unix-process", &builder); g_variant_builder_init(&builder, G_VARIANT_TYPE ("a{ss}")); /*Polkit request details*/ requestdetails = g_variant_new("a{ss}", &builder); request = g_variant_new("(@(sa{sv})s@a{ss}us)", requestsubject, actionname, requestdetails, 1, ""); /*Send request and receive answer*/ error = NULL; answer = g_dbus_proxy_call_sync(polkit->proxy, "CheckAuthorization", request, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (answer == NULL) { if (error != NULL) { g_debug("Unable to request authorization: %s\n", error->message); g_error_free(error); } return FALSE; } g_variant_get(answer, "((bba{ss}))", &authstatus, NULL, NULL); g_variant_unref(answer); return authstatus; } gboolean mmgui_polkit_revoke_authorization(mmgui_polkit_t polkit, const gchar *actionname) { GError *error; if ((polkit == NULL) || (actionname == NULL)) return FALSE; /*Test action*/ if (g_hash_table_lookup(polkit->actions, actionname) == NULL) { g_debug("Action not found in polkit actions table"); return FALSE; } /*Send request and receive answer*/ error = NULL; g_dbus_proxy_call_sync(polkit->proxy, "RevokeTemporaryAuthorizationById", g_variant_new("(s)", actionname), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (error != NULL) { g_debug("Unable to request authorization: %s\n", error->message); g_error_free(error); return FALSE; } return TRUE; } modem-manager-gui-0.0.19.1/help/C/about.page000664 001750 001750 00000003141 13261703575 020253 0ustar00alexalex000000 000000 Information about Modem Manager GUI. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

About <app>Modem Manager GUI</app>

Modem Manager GUI was written by Alex. To find more information about Modem Manager GUI, please visit the Modem Manager GUI Web page.

To report a bug or make a suggestion regarding this application or this manual, use Modem Manager GUI support forum.

This program is distributed under the terms of the GNU General Public license version 3, as published by the Free Software Foundation. A copy of this license can be found at this link, or in the file COPYING included with the source code of this program.

modem-manager-gui-0.0.19.1/src/encoding.h000664 001750 001750 00000003153 13261703575 017722 0ustar00alexalex000000 000000 /* * encoding.h * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __ENCODING_H__ #define __ENCODING_H__ #include void mmgui_encoding_count_sms_messages(const gchar *text, guint *nummessages, guint *symbolsleft); guchar *utf8_to_ucs2(const guchar *input, gsize ilength, gsize *olength); guchar *ucs2_to_utf8(const guchar *input, gsize ilength, gsize *olength); guchar *utf8_to_gsm7(const guchar *input, gsize ilength, gsize *olength); guchar *gsm7_to_utf8(const guchar *input, gsize ilength, gsize *olength); guchar *utf8_map_gsm7(const guchar *input, gsize ilength, gsize *olength); gchar *encoding_ussd_gsm7_to_ucs2(gchar *srcstr); guchar *bcd_to_utf8_ascii_part(const guchar *input, gsize ilength, gsize *olength); gchar *encoding_unescape_xml_markup(const gchar *srcstr, gsize srclen); gchar *encoding_clear_special_symbols(gchar *srcstr, gsize srclen); #endif /* __ENCODING_H__ */ modem-manager-gui-0.0.19.1/polkit/ru.linuxonly.modem-manager-gui.policy.in000664 001750 001750 00000003106 13261703575 026302 0ustar00alexalex000000 000000 The LinuxONLY Project http://www.linuxonly.ru/ Enable and start modem management services Modem management services aren't running. You need to authenticate to enable and start these services. no no auth_admin_keep org.freedesktop.systemd1.manage-units org.freedesktop.systemd1.manage-unit-files Use modem management service Modem management service needs your credentials. You need to authenticate to use this service. no no yes org.freedesktop.ModemManager1.Control org.freedesktop.ModemManager1.Device.Control org.freedesktop.ModemManager1.Messaging org.freedesktop.ModemManager1.USSD org.freedesktop.ModemManager1.Contacts org.freedesktop.ModemManager1.Location modem-manager-gui-0.0.19.1/help/ru/ru.po000664 001750 001750 00000140114 13261703575 017537 0ustar00alexalex000000 000000 # # Translators: # Alex , 2014-2015,2017-2018 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian (http://www.transifex.com/ethereal/modem-manager-gui/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Alex , 2018" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Информация о приложениии Modem Manager GUI." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "О приложении Modem Manager GUI" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "Разработчиком приложения Modem Manager GUI является Alex. Для получения дополнительной информации о Modem Manager GUI, следует обратиться к веб-страницеModem Manager GUI." #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "Для того, чтобы сообщить об ошибке в приложении или в данном руководстве, вы должны создать тему на форуме поддержки Modem Manager GUI." #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "Данное приложение распространяентся в соответствии с условиями лицензии GNU General Public license версии 3, опубликованной Free Software Foundation. Копия текста лицензии доступна по ссылке, или в файле COPYING, включенном в комплект постаки исходного кода приложения." #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "Вы можете сделать приложение Modem Manager GUI лучше." #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "Разработка кода" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "Приложение Modem Manager GUI использует стсиему контроля версий ресурса Bitbucket.com. Вы можете клонировать репозиторий исходного кода с помощью следующей команды:" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-gui" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "Учтите, что данная команда клонирования репозитория не предоставляет вам возможности записи данных в репозиторий." #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "Если вам необходима дополнительная информация для начала работы с Bitbucket, вы можете обратиться к расположенному по ссылке руководству пользователя Bitbucket." #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "Исходный код приложения Modem Manager GUI хранится в репозитории Mercurial, поэтому вы можете смело игнорировать руководства по использованию Git; при этом вам в обязательном порядке нужно знать основные команды Mercurial и уметь инициировать pull-запросы на платформе Bitbucket." #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "Вы можете перести интерфейс Modem Manager GUI на ваш родной язык." #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Переводы" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "Графический пользовательский интерфейс, традиционная страница руководства и руководство пользователя в стиле Gnome приложения Modem Manager GUI могут быть переведены на ваш язык." #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "Существует страница проекта на ресурсе Transifex, на которой осуществляется работа над всеми существующими переводами, а также могут создаваться новые переводы." #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "Для ознакомления с общими принципами работы ресурса Transifex, обратитесь к документации проекта Transifex." #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "При работе следует обращаться правилам и словарям соответствующих команд переводчиков проекта Gnome . Хотя приложение Modem Manager GUI и не следует рассматривать как приложение для окружения рабочего стола Gnome, оно часто используется в окружениях на основе библиотек GTK и должно следовать концепциям, принятым для первода соответствующих приложений." #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Руководство пользователя приложения Modem Manager GUI." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "GNOME Hello logoРуководство пользователя приложения Modem Manager GUI" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "Приложение Modem Manager GUI является графической оболочкой для системной службы ModemManager, позволяющей использовать специфичные функции модемов." #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "Вы можете использовать Modem Manager GUI для выполнения следующих действий:" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "Создание у управление мобильными широкополосными соединениями" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "Прием и отправка сообщений SMS с их сохранением в базе данных" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Отправка запросов USSD и прием ответов (также при работе с интерактивными сессиями)" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Просмотр информации об устройстве: названия оператора, режима работы, IMEI, IMSI, уровня сигнала" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "Поиска доступных мобильных сетей" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "Просмотр статистики потребления мобильного трафика и установка ограничений" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Использование" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Участие в разработке" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "Правовая информация." #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Лицензия" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "Данная работа распространяется в соостетствии с условиями лицензии CreativeCommons Attribution-Share Alike 3.0 Unported." #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "Вы можете:" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "Делиться" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "Копировать, распространять и передавать данную работу." #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "Создавать производные" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "Модифицировать данную работу." #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "Учитывая следующие условия:" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Указание авторства" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "Вы должны указать авторство данной работы точно таким же образом, как это было сделано автором или лицом, выдавшим лицензию (но не таким образом, чтобы создавалось впечатление, что автор поддеривает вас или ваше стремление использовать данную работу)." #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "Распространение на тех же условиях" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "В том случае, если вы модифицируете, преобразуете или используете данную работу для создания своей собственной работы, вы должны распространять результирующую работу исключительно в соответствии с условиями этой же, аналогичной или совместимой лицензии." #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "Для ознакомления с полным текстом лицензии перейдите на веб-сайт проекта CreativeCommons, или ознакомьтесь с Commons Deed." #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "Вы можете сообщить об обнаруженных ошибках и необходимых новых возможностях приложения." #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Сообщения об ошибках" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "В том случае, если вы обнаружили ошибку в приложении Modem Manager GUI, вы можете воспользоваться форумом поддержки." #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "Перед тем, как создать новую тему, ознакомьтесь с существующими темами. Возможно, кто-то уже столкнулся с этой же проблемой? В этом случае вы можете написать комментарий в уже существующей теме." #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "Вы можете использовать форум поддержки также для сообщения о необходимых новых возможностях приложения." #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "Настройка приложения в соответствии с вашими потребностями." #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "Настройка" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "Использование ваших списков контактов." #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Списки контактов" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "Широкополосный модем имеет доступ к списку контактов, который хранится на SIM-карте. Некоторые модемы также могут хранить список контактов в своей памяти. Modem Manager GUI может работать с контактами из описанных источников, а также экспортировать списки контактов из системных хранилищ. Поддерживаемые системные хранилища списков контактов: Evolution Data Server, которое используется приложениями из состава окружения рабочего стола GNOME (контакты размещаются в разделе \"Контакты GNOME\") и Akonadi server, которое используется приложениями из состава окружения рабочего стола KDE (контакты размещаются в разделе \"Контакты KDE\")." #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "external ref='figures/contacts-window.png' md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr " Окно контактов Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "Используйте кнопку Новый контакт для заполнения формы и добавления нового контакта в список контактов на SIM-карте или в памяти модема, кнопку Удалить контакт для удаления выбранного контакта из списка контактов на SIM-карте или в памяти модема и кнопку Отправить SMS для создания и отправки сообщения SMS выбранному контакту (из списка на SIM-карте или в памяти модема, либо из списка, экспортированного из системного хранилища списков контактов)." #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "Некоторые системы управления модемами не поддерживают функции управления контактами. ModemManager не работает со списками контактов на SIM-карте или в памяти модема вообще (данная функция пока не реализована), oFono может лишь экспортировать список контактов с SIM-карты (данное ограничение связано с решением разработчиков)." #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "Получение информации о мобильной сети." #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Информация о сети" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "Ваш мобильный оператор предоставляет некоторую информацию, с которй вы можете ознакомиться благодаря приложению Modem Manager GUI. Нажмите на кнопку Статус панели инструментов." #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "В следующем окне вы увидите всю доступную информацию, представленную вашим мобильным оператором:" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "external ref='figures/network-info.png' md5='46b945ab670dabf253f73548c0e6b1a0'" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr " Окно информации о сети Modem Manager GUI. " #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "Большая часть параметров очевидна и хорошо знакома по мобильным телефонам или смартфонам. Учтите, что нвигационные данные GPS (выводящиеся в нижней части окна) в большинстве случаев не будут доступны, так как устройства для широкополосного доступа к сети чаше всего не имеют модулей GPS-навигации." #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "Активация ваших устройств." #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Модемы" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "После запуска приложения Modem Manager GUI, будет показано следующее окно:" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "external ref='figures/startup-window.png' md5='0732138275656f836e2c0f2905b715fd'" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "Начальное окно <_:app-1/>." #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "Будут отображены все модемы, доступные в вашей системе. Выберите один из элементов списка для использования соответствующего устройства." #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "После выбора устройства может потребоваться его активация в том случае, если оно не было предварительно активировано в рамках вашей системы. В этом случае приложение Modem Manager GUI запросит подтверждение перед активацией устройства." #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "Проявите терпение при подключении таких устройств, как USB-модем или карта PCMCIA. Для их определения системе понадобится некоторое время." #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "Вы не сможете использовать несколько устройств одновременно. В том случае, если вы выбираете другой элемент списка устройств, работа с ранее активированным устройством прекращается." #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "Поиск доступных мобильных сетей." #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Поиск сетей" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "Modem Manager GUI может использоваться для поиска доступных мобильных сетей. Нажмите кнопку Сети на панели инструментов." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "external ref='figures/scan-window.png' md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "Окно поиска сетей <_:app-1/>." #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "В том случае, если одна и та же мобильная сеть встречается в списке несколько раз, данная сеть работает в нескольких стандартах. Очевидно, что вы не можете осуществлять поиск мобильных сетей, которые используют стандарты, не поддерживаемые вашим модемом." #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "Использование Modem Manager GUI для отправки и приема сообщений SMS." #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "Большинство широкополосных модемов может отправлять и принимать сообщения SMS точно так же, как и любой мобильный телефон. Вы можете использовать Modem Manager GUI в том случае, если хотите отправлять или читать принятые сообщения SMS. Для этого нажмите кнопку SMS на панели инструментов." #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "Очевидно, что все сообщения хранятся в трех папках. Вы можете найти все принятые сообщения в папке \"Входящие\", все отправленные сообщения в папке \"Исходящие\" и все сохраненные сообщения в папке \"Черновики\"." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "Окно SMS <_:app-1/>." #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "Вы можете настроить порядок сортировки сообщений, а также установить специальные параметры отправки сообщений с помощью окна параметров приложения." #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "Используйте кнопку Новое сообщение для создания и отправки или сохранения сообщения, кнопку Удалить сообщение для удаления выбранного сообщения(ий) и кнопку Ответ для ответа на выбранное сообщение (разумеется, это сообщение должно иметь корректный номер). Не забывайте о том ,что вы можете выбрать более одного сообщения." #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "Получение статистических данных, относящихся к сетевому трафику." #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Сетевой трафик" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "Modem Manager GUI собирает статистику потребления мобильного трафика и может разрывать соединение тогда, когда достигается установленное пользователем ограничение потребления трафика в рамках сессии или время сессии. Для использования данных функций нажмите кнопку Трафик на панели инструментов." #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "Окно трафика содержит список со статистическими данными для текущих сессии, месяца и года слева и графическое представление текущей скорости передачи данных справа." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "external ref='figures/traffic-window.png' md5='3cced75039a5230c68834ba4aebabcc3'" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "Окно трафика <_:app-1/>." #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "Используйте кнопку Установить ограничения для установки ограничения потребления трафика или времени текущей сессии, кнопку Соединения для вывода списка активных сетевых соединений и остановки приложений, потребляющих сетевой трафик, и кнопку Статистика для ознакомления с ежедневной статистикой потребления сетевого трафика для выбранного месяца." #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "Статистика потребления сетевого трафика собирается лишь тогда, когда приложение Modem Manager GUI функционирует, поэтому результирующие значения могут оказаться неточными и должны рассматриваться как ориентировочные. Наиболее точная статистика потребления сетевого трафика собирается мобильным оператором." #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "Использование Modem Manager GUI для отправки кодов USSD и приема ответов." #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "Коды USSD" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "Приложение Modem Manager GUI позволяет осуществлять отправку кодов USSD. Эти коды используются для управления некоторыми функциями мобильной сети, к примеру, они позволяют скрывать ваш номер телефона при отправке сообщений SMS." #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "Для использования функций USSD следует нажать на кнопку USSD панели инструментов." #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "external ref='figures/ussd-window.png' md5='c1f2437ed53d67408c1fdfeb270f001a'" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "Окно USSD <_:app-1/>." #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "В поле ввода строки вверху окна по умолчанию будет введен код *100#. Этот код чаще всего используется для запроса информации о балансе на тарифах с предоплатой. В том случае, если вы хотите отправить другой код, нажмите кнопку Изменить спарава от поля ввода строки." #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "Modem Manager GUI поддерживает интерактивные сессии USSD, поэтому следует обращать внимание на подсказки, выводимые под ответами USSD. Вы можете отправлять ответы в рамках интерактивной сессии USSD с помощью поля, используемого для отправки запросов USSD. Если вы отправите новый запрос USSD при активной сессии USSD, эта сессия будет автоматически закрыта." #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "Если вы используете модем Huawei и получаете нечитаемые ответы USSD, вы можете нажать на кнопку Редактировать и воспользоваться переключателем Конвертировать кодировку на панели инструментов открывшегося окна." #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "Коды USSD доступны исключительно в мобильных сетях, использующих стандарты 3GPP." #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "Вы можете использовать данные коды для многих целей: для изменения тарифного плана, запроса информации о состоянии счета, блокировки номера, и.т.д." #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> <_:note-8/> <_:note-9/> <_:p-10/>" modem-manager-gui-0.0.19.1/src/welcome-window.h000664 001750 001750 00000003032 13261703575 021070 0ustar00alexalex000000 000000 /* * welcome-window.h * * Copyright 2015-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __WELCOME_WINDOW_H__ #define __WELCOME_WINDOW_H__ #include #include "main.h" void mmgui_welcome_window_services_page_mm_modules_combo_changed(GtkComboBox *widget, gpointer data); void mmgui_welcome_window_services_page_cm_modules_combo_changed(GtkComboBox *widget, gpointer data); void mmgui_welcome_window_services_page_open(mmgui_application_t mmguiapp); void mmgui_welcome_window_activation_page_open(mmgui_application_t mmguiapp); void mmgui_welcome_window_close(mmgui_application_t mmguiapp); void mmgui_welcome_window_activation_page_add_service(mmgui_application_t mmguiapp, gchar *service); void mmgui_welcome_window_activation_page_set_state(mmgui_application_t mmguiapp, gchar *error); #endif /* __WELCOME_WINDOW_H__ */ modem-manager-gui-0.0.19.1/src/encoding.c000664 001750 001750 00000062412 13261703575 017720 0ustar00alexalex000000 000000 /* * encoding.c * * Copyright 2012-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include static const guint gsm7_utf8_table [128] = { 0x0040, 0xc2a3, 0x0024, 0xc2a5, 0xc3a8, 0xc3a9, 0xc3b9, 0xc3ac, 0xc3b2, 0xc387, 0x000a, 0xc398, 0xc3b8, 0x000d, 0xc385, 0xc3a5, 0xce94, 0x005f, 0xcea6, 0xce93, 0xce9b, 0xcea9, 0xcea0, 0xcea8, 0xcea3, 0xce98, 0xce9e, 0x00a0, 0xc386, 0xc3a6, 0xc39f, 0xc389, 0x0020, 0x0021, 0x0022, 0x0023, 0xc2a4, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0xc2a1, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0xc384, 0xc396, 0xc391, 0xc39c, 0xc2a7, 0xc2bf, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0xc3a4, 0xc3b6, 0xc3b1, 0xc3bc, 0xc3a0 }; static const guint gsm7_utf8_ext_table [2][10] = { {0x00000c, 0x00005e, 0x00007b, 0x00007d, 0x00005c, 0x00005b, 0x00007e, 0x00005d, 0x00007c, 0xe282ac}, { 0x0a, 0x14, 0x28, 0x29, 0x2f, 0x3c, 0x3d, 0x3e, 0x40, 0x65} }; static const gunichar gsm0338len [154][2] = { {0x00000040, 1}, /*COMMERCIAL AT*/ {0x00000000, 1}, /*NULL*/ {0x0000c2a3, 1}, /*POUND SIGN*/ {0x00000024, 1}, /*DOLLAR SIGN*/ {0x0000c2a5, 1}, /*YEN SIGN*/ {0x0000c3a8, 1}, /*LATIN SMALL LETTER E WITH GRAVE*/ {0x0000c3a9, 1}, /*LATIN SMALL LETTER E WITH ACUTE*/ {0x0000c3b9, 1}, /*LATIN SMALL LETTER U WITH GRAVE*/ {0x0000c2ac, 1}, /*LATIN SMALL LETTER I WITH GRAVE*/ {0x0000c3b2, 1}, /*LATIN SMALL LETTER O WITH GRAVE*/ {0x0000c3a7, 1}, /*LATIN SMALL LETTER C WITH CEDILLA*/ {0x0000c387, 1}, /*LATIN CAPITAL LETTER C WITH CEDILLA*/ {0x0000000a, 1}, /*LINE FEED*/ {0x0000c398, 1}, /*LATIN CAPITAL LETTER O WITH STROKE*/ {0x0000c3b8, 1}, /*LATIN SMALL LETTER O WITH STROKE*/ {0x0000000d, 1}, /*CARRIAGE RETURN*/ {0x0000c385, 1}, /*LATIN CAPITAL LETTER A WITH RING ABOVE*/ {0x0000c3a5, 1}, /*LATIN SMALL LETTER A WITH RING ABOVE*/ {0x0000ce94, 1}, /*GREEK CAPITAL LETTER DELTA*/ {0x0000005f, 1}, /*LOW LINE*/ {0x0000cea6, 1}, /*GREEK CAPITAL LETTER PHI*/ {0x0000ce93, 1}, /*GREEK CAPITAL LETTER GAMMA*/ {0x0000ce9b, 1}, /*GREEK CAPITAL LETTER LAMDA*/ {0x0000cea9, 1}, /*GREEK CAPITAL LETTER OMEGA*/ {0x0000cea0, 1}, /*GREEK CAPITAL LETTER PI*/ {0x0000cea8, 1}, /*GREEK CAPITAL LETTER PSI*/ {0x0000cea3, 1}, /*GREEK CAPITAL LETTER SIGMA*/ {0x0000ce98, 1}, /*GREEK CAPITAL LETTER THETA*/ {0x0000ce9e, 1}, /*GREEK CAPITAL LETTER XI*/ {0x0000c2a0, 1}, /*NBSP*/ {0x0000000c, 2}, /*FORM FEED*/ {0x0000005e, 2}, /*CIRCUMFLEX ACCENT*/ {0x0000007b, 2}, /*LEFT CURLY BRACKET*/ {0x0000007d, 2}, /*RIGHT CURLY BRACKET*/ {0x0000005c, 2}, /*REVERSE SOLIDUS*/ {0x0000005b, 2}, /*LEFT SQUARE BRACKET*/ {0x0000007e, 2}, /*TILDE*/ {0x0000005d, 2}, /*RIGHT SQUARE BRACKET*/ {0x0000007c, 2}, /*VERTICAL LINE*/ {0x00e282ac, 2}, /*EURO SIGN*/ {0x0000c386, 1}, /*LATIN CAPITAL LETTER AE*/ {0x0000c3a6, 1}, /*LATIN SMALL LETTER AE*/ {0x0000c3ef, 1}, /*LATIN SMALL LETTER SHARP S (German)*/ {0x0000c38e, 1}, /*LATIN CAPITAL LETTER E WITH ACUTE*/ {0x00000020, 1}, /*SPACE*/ {0x00000021, 1}, /*EXCLAMATION MARK*/ {0x00000022, 1}, /*QUOTATION MARK*/ {0x00000023, 1}, /*NUMBER SIGN*/ {0x0000c2a4, 1}, /*CURRENCY SIGN*/ {0x00000025, 1}, /*PERCENT SIGN*/ {0x00000026, 1}, /*AMPERSAND*/ {0x00000027, 1}, /*APOSTROPHE*/ {0x00000028, 1}, /*LEFT PARENTHESIS*/ {0x00000029, 1}, /*RIGHT PARENTHESIS*/ {0x0000002a, 1}, /*ASTERISK*/ {0x0000002b, 1}, /*PLUS SIGN*/ {0x0000002c, 1}, /*COMMA*/ {0x0000002d, 1}, /*HYPHEN-MINUS*/ {0x0000002e, 1}, /*FULL STOP*/ {0x0000002f, 1}, /*SOLIDUS*/ {0x00000030, 1}, /*DIGIT ZERO*/ {0x00000031, 1}, /*DIGIT ONE*/ {0x00000032, 1}, /*DIGIT TWO*/ {0x00000033, 1}, /*DIGIT THREE*/ {0x00000034, 1}, /*DIGIT FOUR*/ {0x00000035, 1}, /*DIGIT FIVE*/ {0x00000036, 1}, /*DIGIT SIX*/ {0x00000037, 1}, /*DIGIT SEVEN*/ {0x00000038, 1}, /*DIGIT EIGHT*/ {0x00000039, 1}, /*DIGIT NINE*/ {0x0000003a, 1}, /*COLON*/ {0x0000003b, 1}, /*SEMICOLON*/ {0x0000003c, 1}, /*LESS-THAN SIGN*/ {0x0000003d, 1}, /*EQUALS SIGN*/ {0x0000003e, 1}, /*GREATER-THAN SIGN*/ {0x0000003f, 1}, /*QUESTION MARK*/ {0x0000c2a1, 1}, /*INVERTED EXCLAMATION MARK*/ {0x00000041, 1}, /*LATIN CAPITAL LETTER A*/ {0x0000ce91, 1}, /*GREEK CAPITAL LETTER ALPHA*/ {0x00000042, 1}, /*LATIN CAPITAL LETTER B*/ {0x0000ce92, 1}, /*GREEK CAPITAL LETTER BETA*/ {0x00000043, 1}, /*LATIN CAPITAL LETTER C*/ {0x00000044, 1}, /*LATIN CAPITAL LETTER D*/ {0x00000044, 1}, /*LATIN CAPITAL LETTER E*/ {0x0000ce95, 1}, /*GREEK CAPITAL LETTER EPSILON*/ {0x00000046, 1}, /*LATIN CAPITAL LETTER F*/ {0x00000047, 1}, /*LATIN CAPITAL LETTER G*/ {0x00000048, 1}, /*LATIN CAPITAL LETTER H*/ {0x0000ce97, 1}, /*LATIN CAPITAL LETTER ETA*/ {0x00000049, 1}, /*LATIN CAPITAL LETTER I*/ {0x0000ce99, 1}, /*LATIN CAPITAL LETTER IOTA*/ {0x0000004a, 1}, /*LATIN CAPITAL LETTER J*/ {0x0000004b, 1}, /*LATIN CAPITAL LETTER K*/ {0x0000ce9a, 1}, /*LATIN CAPITAL LETTER KAPPA*/ {0x0000004c, 1}, /*LATIN CAPITAL LETTER L*/ {0x0000004d, 1}, /*LATIN CAPITAL LETTER M*/ {0x0000ce9c, 1}, /*LATIN CAPITAL LETTER MU*/ {0x0000004e, 1}, /*LATIN CAPITAL LETTER N*/ {0x0000ce9d, 1}, /*LATIN CAPITAL LETTER NU*/ {0x0000004f, 1}, /*LATIN CAPITAL LETTER O*/ {0x0000ce9f, 1}, /*LATIN CAPITAL LETTER OMICRON*/ {0x00000050, 1}, /*LATIN CAPITAL LETTER P*/ {0x0000cea1, 1}, /*LATIN CAPITAL LETTER RHO*/ {0x00000051, 1}, /*LATIN CAPITAL LETTER Q*/ {0x00000052, 1}, /*LATIN CAPITAL LETTER R*/ {0x00000053, 1}, /*LATIN CAPITAL LETTER S*/ {0x00000054, 1}, /*LATIN CAPITAL LETTER T*/ {0x0000cea4, 1}, /*LATIN CAPITAL LETTER TAU*/ {0x00000055, 1}, /*LATIN CAPITAL LETTER U*/ {0x00000056, 1}, /*LATIN CAPITAL LETTER V*/ {0x00000057, 1}, /*LATIN CAPITAL LETTER W*/ {0x00000058, 1}, /*LATIN CAPITAL LETTER X*/ {0x0000cea7, 1}, /*LATIN CAPITAL LETTER CHI*/ {0x00000059, 1}, /*LATIN CAPITAL LETTER Y*/ {0x0000cea5, 1}, /*LATIN CAPITAL LETTER UPSILON*/ {0x0000005a, 1}, /*LATIN CAPITAL LETTER Z*/ {0x0000ce96, 1}, /*LATIN CAPITAL LETTER ZETA*/ {0x0000c384, 1}, /*LATIN CAPITAL LETTER A WITH DIAERESIS*/ {0x0000c396, 1}, /*LATIN CAPITAL LETTER O WITH DIAERESIS*/ {0x0000c391, 1}, /*LATIN CAPITAL LETTER N WITH TILDE*/ {0x0000c39c, 1}, /*LATIN CAPITAL LETTER U WITH DIAERESIS*/ {0x0000c2a7, 1}, /*SECTION SIGN*/ {0x0000c2bf, 1}, /*INVERTED QUESTION MARK*/ {0x00000061, 1}, /*LATIN SMALL LETTER A*/ {0x00000062, 1}, /*LATIN SMALL LETTER B*/ {0x00000063, 1}, /*LATIN SMALL LETTER C*/ {0x00000064, 1}, /*LATIN SMALL LETTER D*/ {0x00000065, 1}, /*LATIN SMALL LETTER E*/ {0x00000066, 1}, /*LATIN SMALL LETTER F*/ {0x00000067, 1}, /*LATIN SMALL LETTER G*/ {0x00000068, 1}, /*LATIN SMALL LETTER H*/ {0x00000069, 1}, /*LATIN SMALL LETTER I*/ {0x0000006A, 1}, /*LATIN SMALL LETTER J*/ {0x0000006B, 1}, /*LATIN SMALL LETTER K*/ {0x0000006C, 1}, /*LATIN SMALL LETTER L*/ {0x0000006D, 1}, /*LATIN SMALL LETTER M*/ {0x0000006E, 1}, /*LATIN SMALL LETTER N*/ {0x0000006F, 1}, /*LATIN SMALL LETTER O*/ {0x00000070, 1}, /*LATIN SMALL LETTER P*/ {0x00000071, 1}, /*LATIN SMALL LETTER Q*/ {0x00000072, 1}, /*LATIN SMALL LETTER R*/ {0x00000073, 1}, /*LATIN SMALL LETTER S*/ {0x00000074, 1}, /*LATIN SMALL LETTER T*/ {0x00000075, 1}, /*LATIN SMALL LETTER U*/ {0x00000076, 1}, /*LATIN SMALL LETTER V*/ {0x00000077, 1}, /*LATIN SMALL LETTER W*/ {0x00000078, 1}, /*LATIN SMALL LETTER X*/ {0x00000079, 1}, /*LATIN SMALL LETTER Y*/ {0x0000007A, 1}, /*LATIN SMALL LETTER Z*/ {0x0000c3a4, 1}, /*LATIN SMALL LETTER A WITH DIAERESIS*/ {0x0000c3b6, 1}, /*LATIN SMALL LETTER O WITH DIAERESIS*/ {0x0000c3b1, 1}, /*LATIN SMALL LETTER N WITH TILDE*/ {0x0000c3bc, 1}, /*LATIN SMALL LETTER U WITH DIAERESIS*/ {0x0000c3a0, 1}, /*LATIN SMALL LETTER A WITH GRAVE*/ }; static const gchar hextable[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; static guint hex_to_dec(const guchar *input, gsize number); static guint hex_to_dec(const guchar *input, gsize number) { guint k, b, value; gint hexptr; if ((input == NULL) || ((input != NULL) && (input[0] == '\0')) || (number == 0)) return 0; value = 0; k = 1; for (hexptr = (number-1); hexptr >= 0; hexptr--) { switch (input[hexptr]) { case '0': b = 0; break; case '1': b = 1; break; case '2': b = 2; break; case '3': b = 3; break; case '4': b = 4; break; case '5': b = 5; break; case '6': b = 6; break; case '7': b = 7; break; case '8': b = 8; break; case '9': b = 9; break; case 'a': case 'A': b = 10; break; case 'b': case 'B': b = 11; break; case 'c': case 'C': b = 12; break; case 'd': case 'D': b = 13; break; case 'e': case 'E': b = 14; break; case 'f': case 'F': b = 15; break; default: b = 0; break; } value = value + b*k; k *= 16; } return value; } void mmgui_encoding_count_sms_messages(const gchar *text, guint *nummessages, guint *symbolsleft) { gchar *ltext; gunichar uc; gint i; gboolean isgsm0338, isgsmchar; guint gsm7len, ucs2len, lnummessages, lsymbolsleft; ltext = (gchar *)text; gsm7len = 0; ucs2len = 0; lnummessages = 0; lsymbolsleft = 0; isgsm0338 = TRUE; if ((nummessages == NULL) && (symbolsleft == NULL)) return; if (text != NULL) { while ((uc = g_utf8_get_char(ltext)) != '\0') { /*GSM*/ if (isgsm0338) { isgsmchar = FALSE; for (i = 0; i < 154; i++) { if (uc == gsm0338len[i][0]) { gsm7len += gsm0338len[i][1]; isgsmchar = TRUE; break; } } if (!isgsmchar) { isgsm0338 = FALSE; } } /*UCS2*/ ucs2len++; ltext = g_utf8_next_char(ltext); } } if (isgsm0338) { if (gsm7len > 160) { lnummessages = (guint)ceil(gsm7len / 153.0); lsymbolsleft = (lnummessages * 153) - gsm7len; } else { lnummessages = 1; lsymbolsleft = 160 - gsm7len; } } else { if (ucs2len > 70) { lnummessages = (guint)ceil(ucs2len / 67.0); lsymbolsleft = (lnummessages * 67) - ucs2len; } else { lnummessages = 1; lsymbolsleft = 70 - ucs2len; } } if (nummessages != NULL) { *nummessages = lnummessages; } if (symbolsleft != NULL) { *symbolsleft = lsymbolsleft; } } guchar *utf8_to_ucs2(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; gushort value; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; if (input[0] == '\0') return NULL; output = g_malloc0(ilength*2+1); if (output == NULL) return NULL; iptr = 0; optr = 0; while (iptr < ilength) { if (input[iptr] < 0x80) { value = input[iptr]; output[optr] = '0'; output[optr+1] = '0'; output[optr+2] = hextable[(guchar)(value & 0xff)/16]; output[optr+3] = hextable[(guchar)(value & 0xff)%16]; iptr += 1; optr += 4; } if ((input[iptr] & 0xE0) == 0xE0) { if (!((input[iptr+1] == 0) || (input[iptr+2] == 0))) { value = ((input[iptr] & 0x0F) << 12) | ((input[iptr+1] & 0x3F) << 6) | (input[iptr+2] & 0x3F); output[optr] = hextable[(guchar)((value >> 8) & 0xff)/16]; output[optr+1] = hextable[(guchar)((value >> 8) & 0xff)%16]; output[optr+2] = hextable[(guchar)(value & 0xff)/16]; output[optr+3] = hextable[(guchar)(value & 0xff)%16]; optr += 4; } iptr += 3; } if ((input[0] & 0xC0) == 0xC0) { if (input[1] != 0) { value = ((input[iptr] & 0x1F) << 6) | (input[iptr+1] & 0x3F); output[optr] = hextable[(guchar)((value >> 8) & 0xff)/16]; output[optr+1] = hextable[(guchar)((value >> 8) & 0xff)%16]; output[optr+2] = hextable[(guchar)(value & 0xff)/16]; output[optr+3] = hextable[(guchar)(value & 0xff)%16]; optr += 4; } iptr += 2; } } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } guchar *ucs2_to_utf8(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; guint value; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; if ((input[0] == '\0') || (ilength%4 != 0)) return NULL; output = g_malloc0(ilength*2+1); iptr = 0; optr = 0; while (iptr < ilength) { value = hex_to_dec(input+iptr, 4); if (value < 0x80) { if ((value <= 0x20) && (value != 0x0A) && (value != 0x0D)) { output[optr] = 0x20; } else { output[optr] = value; } optr += 1; } if ((value >= 0x80) && (value < 0x800)) { output[optr] = (value >> 6) | 0xC0; output[optr+1] = (value & 0x3F) | 0x80; optr += 2; } if ((value >= 0x800) && (value < 0xFFFF)) { output[optr] = ((value >> 12)) | 0xE0; output[optr+1] = ((value >> 6) & 0x3F) | 0x80; output[optr+2] = ((value) & 0x3F) | 0x80; optr += 3; } iptr += 4; } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } guchar *utf8_to_gsm7(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; gushort x, value; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; output = g_malloc0(ilength*2+1); if (output == NULL) return NULL; iptr = 0; optr = 0; while (iptr < ilength) { x = (iptr % 8) + 1; if (x < 8) { if ((iptr + 1) == ilength) { value = (input[iptr] >> (iptr % 8)) & 0xff; output[optr] = hextable[(guchar)(value & 0xff)/16]; output[optr+1] = hextable[(guchar)(value & 0xff)%16]; optr += 2; } else { value = (((input[iptr] >> (x - 1)) | (input[iptr+1] << (8 - x))) & 0xff) & 0xff; output[optr] = hextable[(guchar)(value & 0xff)/16]; output[optr+1] = hextable[(guchar)(value & 0xff)%16]; optr += 2; } } iptr++; } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } guchar *gsm7_to_utf8(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; guint value, current, mask, next, left; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; if ((input[0] == '\0') || (ilength%2 != 0)) return NULL; output = g_malloc0(ilength*4+1); if (output == NULL) return NULL; left = 7; mask = 0x7F; next = 0; iptr = 0; optr = 0; while (iptr < ilength) { if (mask != 0) { value = hex_to_dec(input+iptr, 2); current = (((value & mask) << (7 - left)) | next); next = (value & (~mask)) >> left; output[optr] = current; optr += 1; mask >>= 1; left -= 1; iptr += 2; } else { output[optr] = next; optr += 1; left = 7; mask = 0x7F; next = 0; } } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } guchar *utf8_map_gsm7(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; guint value; guint i; gboolean detected, found; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; if (input[0] == '\0') return NULL; output = g_malloc0(ilength*2+1); if (output == NULL) return NULL; iptr = 0; optr = 0; while (iptr < ilength) { detected = FALSE; if (input[iptr] <= 127) { value = input[iptr]; detected = TRUE; iptr += 1; } else if ((input[iptr] >= 194) && (input[iptr] <= 223)) { value = (((input[iptr] << 8) & 0xff00) | (input[iptr+1])) & 0xffff; detected = TRUE; iptr += 2; } else if ((input[iptr] >= 224) && (input[iptr] <= 239)) { value = ((((input[iptr] << 16) & 0xff0000) | ((input[iptr+1] << 8) & 0x00ff00)) | (input[iptr+2])) & 0xffffff; detected = TRUE; iptr += 3; } else if ((input[iptr] >= 240) && (input[iptr] <= 244)) { value = (((((input[iptr] << 24) & 0xff000000) | ((input[iptr+1] << 16) & 0x00ff0000)) | ((input[iptr+2] << 8) & 0x0000ff00)) | (input[iptr+3])) & 0xffffffff; detected = TRUE; iptr += 4; } if (detected) { found = FALSE; for (i=0; i<10; i++) { if (gsm7_utf8_ext_table[0][i] == value) { output[optr] = 0x1b; output[optr+1] = (unsigned char)gsm7_utf8_ext_table[1][i]; optr += 2; found = TRUE; } } if (!found) { for (i=0; i<128; i++) { if (gsm7_utf8_table[i] == value) { output[optr] = (unsigned char)i; optr += 1; found = TRUE; } } } if (!found) { output[optr] = 0x3f; optr += 1; } } } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } gchar *encoding_ussd_gsm7_to_ucs2(gchar *srcstr) { gchar *decstr1, *decstr2; gsize strsize; gboolean srcstrvalid; if (srcstr == NULL) return NULL; decstr1 = g_strdup(srcstr); strsize = strlen(srcstr); srcstrvalid = g_utf8_validate((const gchar *)srcstr, -1, (const gchar **)NULL); if (strsize > 0) { /*Map UTF8 symbols using GSM7 table*/ decstr2 = (gchar *)utf8_map_gsm7((const guchar *)decstr1, strsize, &strsize); if (decstr2 != NULL) { /*Free temporary string and go next step*/ g_free(decstr1); } else { /*Return undecoded hash*/ return decstr1; } /*Translate UTF8 to GSM7*/ decstr1 = (gchar *)utf8_to_gsm7((const guchar *)decstr2, strsize, &strsize); if (decstr1 != NULL) { /*Free temporary string and go next step*/ g_free(decstr2); } else { /*String not decoded*/ if (srcstrvalid) { /*Return valid source string*/ g_free(decstr2); return g_strdup(srcstr); } else { /*Return undecoded hash*/ return decstr2; } } /*Translate UCS2 to UTF8*/ decstr2 = (gchar *)ucs2_to_utf8((const guchar *)decstr1, strsize, &strsize); if (decstr2 != NULL) { if (g_utf8_validate((const gchar *)decstr2, -1, (const gchar **)NULL)) { /*Decoded string validated*/ g_free(decstr1); return decstr2; } else { /*Decoded string not validated*/ g_free(decstr2); if (srcstrvalid) { /*Return valid source string*/ g_free(decstr1); return g_strdup(srcstr); } else { /*Return undecoded hash*/ return decstr1; } } } else { /*String not decoded*/ if (srcstrvalid) { /*Return valid source string*/ g_free(decstr1); return g_strdup(srcstr); } else { /*Return undecoded hash*/ return decstr1; } } } return decstr1; } guchar *bcd_to_utf8_ascii_part(const guchar *input, gsize ilength, gsize *olength) { guchar *output, *routput; guint iptr, optr; guchar value; guchar buf[4]; if ((input == NULL) || (ilength == 0) || (olength == NULL)) return NULL; if (input[0] == '\0') return NULL; //Test if number decoded correctly for (iptr=0; iptr= 3)) { strncpy((char *)buf, (const char *)input+iptr, 3); value = (guchar)atoi((const char *)buf); if (value <= 127) { output[optr] = value; optr++; } iptr += 3; } else if (ilength - iptr >= 2) { strncpy((char *)buf, (const char *)input+iptr, 2); value = (guchar)atoi((const char *)buf); if (value >= 32) { output[optr] = value; optr++; } iptr += 2; } else { output[optr] = '?'; optr++; iptr++; } } else { break; } } output[optr] = '\0'; routput = g_realloc(output, optr+1); if (routput != NULL) output = routput; *olength = optr; return output; } gchar *encoding_unescape_xml_markup(const gchar *srcstr, gsize srclen) { guint iptr, optr, newlen, charleft; gchar *unescaped; /*XML escape characters: "<", ">", "&", """, "'", " ", " ", " " '<', '>', '&', '\"', '\'', '\r', '\t', '\n' */ if ((srcstr == NULL) || (srclen == 0)) return NULL; iptr = 0; newlen = 0; while (iptr < srclen) { if (srcstr[iptr] == '&') { charleft = srclen - iptr - 1; if (charleft >= 3) { if ((charleft >= 5) && (srcstr[iptr+1] == 'q') && (srcstr[iptr+2] == 'u') && (srcstr[iptr+3] == 'o') && (srcstr[iptr+4] == 't') && (srcstr[iptr+5] == ';')) { newlen += 1; iptr += 6; } else if ((charleft >= 5) && (srcstr[iptr+1] == 'a') && (srcstr[iptr+2] == 'p') && (srcstr[iptr+3] == 'o') && (srcstr[iptr+4] == 's') && (srcstr[iptr+5] == ';')) { newlen += 1; iptr += 6; } else if ((charleft >= 4) && (srcstr[iptr+1] == 'a') && (srcstr[iptr+2] == 'm') && (srcstr[iptr+3] == 'p') && (srcstr[iptr+4] == ';')) { newlen += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == 'D') && (srcstr[iptr+4] == ';')) { newlen += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == '9') && (srcstr[iptr+4] == ';')) { newlen += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == 'A') && (srcstr[iptr+4] == ';')) { newlen += 1; iptr += 5; } else if ((charleft >= 3) && (srcstr[iptr+1] == 'l') && (srcstr[iptr+2] == 't') && (srcstr[iptr+3] == ';')) { newlen += 1; iptr += 4; } else if ((charleft >= 3) && (srcstr[iptr+1] == 'g') && (srcstr[iptr+2] == 't') && (srcstr[iptr+3] == ';')) { newlen += 1; iptr += 4; } else { newlen += 1; iptr += 1; } } else { newlen += 1; iptr += 1; } } else { newlen += 1; iptr += 1; } } unescaped = g_malloc0(newlen+1); iptr = 0; optr = 0; newlen = 0; while (iptr < srclen) { if (srcstr[iptr] == '&') { charleft = srclen - iptr - 1; if (charleft >= 3) { if ((charleft >= 5) && (srcstr[iptr+1] == 'q') && (srcstr[iptr+2] == 'u') && (srcstr[iptr+3] == 'o') && (srcstr[iptr+4] == 't') && (srcstr[iptr+5] == ';')) { unescaped[optr] = '\"'; optr += 1; iptr += 6; } else if ((charleft >= 5) && (srcstr[iptr+1] == 'a') && (srcstr[iptr+2] == 'p') && (srcstr[iptr+3] == 'o') && (srcstr[iptr+4] == 's') && (srcstr[iptr+5] == ';')) { unescaped[optr] = '\''; optr += 1; iptr += 6; } else if ((charleft >= 4) && (srcstr[iptr+1] == 'a') && (srcstr[iptr+2] == 'm') && (srcstr[iptr+3] == 'p') && (srcstr[iptr+4] == ';')) { unescaped[optr] = '&'; optr += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == 'D') && (srcstr[iptr+4] == ';')) { unescaped[optr] = '\r'; optr += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == '9') && (srcstr[iptr+4] == ';')) { unescaped[optr] = '\t'; optr += 1; iptr += 5; } else if ((charleft >= 4) && (srcstr[iptr+1] == '#') && (srcstr[iptr+2] == 'x') && (srcstr[iptr+3] == 'A') && (srcstr[iptr+4] == ';')) { unescaped[optr] = '\n'; optr += 1; iptr += 5; } else if ((charleft >= 3) && (srcstr[iptr+1] == 'l') && (srcstr[iptr+2] == 't') && (srcstr[iptr+3] == ';')) { unescaped[optr] = '<'; optr += 1; iptr += 4; } else if ((charleft >= 3) && (srcstr[iptr+1] == 'g') && (srcstr[iptr+2] == 't') && (srcstr[iptr+3] == ';')) { unescaped[optr] = '>'; optr += 1; iptr += 4; } else { unescaped[optr] = srcstr[iptr]; optr += 1; iptr += 1; } } else { unescaped[optr] = srcstr[iptr]; optr += 1; iptr += 1; } } else { unescaped[optr] = srcstr[iptr]; optr += 1; iptr += 1; } } return unescaped; } gchar *encoding_clear_special_symbols(gchar *srcstr, gsize srclen) { guint iptr; if ((srcstr == NULL) || (srclen == 0)) return NULL; iptr = 0; while (iptr < srclen) { if (srcstr[iptr] > 0) { if ((srcstr[iptr] == '\n') || (srcstr[iptr] == '\r') || (srcstr[iptr] == '\t')) { srcstr[iptr] = ' '; } iptr += 1; } else { switch (srcstr[iptr] & 0xF0) { case 0xE0: iptr += 3; break; case 0xF0: iptr += 4; break; default: iptr += 2; break; } } } return srcstr; } modem-manager-gui-0.0.19.1/src/dbus-utils.h000664 001750 001750 00000002104 13261703575 020222 0ustar00alexalex000000 000000 /* * dbus-utils.h * * Copyright 2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __DBUS_UTILS_H__ #define __DBUS_UTILS_H__ gboolean mmgui_dbus_utils_session_service_activate(gchar *interface, guint *status); GHashTable *mmgui_dbus_utils_list_service_interfaces(GDBusConnection *connection, gchar *servicename, gchar *servicepath); #endif /* __DBUS_UTILS_H__ */ modem-manager-gui-0.0.19.1/po/uz@Cyrl.po000664 001750 001750 00000142327 13261705331 017541 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Umidjon Almasov , 2014-2015 # Umidjon Almasov , 2013-2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Cyrillic) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Cyrl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Cyrl\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "Ўқилмаган SMS" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "Ўқилмаган хабарлар" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "Алоқани қўшиш хатоси" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "Алоқани ўчириш" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "Ростдан алоқани ўчиришни истайсизми?" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "Алоқани ўчириш хатоси" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "Алоқа ускунадан ўчирилмаган" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "Алоқа танланмаган" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "Модем алоқалари" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "GNOME алоқалари" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "KDE алоқалари" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "Исми" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "Биринчи рақам" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "Электрон почта" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "Гуруҳ" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "Фамилияси" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "Иккинчи рақам" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Ускуна очиш хатоси" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nВерсия:%s Порт:%s Тури:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Танланган" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Ускуна" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "Қўллаб-қувватланмайди" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "Инициализация хатоси" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "Муваффақиятли" #: ../src/main.c:511 msgid "Failed" msgstr "Муваффақиятсиз" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "Тайм-аут" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "Ускуна ёқилмоқда..." #: ../src/main.c:1128 msgid "No devices found in system" msgstr "Тизимда ускуналар топилмади" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "SMS ўқиш ва ёзиш учун модемни ёқиш керак. Илтимос, модемни ёқинг." #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "SMS қабул қилиш ва юбориш учун модем мобил тармоқда рўйхатдан ўтиш керак. Илтимос, кутиб туринг..." #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "SMS қабул қилиш ва юбориш учун модем қулфланмаган бўлиш керак. Илтимос, PIN кодни киритинг." #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "Модем бошқарувчиси SMS бошқариш хусусиятларини қўллаб-қувватланмайди." #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "Модем бошқарувчиси SMS юборишни қўллаб-қувватланмайди." #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "USSD юбориш учун модемни ёқиш керак. Илтимос, модемни ёқинг." #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "USSD юбориш учун модем мобил тармоқда рўйхатдан ўтиш керак. Илтимос, кутиб туринг..." #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "USSD юбориш учун модем қулфланмаган бўлиш керак. Илтимос, PIN кодни киритинг." #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "Модем бошқарувчиси USSD сўровларни юборишни қўллаб-қувватланмайди." #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "Мавжуд тармоқларни излаш учун модемни ёқиш керак. Илтимос, модемни ёқинг." #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "Мавжуд тармоқларни излаш учун модем қулфланмаган бўлиш керак. Илтимос, PIN кодни киритинг." #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "Модем бошқарувчиси мавжуд мобил тармоқларни текширишни қўллаб-қувватланмайди." #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Модем ҳозир уланган. Илтимос, тармоқларни излаш учун узиб қўйинг." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "Алоқаларни экспорт қилиш учун модемни ёқиш керак. Илтимос, модемни ёқинг." #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "Алоқаларни экспорт қилиш учун модем улфланмаган бўлиш керак. Илтимос, PIN кодни киритинг." #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "Модем бошқарувчиси модем алоқаларини бошқариш хусусиятларини қўллаб-қувватланмайди." #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "Модем бошқарувчиси модем алоқаларини таҳрирлаш хусусиятларини қўллаб-қувватланмайди." #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "_Ускуналар" #: ../src/main.c:1585 msgid "_SMS" msgstr "_SMS" #: ../src/main.c:1590 msgid "_USSD" msgstr "_USSD" #: ../src/main.c:1595 msgid "_Info" msgstr "_Маълумот" #: ../src/main.c:1600 msgid "S_can" msgstr "Т_екшириш" #: ../src/main.c:1605 msgid "_Traffic" msgstr "_Трафик" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "А_лоқалар" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "Modem Manager GUI ойнаси яширилган" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "Ойнани яна кўрсатиш учун трей иконачаси ёки хабар менюсидан фойдаланинг" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s узилган" #: ../src/main.c:2056 msgid "Show window" msgstr "Ойнани кўрсатиш" #: ../src/main.c:2062 msgid "New SMS" msgstr "Янги SMS" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "Чиқиш" #: ../src/main.c:2680 msgid "_Quit" msgstr "_Чиқиш" #: ../src/main.c:2686 msgid "_Actions" msgstr "_Амаллар" #: ../src/main.c:2689 msgid "_Preferences" msgstr "_Созлашлар" #: ../src/main.c:2692 msgid "_Edit" msgstr "Таҳ_рирлаш" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "_Ёрдам" #: ../src/main.c:2697 msgid "_About" msgstr "_Дастур ҳақида" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "Мосламалар" #: ../src/main.c:2714 msgid "Help" msgstr "Ёрдам" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "Ҳақида" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "Интерфейс тузиш хатоси" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "Модул" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Тавсифи" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "Сегментация хатосининг манзили: %p\n" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "Стекни кузатиш:\n" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "Ишга туширилганда ойна кўрсатилмасин" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "- EDGE/3G/4G модемнинг махсус вазифаларини бошқариш воситаси" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "Буйруқ сатри параметрини таҳлил қилиш муваффақиятсиз тугади: %s\n" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Ускуна хатоси" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Мавжудлиги: %s Стандарт: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Тармоқларни излаш хатоси" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Оператор" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "%u янги SMS хабарлар олинди" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Янги SMS хабар олинди" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "Хабар юборувчилари: " #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "%s\n%s" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "SMS рақами нотўғри\nФақат 2 дан 20 гача рақамлардан fфойдаланиш\nмумкин, ҳарфлар ва белгилардан фойдаланиш мумкин эмас" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "SMS матни нотўғри\nИлтимос, юбориш учун матн киритинг" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Рақам нотўғри ёки ускуна тайёр эмас" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "Хабарларни ўчириш" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "Кирувчи" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Ушбу жилд кирувчи SMS хабарлари учун.\n'Жавоб бериш' тугмасини босиб танланган хабарга жавоб бериш мумкин." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "Юборилган" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Ушбу жилд юборилган SMS хабарлари учун." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "Қораламалар" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "Ушбу жилд қоралама SMS хабарлар учун.\nЎзгартириш учун хабарни танланг ва 'Жавоб бериш' тугмасини босинг." #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "Кирувчи\nКирувчи хабарлар" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Юборилган\nЮборилган хабарлар" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Қораламалар\nҚоралама хабарлар" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f кб/с" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f кб/с" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Мб/с" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Мб/с" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Гб/с" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Гб/с" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u сония" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u сония" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "%" #: ../src/strformat.c:107 msgid "%" msgstr "%" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g кб" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g кб" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mб" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Мб" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Гб" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Гб" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Тб" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Тб" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "Бугун, %T" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Номаълум" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "Кеча, %T" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "%d %B %Y, %T" #: ../src/strformat.c:246 msgid "Available" msgstr "Мавжуд" #: ../src/strformat.c:248 msgid "Current" msgstr "Жорий" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "Тақиқланган" #: ../src/strformat.c:286 msgid "Not registered" msgstr "Рўйхатдан ўтмаган" #: ../src/strformat.c:288 msgid "Home network" msgstr "Уй тармоғи" #: ../src/strformat.c:290 msgid "Searching" msgstr "Қидирилмоқда" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "Рўйхатдан ўтиш рад этилган" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "Номаълум ҳолат" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "Роуминг тармоғи" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "%3.0f дақиқа" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "%3.1f соат" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "%2.0f кун" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "%2.0f ҳафта" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "%2.0f сония" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "%u дақиқа, %u сония" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "Номаълум ҳато" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "Кун" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "Қабул қилинган маълумот" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "Жўнатилган маълумот" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "Сессия вақти" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Дастур" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Протокол" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Ҳолат" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Буфер" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Порт" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Мўлжал" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Трафик лимитидан ошириб юборилди" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Вақт лимитидан ошириб юборилди" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафик: %s, лимит қўйилган: %s\nВақт: %s, лимит қўйилган: %s\nКиритилган қийматларни текширинг ва қайта ўриниб кўринг" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Трафик ва вақт лимитларининг қийматлари нотўғри" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Трафиқ: %s, лимит қўйилган: %s\nКиритилган қийматларни текширинг ва қайта уриниб қўринг" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Трафик лимитининг қиймати нотўғри" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Вақт: %s, лимит қўйилган: %s\nКиритилган қийматларни текширинг ва қайта уриниб қўринг" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Вақт лимитининг қиймати нотўғри" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Узилган" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Лимит" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Ўчирилган" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "кб/с" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "сония" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "Қабул қилиш тезлиги" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "Жўнатиш тезлиги" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Параметр" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Қиймати" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "Сеанс" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Қабул қилинган" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Жўнатилган" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Қабул қилиш тезлиги" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Жўнатиш тезлиги" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Сессия вақти" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Қолган трафик" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Қолган вақт" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "Ой" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "Умумий вақт" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "Йил" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Трафик лимити ошириб юборилди... Дам олиш вақти келди \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Вақт лимити ошириб юборилди... Ухланг ва яхши тушлар кўринг -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Буйруқ намунаси" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "USSD сўрови нотўғри\nСўров 160 белгилардан ошмаслиги,\n'*' билан бошланиши ва '#' билан тугаши лозим" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "USSD юбориш хатоси" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "USSD сўрови нотўғри ёки ускуна тайёр эмас" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "USSD сессияси тугатилди. Янги сўров юборишингиз мумкин" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "USSD сўрови нотўғри" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nUSSD сессияси фаол. Маълумот киритишингизни кутмоқда...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Буйруқ" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "Хизмат" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "_Ёпиш" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "Фаоллаштириш..." #: ../src/welcome-window.c:330 msgid "Success" msgstr "Муваффақиятли" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "%s" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "Хуш келибсиз" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "Модем бошқарувчиси" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "Уланиш бошқарувчиси" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "Modem Manager GUIга хуш келибсиз" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "Мавжуд ускуналарни кўриш ва танлаш CTRL+F1" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "Ускуналар" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "SMS хабарларни юбориш ва қабул қилиш CTRL+F2" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "USSD сўровларни юбориш CTRL+F3" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "USSD" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "Фаол ускуна маълумотини кўриш CTRL+F4" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "Маълумот" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "Мавжуд мобил тармоқларни излаш CTRL+F5" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "Тармоқлар" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "Тармоқ трафигини кузатиш CTRL+F6" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "Трафик" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "Тизимнинг ва модемнинг манзиллар китобини кўриш CTRL+F7" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "Алоқалар" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "Янги SMS хабар юбориш CTRL+N" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "Янги" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "Танланган хабарни юбориш CTRL+D" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "Ўчириш" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "Танланган хабарга жавоб бериш CTRL+A" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "Жавоб бериш" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "Сўров" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "Юбориш" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "USSD сўров юбориш CTRL+S" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "USSD буйруқлар рўйхатини таҳрирлаш CTRL+E" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "IMEI" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "IMSI/ESN" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "Жиҳоз" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "Усул" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "Сигнал даражаси" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "Оператор коди" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "Рўйхатдан ўтиш" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "Тармоқ" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "Жойлашиш" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "Мавжуд мобил тармоқларни излаш CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "Тармоқларни излар" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "Узиш учун трафик қийматини ёки вақт лимитини қўйиш CTRL+L" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "Лимит қўйиш" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "Фаол тармоқ уланишлар рўйхатини кўриш CTRL+C" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "Уланишлар" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "Кунлик трафик статистикани кўриш CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "Статистика" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "Жўнатиш тезлиги" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "Модемнинг манзиллар китобига янги алоқани қўшиш CTRL+N" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "Янги алоқа" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "Манзиллар китобидан алоқани ўчириш CTRL+D" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "Алоқани ўчириш" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "Танланган алоқага SMS хабар юбориш CTRL+S" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "SMS юбориш" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "EDGE/3G/4G модемнинг махсус вазифаларини бошқариш воситаси" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "Уй саҳифаси" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "GPL3" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "Ўзбекча: Умид Алмасов " #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "Фаол уланишлар" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "SIGTERM сигналидан фойдаланиб танланган дастурни ёпиш CTRL+T" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "Дастурни ёпиш" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "Номи" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "Уланиш" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "Тармоқ идентификатори" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "Фойдаланувчи номи" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "Парол" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "Ҳақиқийликни текшириш" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "DNS 1" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "DNS 2" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "DNS" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "Хато" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "Мендан қайта сўралсин" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "Чиқилсинми ёки кичрайтирилсинми?" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "Ойна ёпилганда дастур нима қилишини истайсиз?" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "Фақат чиқиш" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "Трей ёки хабарлар менюсига кичрайтириш" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "Янги SMS хабар" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "Сақлаш" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "Рақам" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "Воқеалар учун овозлардан фойдаланиш" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "Ойна ёпилганда уни трейга яшириш" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "Ойна ўлчамларини ва жойлашувини сақлаш" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "Хулқи" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "Хабарларни бирлаштириш" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "Жилдларни очиш" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "Эски хабарларни юқорига қўйиш" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "Тақдимот" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "Хабар параметрлари" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "Қабул қилиш тезлиги графигининг ранги" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "Жўнатиш тезлиги графигининг ранги" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "Трафик" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "Ускунани ёқиш" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "SMS хабарини юбориш" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "USSD сўровини юбориш" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "Тармоқларни текшириш" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "Модуллар" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "Савол" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "Трафик лимити" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "Вақт лимитини қўйиш" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "Мб" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "Гб" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "Тб" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "Хабар" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "Ҳаракат" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "Хабар кўрсатиш" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "Алоқани узиш" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "Вақт" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "Дақиқа" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "Соат" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "Трафик статистикаси" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "Танланган статистика даври" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "Январ" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "Феврал" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "Март" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "Апрел" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "Май" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "Июн" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "Июл" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "Август" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "Сентябр" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "Октябр" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "Ноябр" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "Декабр" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "USSD буйруқлари" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "Янги USSD буйруғини қўшиш CTRL+N" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "Қўшиш" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "Танланган USSD буйруғиги ўчириш CTRL+D" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "Ўчириш" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "USSD жавобининг кодлаш усулини GSM7'дан UCS2'га ўзгартириш (Huawei модемлари учун) CTRL+E" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "Хабарнинг кодлаш усулини ўзгартириш" modem-manager-gui-0.0.19.1/src/welcome-window.c000664 001750 001750 00000045437 13261703575 021102 0ustar00alexalex000000 000000 /* * welcome-window.c * * Copyright 2015-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include "svcmanager.h" #include "mmguicore.h" #include "welcome-window.h" enum _mmgui_welcome_window_pages { MMGUI_WELCOME_WINDOW_SERVICES_PAGE = 0, MMGUI_WELCOME_WINDOW_ACTIVATION_PAGE }; enum _mmgui_welcome_window_activation_list { MMGUI_WELCOME_WINDOW_ACTIVATION_SERVICE = 0, MMGUI_WELCOME_WINDOW_ACTIVATION_STATE, MMGUI_WELCOME_WINDOW_ACTIVATION_COLUMNS }; enum _mmgui_welcome_window_service_list { MMGUI_WELCOME_WINDOW_SERVICE_LIST_ICON = 0, MMGUI_WELCOME_WINDOW_SERVICE_LIST_NAME, MMGUI_WELCOME_WINDOW_SERVICE_LIST_MODULE, MMGUI_WELCOME_WINDOW_SERVICE_LIST_SERVICENAME, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBILITY, MMGUI_WELCOME_WINDOW_SERVICE_LIST_AVAILABLE, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COLUMNS }; static void mmgui_welcome_window_terminate_application(mmgui_application_t mmguiapp); static void mmgui_welcome_window_services_page_update_compatible_modules(mmgui_application_t mmguiapp, GtkComboBox *currentcombo, GtkComboBox *othercombo); static void mmgui_welcome_window_services_page_modules_combo_set_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data); static void mmgui_welcome_window_services_page_modules_combo_fill(GtkComboBox *combo, GSList *modules, gint type, mmguimodule_t currentmodule); static void mmgui_welcome_window_terminate_application(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; /*Terminate application*/ #if GLIB_CHECK_VERSION(2,32,0) g_application_quit(G_APPLICATION(mmguiapp->gtkapplication)); #else GtkWidget *win; GList *wlist, *wnext; wlist = gtk_application_get_windows(GTK_APPLICATION(mmguiapp->gtkapplication)); while (wlist) { win = wlist->data; wnext = wlist->next; gtk_widget_destroy(GTK_WIDGET(win)); wlist = wnext; } #endif } static void mmgui_welcome_window_services_page_update_compatible_modules(mmgui_application_t mmguiapp, GtkComboBox *currentcombo, GtkComboBox *othercombo) { GtkTreeModel *model; GtkTreeIter iter; gchar *compatibility, *servicename; gchar **comparray; gboolean compatible, available; gint i; GtkTreePath *comppath; GtkTreeRowReference *compreference; if ((mmguiapp == NULL) || (currentcombo == NULL) || (othercombo == NULL)) return; model = gtk_combo_box_get_model(currentcombo); if (model != NULL) { if (gtk_combo_box_get_active_iter(currentcombo, &iter)) { /*Get current module compatibility string*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBILITY, &compatibility, -1); if (compatibility != NULL) { /*Get list of compatible service names*/ comparray = g_strsplit(compatibility, ";", -1); /*Iterate through other available modules*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(othercombo)); if (model != NULL) { compreference = NULL; if (gtk_tree_model_get_iter_first(model, &iter)) { do { /*Get other available module service name*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_AVAILABLE, &available, MMGUI_WELCOME_WINDOW_SERVICE_LIST_SERVICENAME, &servicename, -1); if (servicename != NULL) { /*Try to find this name in array of compatible service names*/ compatible = FALSE; if (available) { i = 0; while (comparray[i] != NULL) { if (g_str_equal(comparray[i], servicename)) { if (compreference == NULL) { comppath = gtk_tree_model_get_path(model, &iter); if (comppath != NULL) { compreference = gtk_tree_row_reference_new(model, comppath); gtk_tree_path_free(comppath); } } compatible = TRUE; break; } i++; } } /*Set flag*/ gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, compatible, -1); /*Free name*/ g_free(servicename); } else { /*Undefined is always compatible*/ if (compreference == NULL) { comppath = gtk_tree_model_get_path(model, &iter); if (comppath != NULL) { compreference = gtk_tree_row_reference_new(model, comppath); gtk_tree_path_free(comppath); } } gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); } } while (gtk_tree_model_iter_next(model, &iter)); } /*Try to select first compatible module if needed*/ if (compreference != NULL) { compatible = FALSE; servicename = NULL; /*If other selected module is compatible?*/ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(othercombo), &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, &compatible, MMGUI_WELCOME_WINDOW_SERVICE_LIST_SERVICENAME, &servicename, -1); } /*If not, select one avoiding undefined*/ if ((!compatible) || (servicename == NULL)) { comppath = gtk_tree_row_reference_get_path(compreference); if (comppath != NULL) { if (gtk_tree_model_get_iter(model, &iter, comppath)) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(othercombo), &iter); } gtk_tree_path_free(comppath); } } /*Free resources*/ gtk_tree_row_reference_free(compreference); if (servicename != NULL) { g_free(servicename); } } } /*Free resources*/ g_strfreev(comparray); g_free(compatibility); } } } } void mmgui_welcome_window_services_page_mm_modules_combo_changed(GtkComboBox *widget, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; g_signal_handlers_block_by_func(mmguiapp->window->welcomecmcombo, mmgui_welcome_window_services_page_cm_modules_combo_changed, mmguiapp); mmgui_welcome_window_services_page_update_compatible_modules(mmguiapp, widget, GTK_COMBO_BOX(mmguiapp->window->welcomecmcombo)); g_signal_handlers_unblock_by_func(mmguiapp->window->welcomecmcombo, mmgui_welcome_window_services_page_cm_modules_combo_changed, mmguiapp); } void mmgui_welcome_window_services_page_cm_modules_combo_changed(GtkComboBox *widget, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; g_signal_handlers_block_by_func(mmguiapp->window->welcomemmcombo, mmgui_welcome_window_services_page_mm_modules_combo_changed, mmguiapp); mmgui_welcome_window_services_page_update_compatible_modules(mmguiapp, widget, GTK_COMBO_BOX(mmguiapp->window->welcomemmcombo)); g_signal_handlers_unblock_by_func(mmguiapp->window->welcomemmcombo, mmgui_welcome_window_services_page_mm_modules_combo_changed, mmguiapp); } gboolean mmgui_welcome_window_delete_event_signal(GtkWidget *widget, GdkEvent *event, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return FALSE; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook)) == MMGUI_WELCOME_WINDOW_SERVICES_PAGE) { /*Close window and terminate application*/ mmgui_welcome_window_terminate_application(mmguiapp); } else if (gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook)) == MMGUI_WELCOME_WINDOW_ACTIVATION_PAGE) { /*Close window and terminate application in case of error*/ if (gtk_widget_get_sensitive(mmguiapp->window->welcomebutton)) { mmgui_welcome_window_terminate_application(mmguiapp); } } else { g_debug("Unknown welcome window page: %u\n", gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook))); } return FALSE; } void mmgui_welcome_window_button_clicked_signal(GtkButton *button, gpointer data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeIter iter; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook)) == MMGUI_WELCOME_WINDOW_SERVICES_PAGE) { /*Disable startup button*/ gtk_widget_set_sensitive(mmguiapp->window->welcomebutton, FALSE); /*Save selected modules*/ /*Modem manager*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->welcomemmcombo)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->welcomemmcombo), &iter)) { gtk_tree_model_get(model, &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_MODULE, &mmguiapp->coreoptions->mmmodule, -1); gmm_settings_set_string(mmguiapp->settings, "modules_preferred_modem_manager", mmguiapp->coreoptions->mmmodule); } } /*Connection manager*/ model = gtk_combo_box_get_model(GTK_COMBO_BOX(mmguiapp->window->welcomecmcombo)); if (model != NULL) { if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->welcomecmcombo), &iter)) { gtk_tree_model_get(model, &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_MODULE, &mmguiapp->coreoptions->cmmodule, -1); gmm_settings_set_string(mmguiapp->settings, "modules_preferred_connection_manager", mmguiapp->coreoptions->cmmodule); } } /*Services enablement flag*/ mmguiapp->coreoptions->enableservices = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mmguiapp->window->welcomeenablecb)); gmm_settings_set_boolean(mmguiapp->settings, "modules_enable_services", mmguiapp->coreoptions->enableservices); /*Start execution*/ mmguicore_start(mmguiapp->core); } else if (gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook)) == MMGUI_WELCOME_WINDOW_ACTIVATION_PAGE) { /*Close window and terminate application*/ mmgui_welcome_window_terminate_application(mmguiapp); } else { g_debug("Unknown welcome window page: %u\n", gtk_notebook_get_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook))); } } static void mmgui_welcome_window_services_page_modules_combo_set_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { gboolean available, compatible; gtk_tree_model_get(tree_model, iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_AVAILABLE, &available, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, &compatible, -1); g_object_set(cell, "sensitive", available && compatible, NULL); } static void mmgui_welcome_window_services_page_modules_combo_fill(GtkComboBox *combo, GSList *modules, gint type, mmguimodule_t currentmodule) { GSList *iterator; GtkListStore *store; gchar *icon; GtkCellArea *area; GtkCellRenderer *renderer; GtkTreeIter iter; mmguimodule_t module; gint moduleid, curid; if ((combo == NULL) || (modules == NULL)) return; store = gtk_list_store_new(MMGUI_WELCOME_WINDOW_SERVICE_LIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); moduleid = -1; curid = 0; for (iterator=modules; iterator; iterator=iterator->next) { module = iterator->data; if (module->type == type) { if (module->applicable) { icon = "user-available"; } else if (module->activationtech == MMGUI_SVCMANGER_ACTIVATION_TECH_SYSTEMD) { icon = "user-away"; } else if (module->activationtech == MMGUI_SVCMANGER_ACTIVATION_TECH_DBUS) { icon = "user-away"; } else { icon = "user-offline"; } gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_ICON, icon, MMGUI_WELCOME_WINDOW_SERVICE_LIST_NAME, module->description, MMGUI_WELCOME_WINDOW_SERVICE_LIST_MODULE, module->shortname, MMGUI_WELCOME_WINDOW_SERVICE_LIST_SERVICENAME, module->servicename, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBILITY, module->compatibility, MMGUI_WELCOME_WINDOW_SERVICE_LIST_AVAILABLE, module->applicable || (module->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA), MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); if (currentmodule != NULL) { if (currentmodule == module) { moduleid = curid; } } else { if (((module->applicable) || (module->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA)) && (moduleid == -1)) { moduleid = curid; } } curid++; } } gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MMGUI_WELCOME_WINDOW_SERVICE_LIST_ICON, "user-invisible", MMGUI_WELCOME_WINDOW_SERVICE_LIST_NAME, _("Undefined"), MMGUI_WELCOME_WINDOW_SERVICE_LIST_MODULE, "undefined", MMGUI_WELCOME_WINDOW_SERVICE_LIST_SERVICENAME, NULL, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBILITY, NULL, MMGUI_WELCOME_WINDOW_SERVICE_LIST_AVAILABLE, TRUE, MMGUI_WELCOME_WINDOW_SERVICE_LIST_COMPATIBLE, TRUE, -1); if (moduleid == -1) { moduleid = curid; } area = gtk_cell_layout_get_area(GTK_CELL_LAYOUT(combo)); renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(area), renderer, FALSE, FALSE, TRUE); gtk_cell_area_attribute_connect(area, renderer, "icon-name", MMGUI_WELCOME_WINDOW_SERVICE_LIST_ICON); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), renderer, mmgui_welcome_window_services_page_modules_combo_set_sensitive, NULL, NULL); renderer = gtk_cell_renderer_text_new(); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(area), renderer, TRUE, FALSE, FALSE); gtk_cell_area_attribute_connect(area, renderer, "text", MMGUI_WELCOME_WINDOW_SERVICE_LIST_NAME); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), renderer, mmgui_welcome_window_services_page_modules_combo_set_sensitive, NULL, NULL); gtk_combo_box_set_model(GTK_COMBO_BOX(combo), GTK_TREE_MODEL(store)); g_object_unref(store); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), moduleid); } void mmgui_welcome_window_services_page_open(mmgui_application_t mmguiapp) { GSList *modules; if (mmguiapp == NULL) return; if (mmguiapp->core == NULL) return; modules = mmguicore_modules_get_list(mmguiapp->core); if (modules == NULL) return; /*Modem manager*/ mmgui_welcome_window_services_page_modules_combo_fill(GTK_COMBO_BOX(mmguiapp->window->welcomemmcombo), modules, MMGUI_MODULE_TYPE_MODEM_MANAGER, NULL); /*Connection manager*/ mmgui_welcome_window_services_page_modules_combo_fill(GTK_COMBO_BOX(mmguiapp->window->welcomecmcombo), modules, MMGUI_MODULE_TYPE_CONNECTION_MANGER, NULL); /*Go to activation page*/ gtk_notebook_set_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook), MMGUI_WELCOME_WINDOW_SERVICES_PAGE); /*Prepare startup button*/ gtk_button_set_label(GTK_BUTTON(mmguiapp->window->welcomebutton), _("_Let's Start!")); gtk_widget_set_sensitive(mmguiapp->window->welcomebutton, TRUE); /*Show window*/ if (!gtk_widget_get_visible(mmguiapp->window->welcomewindow)) { gtk_widget_show_all(mmguiapp->window->welcomewindow); } } void mmgui_welcome_window_activation_page_open(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; if (mmguiapp == NULL) return; /*Initialize list store*/ renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Service"), renderer, "text", MMGUI_WELCOME_WINDOW_ACTIVATION_SERVICE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->welcomeacttreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("State"), renderer, "markup", MMGUI_WELCOME_WINDOW_ACTIVATION_STATE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->welcomeacttreeview), column); store = gtk_list_store_new(MMGUI_WELCOME_WINDOW_ACTIVATION_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->welcomeacttreeview), GTK_TREE_MODEL(store)); g_object_unref(store); /*Go to activation page*/ gtk_notebook_set_current_page(GTK_NOTEBOOK(mmguiapp->window->welcomenotebook), MMGUI_WELCOME_WINDOW_ACTIVATION_PAGE); /*Prepare startup button*/ gtk_button_set_label(GTK_BUTTON(mmguiapp->window->welcomebutton), _("_Close")); gtk_widget_set_sensitive(mmguiapp->window->welcomebutton, FALSE); /*Show window*/ if (!gtk_widget_get_visible(mmguiapp->window->welcomewindow)) { gtk_widget_show_all(mmguiapp->window->welcomewindow); } } void mmgui_welcome_window_close(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; /*Hide window*/ if (gtk_widget_get_visible(mmguiapp->window->welcomewindow)) { gtk_widget_hide(mmguiapp->window->welcomewindow); } } void mmgui_welcome_window_activation_page_add_service(mmgui_application_t mmguiapp, gchar *service) { GtkTreeModel *model; GtkTreeIter iter; if ((mmguiapp == NULL) || (service == NULL)) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->welcomeacttreeview)); if (model != NULL) { gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_WELCOME_WINDOW_ACTIVATION_SERVICE, service, MMGUI_WELCOME_WINDOW_ACTIVATION_STATE, _("Activation..."), -1); } } void mmgui_welcome_window_activation_page_set_state(mmgui_application_t mmguiapp, gchar *error) { GtkTreeModel *model; gint rows; GtkTreeIter iter; gchar *errmarkup; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->welcomeacttreeview)); if (model != NULL) { rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(model), NULL); if (gtk_tree_model_iter_nth_child(model, &iter, NULL, rows - 1)) { if (error == NULL) { /*Successfull activation*/ gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_WELCOME_WINDOW_ACTIVATION_STATE, _("Success"), -1); } else { /*Error while activation*/ errmarkup = g_strdup_printf(_("%s"), error); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_WELCOME_WINDOW_ACTIVATION_STATE, errmarkup, -1); g_free(errmarkup); /*Enable close button*/ gtk_widget_set_sensitive(mmguiapp->window->welcomebutton, TRUE); } } } } modem-manager-gui-0.0.19.1/src/dbus-utils.c000664 001750 001750 00000011664 13261703575 020230 0ustar00alexalex000000 000000 /* * dbus-utils.c * * Copyright 2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include static void mmgui_dbus_utils_session_list_service_interfaces_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); gboolean mmgui_dbus_utils_session_service_activate(gchar *interface, guint *status) { GDBusConnection *connection; GDBusProxy *proxy; gboolean res; GVariant *statusv; GError *error; if (interface == NULL) return FALSE; error = NULL; connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); if ((connection == NULL) && (error != NULL)) { g_debug("Core error: %s\n", error->message); g_error_free(error); return FALSE; } error = NULL; proxy = g_dbus_proxy_new_sync(connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", NULL, &error); if ((proxy == NULL) && (error != NULL)) { g_debug("Core error: %s\n", error->message); g_error_free(error); g_object_unref(connection); return FALSE; } error = NULL; statusv = g_dbus_proxy_call_sync(proxy, "StartServiceByName", g_variant_new("(su)", interface, 0), 0, -1, NULL, &error); if ((statusv == NULL) && (error != NULL)) { g_debug("Core error: %s\n", error->message); g_error_free(error); res = FALSE; } else { if (status != NULL) { g_variant_get(statusv, "(u)", status); g_debug("Service start status: %u\n", *status); } res = TRUE; } g_object_unref(proxy); g_object_unref(connection); return res; } static void mmgui_dbus_utils_session_list_service_interfaces_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { GHashTable *hash; hash = (GHashTable *)data; if (hash == NULL) return; /*We interested only in interfaces*/ if (g_str_equal(element, "interface")) { if ((attr_names[0] != NULL) && (attr_values[0] != NULL)) { if (g_str_equal(attr_names[0], "name")) { g_hash_table_add(hash, g_strdup(attr_values[0])); } } } } GHashTable *mmgui_dbus_utils_list_service_interfaces(GDBusConnection *connection, gchar *servicename, gchar *servicepath) { GDBusProxy *proxy; GVariant *xmlv; GError *error; gchar *xml; GMarkupParser mp; GMarkupParseContext *mpc; GHashTable *hash; if ((connection == NULL) || (servicename == NULL) || (servicepath == NULL)) return NULL; hash = NULL; /*Create proxy for requested service*/ error = NULL; proxy = g_dbus_proxy_new_sync(connection, G_DBUS_PROXY_FLAGS_NONE, NULL, servicename, servicepath, "org.freedesktop.DBus.Introspectable", NULL, &error); if (proxy == NULL) { if (error != NULL) { g_debug("Core error: %s\n", error->message); g_error_free(error); } return NULL; } /*Call introspect method*/ error = NULL; xmlv = g_dbus_proxy_call_sync(proxy, "Introspect", NULL, 0, -1, NULL, &error); g_object_unref(proxy); if (xmlv != NULL) { g_variant_get(xmlv, "(s)", &xml); if ((xml != NULL) && (xml[0] != '\0')) { /*Create hash table*/ hash = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL); /*Set callbacks*/ mp.start_element = mmgui_dbus_utils_session_list_service_interfaces_xml_get_element; mp.end_element = NULL; mp.text = NULL; mp.passthrough = NULL; mp.error = NULL; /*Create markup context*/ mpc = g_markup_parse_context_new(&mp, 0, hash, NULL); /*Parse*/ if (!g_markup_parse_context_parse(mpc, xml, strlen(xml), &error)) { if (error != NULL) { g_debug("Parser error: %s\n", error->message); g_error_free(error); } g_markup_parse_context_free(mpc); g_hash_table_destroy(hash); return NULL; } g_markup_parse_context_free(mpc); } g_variant_unref(xmlv); } else { if (error != NULL) { g_debug("Core error: %s\n", error->message); g_error_free(error); } return NULL; } return hash; } modem-manager-gui-0.0.19.1/appdata/ru.po000664 001750 001750 00000011345 13261703575 017576 0ustar00alexalex000000 000000 # # Translators: # Alex , 2014,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian (http://www.transifex.com/ethereal/modem-manager-gui/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Alex" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Управление специфическими функциями модемов EDGE/3G/4G" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Простой графический интерфейс для управления специфическими функциями модемов EDGE/3G/4G, совместимый с системными службами Modem manager, Wader и oFono." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "С помощью Modem Manager GUI вы можете проверять баланс своей SIM-карты, отправлять и принимать сообщения SMS, контролировать расход мобильного трафика, а также выполнять другие действия." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Текущие возможности" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "Создание и управление сетевыми соединениями" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Прием и отправка сообщений SMS с их сохранением в базе данных" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "Отправка запросов USSD и прием ответов (также при работе с интерактивными сессиями)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Просмотр информации об устройстве: названия оператора, режима работы, IMEI, IMSI, уровня сигнала" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Поиск доступных мобильных сетей" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Просмотр статистики потребления мобильного трафика и установка ограничений" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Помните о том, что некоторые возможности могут быть недоступны из-за ограничений или особенностей установленной версии системной службы." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "Список устройств" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "SMS-сообщения" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "Управление трафиком" modem-manager-gui-0.0.19.1/appdata/tr.po000664 001750 001750 00000010007 13261703575 017567 0ustar00alexalex000000 000000 # # Translators: # Ozancan Karataş , 2015 # ReYHa , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: ReYHa \n" "Language-Team: Turkish (http://www.transifex.com/ethereal/modem-manager-gui/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "Alex" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "Belirli EDGE/3G/4G geniş bant modem işlevlerini denetleyin" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "Modem yöneticisi ile uyumlu basit görsel arabirim, Wader ve oFono sistem hizmetleri kullanarak belirli EDGE/3G/4G geniş bant modem işlevlerini denetlemenizi sağlar." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "SIM kart bakiyenizi denetleyebilir, SMS mesajları gönderip alabilir, mobil trafik tüketimini ve daha fazla kullanım denetimini Modem Manager GUI ile gerçekleştirebilirsiniz." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Kullanılabilecek özellikler:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "Mobil geniş bant bağlantıları yarat ve kontrol et" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "SMS mesajları gönderip alın ve onları veritabanında saklayın" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "USSD istekleri başlatın ve yanıtları okuyun (ayrıca eş zamanlı oturumlar kullanılabilir)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Aygıt bilgilerini görüntüleyin: İşletmeci adı, aygıt kipi, IMEI, IMSI, sinyal düzeyi" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Kullanılabilir mobil ağları tarayın" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Mobil trafik istatistiklerini görüntüleyin ve sınırlamalar uygulayın" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "Bazı özelliklerin farklı sistem hizmetlerinin sınırlandırmaları nedeniyle ya da farklı sistem hizmeti sürümlerinde kullanılamayabileceğini lütfen unutmayın." #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "Geniş band cihazlara genel bakış" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "SMS mesajları listesi" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "Trafik kontrolü" modem-manager-gui-0.0.19.1/help/C/figures/contacts-window.png000664 001750 001750 00000167754 13261703575 023625 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxw|Tg[ʦ  HGETEDPTPXJJPrHT!$dSvslM08v̜93ߙwީ/@ ڵk%}>;wZZڕ @ @pM3rH2};9s\` @ >F*V?*@ cڵAݡ( \ @ Hwyg]p@ a\.V͆Dez=FLdd$rC׀Vp@ AQ(,,Dem`۱X,DEE$L䚳/*@ ˂,dggSRR(ODDۍj%''/RPP$11NwMp@_~<3*F ( 999vF#͚5#<<\;.2:(]6ǎnCBBB-5ݾ *qwk_xn6N'<EEE@iW^}CBBJYu[p:Zm۶qYn74lؐ}r7[>իW{@ p80 ls",,-Zp8(**"22_y;@ Ú5k?V!J_-.c<̝; ڷoOi޼9f۶me֨"E-,SRRQFHtt4jMIIIޚnDK@ &8pǏӸqc֬YCtt49eΝ;Yt)O 55ұcGΦM0<>TB-ZįJnn.qqqr-g}lҨQ#N˖-}p!;FJJ < ڎ!--~ ȑ#yxիW5;|0`Ȑ!?>f͛Gzp $Iرc-O v;(BBB*JTTvNXX؟9shҤ ]vݼy3ǏgԨQAۇk WElb؂T>ux߾}8qjǽYv-SLСC|tؑCovZ%K7P\\LΝYh=?ϪU#&&˗+x|¸tRRSS#=={ӹsgV+k֬aӦMx| G<4mڔoPPPcwٲeMzz:fͪ%KrJl6:ub퐐*k^ϽK eEnn.YYYdeeC|rnv`=gj~gΟ?$InEQhٲ%ȑ#G}D 8uĉtonݨSEEE\wuݻ"ӹkz!z)-[{GzzzlܸC2n8N>Y޽y뭷p:Oc HHHОG&;;[;gʕe v@ 9("44gZ]vpByj׮ͅ xwiڴ)۷!!!n`x<MԩS8q"zҥ Fӧs10fn6JJJW T,aaaZiff&VFcUM aРA?a޽ݻ. .P~}O-77xrrr h/.sJzY='++si~?s"ﭵ?$iOǣ4i1>(ͣqj׮]Zpt_kw}Fpxw   60bvڥV @a.bGL[ֳgOtfLEᡇO>e⡾p=EEE>9N$IBmv駟rI|M4h)S8{,}Nuۺuذa=z`֭Y9هjv֭5sĉ bL:Bz|Zqey뭷oF$vV0.>/_NNNVQWܹ3ԩS 4n ٳg9~8 ,iY.TL[ߤ$/Pb_~̜9e˖]61|p~W=ʄ h۶{Aon:= , 4(\>z=zb"""|2uT&Lb)m6N<(~.]5jFb oO#Х矙?>cƌk׮jՊӧ(6m0>,˲t- E!$$zQ\\8@^HLLdܹ}'|mےÍ7ȓO>ɞ={|V* y` $MW ږ@ y4k GDDPV-L&PZX,>~t$@dd$pE|zbcc1FdYrQ\\ŋQLԕ%6%%0 CBRR60'''GsQ &q(l޼'ji $QV-"##vp8Z>vbbb ||ҫ@EQN>MrrrvΝ;Gjjj+Z^i vA둑jct?qĪW]. ҁAn(10S  t ƍˣuּD@ESTTDNN PӧOlppcM?qĪz"##)))FśL&"##5s@ \f3rQN> ŋv_vsij׮]ኸC[g 22U{Z1`0;STάY E$\.EEE@ \MN'L&233 l6^h.lNu Ų@Pqݜ:ujC ʥ7ob!??\n70jժEll _ @ .+vNGTT<܊hs|W͵d+f @ UE:X-@ FT@ + @ W.m,@  %\ @ [^ @ HC@ 0uq@ @p$I@ WrIFҷ9q?0,)㥆t^@ eŊ,^1cеkנ8qɓ'dqƬXrQ⳿e˖}Yy8q"-d2Q\\ѣGΞ=I3g6Ms 4w;w~HZZ/soҶm[ 9}eO>yZk15f9`ve ܹs̚5 IxYl9O ޽{5kU/K@ e j`ba׮]tCٶm6nm6ƌlbCZl2ђv͈#p:L&|Alsȑ#ZӇtt::tΝ;!55D?~|8\(J1֭[5jn?\aÆhm۶jM @P=*yfbbbptЁٳgctŋQhn7ȥŋDDD 2њMܐNtx_fٲe̟?ҬY* k>>vb?W+cǎOk)¤I$vx<Q@ +C3eYfƍ2vXmaÆ t҅$I4lfHHH… M|||pxD禛nBe-ZĴiӘ6mZb #W&999mTK h:͜9D꯵/@ RwsE>Cf̘m*ǎ̙3L&zW_}ENNŋ .7̒%K())!//+WҫW"ïJnn.EEEL6{HXX۷jXXzus+EHHݻwg̙dddٸqc,[Gݻ_0 @ R;ƍ[\4iB-ظq#Æ gl6;v,[n|A6mّe'|O?g}@ݹ{q: ~ʲ̪U>}:o[+kƍ糿vL2EQx'1c'N$66~1{2n'QQQe싅x̘1̟?Zjq;Jǎyt҅hC@ ˏ$IHT^~'DEE(JyUp͆$Ic2tx<x Ӊbv@ N j6Č-@ KG$tШQ#֬Y#V@ lrʝRQ @pe-@ $e@ A*O'@ l}LL@ @@@ W1O@ @pQ@ TEQ8}4OndYhCӡ`Bߩԯ_*N ><@ ΩSHOO`0xj1$$U}U{ {1$I"55jQ 6%۷cǎL$Bjj*-[}DEE+"4EQufGeJJJa߾}dddfJ\\ɴhтf͚dAlddd`0HJJ5={sLӑD h޼9t.\'D%\P#$ V^|K6VRR·~ի#55p VgffrQӉfذa4kWChУJ:Tٳgٲe NB$'22P$IraٰX,dggCRRڵ[n&[ׯ_^N:p8رc;vR O>\4233e^z]UF:t /\M61oЫW/F*ߍF#Geǎ1nD zjbcc/sv駟b446d1%//jE 2.֭[z뭷VbΘ1chҤ ;wrvG.ZhAZZ\kAU4Z\QufGصCE;wSǭު5PpCrr2?q9z(R\.]w]4杮SeilҥDEEQvmJJJ$km۶ t\;:P~}e[@BCCС:;wRRRR䊢Я_? BCCi߾}cuR+MMRe9jM#$IZ*@=&iԯ_x}:j*dY ..GNǼy|fJ &=ŋ(ᅬM6v)苶nݻi׮]n3A~HMMGx<\رnoVZ|W 02JP3Hs\+WWY0`ڵCӪU+6mڤ-QS`5e#Gt:cM}v-4TnCҲeKdYbw߱~z~7N'zdY`0ЪU+9x`ӡ",X3gh۶-DBB7x#}UVԪU ɤ͉KӦMi׮l6|4tDFFcn&®vͱcLj <<IطoG-\.wquzMeڴiΝ;5`oݻ_ubhڴ\FJ IDATNA矫bٳEM HMMEe `@QJJJ(..&66^zzjzˆb͚5Y yǎiժU]que:o߾}l߾W SF$Iڼn\5C`f,sNZnsΆ  ?5Ett;^OVV .DenƍȲLz1b|J~f*ԩSܹ-[X*N[nuDDDΡC*FLƍS7nWDDF~Xg@Z*`^Sƍrpuױ{v5m߾P@P*.[SV-PSV-R"3g 'L@fhٲ%+Sxl޼9/o߾tŲyڵ}|MʫZ uЁ#Ghnv+KȲ]wE˖-v^ki[ 6,8nV٨r3Ϡٵkaaa;ш$Ia$IbԨQΝ-[c1{lϪCy("##$I J˗.]о}{ɓ>ߏ9֭[2d:t۷kZHD\\[n;&۱cGyӖW5Km۶eǎZ>~z:uT#Ҙ@ /$Q\j*6ltj#>mont$IۗZjt:n7lٲ 'OkkW*{U?QYT;N &L*ިZxgMJU4S7կ7''VF[o'xQFqС?TѣGc4ٱcqqq?ȱcxXp!YYY1^ܹs9wgϞ=dddMϞ=kt)..f׮]DGGp8xШQ#nV5kGAӤIϨQ2d-Z 66}rwżyˣGkw+˗3fƏ%Kx?~VWeUyrjNcܹnf3#G'`Ȑ!SjۻwUw xtn ߿B( +CeΞ=w}?MdZٲe 7nk׮ >7|ӧeߝ 66۷ӭ[78qɓ' nݚ}]=EhҤ +Vb\n@\.K\e`w\Ӊh| zz@s:-Os(]nyp6o\ƥbԨQwYq\h̙Sl2>c7nӧYr%3f̠~b +kNލ5bСZEN:<;>y;ݻv{y6lSxZt:[i֬ beΩ, z{0q V`4/tL&FԩS˴<UUx",wI0C ..f͚ѻwoz=K.\dY{DFFri Iǎ#77T /y衇;*աjg%T-N']vd2q? bmܸ1Yfqyn7w۷qof4hɏF2^|رcL8%KhiH,nPRtt4yyy﨨(VuӘ]Q^;v|7\.zNcڴieli,Pw ͛G~?~<111dggsKШ>sj A|$''1cf#Fvy'yOy饗_>wu~mfu0PEoE;ĉyYdp8Xp!+oCb4駟x뭷4999<|1yd̙dptR~HHH`ܸqVx׳zjV+f}rwVIs֭[5?ǏkKDO4>^{ɓ'f㭷oL\ٳ6opz|ZΠtm۴J֭[ի_~e.;wFUKv: 2ڠ,jL:fxj{ll,CxkY| -'Of„ ,^BJJ Gnݺڵӧ0zhBCC1cV/`4ܹ3 *3л"z=\. C Ae~7mۆ^GJJݻ7:>̧%ȑ#tԉd: \oVKK5?=/^d2ѲeKNTTTVFmܢE \.jrM7Ѽys<zdYfڵt ѣG5[ڬ2ޕ|@+ǻEZbp)&OرcY|9iӦr5OKj-j|Kt:]ٳ5N7n\Ϊ&C_(vz=W^wA^lXV wC4aժU?~|9{,3f`С|RN~"##9s&o}[naΝl߾|F#7{l6/wׯl6bcc{IKK hoǎlڴbҥ ]t ?5I[ pxh޼9۷GӑFnn.O<6͙a4rH>}:F]yr*|zvlуhΝK~~>f>#++e˖гgO233B-[кuk{:qq~m.]JcX;w.< ˖-cƌefFs}Be"<<MRR憢~ 5{}hHll,1 >x[o;wx%++/;X;r())aԨQ@Z{iTNriUGyU4Sh3Jvz|Ν,ZujN:=`8N̙Ç~޽{YjUtP"ڱco&vEQHHHl6vq8ZiƌrxtzQQEEE **kbccy饗Xx1ӦM@{ɭLB$4a6 rqIvÇʫ0=zǃ$""NnY*K=w׮]dɒ%t 5OK˗/~/Yw0#Iyyy5CqqqI$z=n`-ؼVXXHVVmڴgV|Zt),GkqQ6me|'ԩS+V+Y3g}J{~i>Sz-rJΞ=/ĉIJJ h+W2vX̙oͿG W* ̴Zڜst:[wÆ lݺaÆiwQFٓ3gΐ^g̘1.]ՌjJnʨQ4{??3P?}-hEZn}v;۶mc̘1f, 111VzUtΝ;tikՑj/ /A)jkZak۶-1| &ɧSW`'))SO1eʔ2 ބҨQ#˶mѣکLۓK[}ѹ4l\jl@x_}ͥh6rH-}\NO bݻw3bmۃ>XGիN!99[nQvmV+.SQ[yʓ:h>K5P:QLL  z!<iP-JIII)))Z~R+{&#Gh/5=#ȲM1Z&i)//$IZ:P^PO?^+Uef+~A[LHHH;<"xj$;]rݼ[HYp!=zছn**Q?t[lYftЁ^{^xY-t… V4iOXٳ'}C XVڵkW;PI>jb,[S~} Z Vs~믿l}>.eII ̚5믿^[(o4WUP1c׿x}ٳ'7o/\0v )))li;PZU+ הN^o޾ŵZo:/4?[o{aJUBjZԇtddvJ}yuP0E!??ۣ( _}:aÆq=0`\.SLwꧺ8bAe}z}_{mR"geզqٳ7^IjWí@4iWfԩS}ҠAQ h$ fP% }=ZA{+R駟fҤIѲeKbcc뮻.N?λ@?eڶm(Z̙3DjAۼysF#vbtM}x$Iܹs4lVex-K5V? &Э[7L&wf>H@DFFPdYFדz׮]ҲeKE!++\4i?Lbb"sL&\{E_e2MK[&I!!!(/EHRUԙa+y͟ի޽{57Vnn.III@(u-︕]\\_|c=FΝ1L߿_{&fee\F<;P:_K/@ )T%>>|gK/DQQ>V0VVzyqݼF, Vpe3g0{lN:Үݻ3sL222>nz_޽{Lm2ٳ'_}999(Bff&/^>999ڀ,T@oALL6]^GN [i&l6$QXXڵk9z(&vp8(,,n+#I#S{L&۷Ei7 vm|7X,XPPОba޽? "Z5QRRRphlݺU{2]?~\{hKᠸ#Fh>e]]ƍH۶m9sV(˜1cX`6ۿe[n,^듚ZƝF ѣY`o&6DƍW}EaժU^x*i( FWhSyWFff&oVpn~Z%$$j%I⥗^b׿hҤ&l4hVv8YF{ظq#ovǻ+66>1 DGG>,k \z_>J [EEEZkjyDDDl4ӧO뭷gBj.IwF׳n:~ᇠ4W{/fEQDcZ.^XWI cԩ$%%zfFř3gxx έLNfjL:fj8Շ7| vS(2sOޛۼjO?ٽ{7ӦMcϞ=4hЀf͚!I'Nɓ$''ӢE xHD>}0`1$ IDATnSriwJJ 'O.7l/Hou5wE{f7nV\Sxג$1}t~'}Qklر>-=\@L&QQQBG`֢" U.S\\mL&8{v?}111ԃXV"""BrlԪUKF$ ^/^*cnQ{?N'ӯ_rӎ@ge֬YTNFwo?:@sVmONm Ao߾n;tտj!P}*U1CAAAPU)OuֱnݺP$I^t:O>$>a5e8*OUfGyħp+類WQڪ,i0,ڠEo\+W6@稕Ka„ ,X Β%K֭ᤥLN$I|':t>}p]wv/|\߈t Djj*>Rtiiif 믿ƍ t:gϞԩSZ/I2dݻwVZ>pڵka,TI*sCEiDyeXg,ˬX}S{;àAʲL֭h95Z%T}v={' |m$ͻ(s]y]%P.E I˖-@-sWww_Mhժ;#HMΟ?ϰaø8p Gaݜ9sbt:1114lؐSn]WtoztM7tGa6iҤ v5ܓ.,d4˭hjHRU1LSQFEpu (\tE*ܿ]\1~x֭[UFE)3zYa۹{y*ϬG0TE҄۔Y FŪU?EQ8sւ)I={p޽_|NǬYHMM%##C[iQϪCyHDؾ};?u1`niLQv{w2}t-s =IzZ a21M6fjXSӎ@tK8vWp AW+j%.W"UVp_P{9>3U3k?g,]T,HRbϬG0TE3Y;wݭ}Grjڪih42`V^Mhh(uAQrss߿?wu 6|}];Zh3t>}#G,'gԡ"6lM7Ė-[z̙3 11(BCC}*vZ2-jբ{5֭@ j%<99f͚q w>Rk;>2gdMH%%H<+EBPFD9,wrXN+YE<)*"A@ P v&[/3y晙> }+pqq:1" QD\46c]>jqu*NS<}뮻.Oys6WWs{2g7:N}8~p4dBBBXv-P4 seȑ駟fذaZJwhLuV\2 pЯ_?|Aڶm(,XqѲeK,Y[oEHH/!׃/cǎ%22qq%deesNl??̖-[عs'ǎl6=uŕ6Q֑K$;xP#Fx}S X(r;瞠fƌUVM_v>ͷhBdOmڴQo/yV+/2SNuafcԇ 44-[}":|x*D}zwQL8qb gff+T9Axrq_Ox`t:5piu^[Ic@Ht:e˖\q$''c9z(6m"77W}|:rsQ;Jj 2#FZyEW_UI:ܹs˱})W>b; ̛7m^޽{ ѥK֮]w}%OVcs.|\{}Brrssٲe k֬aڵر3g`Z$|{l۶%| = "jݻD ۵-66:iӦZ=ڵkǴiӪ\K/Ɨj%//K.DzE+xG* &&뮻_T>b'uN#xRgENW]5zh4r 7p)rssN(##tN0ƅ/,\P=UW]-B&MjDܝGΑzlܸ_Ò\u:t@Ϟ==>1 /k׮~mޑ)6?!CG@qq1;vov|2uTk]vyfvvrK]v\sX{Q=R>'uvԃoG9r~ù#jՊN:ѽ{w4i>2BβeHJJ"..N^L222ػwק*BVҥ W\qaaawCw ͠Az k? B!.ݻ#GЬY35Ij(XnknӨ( 'Om۶oߞzT̟??'f !D.]8|:p`{}4L NVu@JN(**jf⌡nzGȰ2,xΆ q`ٱX-1jkܦv`:UD!!zmXNoazK.Qmf֮ 7@lvZv̖su:~Hc-Ql~ү;"j'XEҪIwgУ -9$ZS؜CHo=ń6Gh9QCB4&6l6;ï_E7̟r ѯÔHZ wٔ9W&Voecgzp} c>GǘX~o}cf}%g٬^ȈԿ=nZ(UKc쾗aBlh r !pS߈54DdN#t6Tk_?DfO|~)27N':${Xar] 2$ihK[>ǔu)8̩ IyL-Wz7πvfՉw_-m\ϱU-aviʺZFtfze|z6'9,{WW|Xk}mSunC?&]Q7L}ʳ`/P]zjKg-y^ۊS<;vcyY$bKom[[w-5>%22N-#NsXv+3)[>翴n#卺(:#/Rn/Мs@Te{ս}/Ӊi'؞0]$B՗XQx*ȋlEO]pK@%I6+o泃Or(N|"uyx'iku}_T qysmux[Gm66aB 7 ug.kwX͎l'fcgJMNk!0u^tH2 |Cտc QPxRu(h=J+loT C<W.72$۠ׄ`ІQ4KkBZ>*$z)xm*vno-TTs·Ƅ[Xv6N-Fz#ncXcX,vª^_"eܾ~+;sVT/.g-9U˻~frX/(cLv󫻼^b 0-4zDe߾ $mr[>Ƚᱍݽ䍿XO8˥)W^Ysn@RqMj dNć7 4~<իW_eVĎ o=Pmb l9Pf;ˮUhC7}Lc_qK  ƐL~ (::ʉkVe>%TATH"74O_;14 Msh°9؝k{b)<9]E>&QćfPʟ1_ֿ9ˀߓ@:1i)4 MAA!NPl]V^T^m}Ojz[ $.m6l'j}] ! p{AlV+Sl46rdq8{N-"Sasb1.Y%;[cg/X{^+r|u H2_yR( ٬^.~I>?$wE.}l6 2bl,WΘO!ZFt'ڨuoAgxnC=9my_؜V;[-d^e/W?bІkbf|uYY T]1K(Ng8c>t]V^9QJygjۯO@@T{koxL[wNmхG.G$%S:-7dB%-l0;gg8( p 4Z'n.%Sx Z'6P.:n|!*iBqNaՎlCU8= $Q ?t88*Vawb pԋG4{H4%T]a !B\J5aNr"snEtءM7&Lo IYϒqzKA!B6+gzjB!%@B!-B!D$\!B:&IB!uLp!B!$B!B1I…B!c !BQtĭ8B!(e !BQ$ B!I.B!D$\!B:&IB!uLp!B!$B!B1I…B!c !BQt?v^2Z-Z" i[B!o+N d"""PZ-F(ntp85Iqq1z2f3>7G4 Z4}p8(**q2/B4Dk4ٰaDGGsW&s~l6Z-6 Ʉ^W삂 lXVN'∌DPPPhtljeوp8yV&Mp)i[B!.8veS<.]VU/EEE| Vj~cp m~9NEAQRRh z|1l2 DxxϘ޽{ܹs+V( ׯg׮]t֍JJJ(++h4K&MͥM6_>}`4)))Q/[lt2h V+֭Cժ?V8vCӱenJ߾}ׯ+WT{] W]ui&~W*x+W"h}jpłnw}- "&&&}蒕E߾}պ\~=111n~Ww}v %B񄇇SEj[ VŶM, gΜ!::ږh$,,_~T u{O [/ 2O?5@HIIaժU\z饘L&JJJHHH_=JFFtڕK.$rBԞZa %%*㊣HIIש^z)L&6,upC;v 8C^^V".rss%11:]ewޝpFɓ'ڵ+zHǎ9r[]v`0jiӦ >y4iEQ cǎ:*v%֮Wvv6{ȑ#l۶]vqipKYx1-믿jotͭ.KKKL;}4Brr2Vѣn:\.z=c6.c6'22^Ї;ׇ ȶmXd ?:#V+ #--񸄆Cvv6G%%%)Ǘӽ{w%BWp]\w2ڵ+6lp{o.]j41>>$vAeee8N~EEQHLL$77^O\\IIIl۶ FAA]vuʎ8pKjFc aaa߮J*ٻw/6l6NxJ+Jf3Ǐd2GDD&I:*& 6L}O?ġCܹ}R.+o '55͛7s饗bE@` Sȉ'HNNҫ[^^Nvv6111c~M6q7VmjGoJOE!)gϞk2L/r|q++K. CpEQ裏qwDp=إ&u66u߿׋cBB6m"$$DBCC cq9ш(c7+ԱȮ+^̃eXX~=={Tǿc}IPdi֬&t:aaanV N5G׮]ȠM6`h4dggsqRRRt!`y6Li޼&'NKqq1!!!nuP'HZZ:m˵|}TԬY3nJDD]P-ǟʉ$Bph8JӦMu;wRZZZ<mۖ]vz=)))l۶r5itjrQuIBBn0+tAii)Nb$''sNV+&{|WO`II:ՋZm[}<*'vBN:Edd`E$&&GAA$<F> V GQZn9q:ŵ|01]m%XFyy9gϞ%669rc#""ٳ4{h69xm5l۷o_HҧOzUrҽ{wI 'r]]\s5yfuzAA˗/'99nݺTKN8z۴?ܹ~JXXZ-M6PNLLd^ǃ\veܹիWcXW/={~cٲeh4ZlIǎ5kp8ڵ+m۶{lٲJdd$8g_DEEy,ϗ?t8={2IMMUQ{]`~( :ub֭\r%~auZjŞ={ӅVjW!Daaa$%%q!Zh8z!!!>?t:Ξ=ˁX,zۚ/-[ߪwGkH<UqrM Da|B!eԩ{77kZ>S{]? sCSV\鶬d2a2HHH/'44TXVaNp ܮW&3QBhhׇ{( X,%B4A'; OV5ՋZvD`0%%%jxBB)Z$.L$\Wp.w!BTt:Я_?o\la|ÁV%>>buwIxxLJ6څoԄB APIPk׃x\\OW (c]=.[&<7I4Fcǎ^~?OTץß\ZVhٲe.Bԥj'N뮻NGREՒ¡Cػwo{,]wRiӦMP(.VK&Mغu+ҶB/W":8HB!_= !BQ$ B!I.B!D$\!B:&IB!uLp!B!$B!B1I…B!c !BQtCa;!B!.HmiiiB\O; Zc8\v p!hBCC; ^c8\Ԟ𸸸ؿ?SNoAןbQ3334i˗/'$$伬#:m١Cnk}( +Wj;IMEq}W؛ow}WIV!#pQ]ۮ(Jz-q=xZb|ȑ#)//~d׶z,\ ˉ]v1={V Q[oHNNf„ \s5u_uqL7v^p/^j앑"^ڎS=T]v;\r%]MrcbضmӧOg̘1<4m/ºu+,-S;X,eѼK(X, Xvi皆DʕUyzff&}jy睤p83f =?2x ꫯvZ.ә2e ǎS߳d&LA1b>,n˯Yq1`^>?~Z'2f3׿1b*VJ|򒗼u>^!!!U5pW^pTѣ~ K^8^ޒzyS`ׯg{l۶ +CMzjv;?~/m@M)ӧOs! UN /@II | saÆ j_/vL\\3gdݺu9s{#fbǎk,_g}HE :'<8 fϞҥK~XsÇNzz:=®^ԯO4 G(:tPe4i111 n&vޭӧZBτ زeaʔ)nv܉(|rx"##iҤ wy'+VQ^72*'n]O"""$Ǝ>rTթt͛6?6646m0`:@M})ƳgN[v 7܀Xeee_ɓ'Abb"cǎeҥAKoE^uw>0 ̙3D^uF{)//gڴi4oFCVHJJ x;'?3i$"""HHHoys=Ƅ u޽{͛7Wg̙|̙34&MDnTz]'шbpjٰa~!YYYfN'&$qlp{qft:hNBK52믿͛6mZ@{j( .TBjy8<<r"p0i999k\6my:Ա]w/͛7M6n{mNO1&$$ЦMVXI_oW]UWW_TȘ1cxG:F\ 'ر<񛐐PeyOErsafޓƍ1̈́`4 6H>VV^^n'&&PN<ɼy|oZxx8 :*??7zS^򒗼jjf͚͢Ep:k;WޅzOn>`ƌE9I;j2eFwMJJ⡇矧Tʎ;ȴoL8", !V=<3<ëʇ~H۶m1b{yk;郎n?<_iouht⒒Ea{m/9s0n8f3Ѵoߞ?n*;c f͚-܂^g?>}kz***"<<=zOt/fѼys~i|@3f0sLNbb"F"33c;\eԩξ}2pz @!n긡Ÿg&Lڵk=GCkv-_իW{ BQ<|5:nH1 8?/| !D 1qCQ!u}qB!.F;v_~0 B!c !BQ$ B!I.B!D$\!B:&IB!uLp!B!yOlO?eʕdeeaZ&--QFquгgOꫯvSO1tP3gn: K.7/\}kyoQkU)2O{ﭕz ꦱC!btޒ&MDff&:+xضmjRZZC=SN1arssILL$==Ǐ?qFz) ReO>DM—.]&Ջ6mڨҥK0/B!W^'Or1ZlIf|&M/g+p.ɶm̤C|gDFFLӃݼy3ɓ0`k׮e:t6m0vX飖}?~<۷ogݴnݚ~vڹggPjcfϞMVVɓ޽{@[GFFobGZZJPu&Bq1;NVX#Gܦ?oV`Ĉn 8@HHHi `;<]~=C Qpo>oN^y7t .O>aС8pqƱ`w۷OW^W_K,QΝ;ӻwo?NVV-b̙(B>}PիW裏3rH.\Ȁ8vK̝;W֏?c-tݛ0˯#<—_~ITTxcƌpWLNN[nZ?B!w^dz9|0p.5j~ >}4-ZP >l^U+|ƍ܂ܦW9/,,tצMzɊ+F0zhIMشiI 7 /NlFx/X`A$|<|̞={~a5Ac߯_?"""ؾ};EEEtؑ;vPTTĮ]o}֣GRRR0 ^G!Bkh߿?n3qDV[p\\֭^{-+V8kD'zuVe뮻N>f̘!+p,=8p:aܮs8U-^;׳lٲkEj*}]F#?3K.B!({]IY ^l۸+ILLdΝ~›{W_}cǎ駟 3<̙39p[n3>hP[5\Þ={غu+N-Z0h N0B!;eԩξ}2hРE!B ڲeXz<^!B&IB!uLp!B!$B!B1I…B!c !BQ$ B!I.B!D$\!B:&IB!uLp!B!$B!BԱFgffһwo,ٳ={b6״,!Bk;={0n8RSSeeec2ظq#:t`ڵB=92,,L6c _iӦq!L&!!!tܙɓ'ӡCߵkٷo:=zC @޽ݶjb0Xzu-҅>P@=6mZBƣ$.vݻwөS'VZE||K.eԨQ?N>}:t(Zٳgy'߿?C ?6ͭUVy.Zn}2p@x Μ9S7$DA?`رc\q^ /m6|MV^?Odd:weŊ$''ϫ^|ErrrO/9|0scuB9r$C _V?ݛ}[o-[SN|X,JJJXh _}:tP9{,-R9OV>_|3ff>#.2?{O?: /U㥗^:?"D#X:tYt)h4,++cٲe<4oEQhݺ5III{x aȑڵK]vҥI&DDD0nܸ*_zZguBHNNO>aɒ%[رٳg|3gf>N>Ϳh4ˬ\뮻~q{*aYx@zz:㮻BQ{9 Odd$(FÔ~8*))aڵL20a/v+uo߾nFC||<'Nd繆hܘpCr^yC=rrrp:x-+>>^h4b6Ǐw{jpx-r>0!DMDGG @JJ &M⩧bƌ2EQڶmɓ>}:_QV)Sp72|V+/3f̨n:L&<u<VqQӦMy饗Oy7HKKK/%77G幕:j駟?>Gbt:)++yb ޽{3sLZhA6mسg%%%( ǎs:.|GA !Dcbջps 9˜1c0  Fɟ*]hh4/j^*>}ЧOf3|=}Z^vv6۷WNHH("}Qf̘7ވ``ƍ<8lmk03g?}h42x`f͚ɓ'q:9rDKxx8W_<6lp^Bظq#;v9sЯ_Zw^֯_P۷zA|rr2|l6JKKi׮6qFFY#ɓlذrz=hZ"""3g%%%1|%b2`08~8N7T D c=[oŽKqq1͛7g h9s0~xIHH`ԨQ\}e9! ~iJJJ_~L4Vvy <+ f_?DеkWm_Mر^'{wZn'|_~#G8p &L(D~a{9JJJHMMel߾)ą@:uo߾n=B!Bڷl2V^0!Bq!$\!B:&IB!uLp!B!$B!B1I…B!c !BQ$ B!I.B!D$\!B:&IB!uLp!B!XM333ݻ7C` qwٳqO?ѡC֮][!d޽ddd`وo߾7a{1 CѠ( ͚5+;$66^Ct:]tGUVi|Lj`{;dذaDDDZT>f̘Ak>g ƙkƄ x衇fڴi 24FDFFO?Źc^y~߰xbe:<==P6fC߿A5yj5c׏?٣ԋap-"###88+VPUUVff&FRŋ>9|͛7o2k,|}}y9q^7n୷Rʷl٢7]'>>Ss·#VˤIˋ?sv 4h7߿nTF;V_vv6OOS6zIHHnnna\4#G̙32c׬۶mcĈx{{3|pi7~ipC222Xj_}}e̙ٳO>}x ʕ+?QرAWTTO``ѸYx1lܸB,Y?O6mg}Ʒ~KJJ^yff&֭#++ +++),,䧟~o߾FㄺѪ`>ܨgϞűd.\]8p>juݩV%--rssYn^;{e͚5۷WWW>qAm={3=6PSSΝ;Yb_|Er+++vG}h$8>>l۹pV2CKFafMsS;O6x!!!OIIIϛ7///|||8s IIIJYd 111tҩf2޷nݺEZZWsͪqDEE~RSSygu[{MoN_%J#""pppk׮9|Oɓ-hgǎ@hݻ9rxt杝ホj'''&N(hի&L ==]|ʔ)уx6un߾ 8uzih3ٳgtR_VKNNh4\\\0a;wkcԩ 19M#00___|||eܹz V%77)Shpvv7Tʋ9paaaرcRә>}:vvvh4ƍǗ_~i0Ns·:F ۩OѠjsquueڵ$NVFi_sppp>}0ydjrJ;aaal۶ V%Ut5!S,׊={dlʕ+ׯSNgik9+m߿??0?/xW䄻{#P7 ={lFΝ;&>>Sy~~E :涩쌃.\0@zzzkjj_z;tl}1u\ݺu#00cǎ-lm~ARXX+6MJ7jrΝ;GLL gϞeKII} /z2|&ݻwwwַcȐ!J">3֖-[8pm:Z{t|ZCmVFMrr2k֬aTWW+~'ѣ3g$..VK߾}1bDtK=RĉܦYm3}t&OB???4͛7+^}Gaƍ]nݺoauIHH $$kkk0achJר=Ӽf׍&..ÇBhhޛϟ… Ņ#FpYeh޼y$''3~xqvv&44TyIC6[zt¨"<<\ilڵk|w,ZȬ8;v jqttWrkʫYzV '''' oue"^|Eg4#G].Z׬*RRRW=XٚUK*!'Zeģ#9r9s搝ݡq2rHLB@@@nCpwwg̘1Yzz:ɍޢr{yB!ٞ={<#UUUٳ~C!##;w/wt(mýTUUOp%׿aY\SB!GHϜ9ɓׯ_'~~~XYY1FD"Bі:t!B!e(v!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,HϜ9B!SCCttN:ŸqFÃL!:٭[7eYTT~~~.dƌ?2vʓO>IXX&VXAnn.2x`"""70gRW3fյB4SI…Bo߾F-ҥ 3fGƆ2֮]KDD_~rZMll,pBϟͪ/̧ '22k6;w`mm !qWLGixj۶m1oooΦMu=z4>>>O?Q !DVׯԠRݻYxxxХK3f |E1rHΜ9,+++#!! WN]_Nhh(^^^TWWSoݺEdd$~~~b dԨQx{{3qD.^ԗ>Yu#EEE۷WYx1}{,Y>BJˋSbkkf#772LRR^]S9rin"--+)..f˖-T*fϞͪU6mNff&֭k׮ܸqhKuu5iiiAnӟw^֬YC݉>O>O˜b$>JZ… hZz7777j5NNNL8Çw`Bzl޼]vɓ'ILLlrE~6oY|yurrrشisiQ}a\`` ;JE\\3}th47є)SУGx}V%''p4 ...L0;w7uTڵ+!!!|wJB4K{ɒ%K&88I&qq<77I&o6oߦBqppZM>}ܬxO¸N7^Ӏoo{UU))){)x0sLjۗ#Fp Bcǎ`Z-2y6)f[- bرf,]+++6h#99S\\3 2T瓐@HH0ab>YT>>>2"!B!D;۳gٝo:B!:I…B!0I…B!0I…B!0I…B!0I…B!0I…B!0I…B!0I…B!0I…B!0I…B!0I…B!{" ?uTTTigΜˋJۭn튎^B#Zq:uqƑMG999f9nnݺRW3f >:QQQ3fpyڵ+O>$aaaxxxb rss)((֖}/LkN߯jjjN~HKK$  IDATۇ ڵkƝ;w):!چ>>O?dps1b6m@YY O||m۶1b>|R᭲7o2k,|}}y9qvMmǐrMbcc9y$RW_}kK/ěoɹsؿ?:L8~`4%fff&FR_xVˤIˋ?cȑ9s0~趟Nhh(^^^5<רj$555T*z]tޞ1c7ߴY^m띱>֭[DFFGpp0+VJ=CoBo$ёŋƍ),,dɒ%;x SNe֬Y3x زe ۷o… Z "㉊b!&&vɊ+/ʍm)۷owww Uꫯ۷/3gdϞ=|'۷~ŋuM9xis޽Y}|Fa@ONN}uiii0dݺudeeaee,7t> ёBBB&>>6-7o^^^pȑ#<־0ֿ̻ݸqhV%--rssYn^{:B܏$777j5NNNL8Ç뭳cbccYt)ӱC0n8JBVsZ-=z08GQՒ˔)Sh48;;o*妶cHQQDzzzڵ+#G$??ӧ-;yY͉6N 3k חcǢR;wLB=xe'!:+7of׮]$%%qI۬`ѢE߿͛7sFSMtrrrشisiqM]ֿ̽Z-999hpqqa„ ܹS=cosBܯ9ṹ_K.QYYImm-(]@z)eYAA?^;wPSSCϞ=Yd [laʕ׏S35_zevw 8p Ceҥ۷OonzK5-6wNEEE:ap.9玡'!:Ӈɓ'MTTTT* wFR)'&&ضj_Եm띱>PJaa^M]̺ q+۷o3{l:t(666 `mmM@@&L0+^ש"""j}||dDB!BvgϞD!B$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BX$B!BXXjhNMM ޽[[[_ZYK.h4СC5j֍lhҤIn]i~nC!BvK뫬d޼y߿{{{VX/~ u ?˗9q|6ZS~ꩧ,B!B&Wree<{6k̘1#GG}@*#O3XjoVì_b 6lxx7VЍ>?'N777,X?@LL 1119r'O?@II ݺu_~1`5cǎrJΝ;Gee%=cҥ:fB!}4ֲo>.^O>4{+Vg|ǸRSSꫯ%={VgȐ!Mk.%Q}'ʕ+h"T*ިT*={6#$$DO?._̙3gXd V`̘1lڴ hO"11, ĢEh4f*B!ڇW'? 8͟M_Yb:O&--  n-S2t#˺s)e{ը=SɰZ]wXkjjܹ7xyGΎz{ۜ9Çɉ 6p9Μ9 x衇O9z(O?4o&>>>wye˖qel$111,Zs_3}tfϞݬxMm^ԩS|aÆ)oB!KQða::!B!i{!;;[z!B!,Mp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,Lp!B!,HO:'m3g򢲲 !^u$&еkvNS[^]]6w?߷o߾}mVb ^u b…ܺu닟VҋT| ?_|~B:cYKp-եBa}accjX)))a…̟?˗U?ҥKۄѫW/FѬtũS7n\G#hN3nJZZGLJ"##駟 {9FM(++#!! Wmݺz^ʠAoX[YYYwSINNӓ__VVܺuHfŊTUUj4i~~~xyy矛Y!K.3fVWW{n&N=<;vh*ti<ְϪbiF3MZ4lĉTg~eZo`<0[YYѶsCg$3IYx1lܸB,Yh2uTf͚Ř1c-[}v.\*6l/^ٳJ;w׿57֖'W\CѧO>beeV%--rssYnիWu#999&cB]BBB&>>6/9r?YGJKKׯOSmi4~saZ-/^d:tÇit?UM}:~-6Ç痿%/˗/'Ooό ]v @۝+Mg*f!ɓ&**MuOLL ߬w w@qq1ݻwGRվ0˗ݻ.]k#<,sttdڴi6*?+իӦMkW2w\_V)MfSǫ|~Ho߾ٳbСpAM7ǯ3x %g?5?G5p@"##gРAѣT]S}qbn~Tl0uCg$kZr***UUUQ]]#666\rET_޽Yf YYY/[[[Xl7n(j5l޼,1zg())!==]m1p@6n^zdZ-_Çu$͉Yz_$kUDDDÆ kƅB!ĽgѢE $aaaxxxPTTD\\'Obeeն>urL/Bq/~-ip})mSܹ޲Zfee50[z-~3sL(--СCdeebB}L]#[[G}QY֥Kf̘> eee]KT*>>>2|S)̠,u}kݞTr)<==P~NOO'44///Núeee$$$?TTT(L7d^}U&M3* [[[^~eΝѣ! H~'p z-|}}yٲe 1j!/ٜ>}?Ozj5S:ɚT*{6>@Ϟ= ͭ_TUUu_g=z4,n̜rCA8q???unݺEdd$~~~b 8[兗/"o`^l(2m7x5׽km_Ku$ܐL֭[g[NsSPP-[ؾ};.\`ժU+**ܹsёŋƍ),,dɒ%Fc5U'&&+++vG}Į]kξ!:ʯ_Β%K1̛7///|||8s IIIͪ/Fyy9jڬ/55UsVvZ?~Yf /,EՒFJJ [d{ݺu#''V^ ԍ䐚 ͜ktܯ5:]/\gʔ)уxׯ[ZZJzz:ӧOFøq۫}StvvVeee) /PSSnnnj8q"6s°ɉc*m5w_+7of׮]$%%qI۬<66ѣG7âEؿ?7o,_YE۸y&=z0^AA6l`ڴi2gggj5GmZ?~Νː!CZh40av&7[Gs9kN7\7/ԩSix 9-((sjjjLFt(,,@9tst_K.QYYImm-4Ve^z Eѹ888@>} IDAT#v;Z/Bǁ?2288Yf1lذFu֭*EE=z~:yyy|?^lر&CuO*ڵ+,X{ꕷ'ddff*ɮ|x #mqSj5謹_kßl2nܸ}#;FHHu3goh.݃斷yppp ::E)^zdZ-_Çz?폛\ƎWK͹VGRwHx[7oɌ?b Un*ocժUoPQQcʕXYY̙3Cҷo_F'Ӝ:g…ˆ#8{r뤹"<;Ƃ j8::ɓۤ^o[ׯ_Flllf\xQY/*?{ȑV֭[9uɸ]vm}%22:oLPPѬ\ZIHH $$kkk0aBL1x5ݜk/isREDD{Pzz:|B!A5-ZD[CvvKΟ?OUUO<.]2GS!Zk̛7Mhv:$R'}}} B!-!Fۑ$SOB!=Jrs_E!B IB!&IB!&IB!&IB!&IB!&IB!&IB!&IB!&IB!iSN1n8u릷#11MƦUmgϒ7|Cyy9xxx0j(OщFFEEgrt׿RPP#f"8y$>|XgUnv`` W\?;4hs.,wL||<%%%)/((ի? 6[GoqYyy9jڬ'zZ]ֶ[|eo΅ XjzǏg֬Y /(cccjBnn.֭3^n!''Q. gfNJfI.  WZɉ'*JBVsZ-=zãh4~saZ-/^d:tÇiֶ5 ر{nFipۺogʲ,e_xjjj|w/WWW6o̮]HJJɓzs1۳qF._LBBB%''M61gΜտݼy=z\ 60m4e3jG[|3}th47/hǏܹs2d\ՒCxx8&LΝ;$^c:BGCfInNxFFFrssY~=.]ZJKKgϞ,Y-[rJԩSyg9|0^`唖rI~mV %<cs=;9rfРA !D[ݻ7TV{nbccILLdmѣ<~ݟٳguV֬YCQQs6g!Ľuײd|}}-RneeIJJ7on::ܹsJҶlBbb"~! hr?u}ǎ#$$躉̙3d{r[[[Xl7nFm8`{Yh2ҭhx饗HNNFRXX>|xex%rc6th_NZ-qF\\\9s&qqqhZˈ#8qPxJJ nnn|@ݷƱcFUU5]2`Ξ=< 4h 6mڤ7Jcj:|<3~>sZx ***ppp_~\++Vr1,XV___&OliӦtRˋzK/_|QYwȑ#@+++dggg֭:udݍۿv`kk䔤y摜)..ٙPb|_]&IG)ի-o4Wփ>Xdj / hӦM /p~Jտn >w`3 s%0???ĉsUJgRSS5j(uY}my۶mݻ5`OSRRZz+JMMU\\f|}}դIjʣ>}Gz衇tjv2335k,uUf̘a+M6W^ԩV=֮]=z(::Zݻw/g6mS0wl߾]SO=Ud[ju }~~L&"##%IgϞՑ#G4x`UTI!!!חirss%]{SXy*77W_+]:[xY'sJr߯.]())ɶOZZƎ.][nz7m'ׯ$ږlOe7Ao͛7;,qY&MR~~>㏝wі-[^{ͮ *hƍz뭷~jժiĉھ}.^Uwڥ>@;qg̘gjZnN<ŋm6XB_~*TVdIܹS?uCgχ;kΟ?K.^zE=CZ}ݢOD! %iݭ?44TӧO׶m۴j*?^3g,wƼu)&&FQQQj޼֭[Wdg;+8wwe;1OxbmݺUs=͛7kѢEڲenVM>ݣz]pA3fиqc%$$e˖vEEENqqq֭f̘+W/j̙4iRcƌQN#Ghvۯ_%][eeeǧ~碴y3HQFiҤIj߾ɓ'bhZlb kΝڹsg݄IϕNe9`2 cccչsg(11QG.QyE2dUzu=cN6lBBBd6CI._ݻwk PXX}Qiҥ ׼yjn1*]Qx mڴIҵdӦM9r>;~Ȑ! VJmBrs$tv;ĨnݺQXX H.\DuUԵkWmڴUG箻su1bmz3ghȑv8pzܙL&ɓX, VÆ bQ~~Ӿ8?P7nԂ t͝;ԶOoZ1bFvX,ڹs@''|R*ug.rԶl`3 &O?)7oO~Ν;' P5j8=&,,sʕ<[( wHۓx9͚5Kƍ{vo{DD.\ kZU#aG8LWGIwGו+WTr"[j[o=JNgǻSbb}]:uJ999Z(2+g֭[K>͞=[[l[u}իW_cYYY+sZj9sV^A6lUŢb!!! $ծ][ ҄ 4nܸo_f,Ӌ 2L/_d̙35gSrt'Nd2Λ?ٳէOժUXhhɓ'9 ~vF>|xP͜"IGVݺu{xqE.j#EW `{5AϜ9# aÆI-,eff:RY$8sׯ/⩂Ν;@I&wGȑ#%ߧ~ۉY¼}+DuNG\=%-ߝSzuɓv9rf͚9,C\6[zzy7NwW_iEj{Uܗ: fY 8q>sMqD]\N2Eb 2mwIɱ}}a%%%ٮ=zT , Ǐו+W$^/±4[ڷo;w\ NS&I.'w쮻RHH&LiӦBN``:vh{(OJn E.g)ҙ}Ҩ z] ҥknڴN*IիsSTTzē 4eu]իk=1~x֭գG=zwf:~te˖s6lh7A FaFH6m… ]q%&&h+IDATՌٔ)SGyT+sP8wM:Uv[k siӦm۶veھ}w%Fw ~:uꔖ/_n[Gߗ^(s W}Z5k$p[u)UZBCCxbeeev+(,, @Of͚ٳe2ԧO;aÆtZPNNL&l:(-& -[T.]fkNjr+ᡡjڴ~EFF: fYpZ2\  j˖-۷ԩt_kNL&ܹS111TVM+A@iRjո8d9srҼys*;;>QQQo^v8{Zn͕p ׯ7iiAaaaŋV]tIVZy7it٣ݾO;ZlNɪ^lW_}Ulhƌm1c^|Eկ__teY,غu/_cǺl7uy{Ue2_hѢE0a$?VnnHú+ӊ+d2aL&k|=GPwﮐ?eʢUj)b庽v6mWKVZj{-uٵk:tֱ999rncAAApƍ+99ِa6բE o]m-[E&I&IAAA%_bFI&)55iW\/,???3FugwiӦ pk3yꥼqyng6ϻ:tPbbV[jʭ*U^ziԨQ:u>7|ڵkR76ol,k׮]=zf͚/{\VVFѣGkժUrZTF4g5lP~ڷoo[NΝ;e>_Δvˣo߾"N:e^]J~^5k*==]{m&???ݻx {イZ;w6lplK2d֯_'|R=$6lؠdOҵ0yyyW^{5կ_5AAAzkiru֒ÇR/37JW½Yvl\۶mwy( w߭~׶m[R۶mfIR@@m_t{]$m߾]?$… \gƍڳgFm[Sreھ`٦MOEUUll~udKCq}r ZG~+:v=zYfn{*??رcNJY8>>>߿߯'Nl6aÆںuk놿K5iҤDuk̙Դi֔+rvۚ7on[s!լY)))6ZVܹSQQQ.F믿$%%%QF.>_ΔgWwGqtO2*)ǫT=zx|܎;j*G4h[VTI={TBBƎ!Chٲe/dZ?O:tfϞ뮻+W*,,vW___M2E#h|mukܹ8q}vUPAVUv r,>k*((H#GtYٓ~3F)))լY3 <3c11O}r^uqFMoʤ,z)-= ŋzXx7|إ(>Ӽ](W էB/?\j7Bx:utС2{_!0!0!0!0!0!0!0!0XEIZxqyi4fʷrIENDB`modem-manager-gui-0.0.19.1/help/C/usage-sms.page000664 001750 001750 00000003575 13261703575 021060 0ustar00alexalex000000 000000 Use Modem Manager GUI for sending and receiving SMS. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

SMS

Most broadband modems able to send and receive SMS messages just like any mobile phone. You can use Modem Manager GUI if you want to send or read received SMS messages. Click on the SMS button in the toolbar.

As you can see, all messages are stored in three folders. You can find received messages in the Incoming folder, sent messages in the Sent folder and saved messages in the Drafts folder.

SMS window of Modem Manager GUI.

You can tweak messages sorting order and SMS special parameters using Preferences window.

Use New button to compose and send or save message, Remove button to remove selected message(s) and Answer button to answer selected message (if this message has valid number). Don't forget that you can select more than one message at once.

modem-manager-gui-0.0.19.1/src/ussd-page.h000664 001750 001750 00000004401 13261703575 020021 0ustar00alexalex000000 000000 /* * ussd-page.h * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __USSD_PAGE_H__ #define __USSD_PAGE_H__ #include #include "main.h" enum _mmgui_main_ussdlist_columns { MMGUI_MAIN_USSDLIST_COMMAND = 0, MMGUI_MAIN_USSDLIST_DESCRIPTION, MMGUI_MAIN_USSDLIST_COLUMNS }; //USSD void mmgui_main_ussd_command_add_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_ussd_command_remove_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_ussd_menu_update_callback(gchar *command, gchar *description, gboolean reencode, gpointer data); void mmgui_main_ussd_edit(mmgui_application_t mmguiapp); void mmgui_main_ussd_edit_button_clicked_signal(GtkEditable *editable, gpointer data); void mmgui_main_ussd_command_combobox_changed_signal(GObject *object, gpointer data); void mmgui_main_ussd_command_entry_changed_signal(GtkEditable *editable, gpointer data); void mmgui_main_ussd_command_entry_activated_signal(GtkEntry *entry, gpointer data); void mmgui_main_ussd_send_button_clicked_signal(GtkButton *button, gpointer data); void mmgui_main_ussd_request_send(mmgui_application_t mmguiapp); void mmgui_main_ussd_request_send_end(mmgui_application_t mmguiapp, mmguicore_t mmguicore, const gchar *answer); void mmgui_main_ussd_restore_settings_for_modem(mmgui_application_t mmguiapp); void mmgui_main_ussd_accelerators_init(mmgui_application_t mmguiapp); void mmgui_main_ussd_list_init(mmgui_application_t mmguiapp); void mmgui_main_ussd_state_clear(mmgui_application_t mmguiapp); #endif /* __USSD_PAGE_H__ */ modem-manager-gui-0.0.19.1/man/manhelper.py000775 001750 001750 00000001330 13261703575 020272 0ustar00alexalex000000 000000 #!/usr/bin/env python3 import sys, os, tempfile, uuid, gzip if len(sys.argv) != 3: print(sys.argv[0], '', '') srcfilename = os.path.abspath(sys.argv[1]) destfilename = os.path.abspath(sys.argv[2]) intfilename = os.path.join(tempfile.gettempdir(), str(uuid.uuid4())) reffilename = os.path.join(os.path.dirname(sys.argv[0]), 'modem-manager-gui.1') command = 'po4a-translate -f man -k 1 -m ' + reffilename + ' -p ' + srcfilename + ' -l ' + intfilename wexit = os.system(command) if (wexit == 0): with gzip.open(destfilename, 'wb') as destfile: with open(intfilename, 'r') as intfile: for line in intfile: destfile.write(line.encode('utf-8')) os.unlink(intfilename) sys.exit(wexit) modem-manager-gui-0.0.19.1/po/LINGUAS000664 001750 001750 00000000122 13261711347 016624 0ustar00alexalex000000 000000 ar bn_BD de es fr hu id it lt pl pl_PL pt_BR ru sk_SK tr uk uz@Cyrl uz@Latn zh_CN modem-manager-gui-0.0.19.1/resources/meson.build000664 001750 001750 00000001405 13261703575 021346 0ustar00alexalex000000 000000 datadir = join_paths([ get_option('prefix'), get_option('datadir'), 'modem-manager-gui' ]) pngiconsdir = join_paths([ get_option('prefix'), get_option('datadir'), 'icons', 'hicolor', '128x128', 'apps' ]) svgiconsdir = join_paths([ get_option('prefix'), get_option('datadir'), 'icons', 'hicolor', 'scalable', 'apps' ]) symiconsdir = join_paths([ get_option('prefix'), get_option('datadir'), 'icons', 'hicolor', 'symbolic', 'apps' ]) install_subdir('pixmaps', install_dir: datadir) install_subdir('sounds', install_dir: datadir) install_subdir('ui', install_dir: datadir) install_data('modem-manager-gui.png', install_dir: pngiconsdir) install_data('modem-manager-gui.svg', install_dir: svgiconsdir) install_data('modem-manager-gui-symbolic.svg', install_dir: symiconsdir) modem-manager-gui-0.0.19.1/man/bn/meson.build000664 001750 001750 00000000344 13261703575 020507 0ustar00alexalex000000 000000 custom_target('man-bn', input: 'bn.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'bn', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/src/notifications.h000664 001750 001750 00000007175 13261703575 021015 0ustar00alexalex000000 000000 /* * notifications.h * * Copyright 2013-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __MMGUINOTIFICATIONS_H__ #define __MMGUINOTIFICATIONS_H__ #include #include #include #include #include "libpaths.h" typedef enum { MMGUI_NOTIFICATIONS_URGENCY_LOW, MMGUI_NOTIFICATIONS_URGENCY_NORMAL, MMGUI_NOTIFICATIONS_URGENCY_CRITICAL, } NotificationsUrgency; typedef void (*NotifyActionCallback)(gpointer notification, gchar *action, gpointer userdata); /*libnotify function prototypes*/ typedef gboolean (*notify_init_func)(const gchar * app_name); typedef GList *(*notify_get_server_caps_func)(void); typedef gpointer (*notify_notification_new_func)(const char *summary, const char *body, const char *icon); typedef void (*notify_notification_set_timeout_func)(gpointer notification, gint timeout); typedef void (*notify_notification_set_hint_func)(gpointer notification, const char *key, GVariant *value); typedef void (*notify_notification_set_image_from_pixbuf_func)(gpointer notification, gpointer pixbuf); typedef void (*notify_notification_set_category_func)(gpointer notification, const char *category); typedef void (*notify_notification_set_urgency_func)(gpointer notification, NotificationsUrgency urgency); typedef void (*notify_notification_add_action_func)(gpointer notification, const gchar *action, const gchar *label, NotifyActionCallback callback, gpointer userdata, GFreeFunc freefunc); typedef void (*notify_notification_show_func)(gpointer notification, GError **error); enum _mmgui_notifications_sound { MMGUI_NOTIFICATIONS_SOUND_NONE = 0, MMGUI_NOTIFICATIONS_SOUND_INFO, MMGUI_NOTIFICATIONS_SOUND_MESSAGE }; struct _mmgui_notifications { /*Modules*/ GModule *notifymodule; /*libnotify functions*/ notify_init_func notify_init; notify_get_server_caps_func notify_get_server_caps; notify_notification_new_func notify_notification_new; notify_notification_set_timeout_func notify_notification_set_timeout; notify_notification_set_hint_func notify_notification_set_hint; notify_notification_set_image_from_pixbuf_func notify_notification_set_image_from_pixbuf; notify_notification_set_category_func notify_notification_set_category; notify_notification_set_urgency_func notify_notification_set_urgency; notify_notification_add_action_func notify_notification_add_action; notify_notification_show_func notify_notification_show; /*notifications action support*/ gboolean supportsaction; /*notifications icon*/ GdkPixbuf *notifyicon; }; typedef struct _mmgui_notifications *mmgui_notifications_t; mmgui_notifications_t mmgui_notifications_new(mmgui_libpaths_cache_t libcache, GdkPixbuf *icon); gboolean mmgui_notifications_show(mmgui_notifications_t notifications, gchar *caption, gchar *text, enum _mmgui_notifications_sound sound, NotifyActionCallback defcallback, gpointer userdata); void mmgui_notifications_close(mmgui_notifications_t notifications); #endif /* __MMGUI_NOTIFICATIONS_H__ */ modem-manager-gui-0.0.19.1/src/ussd-page.c000664 001750 001750 00000060251 13261703575 020021 0ustar00alexalex000000 000000 /* * ussd-page.c * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "modem-settings.h" #include "ussdlist.h" #include "mmguicore.h" #include "../resources.h" #include "ussd-page.h" #include "main.h" enum _mmgui_main_sms_completion { MMGUI_MAIN_USSD_COMPLETION_CAPTION = 0, MMGUI_MAIN_USSD_COMPLETION_NAME, MMGUI_MAIN_USSD_COMPLETION_COMMAND, MMGUI_MAIN_USSD_COMPLETION_COLUMNS }; static void mmgui_main_ussd_list_read_callback(gchar *command, gchar *description, gboolean reencode, gpointer data); static gboolean mmgui_main_ussd_list_add_command_to_xml_export_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static void mmgui_main_ussd_list_command_cell_edited_signal(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer data); static void mmgui_main_ussd_list_description_cell_edited_signal(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer data); /*USSD*/ void mmgui_main_ussd_command_add_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeIter iter; GtkTreeViewColumn *column; GtkTreePath *path; gchar *pathstr; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); if (model != NULL) { gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_USSDLIST_COMMAND, "*100#", MMGUI_MAIN_USSDLIST_DESCRIPTION, _("Sample command"), -1); pathstr = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter); path = gtk_tree_path_new_from_string(pathstr); column = gtk_tree_view_get_column(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), 0); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), path, 0, TRUE, 0.5, 0.0); gtk_tree_view_set_cursor(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), path, column, TRUE); gtk_tree_path_free(path); g_free(pathstr); } } void mmgui_main_ussd_command_remove_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); if ((model != NULL) && (selection != NULL)) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } } } void mmgui_main_ussd_menu_update_callback(gchar *command, gchar *description, gboolean reencode, gpointer data) { mmgui_application_t mmguiapp; gchar *caption; GtkTreeIter iter; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if ((command != NULL) && (description != NULL)) { /*Add USSD command to combo box*/ if (mmguicore_ussd_validate_request(command) == MMGUI_USSD_VALIDATION_REQUEST) { caption = g_strdup_printf("%s - %s", command, description); gtk_list_store_append(GTK_LIST_STORE(mmguiapp->window->ussdcompletionmodel), &iter); gtk_list_store_set(GTK_LIST_STORE(mmguiapp->window->ussdcompletionmodel), &iter, MMGUI_MAIN_USSD_COMPLETION_CAPTION, caption, MMGUI_MAIN_USSD_COMPLETION_NAME, description, MMGUI_MAIN_USSD_COMPLETION_COMMAND, command, -1); g_free(caption); } } else if (mmguiapp->core != NULL) { /*Set encoding flag for device*/ if (reencode) { mmguicore_ussd_set_encoding(mmguiapp->core, MMGUI_USSD_ENCODING_UCS2); } else { mmguicore_ussd_set_encoding(mmguiapp->core, MMGUI_USSD_ENCODING_GSM7); } } } static void mmgui_main_ussd_list_read_callback(gchar *command, gchar *description, gboolean reencode, gpointer data) { mmgui_application_data_t mmguiappdata; GtkTreeIter iter; mmguiappdata = (mmgui_application_data_t)data; if (mmguiappdata == NULL) return; if ((mmguiappdata->mmguiapp == NULL) || (mmguiappdata->data == NULL)) return; if ((command != NULL) && (description != NULL)) { if (mmguicore_ussd_validate_request(command) == MMGUI_USSD_VALIDATION_REQUEST) { gtk_list_store_append(GTK_LIST_STORE((GtkTreeModel *)(mmguiappdata->data)), &iter); gtk_list_store_set(GTK_LIST_STORE((GtkTreeModel *)(mmguiappdata->data)), &iter, MMGUI_MAIN_USSDLIST_COMMAND, command, MMGUI_MAIN_USSDLIST_DESCRIPTION, description, -1); } } /*else if (mmguicore_devices_get_current(mmguicore) != NULL) { if (reencode) { mmguicore_ussd_set_encoding(mmguicore, MMGUI_USSD_ENCODING_UCS2); } else { mmguicore_ussd_set_encoding(mmguicore, MMGUI_USSD_ENCODING_GSM7); } }*/ else { if (reencode) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiappdata->mmguiapp->window->ussdencodingtoolbutton), TRUE); } else { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiappdata->mmguiapp->window->ussdencodingtoolbutton), FALSE); } } } static gboolean mmgui_main_ussd_list_add_command_to_xml_export_foreach(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *command, *description; gtk_tree_model_get(model, iter, MMGUI_MAIN_USSDLIST_COMMAND, &command, MMGUI_MAIN_USSDLIST_DESCRIPTION, &description, -1); ussdlist_add_command_to_xml_export(command, description); return FALSE; } void mmgui_main_ussd_edit(mmgui_application_t mmguiapp) { struct _mmgui_application_data mmguiappdata; GtkTreeModel *model; /*gint response;*/ if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); mmguiappdata.mmguiapp = mmguiapp; mmguiappdata.data = model; if (model != NULL) { //Detach model g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); //Fill model if (!ussdlist_read_commands(mmgui_main_ussd_list_read_callback, mmguicore_devices_get_identifier(mmguiapp->core), mmguicore_devices_get_internal_identifier(mmguiapp->core), &mmguiappdata)) { /*Get current USSD encoding and set button state*/ if (mmguiapp->core != NULL) { if (mmguicore_ussd_get_encoding(mmguiapp->core) == MMGUI_USSD_ENCODING_GSM7) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->ussdencodingtoolbutton), FALSE); } else if (mmguicore_ussd_get_encoding(mmguiapp->core) == MMGUI_USSD_ENCODING_UCS2) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->ussdencodingtoolbutton), TRUE); } } } //Attach model gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), model); g_object_unref(model); /*response = */gtk_dialog_run(GTK_DIALOG(mmguiapp->window->ussdeditdialog)); if (mmguicore_devices_get_current(mmguiapp->core) != NULL) { //Write commands to XML file ussdlist_start_xml_export(gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->ussdencodingtoolbutton))); gtk_tree_model_foreach(model, mmgui_main_ussd_list_add_command_to_xml_export_foreach, NULL); ussdlist_end_xml_export(mmguicore_devices_get_identifier(mmguiapp->core)); //Update USSD menu gtk_list_store_clear(GTK_LIST_STORE(mmguiapp->window->ussdcompletionmodel)); ussdlist_read_commands(mmgui_main_ussd_menu_update_callback, mmguicore_devices_get_identifier(mmguiapp->core), mmguicore_devices_get_internal_identifier(mmguiapp->core), mmguiapp); //Update USSD reencoding flag if (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->ussdencodingtoolbutton))) { mmguicore_ussd_set_encoding(mmguiapp->core, MMGUI_USSD_ENCODING_UCS2); } else { mmguicore_ussd_set_encoding(mmguiapp->core, MMGUI_USSD_ENCODING_GSM7); } } gtk_widget_hide(mmguiapp->window->ussdeditdialog); } } void mmgui_main_ussd_edit_button_clicked_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_ussd_edit(mmguiapp); } void mmgui_main_ussd_command_combobox_changed_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; GtkTreeIter iter; const gchar *command; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(mmguiapp->window->ussdcombobox), &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->ussdcompletionmodel), &iter, MMGUI_MAIN_USSD_COMPLETION_COMMAND, &command, -1); if (command != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->ussdentry), command); g_free((gchar *)command); } } } void mmgui_main_ussd_command_entry_changed_signal(GtkEditable *editable, gpointer data) { const gchar *request; enum _mmgui_ussd_validation validationid; enum _mmgui_ussd_state sessionstate; mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; //Validate request request = gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->ussdentry)); validationid = mmguicore_ussd_validate_request((gchar *)request); if (validationid == MMGUI_USSD_VALIDATION_REQUEST) { //Simple request #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); gtk_widget_set_sensitive(mmguiapp->window->ussdsend, TRUE); } else if (validationid == MMGUI_USSD_VALIDATION_INVALID) { //Incorrect request #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CAPS_LOCK_WARNING); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, _("USSD request is not valid\nRequest must be 160 symbols long\nstarted with '*' and ended with '#'")); gtk_widget_set_sensitive(mmguiapp->window->ussdsend, FALSE); } else if (validationid == MMGUI_USSD_VALIDATION_RESPONSE) { //Response sessionstate = mmguicore_ussd_get_state(mmguiapp->core); if (sessionstate == MMGUI_USSD_STATE_USER_RESPONSE) { //Response expected #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, NULL); gtk_widget_set_sensitive(mmguiapp->window->ussdsend, TRUE); } else { //Response not expected #if GTK_CHECK_VERSION(3,10,0) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); #else gtk_entry_set_icon_from_stock(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CAPS_LOCK_WARNING); #endif gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(mmguiapp->window->ussdentry), GTK_ENTRY_ICON_SECONDARY, _("USSD request is not valid\nRequest must be 160 symbols long\nstarted with '*' and ended with '#'")); gtk_widget_set_sensitive(mmguiapp->window->ussdsend, FALSE); } } } void mmgui_main_ussd_command_entry_activated_signal(GtkEntry *entry, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_ussd_request_send(mmguiapp); } void mmgui_main_ussd_send_button_clicked_signal(GtkButton *button, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_ussd_request_send(mmguiapp); } static gboolean mmgui_main_ussd_entry_match_selected_signal(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, gpointer userdata) { mmgui_application_t mmguiapp; const gchar *command; mmguiapp = (mmgui_application_t)userdata; if (mmguiapp == NULL) return FALSE; gtk_tree_model_get(GTK_TREE_MODEL(mmguiapp->window->ussdcompletionmodel), iter, MMGUI_MAIN_USSD_COMPLETION_COMMAND, &command, -1); if (command != NULL) { gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->ussdentry), command); g_free((gchar *)command); return TRUE; } return FALSE; } void mmgui_main_ussd_request_send(mmgui_application_t mmguiapp) { gchar *request; enum _mmgui_ussd_validation validationid; enum _mmgui_ussd_state sessionstate; GtkTextBuffer *buffer; GtkTextIter startiter, enditer; GtkTextMark *position; gchar *statusmsg; if (mmguiapp == NULL) return; if (gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->ussdentry)) == 0) return; request = (gchar *)gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->ussdentry)); //Session state and request validation validationid = mmguicore_ussd_validate_request(request); sessionstate = mmguicore_ussd_get_state(mmguiapp->core); //Text view buffer buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->ussdtext)); if (validationid != MMGUI_USSD_VALIDATION_INVALID) { if (!((validationid == MMGUI_USSD_VALIDATION_RESPONSE) && (sessionstate != MMGUI_USSD_STATE_USER_RESPONSE))) { if (mmguicore_ussd_send(mmguiapp->core, request)) { if (validationid == MMGUI_USSD_VALIDATION_REQUEST) { /*save last request*/ mmgui_modem_settings_set_string(mmguiapp->modemsettings, "ussd_sent_request", request); /*clear text view*/ gtk_text_buffer_get_bounds(buffer, &startiter, &enditer); gtk_text_buffer_delete(buffer, &startiter, &enditer); /*add request text*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, request, -1, mmguiapp->window->ussdrequesttag, NULL); gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, "\n", -1, mmguiapp->window->ussdrequesttag, NULL); statusmsg = g_strdup_printf(_("Sending USSD request %s..."), request); } else { /*add response text*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, request, -1, mmguiapp->window->ussdrequesttag, NULL); gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, "\n", -1, mmguiapp->window->ussdrequesttag, NULL); statusmsg = g_strdup_printf(_("Sending USSD response %s..."), request); } /*scroll to the end of buffer*/ position = gtk_text_buffer_create_mark(buffer, "position", &enditer, FALSE); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(mmguiapp->window->ussdtext), position); gtk_text_buffer_delete_mark(buffer, position); //show progress dialog //mmgui_main_ui_progress_dialog_open(mmguiapp); mmgui_ui_infobar_show(mmguiapp, statusmsg, MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, NULL, NULL); g_free(statusmsg); } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error sending USSD"), _("Wrong USSD request or device not ready")); } } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error sending USSD"), _("USSD session terminated. You can send new request")); } } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error sending USSD"), _("Wrong USSD request")); } } void mmgui_main_ussd_request_send_end(mmgui_application_t mmguiapp, mmguicore_t mmguicore, const gchar *answer) { enum _mmgui_ussd_state sessionstate; GtkTextBuffer *buffer; GtkTextIter enditer; GtkTextMark *position; if ((mmguiapp == NULL) || (mmguicore == NULL)) return; sessionstate = mmguicore_ussd_get_state(mmguicore); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->ussdtext)); if (answer != NULL) { /*Add answer text*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, answer, -1, mmguiapp->window->ussdanswertag, NULL); if (sessionstate == MMGUI_USSD_STATE_USER_RESPONSE) { /*Add session hint*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, _("\nUSSD session is active. Waiting for your input...\n"), -1, mmguiapp->window->ussdhinttag, NULL); } else { /*Add new line symbol*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, "\n", -1, mmguiapp->window->ussdanswertag, NULL); } /*Scroll to the end of buffer*/ position = gtk_text_buffer_create_mark(buffer, "position", &enditer, FALSE); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(mmguiapp->window->ussdtext), position); gtk_text_buffer_delete_mark(buffer, position); } else { /*Add error hint*/ gtk_text_buffer_get_end_iter(buffer, &enditer); gtk_text_buffer_insert_with_tags(buffer, &enditer, _("\nNo answer received..."), -1, mmguiapp->window->ussdhinttag, NULL); /*Scroll to the end of buffer*/ position = gtk_text_buffer_create_mark(buffer, "position", &enditer, FALSE); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(mmguiapp->window->ussdtext), position); gtk_text_buffer_delete_mark(buffer, position); /*Show menubar with error message*/ mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, mmguicore_get_last_error(mmguiapp->core)); } } static void mmgui_main_ussd_list_command_cell_edited_signal(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (mmguicore_ussd_validate_request(new_text) == MMGUI_USSD_VALIDATION_REQUEST) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); if (gtk_tree_model_get_iter_from_string(model, &iter, path)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_USSDLIST_COMMAND, new_text, -1); } } } static void mmgui_main_ussd_list_description_cell_edited_signal(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer data) { GtkTreeIter iter; GtkTreeModel *model; mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; if (g_ascii_strcasecmp(new_text, "") != 0) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview)); if (gtk_tree_model_get_iter_from_string(model, &iter, path)) { gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_USSDLIST_DESCRIPTION, new_text, -1); } } } void mmgui_main_ussd_restore_settings_for_modem(mmgui_application_t mmguiapp) { gchar *request; if (mmguiapp == NULL) return; /*Saved USSD commands*/ ussdlist_read_commands(mmgui_main_ussd_menu_update_callback, mmguicore_devices_get_identifier(mmguiapp->core), mmguicore_devices_get_internal_identifier(mmguiapp->core), mmguiapp); /*Last USSD request*/ request = mmgui_modem_settings_get_string(mmguiapp->modemsettings, "ussd_sent_request", "*100#"); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->ussdentry), request); g_free(request); } void mmgui_main_ussd_accelerators_init(mmgui_application_t mmguiapp) { /*Accelerators*/ mmguiapp->window->ussdaccelgroup = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(mmguiapp->window->ussdeditdialog), mmguiapp->window->ussdaccelgroup); gtk_widget_add_accelerator(mmguiapp->window->newussdtoolbutton, "clicked", mmguiapp->window->ussdaccelgroup, GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator(mmguiapp->window->removeussdtoolbutton, "clicked", mmguiapp->window->ussdaccelgroup, GDK_KEY_d, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_widget_add_accelerator(mmguiapp->window->ussdencodingtoolbutton, "clicked", mmguiapp->window->ussdaccelgroup, GDK_KEY_e, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); } void mmgui_main_ussd_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; GtkTextBuffer *buffer; if (mmguiapp == NULL) return; /*List*/ renderer = gtk_cell_renderer_text_new(); g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL); column = gtk_tree_view_column_new_with_attributes(_("Command"), renderer, "text", MMGUI_MAIN_USSDLIST_COMMAND, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), column); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(mmgui_main_ussd_list_command_cell_edited_signal), mmguiapp); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "editable", TRUE, "editable-set", TRUE, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); column = gtk_tree_view_column_new_with_attributes(_("Description"), renderer, "text", MMGUI_MAIN_USSDLIST_DESCRIPTION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), column); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(mmgui_main_ussd_list_description_cell_edited_signal), mmguiapp); store = gtk_list_store_new(MMGUI_MAIN_USSDLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->ussdedittreeview), GTK_TREE_MODEL(store)); g_object_unref(store); /*Initialize textview tags*/ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->ussdtext)); mmguiapp->window->ussdrequesttag = gtk_text_buffer_create_tag(buffer, "request", "weight", PANGO_WEIGHT_BOLD, "indent", 5, "left_margin", 5, "right_margin", 5, NULL); mmguiapp->window->ussdhinttag = gtk_text_buffer_create_tag(buffer, "hint", "weight", PANGO_WEIGHT_NORMAL, "style", PANGO_STYLE_ITALIC, "scale", PANGO_SCALE_SMALL, "indent", 5, "left_margin", 5, "right_margin", 5, NULL); mmguiapp->window->ussdanswertag = gtk_text_buffer_create_tag(buffer, "answer", "weight", PANGO_WEIGHT_NORMAL, "indent", 5, "left_margin", 5, "right_margin", 5, NULL); /*Initialize combobox model*/ mmguiapp->window->ussdcompletionmodel = gtk_list_store_new(MMGUI_MAIN_USSD_COMPLETION_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_combo_box_set_model(GTK_COMBO_BOX(mmguiapp->window->ussdcombobox), GTK_TREE_MODEL(mmguiapp->window->ussdcompletionmodel)); gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(mmguiapp->window->ussdcombobox), MMGUI_MAIN_USSD_COMPLETION_CAPTION); /*Entry autocompletion*/ mmguiapp->window->ussdcompletion = gtk_entry_completion_new(); gtk_entry_completion_set_text_column(mmguiapp->window->ussdcompletion, MMGUI_MAIN_USSD_COMPLETION_NAME); gtk_entry_set_completion(GTK_ENTRY(mmguiapp->window->ussdentry), mmguiapp->window->ussdcompletion); gtk_entry_completion_set_model(mmguiapp->window->ussdcompletion, GTK_TREE_MODEL(mmguiapp->window->ussdcompletionmodel)); g_signal_connect(G_OBJECT(mmguiapp->window->ussdcompletion), "match-selected", G_CALLBACK(mmgui_main_ussd_entry_match_selected_signal), mmguiapp); } void mmgui_main_ussd_state_clear(mmgui_application_t mmguiapp) { GtkTextBuffer *buffer; GtkTextIter siter, eiter; if (mmguiapp == NULL) return; /*Clear USSD menu*/ gtk_list_store_clear(GTK_LIST_STORE(mmguiapp->window->ussdcompletionmodel)); /*Clear USSD text field*/ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(mmguiapp->window->ussdtext)); if (buffer != NULL) { gtk_text_buffer_get_bounds(buffer, &siter, &eiter); gtk_text_buffer_delete(buffer, &siter, &eiter); } } modem-manager-gui-0.0.19.1/appdata/lt.po000664 001750 001750 00000005774 13261703575 017600 0ustar00alexalex000000 000000 # # Translators: # Mantas Kriaučiūnas , 2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Lithuanian (http://www.transifex.com/ethereal/modem-manager-gui/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Stebėti siunčiamų duomenų kiekį, statistiką bei nustatyti apribojimus" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/src/modules/mm07.c000664 001750 001750 00000336157 13261703575 020374 0ustar00alexalex000000 000000 /* * mm07.c * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "../mmguicore.h" #include "../smsdb.h" #include "../encoding.h" #include "../dbus-utils.h" #define MMGUI_MODULE_SERVICE_NAME "org.freedesktop.ModemManager1" #define MMGUI_MODULE_SYSTEMD_NAME "ModemManager.service" #define MMGUI_MODULE_IDENTIFIER 70 #define MMGUI_MODULE_DESCRIPTION "Modem Manager >= 0.7.0" #define MMGUI_MODULE_COMPATIBILITY "org.freedesktop.NetworkManager;/usr/sbin/pppd;" #define MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT 20000 #define MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT 35000 #define MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT 25000 #define MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT 60000 #define MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT 20000 /*Internal enumerations*/ /*Modem state internal flags*/ typedef enum { MODULE_INT_MODEM_STATE_FAILED = -1, MODULE_INT_MODEM_STATE_UNKNOWN = 0, MODULE_INT_MODEM_STATE_INITIALIZING = 1, MODULE_INT_MODEM_STATE_LOCKED = 2, MODULE_INT_MODEM_STATE_DISABLED = 3, MODULE_INT_MODEM_STATE_DISABLING = 4, MODULE_INT_MODEM_STATE_ENABLING = 5, MODULE_INT_MODEM_STATE_ENABLED = 6, MODULE_INT_MODEM_STATE_SEARCHING = 7, MODULE_INT_MODEM_STATE_REGISTERED = 8, MODULE_INT_MODEM_STATE_DISCONNECTING = 9, MODULE_INT_MODEM_STATE_CONNECTING = 10, MODULE_INT_MODEM_STATE_CONNECTED = 11 } ModuleIntModemState; /*Modem lock flags*/ typedef enum { MODULE_INT_MODEM_LOCK_UNKNOWN = 0, MODULE_INT_MODEM_LOCK_NONE = 1, MODULE_INT_MODEM_LOCK_SIM_PIN = 2, MODULE_INT_MODEM_LOCK_SIM_PIN2 = 3, MODULE_INT_MODEM_LOCK_SIM_PUK = 4, MODULE_INT_MODEM_LOCK_SIM_PUK2 = 5, MODULE_INT_MODEM_LOCK_PH_SP_PIN = 6, MODULE_INT_MODEM_LOCK_PH_SP_PUK = 7, MODULE_INT_MODEM_LOCK_PH_NET_PIN = 8, MODULE_INT_MODEM_LOCK_PH_NET_PUK = 9, MODULE_INT_MODEM_LOCK_PH_SIM_PIN = 10, MODULE_INT_MODEM_LOCK_PH_CORP_PIN = 11, MODULE_INT_MODEM_LOCK_PH_CORP_PUK = 12, MODULE_INT_MODEM_LOCK_PH_FSIM_PIN = 13, MODULE_INT_MODEM_LOCK_PH_FSIM_PUK = 14, MODULE_INT_MODEM_LOCK_PH_NETSUB_PIN = 15, MODULE_INT_MODEM_LOCK_PH_NETSUB_PUK = 16 } ModuleIntModemLock; /*Modem capability internal flags*/ typedef enum { MODULE_INT_MODEM_CAPABILITY_NONE = 0, MODULE_INT_MODEM_CAPABILITY_POTS = 1 << 0, MODULE_INT_MODEM_CAPABILITY_CDMA_EVDO = 1 << 1, MODULE_INT_MODEM_CAPABILITY_GSM_UMTS = 1 << 2, MODULE_INT_MODEM_CAPABILITY_LTE = 1 << 3, MODULE_INT_MODEM_CAPABILITY_LTE_ADVANCED = 1 << 4, MODULE_INT_MODEM_CAPABILITY_IRIDIUM = 1 << 5, } ModuleIntModemCapability; /*Modem registration internal flags*/ typedef enum { MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_IDLE = 0, MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_HOME = 1, MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_SEARCHING = 2, MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_DENIED = 3, MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN = 4, MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_ROAMING = 5, } ModuleIntModem3gppRegistrationState; /*CDMA modem registration internal flags*/ typedef enum { MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN = 0, MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_REGISTERED = 1, MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_HOME = 2, MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_ROAMING = 3, } ModuleIntModemCdmaRegistrationState; /*Modem USSD state internal flags*/ typedef enum { MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_UNKNOWN = 0, MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_IDLE = 1, MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_ACTIVE = 2, MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_USER_RESPONSE = 3, } ModuleIntModem3gppUssdSessionState; /*Modem network availability internal flags*/ typedef enum { MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_UNKNOWN = 0, MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE = 1, MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_CURRENT = 2, MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_FORBIDDEN = 3, } ModuleIntModem3gppNetworkAvailability; /*Modem acess technology internal flags*/ typedef enum { MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UNKNOWN = 0, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_POTS = 1 << 0, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM = 1 << 1, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM_COMPACT = 1 << 2, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GPRS = 1 << 3, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EDGE = 1 << 4, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UMTS = 1 << 5, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSDPA = 1 << 6, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSUPA = 1 << 7, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA = 1 << 8, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS = 1 << 9, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_1XRTT = 1 << 10, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDO0 = 1 << 11, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOA = 1 << 12, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOB = 1 << 13, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_LTE = 1 << 14, MODULE_INT_MODEM_ACCESS_TECHNOLOGY_ANY = 0xFFFFFFFF, } ModuleIntModemAccessTechnology; /*Location types internal flags*/ typedef enum { MODULE_INT_MODEM_LOCATION_SOURCE_NONE = 0, MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI = 1 << 0, MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW = 1 << 1, MODULE_INT_MODEM_LOCATION_SOURCE_GPS_NMEA = 1 << 2, } ModuleIntModemLocationSource; /*SMS message state internal flags*/ typedef enum { MODULE_INT_SMS_STATE_UNKNOWN = 0, MODULE_INT_SMS_STATE_STORED = 1, MODULE_INT_SMS_STATE_RECEIVING = 2, MODULE_INT_SMS_STATE_RECEIVED = 3, MODULE_INT_SMS_STATE_SENDING = 4, MODULE_INT_SMS_STATE_SENT = 5, } ModuleIntSmsState; /*SMS message internal type*/ typedef enum { MODULE_INT_PDU_TYPE_UNKNOWN = 0, MODULE_INT_PDU_TYPE_DELIVER = 1, MODULE_INT_PDU_TYPE_SUBMIT = 2, MODULE_INT_PDU_TYPE_STATUS_REPORT = 3 } ModuleIntSmsPduType; /*SMS validity internal types*/ typedef enum { MODULE_INT_SMS_VALIDITY_TYPE_UNKNOWN = 0, MODULE_INT_SMS_VALIDITY_TYPE_RELATIVE = 1, MODULE_INT_SMS_VALIDITY_TYPE_ABSOLUTE = 2, MODULE_INT_SMS_VALIDITY_TYPE_ENHANCED = 3, } ModuleIntSmsValidityType; /*Private module variables*/ struct _mmguimoduledata { //DBus connection GDBusConnection *connection; //DBus proxy objects GDBusObjectManager *objectmanager; GDBusProxy *cardproxy; GDBusProxy *netproxy; GDBusProxy *modemproxy; GDBusProxy *smsproxy; GDBusProxy *ussdproxy; GDBusProxy *locationproxy; GDBusProxy *timeproxy; GDBusProxy *contactsproxy; GDBusProxy *signalproxy; //Attached signal handlers gulong netpropsignal; gulong statesignal; gulong modempropsignal; gulong smssignal; gulong locationpropsignal; gulong timesignal; //Partial SMS messages GList *partialsms; //USSD reencoding flag gboolean reencodeussd; /*Location enablement flag*/ gboolean locationenabled; //Last error message gchar *errormessage; //Cancellable GCancellable *cancellable; //Operations timeouts guint timeouts[MMGUI_DEVICE_OPERATIONS]; }; typedef struct _mmguimoduledata *moduledata_t; static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error); static void mmgui_module_custom_error_message(mmguicore_t mmguicore, gchar *message); static guint mmgui_module_get_object_path_index(const gchar *objectpath); static gint mmgui_module_gsm_operator_code(const gchar *opcodestr); static void mmgui_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static void mmgui_property_change_handler(GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, gpointer data); static void mmgui_objectmanager_added_signal_handler(GDBusObjectManager *manager, GDBusObject *object, gpointer user_data); static void mmgui_objectmanager_removed_signal_handler(GDBusObjectManager *manager, GDBusObject *object, gpointer user_data); static gboolean mmgui_module_device_enabled_from_state(gint state); static gboolean mmgui_module_device_locked_from_state(gint state); static gboolean mmgui_module_device_connected_from_state(gint state); static gboolean mmgui_module_device_registered_from_state(gint state); static gboolean mmgui_module_device_prepared_from_state(gint state); static enum _mmgui_device_types mmgui_module_device_type_from_caps(gint caps); static enum _mmgui_reg_status mmgui_module_registration_status_translate(guint status); static enum _mmgui_reg_status mmgui_module_cdma_registration_status_translate(guint status); static enum _mmgui_network_availability mmgui_module_network_availability_status_translate(guint status); static enum _mmgui_access_tech mmgui_module_access_technology_translate(guint technology); static enum _mmgui_device_modes mmgui_module_access_mode_translate(guint mode); static gboolean mmgui_module_devices_update_device_mode(gpointer mmguicore, gint oldstate, gint newstate, guint changereason); static gboolean mmgui_module_devices_update_location(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_devices_enable_location(gpointer mmguicore, mmguidevice_t device, gboolean enable); static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath); static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, const gchar *smspath); static gint mmgui_module_sms_get_id(mmguicore_t mmguicore, const gchar *smspath); static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error) { moduledata_t moduledata; if ((mmguicore == NULL) || (error == NULL)) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (error->message != NULL) { moduledata->errormessage = g_strdup(error->message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static void mmgui_module_custom_error_message(mmguicore_t mmguicore, gchar *message) { moduledata_t moduledata; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (message != NULL) { moduledata->errormessage = g_strdup(message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static guint mmgui_module_get_object_path_index(const gchar *objectpath) { guint id; gchar *objectpathid; objectpathid = strrchr(objectpath, '/') + 1; if ((objectpathid != NULL) && (objectpathid[0] != '\0')) { id = atoi(objectpathid); } else { id = 0; } return id; } static gint mmgui_module_gsm_operator_code(const gchar *opcodestr) { gsize length; gchar codepartbuf[4]; gint operatorcode; gchar *decopcodestr; gsize decopcodelen; if (opcodestr == NULL) return 0; length = strlen(opcodestr); operatorcode = 0; decopcodestr = NULL; decopcodelen = 0; if ((length == 5) || (length == 6)) { /*UTF-8 operator code*/ decopcodestr = g_strdup(opcodestr); decopcodelen = length; } else if ((length == 20) || (length == 24)) { /*UCS-2 operator code*/ decopcodestr = (gchar *)ucs2_to_utf8((const guchar *)opcodestr, length, &decopcodelen); if ((decopcodelen != 5) && (decopcodelen != 6)) { if (decopcodestr != NULL) { g_free(decopcodestr); } return operatorcode; } } else { /*Unknown format*/ return operatorcode; } /*MCC*/ memset(codepartbuf, 0, sizeof(codepartbuf)); memcpy(codepartbuf, decopcodestr, 3); operatorcode |= (atoi(codepartbuf) & 0x0000ffff) << 16; /*MNC*/ memset(codepartbuf, 0, sizeof(codepartbuf)); memcpy(codepartbuf, decopcodestr + 3, decopcodelen - 3); operatorcode |= atoi(codepartbuf) & 0x0000ffff; g_free(decopcodestr); return operatorcode; } static void mmgui_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; gchar *statusstr; gboolean statusflag; gint oldstate, newstate; guint changereason; if (data == NULL) return; mmguicore = (mmguicore_t)data; moduledata = (moduledata_t)mmguicore->moduledata; if (g_str_equal(signal_name, "Added")) { g_variant_get(parameters, "(ob)", &statusstr, &statusflag); if (statusflag) { /*Message received from network*/ moduledata->partialsms = g_list_prepend(moduledata->partialsms, g_strdup(statusstr)); } } else if (g_str_equal(signal_name, "StateChanged")) { g_variant_get(parameters, "(iiu)", &oldstate, &newstate, &changereason); /*Send signals if needed*/ mmgui_module_devices_update_device_mode(mmguicore, oldstate, newstate, changereason); } g_debug("SIGNAL: %s (%s) argtype: %s\n", signal_name, sender_name, g_variant_get_type_string(parameters)); } static void mmgui_property_change_handler(GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, gpointer data) { mmguicore_t mmguicore; mmguidevice_t device; GVariantIter *iter; /*GVariant *item;*/ const gchar *key; GVariant *value; guint statevalue; gboolean stateflag; if ((changed_properties == NULL) || (data == NULL)) return; mmguicore = (mmguicore_t)data; if (mmguicore->device == NULL) return; device = mmguicore->device; if (g_variant_n_children(changed_properties) > 0) { g_variant_get(changed_properties, "a{sv}", &iter); while (g_variant_iter_loop(iter, "{&sv}", &key, &value)) { if (g_str_equal(key, "SignalQuality")) { g_variant_get(value, "(ub)", &statevalue, &stateflag); if (statevalue != device->siglevel) { device->siglevel = statevalue; if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_SIGNAL_LEVEL_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(key, "AccessTechnologies")) { statevalue = mmgui_module_access_mode_translate(g_variant_get_uint32(value)); if (statevalue != device->mode) { device->mode = statevalue; if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_MODE_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(key, "Location")) { if (mmgui_module_devices_update_location(mmguicore, mmguicore->device)) { if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } } g_debug("Property changed: %s\n", key); } g_variant_iter_free(iter); } } static void mmgui_objectmanager_added_signal_handler(GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { mmguicore_t mmguicore; const gchar *devpath; mmguidevice_t device; if ((user_data == NULL) || (object == NULL)) return; mmguicore = (mmguicore_t)user_data; if (mmguicore->eventcb != NULL) { devpath = g_dbus_object_get_object_path(object); g_debug("Device added: %s\n", devpath); if (devpath != NULL) { device = mmgui_module_device_new(mmguicore, devpath); (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_ADDED, mmguicore, device); } } } static void mmgui_objectmanager_removed_signal_handler(GDBusObjectManager *manager, GDBusObject *object, gpointer user_data) { mmguicore_t mmguicore; const gchar *devpath; guint id; if ((user_data == NULL) || (object == NULL)) return; mmguicore = (mmguicore_t)user_data; if (mmguicore->eventcb != NULL) { devpath = g_dbus_object_get_object_path(object); g_debug("Device removed: %s\n", devpath); if (devpath != NULL) { id = mmgui_module_get_object_path_index(devpath); (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_REMOVED, mmguicore, GUINT_TO_POINTER(id)); } } } static gboolean mmgui_module_device_enabled_from_state(gint state) { gboolean enabled; switch (state) { case MODULE_INT_MODEM_STATE_FAILED: case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_INITIALIZING: case MODULE_INT_MODEM_STATE_LOCKED: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: enabled = FALSE; break; case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: enabled = TRUE; break; default: enabled = FALSE; break; } return enabled; } static gboolean mmgui_module_device_locked_from_state(gint state) { gboolean locked; switch (state) { case MODULE_INT_MODEM_STATE_FAILED: case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_INITIALIZING: locked = FALSE; break; case MODULE_INT_MODEM_STATE_LOCKED: locked = TRUE; break; case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: locked = FALSE; break; default: locked = FALSE; break; } return locked; } static gboolean mmgui_module_device_connected_from_state(gint state) { gboolean connected; switch (state) { case MODULE_INT_MODEM_STATE_FAILED: case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_INITIALIZING: case MODULE_INT_MODEM_STATE_LOCKED: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: connected = FALSE; break; case MODULE_INT_MODEM_STATE_DISCONNECTING: connected = TRUE; break; case MODULE_INT_MODEM_STATE_CONNECTING: connected = FALSE; break; case MODULE_INT_MODEM_STATE_CONNECTED: connected = TRUE; break; default: connected = FALSE; break; } return connected; } static gboolean mmgui_module_device_registered_from_state(gint state) { gboolean registered; switch (state) { case MODULE_INT_MODEM_STATE_FAILED: case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_INITIALIZING: case MODULE_INT_MODEM_STATE_LOCKED: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: registered = FALSE; break; case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: registered = TRUE; break; default: registered = FALSE; break; } return registered; } static gboolean mmgui_module_device_prepared_from_state(gint state) { gboolean prepared; switch (state) { case MODULE_INT_MODEM_STATE_FAILED: case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_INITIALIZING: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: prepared = FALSE; break; case MODULE_INT_MODEM_STATE_LOCKED: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: prepared = TRUE; break; default: prepared = FALSE; break; } return prepared; } static enum _mmgui_device_types mmgui_module_device_type_from_caps(gint caps) { enum _mmgui_device_types type; switch (caps) { case MODULE_INT_MODEM_CAPABILITY_NONE: case MODULE_INT_MODEM_CAPABILITY_POTS: type = MMGUI_DEVICE_TYPE_GSM; break; case MODULE_INT_MODEM_CAPABILITY_CDMA_EVDO: type = MMGUI_DEVICE_TYPE_CDMA; break; case MODULE_INT_MODEM_CAPABILITY_GSM_UMTS: case MODULE_INT_MODEM_CAPABILITY_LTE: case MODULE_INT_MODEM_CAPABILITY_LTE_ADVANCED: case MODULE_INT_MODEM_CAPABILITY_IRIDIUM: type = MMGUI_DEVICE_TYPE_GSM; break; default: type = MMGUI_DEVICE_TYPE_GSM; break; } return type; } static enum _mmgui_reg_status mmgui_module_registration_status_translate(guint status) { enum _mmgui_reg_status tstatus; switch (status) { case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_IDLE: tstatus = MMGUI_REG_STATUS_IDLE; break; case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_HOME: tstatus = MMGUI_REG_STATUS_HOME; break; case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_SEARCHING: tstatus = MMGUI_REG_STATUS_SEARCHING; break; case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_DENIED: tstatus = MMGUI_REG_STATUS_DENIED; break; case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_UNKNOWN: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; case MODULE_INT_MODEM_3GPP_REGISTRATION_STATE_ROAMING: tstatus = MMGUI_REG_STATUS_ROAMING; break; default: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; } return tstatus; } static enum _mmgui_reg_status mmgui_module_cdma_registration_status_translate(guint status) { enum _mmgui_reg_status tstatus; switch (status) { case MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; case MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_REGISTERED: tstatus = MMGUI_REG_STATUS_IDLE; break; case MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_HOME: tstatus = MMGUI_REG_STATUS_HOME; break; case MODULE_INT_MODEM_CDMA_REGISTRATION_STATE_ROAMING: tstatus = MMGUI_REG_STATUS_ROAMING; break; default: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; } return tstatus; } static enum _mmgui_network_availability mmgui_module_network_availability_status_translate(guint status) { guint tstatus; switch (status) { case MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_UNKNOWN: tstatus = MMGUI_NA_UNKNOWN; break; case MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_AVAILABLE: tstatus = MMGUI_NA_AVAILABLE; break; case MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_CURRENT: tstatus = MMGUI_NA_CURRENT; break; case MODULE_INT_MODEM_3GPP_NETWORK_AVAILABILITY_FORBIDDEN: tstatus = MMGUI_NA_FORBIDDEN; break; default: tstatus = MMGUI_NA_UNKNOWN; break; } return tstatus; } static enum _mmgui_access_tech mmgui_module_access_technology_translate(guint technology) { enum _mmgui_access_tech ttechnology; switch (technology) { case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UNKNOWN: ttechnology = MMGUI_ACCESS_TECH_UNKNOWN; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_POTS: ttechnology = MMGUI_ACCESS_TECH_UNKNOWN; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM: ttechnology = MMGUI_ACCESS_TECH_GSM; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM_COMPACT: ttechnology = MMGUI_ACCESS_TECH_GSM_COMPACT; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GPRS: ttechnology = MMGUI_ACCESS_TECH_EDGE; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EDGE: ttechnology = MMGUI_ACCESS_TECH_EDGE; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UMTS: ttechnology = MMGUI_ACCESS_TECH_UMTS; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSDPA: ttechnology = MMGUI_ACCESS_TECH_HSDPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSUPA: ttechnology = MMGUI_ACCESS_TECH_HSUPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA: ttechnology = MMGUI_ACCESS_TECH_HSPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS: ttechnology = MMGUI_ACCESS_TECH_HSPA_PLUS; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_1XRTT: ttechnology = MMGUI_ACCESS_TECH_1XRTT; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDO0: ttechnology = MMGUI_ACCESS_TECH_EVDO0; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOA: ttechnology = MMGUI_ACCESS_TECH_EVDOA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOB: ttechnology = MMGUI_ACCESS_TECH_EVDOB; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_LTE: ttechnology = MMGUI_ACCESS_TECH_LTE; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_ANY: ttechnology = MMGUI_ACCESS_TECH_UNKNOWN; break; default: ttechnology = MMGUI_ACCESS_TECH_UNKNOWN; break; } return ttechnology; } static enum _mmgui_device_modes mmgui_module_access_mode_translate(guint mode) { enum _mmgui_device_modes tmode; switch (mode) { case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UNKNOWN: tmode = MMGUI_DEVICE_MODE_UNKNOWN; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_POTS: tmode = MMGUI_DEVICE_MODE_UNKNOWN; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM: tmode = MMGUI_DEVICE_MODE_GSM; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GSM_COMPACT: tmode = MMGUI_DEVICE_MODE_GSM_COMPACT; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_GPRS: tmode = MMGUI_DEVICE_MODE_GPRS; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EDGE: tmode = MMGUI_DEVICE_MODE_EDGE; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_UMTS: tmode = MMGUI_DEVICE_MODE_UMTS; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSDPA: tmode = MMGUI_DEVICE_MODE_HSDPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSUPA: tmode = MMGUI_DEVICE_MODE_HSUPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA: tmode = MMGUI_DEVICE_MODE_HSPA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS: tmode = MMGUI_DEVICE_MODE_HSPA_PLUS; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_1XRTT: tmode = MMGUI_DEVICE_MODE_1XRTT; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDO0: tmode = MMGUI_DEVICE_MODE_EVDO0; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOA: tmode = MMGUI_DEVICE_MODE_EVDOA; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_EVDOB: tmode = MMGUI_DEVICE_MODE_EVDOB; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_LTE: tmode = MMGUI_DEVICE_MODE_LTE; break; case MODULE_INT_MODEM_ACCESS_TECHNOLOGY_ANY: tmode = MMGUI_DEVICE_MODE_UNKNOWN; break; default: tmode = MMGUI_DEVICE_MODE_UNKNOWN; break; } return tmode; } static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath) { mmguidevice_t device; moduledata_t moduledata; GDBusProxy *deviceproxy; GError *error; GVariant *deviceinfo; gsize strsize; guint statevalue; gchar *blockstr; if ((mmguicore == NULL) || (devpath == NULL)) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata->connection == NULL) return NULL; device = g_new0(struct _mmguidevice, 1); device->id = mmgui_module_get_object_path_index(devpath); device->objectpath = g_strdup(devpath); device->operation = MMGUI_DEVICE_OPERATION_IDLE; /*Zero values we can't get this moment*/ /*SMS*/ device->smscaps = MMGUI_SMS_CAPS_NONE; device->smsdb = NULL; /*Networks*/ /*Info*/ device->manufacturer = NULL; device->model = NULL; device->version = NULL; device->operatorname = NULL; device->operatorcode = 0; device->imei = NULL; device->imsi = NULL; device->port = NULL; device->internalid = NULL; device->persistentid = NULL; device->sysfspath = NULL; /*USSD*/ device->ussdcaps = MMGUI_USSD_CAPS_NONE; device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; /*Location*/ device->locationcaps = MMGUI_LOCATION_CAPS_NONE; memset(device->loc3gppdata, 0, sizeof(device->loc3gppdata)); memset(device->locgpsdata, 0, sizeof(device->locgpsdata)); /*Scan*/ device->scancaps = MMGUI_SCAN_CAPS_NONE; /*Traffic*/ device->rxbytes = 0; device->txbytes = 0; device->sessiontime = 0; device->speedchecktime = 0; device->smschecktime = 0; device->speedindex = 0; device->connected = FALSE; memset(device->speedvalues, 0, sizeof(device->speedvalues)); memset(device->interface, 0, sizeof(device->interface)); /*Contacts*/ device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; device->contactslist = NULL; error = NULL; deviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", devpath, "org.freedesktop.ModemManager1.Modem", NULL, &error); if ((deviceproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); /*Fill default values*/ device->manufacturer = g_strdup(_("Unknown")); device->model = g_strdup(_("Unknown")); device->version = g_strdup(_("Unknown")); device->port = g_strdup(_("Unknown")); device->type = MMGUI_DEVICE_TYPE_GSM; return device; } /*Device manufacturer*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Manufacturer"); if (deviceinfo != NULL) { strsize = 256; device->manufacturer = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->manufacturer = g_strdup(_("Unknown")); } /*Device model*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Model"); if (deviceinfo != NULL) { strsize = 256; device->model = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->model = g_strdup(_("Unknown")); } /*Device revision*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Revision"); if (deviceinfo != NULL) { strsize = 256; device->version = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->version = g_strdup(_("Unknown")); } /*Device port*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "PrimaryPort"); if (deviceinfo != NULL) { strsize = 256; device->port = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->port = g_strdup(""); } /*Need to get usb device serial for fallback traffic monitoring*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Device"); if (deviceinfo != NULL) { strsize = 256; device->sysfspath = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->sysfspath = g_strdup(""); } /*Device type (version 0.7.990 property)*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "ModemCapabilities"); if (deviceinfo != NULL) { statevalue = g_variant_get_uint32(deviceinfo); device->type = mmgui_module_device_type_from_caps(statevalue); g_variant_unref(deviceinfo); } else { /*Device type (version 0.7.991 property)*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "CurrentCapabilities"); if (deviceinfo != NULL) { statevalue = g_variant_get_uint32(deviceinfo); device->type = mmgui_module_device_type_from_caps(statevalue); g_variant_unref(deviceinfo); } else { device->type = MODULE_INT_MODEM_CAPABILITY_GSM_UMTS; } } /*Is device enabled, blocked and registered*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "State"); if (deviceinfo != NULL) { statevalue = g_variant_get_int32(deviceinfo); device->enabled = mmgui_module_device_enabled_from_state(statevalue); device->blocked = mmgui_module_device_locked_from_state(statevalue); device->registered = mmgui_module_device_registered_from_state(statevalue); device->prepared = mmgui_module_device_prepared_from_state(statevalue); g_variant_unref(deviceinfo); } else { device->enabled = TRUE; device->blocked = FALSE; device->registered = TRUE; device->prepared = TRUE; } /*What type of lock it is*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "UnlockRequired"); if (deviceinfo != NULL) { switch (g_variant_get_uint32(deviceinfo)) { case MODULE_INT_MODEM_LOCK_NONE: device->locktype = MMGUI_LOCK_TYPE_NONE; break; case MODULE_INT_MODEM_LOCK_SIM_PIN: device->locktype = MMGUI_LOCK_TYPE_PIN; break; case MODULE_INT_MODEM_LOCK_SIM_PUK: device->locktype = MMGUI_LOCK_TYPE_PUK; break; default: device->locktype = MMGUI_LOCK_TYPE_OTHER; break; } g_variant_unref(deviceinfo); } else { device->locktype = MMGUI_LOCK_TYPE_OTHER; } /*Internal Modem Manager identifier*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "DeviceIdentifier"); if (deviceinfo != NULL) { strsize = 256; device->internalid = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->internalid = NULL; } /*Persistent device identifier*/ blockstr = g_strdup_printf("%s_%s_%s", device->manufacturer, device->model, device->version); device->persistentid = g_compute_checksum_for_string(G_CHECKSUM_MD5, (const gchar *)blockstr, -1); g_free(blockstr); g_object_unref(deviceproxy); return device; } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_MODEM_MANAGER; module->requirement = MMGUI_MODULE_REQUIREMENT_SERVICE; module->priority = MMGUI_MODULE_PRIORITY_NORMAL; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC | MMGUI_MODULE_FUNCTION_POLKIT_PROTECTION; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t *)&mmguicorelc->moduledata; (*moduledata) = g_new0(struct _mmguimoduledata, 1); error = NULL; (*moduledata)->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); (*moduledata)->errormessage = NULL; if (((*moduledata)->connection == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(mmguicorelc->moduledata); return FALSE; } error = NULL; (*moduledata)->objectmanager = g_dbus_object_manager_client_new_sync((*moduledata)->connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, "org.freedesktop.ModemManager1", "/org/freedesktop/ModemManager1", NULL, NULL, NULL, NULL, &error); g_signal_connect(G_OBJECT((*moduledata)->objectmanager), "object-added", G_CALLBACK(mmgui_objectmanager_added_signal_handler), mmguicore); g_signal_connect(G_OBJECT((*moduledata)->objectmanager), "object-removed", G_CALLBACK(mmgui_objectmanager_removed_signal_handler), mmguicore); if (((*moduledata)->objectmanager == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->moduledata); return FALSE; } /*Cancellable*/ (*moduledata)->cancellable = g_cancellable_new(); /*Operations timeouts*/ (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_ENABLE] = MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS] = MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD] = MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SCAN] = MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK] = MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT; return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; /*GError *error;*/ if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); //Close device //Stop subsystems if (moduledata != NULL) { if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (moduledata->cancellable != NULL) { g_object_unref(moduledata->cancellable); moduledata->cancellable = NULL; } if (moduledata->objectmanager != NULL) { g_object_unref(moduledata->objectmanager); moduledata->objectmanager = NULL; } if (moduledata->connection != NULL) { g_object_unref(moduledata->connection); moduledata->connection = NULL; } g_free(moduledata); } return TRUE; } G_MODULE_EXPORT gchar *mmgui_module_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); return moduledata->errormessage; } G_MODULE_EXPORT gboolean mmgui_module_interrupt_operation(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (device->operation == MMGUI_DEVICE_OPERATION_IDLE) return FALSE; if (moduledata->cancellable != NULL) { g_cancellable_cancel(moduledata->cancellable); return TRUE; } else { return FALSE; } } G_MODULE_EXPORT gboolean mmgui_module_set_timeout(gpointer mmguicore, guint operation, guint timeout) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (timeout < 1000) timeout *= 1000; if (operation < MMGUI_DEVICE_OPERATIONS) { moduledata->timeouts[operation] = timeout; return TRUE; } else { return FALSE; } } G_MODULE_EXPORT guint mmgui_module_devices_enum(gpointer mmguicore, GSList **devicelist) { mmguicore_t mmguicorelc; moduledata_t moduledata; guint devnum; GList *objects, *object; const gchar *devpath; if ((mmguicore == NULL) || (devicelist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; devnum = 0; objects = g_dbus_object_manager_get_objects(moduledata->objectmanager); for (object = objects; object != NULL; object = object->next) { devpath = g_dbus_object_get_object_path(G_DBUS_OBJECT(object->data)); g_debug("Device object path: %s\n", devpath); *devicelist = g_slist_prepend(*devicelist, mmgui_module_device_new(mmguicore, devpath)); devnum++; } g_list_foreach(objects, (GFunc)g_object_unref, NULL); g_list_free(objects); return devnum; } G_MODULE_EXPORT gboolean mmgui_module_devices_state(gpointer mmguicore, enum _mmgui_device_state_request request) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GVariant *data; gint statevalue; gboolean res; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->modemproxy == NULL) return FALSE; data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "State"); if (data != NULL) { statevalue = g_variant_get_int32(data); g_variant_unref(data); } else { return FALSE; } switch (request) { case MMGUI_DEVICE_STATE_REQUEST_ENABLED: /*Is device enabled*/ res = mmgui_module_device_enabled_from_state(statevalue); if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { device->enabled = res; } break; case MMGUI_DEVICE_STATE_REQUEST_LOCKED: /*Is device blocked*/ res = mmgui_module_device_locked_from_state(statevalue); /*Update lock type*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "UnlockRequired"); if (data != NULL) { switch (g_variant_get_uint32(data)) { case MODULE_INT_MODEM_LOCK_NONE: device->locktype = MMGUI_LOCK_TYPE_NONE; break; case MODULE_INT_MODEM_LOCK_SIM_PIN: device->locktype = MMGUI_LOCK_TYPE_PIN; break; case MODULE_INT_MODEM_LOCK_SIM_PUK: device->locktype = MMGUI_LOCK_TYPE_PUK; break; default: device->locktype = MMGUI_LOCK_TYPE_OTHER; break; } g_variant_unref(data); } else { device->locktype = MMGUI_LOCK_TYPE_OTHER; } device->blocked = res; break; case MMGUI_DEVICE_STATE_REQUEST_REGISTERED: /*Is device registered in network*/ res = mmgui_module_device_registered_from_state(statevalue); device->registered = res; break; case MMGUI_DEVICE_STATE_REQUEST_CONNECTED: /*Is device connected (modem manager state)*/ res = mmgui_module_device_connected_from_state(statevalue); break; case MMGUI_DEVICE_STATE_REQUEST_PREPARED: /*Is device not ready for opearation*/ res = mmgui_module_device_prepared_from_state(statevalue); break; default: res = FALSE; break; } return res; } G_MODULE_EXPORT gboolean mmgui_module_devices_update_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; gint messageid; GList *pslnode; GList *pslnext; gchar *pslpath; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (device->enabled) { //Search for completed messages in partial sms list if ((moduledata->partialsms != NULL) && (mmguicorelc->eventcb != NULL)) { pslnode = moduledata->partialsms; while (pslnode != NULL) { pslpath = (gchar *)pslnode->data; pslnext = g_list_next(pslnode); //If messageid is -1 then it is incomplete messageid = mmgui_module_sms_get_id(mmguicore, pslpath); if (messageid != -1) { //Free resources g_free(pslpath); //Remove list node moduledata->partialsms = g_list_delete_link(moduledata->partialsms, pslnode); //Send notification (mmguicorelc->eventcb)(MMGUI_EVENT_SMS_COMPLETED, mmguicore, GUINT_TO_POINTER((guint)messageid)); } pslnode = pslnext; } } } return TRUE; } static gboolean mmgui_module_devices_update_device_mode(gpointer mmguicore, gint oldstate, gint newstate, guint changereason) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; gboolean enabledsignal, blockedsignal, regsignal, prepsignal; gsize strsize; GVariant *data; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; /*Upadate state flags*/ if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { device->enabled = mmgui_module_device_enabled_from_state(newstate); } /*Handle new state*/ device->blocked = mmgui_module_device_locked_from_state(newstate); device->registered = mmgui_module_device_registered_from_state(newstate); device->prepared = mmgui_module_device_prepared_from_state(newstate); /*Is enabled signal needed */ enabledsignal = (mmgui_module_device_enabled_from_state(oldstate) != device->enabled); /*Is blocked signal needed */ blockedsignal = (mmgui_module_device_locked_from_state(oldstate) != device->blocked); /*Is registered signal needed */ regsignal = (mmgui_module_device_registered_from_state(oldstate) != device->registered); /*Is prepared signal needed*/ prepsignal = (mmgui_module_device_prepared_from_state(oldstate) != device->prepared); /*Return if no signals will be sent*/ if ((!enabledsignal) && (!blockedsignal) && (!regsignal) && (!prepsignal)) return TRUE; /*Handle device registration*/ if ((regsignal) && (device->registered)) { if (moduledata->netproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { /*Operator information*/ /*Registration state*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "RegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } /*Operator code*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "OperatorCode"); if (data != NULL) { strsize = 256; device->operatorcode = mmgui_module_gsm_operator_code(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->operatorcode = 0; } /*Operator name*/ if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "OperatorName"); if (data != NULL) { strsize = 256; device->operatorname = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->operatorname = NULL; } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Operator information*/ /*Registration state*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Cdma1xRegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_cdma_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "EvdoRegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_cdma_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } } /*Operator code*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Sid"); if (data != NULL) { device->operatorcode = g_variant_get_uint32(data); g_variant_unref(data); } else { device->operatorcode = 0; } /*Operator name - no in CDMA*/ if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } /*Device identifier (ESN)*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Esn"); if (data != NULL) { strsize = 256; device->imei = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imei = NULL; } } } } /*Handle device enablement*/ if ((enabledsignal) && (device->enabled)) { if (moduledata->modemproxy != NULL) { /*Device identifier (IMEI)*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "EquipmentIdentifier"); if (data != NULL) { strsize = 256; device->imei = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imei = NULL; } } if (moduledata->cardproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { /*IMSI*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->cardproxy, "Imsi"); if (data != NULL) { strsize = 256; device->imsi = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imsi = NULL; } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*No IMSI in CDMA*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } } } if (moduledata->locationproxy != NULL) { if (moduledata->locationenabled) { /*Update location*/ if (mmgui_module_devices_update_location(mmguicorelc, device)) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicorelc, device); } } } else { /*Enable location API*/ if (mmgui_module_devices_enable_location(mmguicorelc, mmguicorelc->device, TRUE)) { /*Update location*/ if (mmgui_module_devices_update_location(mmguicorelc, device)) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicorelc, device); } } /*Set signal handler*/ moduledata->locationpropsignal = g_signal_connect(moduledata->locationproxy, "g-properties-changed", G_CALLBACK(mmgui_property_change_handler), mmguicorelc); /*Set enabled*/ moduledata->locationenabled = TRUE; } } } } /*Is prepared signal needed */ if (prepsignal) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_PREPARED_STATUS, mmguicorelc, GUINT_TO_POINTER(device->prepared)); } } /*Enabled signal */ if (enabledsignal) { if (mmguicorelc->eventcb != NULL) { if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_ENABLED_STATUS, mmguicorelc, GUINT_TO_POINTER(device->enabled)); } else { if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } } } } /*Is blocked signal needed */ if (blockedsignal) { if (mmguicorelc->eventcb != NULL) { if (device->operation != MMGUI_DEVICE_OPERATION_UNLOCK) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_BLOCKED_STATUS, mmguicorelc, GUINT_TO_POINTER(device->blocked)); } else { if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } } } } /*Is registered signal needed */ if (regsignal) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicorelc, device); } } return TRUE; } static gboolean mmgui_module_devices_update_location(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *data; GVariantIter *iter; guint32 locationtype; GVariant *locationdata; gchar *locationstring; gsize strlength; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if ((!(device->locationcaps & MMGUI_LOCATION_CAPS_3GPP)) && (!(device->locationcaps & MMGUI_LOCATION_CAPS_GPS))) return FALSE; error = NULL; data = g_dbus_proxy_call_sync(moduledata->locationproxy, "GetLocation", NULL, 0, -1, NULL, &error); if ((data != NULL) && (error == NULL)) { g_variant_get(data, "(a{uv})", &iter); while (g_variant_iter_next(iter, "{uv}", &locationtype, &locationdata)) { if ((locationtype == MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI) && (locationdata != NULL)) { /*3GPP location*/ strlength = 256; locationstring = g_strdup(g_variant_get_string(locationdata, &strlength)); device->loc3gppdata[0] = (guint)strtol(strsep(&locationstring, ","), NULL, 10); device->loc3gppdata[1] = (guint)strtol(strsep(&locationstring, ","), NULL, 10); device->loc3gppdata[2] = (guint)strtol(strsep(&locationstring, ","), NULL, 16); device->loc3gppdata[3] = (guint)strtol(strsep(&locationstring, ","), NULL, 16); g_free(locationstring); g_variant_unref(locationdata); g_debug("3GPP location: %u, %u, %4x, %4x\n", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], device->loc3gppdata[3]); } else if ((locationtype == MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW) && (locationdata != NULL)) { /*GPS location*/ locationdata = g_variant_lookup_value(data, "latitude", G_VARIANT_TYPE_STRING); if (locationdata != NULL) { strlength = 256; locationstring = (gchar *)g_variant_get_string(locationdata, &strlength); device->locgpsdata[0] = atof(locationstring); g_variant_unref(locationdata); } else { device->locgpsdata[0] = 0.0; } locationdata = g_variant_lookup_value(data, "longitude", G_VARIANT_TYPE_STRING); if (locationdata != NULL) { strlength = 256; locationstring = (gchar *)g_variant_get_string(locationdata, &strlength); device->locgpsdata[1] = atof(locationstring); g_variant_unref(locationdata); } else { device->locgpsdata[1] = 0.0; } locationdata = g_variant_lookup_value(data, "altitude", G_VARIANT_TYPE_STRING); if (locationdata != NULL) { strlength = 256; locationstring = (gchar *)g_variant_get_string(locationdata, &strlength); device->locgpsdata[2] = atof(locationstring); g_variant_unref(locationdata); } else { device->locgpsdata[2] = 0.0; } locationdata = g_variant_lookup_value(data, "utc-time", G_VARIANT_TYPE_STRING); if (locationdata != NULL) { strlength = 256; locationstring = (gchar *)g_variant_get_string(locationdata, &strlength); device->locgpsdata[3] = atof(locationstring); g_variant_unref(locationdata); } else { device->locgpsdata[3] = 0.0; } g_debug("GPS location: %2.3f, %2.3f, %2.3f, %6.0f", device->locgpsdata[0], device->locgpsdata[1], device->locgpsdata[2], device->locgpsdata[3]); } g_variant_unref(locationdata); } g_variant_unref(data); return TRUE; } else { if (device->locationcaps & MMGUI_LOCATION_CAPS_3GPP) { memset(device->loc3gppdata, 0, sizeof(device->loc3gppdata)); } if (device->locationcaps & MMGUI_LOCATION_CAPS_GPS) { memset(device->locgpsdata, 0, sizeof(device->locgpsdata)); } mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } } static gboolean mmgui_module_devices_enable_location(gpointer mmguicore, mmguidevice_t device, gboolean enable) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *properties; guint locationtypes, enabledtypes; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (!device->enabled) return FALSE; if (moduledata->locationproxy == NULL) return FALSE; if ((enable) && ((device->locationcaps & MMGUI_LOCATION_CAPS_3GPP) || (device->locationcaps & MMGUI_LOCATION_CAPS_GPS))) return TRUE; if ((!enable) && ((!(device->locationcaps & MMGUI_LOCATION_CAPS_3GPP)) && (!(device->locationcaps & MMGUI_LOCATION_CAPS_GPS)))) return TRUE; if (enable) { /*Determine supported capabilities and turn on location engine*/ properties = g_dbus_proxy_get_cached_property(moduledata->locationproxy, "Capabilities"); if (properties != NULL) { locationtypes = g_variant_get_uint32(properties); if ((locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI) || (locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW)) { error = NULL; /*Enable only needed capabilities*/ enabledtypes = ((locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI) | (locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW)); /*Apply new settings*/ g_dbus_proxy_call_sync(moduledata->locationproxy, "Setup", g_variant_new("(ub)", enabledtypes, TRUE), 0, -1, NULL, &error); /*Set enabled properties*/ if (error == NULL) { /*3GPP location*/ if (locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } /*GPS location*/ if (locationtypes & MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW) { device->locationcaps |= MMGUI_LOCATION_CAPS_GPS; } return TRUE; } else { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } g_variant_unref(properties); } } else { error = NULL; g_dbus_proxy_call_sync(moduledata->locationproxy, "Setup", g_variant_new("(ub)", MODULE_INT_MODEM_LOCATION_SOURCE_NONE, FALSE), 0, -1, NULL, &error); if (error == NULL) { return TRUE; } else { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_devices_information(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GVariant *data; gsize strsize = 256; gint statevalue; gboolean stateflag; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->modemproxy != NULL) { /*Is device enabled and blocked*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "State"); if (data != NULL) { statevalue = g_variant_get_int32(data); device->enabled = mmgui_module_device_enabled_from_state(statevalue); device->blocked = mmgui_module_device_locked_from_state(statevalue); device->registered = mmgui_module_device_registered_from_state(statevalue); g_variant_unref(data); } else { device->enabled = FALSE; device->blocked = TRUE; } /*Lock type*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "UnlockRequired"); if (data != NULL) { switch (g_variant_get_uint32(data)) { case MODULE_INT_MODEM_LOCK_NONE: device->locktype = MMGUI_LOCK_TYPE_NONE; break; case MODULE_INT_MODEM_LOCK_SIM_PIN: device->locktype = MMGUI_LOCK_TYPE_PIN; break; case MODULE_INT_MODEM_LOCK_SIM_PUK: device->locktype = MMGUI_LOCK_TYPE_PUK; break; default: device->locktype = MMGUI_LOCK_TYPE_OTHER; break; } g_variant_unref(data); } else { device->locktype = MMGUI_LOCK_TYPE_OTHER; } if (device->enabled) { /*Device identifier (IMEI)*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "EquipmentIdentifier"); if (data != NULL) { strsize = 256; device->imei = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imei = NULL; } /*Signal level*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "SignalQuality"); if (data != NULL) { g_variant_get(data, "(ub)", &statevalue, &stateflag); device->siglevel = statevalue; g_variant_unref(data); } else { device->siglevel = 0; } /*Used access technology*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "AccessTechnologies"); if (data != NULL) { device->mode = mmgui_module_access_mode_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { device->mode = MMGUI_DEVICE_MODE_UNKNOWN; } } } if (moduledata->netproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { /*Operator information*/ /*Registration state*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "RegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } /*Operator code*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "OperatorCode"); if (data != NULL) { strsize = 256; device->operatorcode = mmgui_module_gsm_operator_code(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->operatorcode = 0; } /*Operator name*/ if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "OperatorName"); if (data != NULL) { strsize = 256; device->operatorname = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->operatorname = NULL; } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Operator information*/ /*Registration state*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Cdma1xRegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_cdma_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "EvdoRegistrationState"); if (data != NULL) { device->regstatus = mmgui_module_cdma_registration_status_translate(g_variant_get_uint32(data)); g_variant_unref(data); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } } /*Operator code*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Sid"); if (data != NULL) { device->operatorcode = g_variant_get_uint32(data); g_variant_unref(data); } else { device->operatorcode = 0; } /*Operator name - no in CDMA*/ if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } /*Device identifier (ESN)*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "Esn"); if (data != NULL) { strsize = 256; device->imei = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imei = NULL; } } } if (moduledata->cardproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { if (device->enabled) { /*IMSI*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } data = g_dbus_proxy_get_cached_property(moduledata->cardproxy, "Imsi"); if (data != NULL) { strsize = 256; device->imsi = g_strdup(g_variant_get_string(data, &strsize)); g_variant_unref(data); } else { device->imsi = NULL; } } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*No IMSI in CDMA*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } } } /*Update location*/ if (moduledata->locationenabled) { mmgui_module_devices_update_location(mmguicore, device); } //Network time. This code makes ModemManager crash, so it commented out /*gchar *timev; if (moduledata->timeproxy != NULL) { error = NULL; data = g_dbus_proxy_call_sync(moduledata->timeproxy, "GetNetworkTime", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_print_error_message(error); g_error_free(error); } else { g_variant_get(data, "(s)", &timev); //device->imsi = g_strdup(device->imsi); g_variant_unref(data); } }*/ return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; const gchar *simpath; GVariant *simdata; GError *error; gsize strlength; GHashTable *interfaces; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device == NULL) return FALSE; if (device->objectpath == NULL) return FALSE; error = NULL; if (device->type == MMGUI_DEVICE_TYPE_GSM) { moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Modem3gpp", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { device->scancaps = MMGUI_SCAN_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->scancaps = MMGUI_SCAN_CAPS_OBSERVE; moduledata->netpropsignal = g_signal_connect(moduledata->netproxy, "g-properties-changed", G_CALLBACK(mmgui_property_change_handler), mmguicore); } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.ModemCdma", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { device->scancaps = MMGUI_SCAN_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->scancaps = MMGUI_SCAN_CAPS_NONE; moduledata->netpropsignal = g_signal_connect(moduledata->netproxy, "g-properties-changed", G_CALLBACK(mmgui_property_change_handler), mmguicore); } } error = NULL; moduledata->modemproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem", NULL, &error); if ((moduledata->modemproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->statesignal = g_signal_connect(moduledata->modemproxy, "g-signal", G_CALLBACK(mmgui_signal_handler), mmguicore); moduledata->modempropsignal = g_signal_connect(moduledata->modemproxy, "g-properties-changed", G_CALLBACK(mmgui_property_change_handler), mmguicore); //Get path for SIM object simdata = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "Sim"); strlength = 256; simpath = g_variant_get_string(simdata, &strlength); //If SIM object exists if (simpath != NULL) { error = NULL; moduledata->cardproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", simpath, "org.freedesktop.ModemManager1.Sim", NULL, &error); if ((moduledata->cardproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } else { moduledata->cardproxy = NULL; } g_variant_unref(simdata); } error = NULL; moduledata->smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Messaging", NULL, &error); if ((moduledata->smsproxy == NULL) && (error != NULL)) { device->smscaps = MMGUI_SMS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->smscaps = MMGUI_SMS_CAPS_RECEIVE | MMGUI_SMS_CAPS_SEND; moduledata->smssignal = g_signal_connect(moduledata->smsproxy, "g-signal", G_CALLBACK(mmgui_signal_handler), mmguicore); } error = NULL; if (device->type == MMGUI_DEVICE_TYPE_GSM) { moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*No USSD in CDMA*/ moduledata->ussdproxy = NULL; device->ussdcaps = MMGUI_USSD_CAPS_NONE; } error = NULL; moduledata->locationproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Location", NULL, &error); if ((moduledata->locationproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->locationenabled = mmgui_module_devices_enable_location(mmguicore, device, TRUE); if (moduledata->locationenabled) { moduledata->locationpropsignal = g_signal_connect(moduledata->locationproxy, "g-properties-changed", G_CALLBACK(mmgui_property_change_handler), mmguicore); } } /*Supplimentary interfaces*/ interfaces = mmgui_dbus_utils_list_service_interfaces(moduledata->connection, "org.freedesktop.ModemManager1", device->objectpath); if ((interfaces != NULL) && (g_hash_table_contains(interfaces, "org.freedesktop.ModemManager1.Modem.Time"))) { error = NULL; moduledata->timeproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Time", NULL, &error); if ((moduledata->timeproxy == NULL) && (error != NULL)) { moduledata->timesignal = 0; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->timesignal = g_signal_connect(moduledata->timeproxy, "g-signal", G_CALLBACK(mmgui_signal_handler), mmguicore); } } else { /*No Time interface*/ moduledata->timeproxy = NULL; moduledata->timesignal = 0; } if ((interfaces != NULL) && (g_hash_table_contains(interfaces, "org.freedesktop.ModemManager1.Modem.Contacts"))) { error = NULL; moduledata->contactsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Contacts", NULL, &error); if ((moduledata->contactsproxy == NULL) && (error != NULL)) { device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->contactscaps = MMGUI_CONTACTS_CAPS_EXPORT | MMGUI_CONTACTS_CAPS_EDIT | MMGUI_CONTACTS_CAPS_EXTENDED; } } else { /*No Time interface*/ moduledata->contactsproxy = NULL; device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; } if (interfaces != NULL) { g_hash_table_destroy(interfaces); } //Update device information using created proxy objects mmgui_module_devices_information(mmguicore); //Add fresh partial sms list moduledata->partialsms = NULL; //Initialize SMS database return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GList *pslnode; GList *pslnext; gchar *pslpath; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; //Close SMS database //Free resources //Change device pointer //Free partial sms list if (moduledata->partialsms != NULL) { pslnode = moduledata->partialsms; while (pslnode != NULL) { pslpath = (gchar *)pslnode->data; pslnext = g_list_next(pslnode); if (pslpath) { g_free(pslpath); } pslnode = pslnext; } g_list_free(moduledata->partialsms); moduledata->partialsms = NULL; } if (moduledata->cardproxy != NULL) { g_object_unref(moduledata->cardproxy); moduledata->cardproxy = NULL; } if (moduledata->netproxy != NULL) { if (g_signal_handler_is_connected(moduledata->netproxy, moduledata->netpropsignal)) { g_signal_handler_disconnect(moduledata->netproxy, moduledata->netpropsignal); } g_object_unref(moduledata->netproxy); moduledata->netproxy = NULL; } if (moduledata->modemproxy != NULL) { if (g_signal_handler_is_connected(moduledata->modemproxy, moduledata->statesignal)) { g_signal_handler_disconnect(moduledata->modemproxy, moduledata->statesignal); } if (g_signal_handler_is_connected(moduledata->modemproxy, moduledata->modempropsignal)) { g_signal_handler_disconnect(moduledata->modemproxy, moduledata->modempropsignal); } g_object_unref(moduledata->modemproxy); moduledata->modemproxy = NULL; } if (moduledata->smsproxy != NULL) { if (g_signal_handler_is_connected(moduledata->smsproxy, moduledata->smssignal)) { g_signal_handler_disconnect(moduledata->smsproxy, moduledata->smssignal); } g_object_unref(moduledata->smsproxy); moduledata->smsproxy = NULL; } if (moduledata->ussdproxy != NULL) { g_object_unref(moduledata->ussdproxy); moduledata->ussdproxy = NULL; } if (moduledata->locationproxy != NULL) { if (g_signal_handler_is_connected(moduledata->locationproxy, moduledata->locationpropsignal)) { g_signal_handler_disconnect(moduledata->locationproxy, moduledata->locationpropsignal); } g_object_unref(moduledata->locationproxy); moduledata->locationproxy = NULL; } if (moduledata->timeproxy != NULL) { if (g_signal_handler_is_connected(moduledata->timeproxy, moduledata->timesignal)) { g_signal_handler_disconnect(moduledata->timeproxy, moduledata->timesignal); } g_object_unref(moduledata->timeproxy); moduledata->timeproxy = NULL; } if (moduledata->contactsproxy != NULL) { g_object_unref(moduledata->contactsproxy); moduledata->contactsproxy = NULL; } return TRUE; } static gboolean mmgui_module_devices_restart_ussd(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->ussdproxy != NULL) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; g_object_unref(moduledata->ussdproxy); } error = NULL; moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", device->objectpath, "org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; return TRUE; } } static void mmgui_module_devices_enable_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(data); } } G_MODULE_EXPORT gboolean mmgui_module_devices_enable(gpointer mmguicore, gboolean enabled) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->modemproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; /*Device already in requested state*/ if (mmguicorelc->device->enabled == enabled) { mmgui_module_custom_error_message(mmguicorelc, _("Device already in requested state")); return FALSE; } mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_ENABLE; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->modemproxy, "Enable", g_variant_new("(b)", enabled), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_ENABLE], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_enable_handler, mmguicore); return TRUE; } static void mmgui_module_devices_unlock_with_pin_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(data); } } G_MODULE_EXPORT gboolean mmgui_module_devices_unlock_with_pin(gpointer mmguicore, gchar *pin) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->cardproxy == NULL) return FALSE; if (mmguicorelc->device->locktype != MMGUI_LOCK_TYPE_PIN) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_UNLOCK; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->cardproxy, "SendPin", g_variant_new("(s)", pin), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_unlock_with_pin_handler, mmguicore); return TRUE; } static time_t mmgui_module_str_to_time(const gchar *str) { guint i, len; gchar strbuf[3]; struct tm btime; time_t timestamp; gint *fields[] = {&btime.tm_year, &btime.tm_mon, &btime.tm_mday, &btime.tm_hour, &btime.tm_min, &btime.tm_sec}; timestamp = time(NULL); if (str == NULL) return timestamp; len = strlen(str); if (len > 12) { if ((str[12] == '+') || (str[12] == '-')) { //v.0.4.998 timestamp format for (i=0; i<6; i++) { strncpy(strbuf, str+(i*2), 2); strbuf[2] = '\0'; *fields[i] = atoi(strbuf); } } else if (str[8] == ',') { //v.0.5.2 timestamp format for (i=0; i<6; i++) { strncpy(strbuf, str+(i*3), 2); strbuf[2] = '\0'; *fields[i] = atoi(strbuf); } } btime.tm_year += 100; btime.tm_mon -= 1; timestamp = mktime(&btime); } return timestamp; } static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, const gchar *smspath/*, gboolean listpartial*/) { moduledata_t moduledata; mmgui_sms_message_t message; GDBusProxy *smsproxy; GError *error; GVariant *value; gsize strlength; const gchar *valuestr; guint index, state; gboolean gottext; if ((mmguicore == NULL) || (smspath == NULL)) return NULL; if (mmguicore->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; error = NULL; smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", smspath, "org.freedesktop.ModemManager1.Sms", NULL, &error); if ((smsproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return NULL; } /*SMS message state*/ value = g_dbus_proxy_get_cached_property(smsproxy, "State"); if (value != NULL) { state = g_variant_get_uint32(value); g_debug("STATE: %u\n", state); if (state != MODULE_INT_SMS_STATE_RECEIVED) { /*//Message is not fully received - skip it and add to list if needed if ((state == MODULE_INT_SMS_STATE_RECEIVING) && (listpartial)) { moduledata->partialsms = g_list_prepend(moduledata->partialsms, g_strdup(smspath)); }*/ g_variant_unref(value); g_object_unref(smsproxy); return NULL; } g_variant_unref(value); } else { /*Something strange with this message - skip it*/ g_object_unref(smsproxy); return NULL; } /*SMS message type*/ value = g_dbus_proxy_get_cached_property(smsproxy, "PduType"); if (value != NULL) { state = g_variant_get_uint32(value); g_debug("PDU: %u\n", state); if ((state == MODULE_INT_PDU_TYPE_UNKNOWN) || (state == MODULE_INT_PDU_TYPE_SUBMIT)) { /*Only delivered messages and status reports needed this moment - maybe remove other?*/ g_variant_unref(value); g_object_unref(smsproxy); return NULL; } g_variant_unref(value); } else { /*Something strange with this message - skip it*/ g_object_unref(smsproxy); return NULL; } message = mmgui_smsdb_message_create(); /*Sender number*/ value = g_dbus_proxy_get_cached_property(smsproxy, "Number"); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_number(message, valuestr); g_debug("SMS number: %s\n", valuestr); } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } g_variant_unref(value); } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } /*Service center number*/ value = g_dbus_proxy_get_cached_property(smsproxy, "SMSC"); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_service_number(message, valuestr); g_debug("SMS service number: %s\n", valuestr); } else { mmgui_smsdb_message_set_service_number(message, _("Unknown")); } g_variant_unref(value); } else { mmgui_smsdb_message_set_service_number(message, _("Unknown")); } /*Try to get decoded message text first*/ gottext = FALSE; value = g_dbus_proxy_get_cached_property(smsproxy, "Text"); if (value != NULL) { strlength = 256*160; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_text(message, valuestr, FALSE); gottext = TRUE; g_debug("SMS text: %s\n", valuestr); } g_variant_unref(value); } /*If there is no text (message isn't decoded), try to get binary data*/ if (!gottext) { value = g_dbus_proxy_get_cached_property(smsproxy, "Data"); if (value != NULL) { strlength = g_variant_get_size(value); if (strlength > 0) { valuestr = g_variant_get_data(value); mmgui_smsdb_message_set_binary(message, TRUE); mmgui_smsdb_message_set_data(message, valuestr, strlength, FALSE); gottext = TRUE; } g_variant_unref(value); } } /*No valuable information at all, skip message*/ if (!gottext) { mmgui_smsdb_message_free(message); return NULL; } /*Message timestamp*/ value = g_dbus_proxy_get_cached_property(smsproxy, "Timestamp"); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_timestamp(message, mmgui_module_str_to_time(valuestr)); g_debug("SMS timestamp: %s", ctime((const time_t *)&message->timestamp)); } g_variant_unref(value); } /*Message index*/ index = mmgui_module_get_object_path_index(smspath); mmgui_smsdb_message_set_identifier(message, index, FALSE); g_debug("SMS index: %u\n", index); return message; } static gint mmgui_module_sms_get_id(mmguicore_t mmguicore, const gchar *smspath) { moduledata_t moduledata; GDBusProxy *smsproxy; GError *error; GVariant *value; gint state; if ((mmguicore == NULL) || (smspath == NULL)) return -1; if (mmguicore->moduledata == NULL) return -1; moduledata = (moduledata_t)mmguicore->moduledata; error = NULL; smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", smspath, "org.freedesktop.ModemManager1.Sms", NULL, &error); if ((smsproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return -1; } //SMS message state value = g_dbus_proxy_get_cached_property(smsproxy, "State"); if (value != NULL) { state = g_variant_get_uint32(value); if (state == MODULE_INT_SMS_STATE_RECEIVED) { g_variant_unref(value); g_object_unref(smsproxy); return mmgui_module_get_object_path_index(smspath); } else { g_variant_unref(value); g_object_unref(smsproxy); return -1; } g_variant_unref(value); } else { //Something strange with this message g_object_unref(smsproxy); return -1; } } G_MODULE_EXPORT guint mmgui_module_sms_enum(gpointer mmguicore, GSList **smslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *messages; guint msgnum; GVariantIter miterl1, miterl2; GVariant *mnodel1, *mnodel2; gsize strlength; const gchar *smspath; mmgui_sms_message_t message; if ((mmguicore == NULL) || (smslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return 0; if (mmguicorelc->device == NULL) return 0; if (!mmguicorelc->device->enabled) return 0; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return 0; error = NULL; messages = g_dbus_proxy_call_sync(moduledata->smsproxy, "List", NULL, 0, -1, NULL, &error); if ((messages == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } msgnum = 0; g_variant_iter_init(&miterl1, messages); while ((mnodel1 = g_variant_iter_next_value(&miterl1)) != NULL) { g_variant_iter_init(&miterl2, mnodel1); while ((mnodel2 = g_variant_iter_next_value(&miterl2)) != NULL) { strlength = 256; smspath = g_variant_get_string(mnodel2, &strlength); g_debug("SMS message object path: %s\n", smspath); if ((smspath != NULL) && (smspath[0] != '\0')) { message = mmgui_module_sms_retrieve(mmguicorelc, smspath); if (message != NULL) { *smslist = g_slist_prepend(*smslist, message); msgnum++; } } g_variant_unref(mnodel2); } g_variant_unref(mnodel1); } g_variant_unref(messages); return msgnum; } G_MODULE_EXPORT mmgui_sms_message_t mmgui_module_sms_get(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; /*moduledata_t moduledata;*/ gchar *smspath; mmgui_sms_message_t message; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; /*if (mmguicorelc->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->moduledata;*/ if (mmguicorelc->device == NULL) return NULL; if (!mmguicorelc->device->enabled) return NULL; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return NULL; smspath = g_strdup_printf("/org/freedesktop/ModemManager1/SMS/%u", index); message = mmgui_module_sms_retrieve(mmguicorelc, smspath); g_free(smspath); return message; } G_MODULE_EXPORT gboolean mmgui_module_sms_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; gchar *smspath; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return FALSE; smspath = g_strdup_printf("/org/freedesktop/ModemManager1/SMS/%u", index); error = NULL; g_dbus_proxy_call_sync(moduledata->smsproxy, "Delete", g_variant_new("(o)", smspath), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(smspath); return FALSE; } g_free(smspath); return TRUE; } static void mmgui_module_sms_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; gboolean sent; const gchar *smspath; if (user_data == NULL) return; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; g_dbus_proxy_call_finish(proxy, res, &error); //Operation result if (error != NULL) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); sent = FALSE; } else { sent = TRUE; } smspath = g_dbus_proxy_get_object_path(proxy); if (smspath != NULL) { error = NULL; //Remove message from storage g_dbus_proxy_call_sync(moduledata->smsproxy, "Delete", g_variant_new("(o)", smspath), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SMS_SENT, user_data, GUINT_TO_POINTER(sent)); } } G_MODULE_EXPORT gboolean mmgui_module_sms_send(gpointer mmguicore, gchar* number, gchar *text, gint validity, gboolean report) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariantBuilder *builder; GVariant *array, *message, *smspathv; GError *error; /*gsize strlength;*/ gchar *smspath; GDBusProxy *messageproxy; if ((number == NULL) || (text == NULL)) return FALSE; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_SEND)) return FALSE; builder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); g_variant_builder_add_parsed(builder, "{'number', <%s>}", number); g_variant_builder_add_parsed(builder, "{'text', <%s>}", text); if ((validity > -1) && (validity <= 255)) { g_variant_builder_add_parsed(builder, "{'validity', %v}", g_variant_new("(uv)", MODULE_INT_SMS_VALIDITY_TYPE_RELATIVE, g_variant_new_uint32((guint)validity))); } g_variant_builder_add_parsed(builder, "{'delivery-report-request', <%b>}", report); array = g_variant_builder_end(builder); builder = g_variant_builder_new(G_VARIANT_TYPE_TUPLE); g_variant_builder_add_value(builder, array); message = g_variant_builder_end(builder); error = NULL; //Create new message smspathv = g_dbus_proxy_call_sync(moduledata->smsproxy, "Create", message, 0, -1, NULL, &error); if ((smspathv == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } //Created SMS object path g_variant_get(smspathv, "(o)", &smspath); if (smspath == NULL) { g_debug("Failed to obtain object path for saved SMS message\n"); return FALSE; } error = NULL; //Create message proxy messageproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager1", smspath, "org.freedesktop.ModemManager1.Sms", NULL, &error); if ((messageproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_free(smspath); return FALSE; } g_free(smspath); mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_SMS; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } //Send message g_dbus_proxy_call(messageproxy, "Send", NULL, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_sms_send_handler, mmguicore); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_ussd_cancel_session(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; error = NULL; g_dbus_proxy_call_sync(moduledata->ussdproxy, "Cancel", NULL, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } G_MODULE_EXPORT enum _mmgui_ussd_state mmgui_module_ussd_get_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *session; guint state; enum _mmgui_ussd_state stateid; stateid = MMGUI_USSD_STATE_UNKNOWN; if (mmguicore == NULL) return stateid; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return stateid; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return stateid; if (mmguicorelc->device == NULL) return stateid; if (!mmguicorelc->device->enabled) return stateid; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return stateid; session = g_dbus_proxy_get_cached_property(moduledata->ussdproxy, "State"); if (session == NULL) return stateid; state = g_variant_get_uint32(session); switch (state) { case MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_UNKNOWN: stateid = MMGUI_USSD_STATE_UNKNOWN; break; case MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_IDLE: stateid = MMGUI_USSD_STATE_IDLE; break; case MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_ACTIVE: stateid = MMGUI_USSD_STATE_ACTIVE; break; case MODULE_INT_MODEM_3GPP_USSD_SESSION_STATE_USER_RESPONSE: stateid = MMGUI_USSD_STATE_USER_RESPONSE; break; default: stateid = MMGUI_USSD_STATE_UNKNOWN; break; } g_variant_unref(session); return stateid; } static void mmgui_module_ussd_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; gchar *answer; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; answer = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { /*For some reason after timeout ussd does not work - restart it*/ mmgui_module_devices_restart_ussd(mmguicorelc); if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { g_variant_get(result, "(s)", &answer); if (moduledata->reencodeussd) { /*Fix answer broken encoding*/ answer = encoding_ussd_gsm7_to_ucs2(answer); } else { /*Do not touch answer*/ answer = g_strdup(answer); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_USSD_RESULT, user_data, answer); } } G_MODULE_EXPORT gboolean mmgui_module_ussd_send(gpointer mmguicore, gchar *request, enum _mmgui_ussd_validation validationid, gboolean reencode) { mmguicore_t mmguicorelc; moduledata_t moduledata; enum _mmgui_ussd_state sessionstate; GVariant *ussdreq; gchar *command; if ((mmguicore == NULL) || (request == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; sessionstate = mmgui_module_ussd_get_state(mmguicore); if ((sessionstate == MMGUI_USSD_STATE_UNKNOWN) || (sessionstate == MMGUI_USSD_STATE_ACTIVE)) { mmgui_module_ussd_cancel_session(mmguicore); } ussdreq = g_variant_new("(s)", request); command = NULL; if (sessionstate == MMGUI_USSD_STATE_IDLE) { command = "Initiate"; } else if (sessionstate == MMGUI_USSD_STATE_USER_RESPONSE) { if (validationid == MMGUI_USSD_VALIDATION_REQUEST) { mmgui_module_ussd_cancel_session(mmguicore); command = "Initiate"; } else { command = "Respond"; } } moduledata->reencodeussd = reencode; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_USSD; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->ussdproxy, command, ussdreq, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_ussd_send_handler, mmguicore); return TRUE; } static mmgui_scanned_network_t mmgui_module_network_retrieve(GVariant *networkv) { mmgui_scanned_network_t network; GVariant *value; gsize strlength; const gchar *valuestr; /*guint i;*/ if (networkv == NULL) return NULL; network = g_new0(struct _mmgui_scanned_network, 1); //Mobile operator code (MCCMNC) value = g_variant_lookup_value(networkv, "operator-code", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_num = atoi(valuestr); g_variant_unref(value); } else { network->operator_num = 0; } //Network access technology value = g_variant_lookup_value(networkv, "access-technology", G_VARIANT_TYPE_UINT32); if (value != NULL) { network->access_tech = mmgui_module_access_technology_translate(g_variant_get_uint32(value)); g_variant_unref(value); } else { network->access_tech = MMGUI_ACCESS_TECH_GSM; } //Long-format name of operator value = g_variant_lookup_value(networkv, "operator-long", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_long = g_strdup(valuestr); g_variant_unref(value); } else { network->operator_long = g_strdup(_("Unknown")); } //Short-format name of operator value = g_variant_lookup_value(networkv, "operator-short", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_short = g_strdup(valuestr); g_variant_unref(value); } else { network->operator_short = g_strdup(_("Unknown")); } //Network availability status (this is a critical parameter, so entry will be skipped if value is unknown) value = g_variant_lookup_value(networkv, "status", G_VARIANT_TYPE_UINT32); if (value != NULL) { network->status = mmgui_module_network_availability_status_translate(g_variant_get_uint32(value)); g_variant_unref(value); return network; } else { if (network->operator_long != NULL) g_free(network->operator_long); if (network->operator_short != NULL) g_free(network->operator_short); g_free(network); return NULL; } } static void mmgui_module_networks_scan_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; GSList *networks; GVariantIter niterl1, niterl2/*, niterl3*/; GVariant *nnodel1, *nnodel2/*, *nnodel3*/; mmgui_scanned_network_t network; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; networks = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { g_variant_iter_init(&niterl1, result); while ((nnodel1 = g_variant_iter_next_value(&niterl1)) != NULL) { g_variant_iter_init(&niterl2, nnodel1); while ((nnodel2 = g_variant_iter_next_value(&niterl2)) != NULL) { network = mmgui_module_network_retrieve(nnodel2); if (network != NULL) { networks = g_slist_prepend(networks, network); } g_variant_unref(nnodel2); } g_variant_unref(nnodel1); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SCAN_RESULT, user_data, networks); } } G_MODULE_EXPORT gboolean mmgui_module_networks_scan(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->netproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->scancaps & MMGUI_SCAN_CAPS_OBSERVE)) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SCAN; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->netproxy, "Scan", NULL, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SCAN], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_networks_scan_handler, mmguicore); return TRUE; } static mmgui_contact_t mmgui_module_contact_retrieve(GVariant *contactv) { mmgui_contact_t contact; GVariant *value; gsize strlength; const gchar *valuestr; if (contactv == NULL) return NULL; contact = g_new0(struct _mmgui_contact, 1); //Full name of the contact value = g_variant_lookup_value(contactv, "name", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->name = g_strdup(valuestr); g_variant_unref(value); } else { contact->name = g_strdup(_("Unknown")); } //Telephone number value = g_variant_lookup_value(contactv, "number", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->number = g_strdup(valuestr); g_variant_unref(value); } else { contact->number = g_strdup(_("Unknown")); } //Email address value = g_variant_lookup_value(contactv, "email", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->email = g_strdup(valuestr); g_variant_unref(value); } else { contact->email = g_strdup(_("Unknown")); } //Group this contact belongs to value = g_variant_lookup_value(contactv, "group", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->group = g_strdup(valuestr); g_variant_unref(value); } else { contact->group = g_strdup(_("Unknown")); } //Additional contact name value = g_variant_lookup_value(contactv, "name2", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->name2 = g_strdup(valuestr); g_variant_unref(value); } else { contact->name2 = g_strdup(_("Unknown")); } //Additional contact telephone number value = g_variant_lookup_value(contactv, "number2", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); contact->number2 = g_strdup(valuestr); g_variant_unref(value); } else { contact->number2 = g_strdup(_("Unknown")); } //Boolean flag to specify whether this entry is hidden or not value = g_variant_lookup_value(contactv, "hidden", G_VARIANT_TYPE_BOOLEAN); if (value != NULL) { contact->hidden = g_variant_get_boolean(value); g_variant_unref(value); } else { contact->hidden = FALSE; } //Phonebook in which the contact is stored value = g_variant_lookup_value(contactv, "storage", G_VARIANT_TYPE_UINT32); if (value != NULL) { contact->storage = g_variant_get_uint32(value); g_variant_unref(value); } else { contact->storage = FALSE; } //Internal private number (this is a critical parameter, so entry will be skipped if value is unknown) value = g_variant_lookup_value(contactv, "index", G_VARIANT_TYPE_UINT32); if (value != NULL) { contact->id = g_variant_get_uint32(value); g_variant_unref(value); return contact; } else { if (contact->name != NULL) g_free(contact->name); if (contact->number != NULL) g_free(contact->number); if (contact->email != NULL) g_free(contact->email); if (contact->group != NULL) g_free(contact->group); if (contact->name2 != NULL) g_free(contact->name2); if (contact->number2 != NULL) g_free(contact->number2); g_free(contact); return NULL; } } G_MODULE_EXPORT guint mmgui_module_contacts_enum(gpointer mmguicore, GSList **contactslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *contacts; guint contactsnum; GVariantIter citerl1, citerl2; GVariant *cnodel1, *cnodel2; mmgui_contact_t contact; if ((mmguicore == NULL) || (contactslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return 0; if (mmguicorelc->device == NULL) return 0; if (!mmguicorelc->device->enabled) return 0; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT)) return 0; error = NULL; contacts = g_dbus_proxy_call_sync(moduledata->contactsproxy, "List", NULL, 0, -1, NULL, &error); if ((contacts == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } contactsnum = 0; g_variant_iter_init(&citerl1, contacts); while ((cnodel1 = g_variant_iter_next_value(&citerl1)) != NULL) { g_variant_iter_init(&citerl2, cnodel1); while ((cnodel2 = g_variant_iter_next_value(&citerl2)) != NULL) { contact = mmgui_module_contact_retrieve(cnodel2); if (contact != NULL) { *contactslist = g_slist_prepend(*contactslist, contact); contactsnum++; } g_variant_unref(cnodel2); } g_variant_unref(cnodel1); } g_variant_unref(contacts); return contactsnum; } G_MODULE_EXPORT gboolean mmgui_module_contacts_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return FALSE; error = NULL; g_dbus_proxy_call_sync(moduledata->contactsproxy, "Delete", g_variant_new("(i)", index), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } G_MODULE_EXPORT gint mmgui_module_contacts_add(gpointer mmguicore, gchar* name, gchar *number) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariantBuilder *builder; GVariant *array, *contact; GError *error; GVariant *idv; guint id; if ((mmguicore == NULL) || (name == NULL) || (number == NULL)) return -1; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return -1; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return -1; if (mmguicorelc->device == NULL) return -1; if (!mmguicorelc->device->enabled) return -1; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return -1; builder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); g_variant_builder_add_parsed(builder, "{'name', <%s>}", name); g_variant_builder_add_parsed(builder, "{'number', <%s>}", number); g_variant_builder_add_parsed(builder, "{'hidden', <%b>}", FALSE); array = g_variant_builder_end(builder); builder = g_variant_builder_new(G_VARIANT_TYPE_TUPLE); g_variant_builder_add_value(builder, array); contact = g_variant_builder_end(builder); error = NULL; idv = g_dbus_proxy_call_sync(moduledata->contactsproxy, "Add", contact, 0, -1, NULL, &error); if ((idv == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return -1; } g_variant_get(idv, "(u)", &id); g_variant_unref(idv); return id; } modem-manager-gui-0.0.19.1/polkit/de.po000664 001750 001750 00000003070 13261703575 017424 0ustar00alexalex000000 000000 # # Translators: # Mario Blättermann , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German (http://www.transifex.com/ethereal/modem-manager-gui/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Modem-Verwaltungsdienste aktivieren und starten" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Modem-Verwaltungsdienste werden derzeit nicht ausgeführt. Sie müssen sich legitimieren, um diese Dienste aktivieren und starten zu können." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Modem-Verwaltungsdienste verwenden" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Modem-Verwaltungsdienste erfordern Ihre Anmeldedaten. Sie müssen sich legitimieren, bevor Sie diesen Dienst nutzen können." modem-manager-gui-0.0.19.1/src/notifications.c000664 001750 001750 00000015020 13261703575 020774 0ustar00alexalex000000 000000 /* * notifications.c * * Copyright 2013-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "notifications.h" #include "../resources.h" mmgui_notifications_t mmgui_notifications_new(mmgui_libpaths_cache_t libcache, GdkPixbuf *icon) { mmgui_notifications_t notifications; gboolean libopened; GList *capabilities, *iterator; notifications = g_new0(struct _mmgui_notifications, 1); /*libnotify*/ notifications->notifymodule = NULL; /*Open module*/ notifications->notifymodule = g_module_open(mmgui_libpaths_cache_get_library_full_path(libcache, "libnotify"), G_MODULE_BIND_LAZY); if (notifications->notifymodule != NULL) { libopened = TRUE; libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_init", (gpointer *)&(notifications->notify_init)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_get_server_caps", (gpointer *)&(notifications->notify_get_server_caps)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_new", (gpointer *)&(notifications->notify_notification_new)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_set_timeout", (gpointer *)&(notifications->notify_notification_set_timeout)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_set_hint", (gpointer *)&(notifications->notify_notification_set_hint)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_set_image_from_pixbuf", (gpointer *)&(notifications->notify_notification_set_image_from_pixbuf)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_set_category", (gpointer *)&(notifications->notify_notification_set_category)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_set_urgency", (gpointer *)&(notifications->notify_notification_set_urgency)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_add_action", (gpointer *)&(notifications->notify_notification_add_action)); libopened = libopened && g_module_symbol(notifications->notifymodule, "notify_notification_show", (gpointer *)&(notifications->notify_notification_show)); /*If some functions not exported, close library*/ if (!libopened) { notifications->notify_init = NULL; notifications->notify_get_server_caps = NULL; notifications->notify_notification_new = NULL; notifications->notify_notification_set_timeout = NULL; notifications->notify_notification_set_hint = NULL; notifications->notify_notification_set_image_from_pixbuf = NULL; notifications->notify_notification_set_category = NULL; notifications->notify_notification_set_urgency = NULL; notifications->notify_notification_add_action = NULL; notifications->notify_notification_show = NULL; /*Close module*/ g_module_close(notifications->notifymodule); notifications->notifymodule = NULL; } else { /*Initialize libnotify*/ (notifications->notify_init)("Modem Manager GUI"); /*Handle capabilities*/ notifications->supportsaction = FALSE; capabilities = (notifications->notify_get_server_caps)(); if (capabilities != NULL) { for(iterator=capabilities; iterator!=NULL; iterator=iterator->next) { if (g_str_equal((gchar *)iterator->data, "actions")) { notifications->supportsaction = TRUE; break; } g_list_foreach(capabilities, (GFunc)g_free, NULL); g_list_free(capabilities); } } /*Icon for notifications*/ notifications->notifyicon = icon; } } return notifications; } gboolean mmgui_notifications_show(mmgui_notifications_t notifications, gchar *caption, gchar *text, enum _mmgui_notifications_sound sound, NotifyActionCallback defcallback, gpointer userdata) { gpointer notification; gchar *soundpath; if (notifications == NULL) return FALSE; if ((caption != NULL) && (text != NULL) && (notifications->notifymodule != NULL)) { notification = (notifications->notify_notification_new)(caption, text, NULL); if (notification != NULL) { (notifications->notify_notification_set_timeout)(notification, 3000); (notifications->notify_notification_set_hint)(notification, "desktop-entry", g_variant_new_string("modem-manager-gui")); (notifications->notify_notification_set_image_from_pixbuf)(notification, notifications->notifyicon); if ((notifications->supportsaction) && (defcallback != NULL)) { (notifications->notify_notification_add_action)(notification, "default", "Default action", (NotifyActionCallback)defcallback, userdata, NULL); } switch (sound) { case MMGUI_NOTIFICATIONS_SOUND_MESSAGE: soundpath = g_build_filename(RESOURCE_SOUNDS_DIR, "message.ogg", NULL); (notifications->notify_notification_set_hint)(notification, "sound-file", g_variant_new_string(soundpath)); g_free(soundpath); break; case MMGUI_NOTIFICATIONS_SOUND_INFO: (notifications->notify_notification_set_hint)(notification, "sound-name", g_variant_new_string("dialog-information")); break; case MMGUI_NOTIFICATIONS_SOUND_NONE: break; default: (notifications->notify_notification_set_hint)(notification, "sound-name", g_variant_new_string("dialog-error")); break; } (notifications->notify_notification_show)(notification, NULL); } } return TRUE; } void mmgui_notifications_close(mmgui_notifications_t notifications) { if (notifications == NULL) return; if (notifications->notifymodule != NULL) { /*Unload module*/ g_module_close(notifications->notifymodule); notifications->notifymodule = NULL; /*And free icon*/ if (notifications->notifyicon != NULL) { g_object_unref(notifications->notifyicon); } } g_free(notifications); } modem-manager-gui-0.0.19.1/Changelog000664 001750 001750 00000005227 13261703575 017012 0ustar00alexalex000000 000000 * Sat Mar 17 2018 * New connection control functionality for NetworkManager/Connman has been added * Builtin PIN code input dialog can be used to unlock SIM * User is informed when he/she needs to unlock SIM with PIN/PUK * Active pages can be selected from properties dialog * User can set custom command to be executed on new SMS reception * MMGUI notifications can be disabled with GNOME desktop settings center * Traffic graph movement can be configured from properties dialog * Modules are checked for compatibility with each other before loading * Meson build system is fully supported * Theme MMGUI icons are used when available (thanks to Andrei) * New monochrome and scalable icons have been added for better desktop integration * Deprecated GtkStatusIcon has been replaced with AppIndicator (Debian bug #826399) * UI has been refreshed for better look and feel (thanks to Andrei) * Registration handler in MM06 module has been fixed (thanks to Alexey) * Invisible infobar bug has been fixed with GTK+ bug workaround * Stalled connection to Akonadi server bug has been fixed (Debian bug #834697) * Akonadi server error handler typo has been corrected * Timestamp parser for legacy MM versions has been fixed (thanks to Vin) * Appdata file format has been updated * Some other bugs have been fixed too * Most translations have been updated * Version 0.0.19 release * Sun Oct 11 2015 * Version 0.0.18 release * Thu Aug 28 2014 * Version 0.0.17 release * Sat Jul 20 2013 * Version 0.0.16 release * Sat Jan 12 2013 * Icons for SMS folders added * Wed Jan 2 2013 * Ukrainian localization added * Mon Dec 31 2012 Alex * USSD session support and additional request validation * USSD commands list added * SMS folders added * SMS concatenation can be disabled * Uzbek localization added * Thu Sep 06 2012 Alex * Traffic limits control * USSD session support and additional request validation * Wed Aug 22 2012 Alex * SMS message validation changes * Thu Aug 16 2012 Alex * Traffic statistics and SMS updates can be disabled * Wed Aug 08 2012 Alex * Libindicate can be disabled * Tue Jul 17 2012 Alex * Ubuntu ARB suggested fixes * Sat Jul 7 2012 Alex * Libindicate support (unread SMS indication) * Libnotify support (new SMS indication) * Russian localization added * Simple man page added * Fri Jul 6 2012 Alex * Initial release modem-manager-gui-0.0.19.1/po/modem-manager-gui.pot000664 001750 001750 00000107366 13261705142 021634 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "" #: ../src/devices-page.c:454 msgid "Selected" msgstr "" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "" #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "" #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "" #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "" #: ../src/traffic-page.c:486 msgid "PID" msgstr "" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "" #: ../src/traffic-page.c:502 msgid "Port" msgstr "" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "" #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/help/pl_PL/000775 001750 001750 00000000000 13261703575 017130 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/000775 001750 001750 00000000000 13261703575 016122 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/po/it.po000664 001750 001750 00000115260 13261705072 016563 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Matteo Seclì , 2013-2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-31 20:07+0300\n" "PO-Revision-Date: 2018-01-24 18:54+0000\n" "Last-Translator: Alex \n" "Language-Team: Italian (http://www.transifex.com/ethereal/modem-manager-gui/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../src/ayatana.c:129 msgid "Unread SMS" msgstr "" #: ../src/ayatana.c:303 msgid "Unread messages" msgstr "" #: ../src/connection-editor-window.c:336 #, c-format msgid "" "%s is not valid\n" "It won't be saved and used on connection initialization" msgstr "" #: ../src/connection-editor-window.c:400 ../src/connection-editor-window.c:410 #: ../src/connection-editor-window.c:734 ../src/connection-editor-window.c:956 #: ../src/connection-editor-window.c:1007 msgid "Unnamed connection" msgstr "" #: ../src/connection-editor-window.c:438 msgid "APN name" msgstr "" #: ../src/connection-editor-window.c:577 msgid "First DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:588 msgid "Second DNS server IP address" msgstr "" #: ../src/connection-editor-window.c:1433 #: ../resources/ui/modem-manager-gui.ui:559 msgid "Connection" msgstr "" #: ../src/contacts-page.c:353 msgid "Error adding contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Remove contact" msgstr "" #: ../src/contacts-page.c:389 msgid "Really want to remove contact?" msgstr "" #: ../src/contacts-page.c:393 ../src/contacts-page.c:398 msgid "Error removing contact" msgstr "" #: ../src/contacts-page.c:393 msgid "Contact not removed from device" msgstr "" #: ../src/contacts-page.c:398 msgid "Contact not selected" msgstr "" #: ../src/contacts-page.c:432 ../src/sms-page.c:1650 msgid "Modem contacts" msgstr "" #: ../src/contacts-page.c:528 ../src/sms-page.c:1615 msgid "GNOME contacts" msgstr "" #: ../src/contacts-page.c:535 ../src/sms-page.c:1632 msgid "KDE contacts" msgstr "" #: ../src/contacts-page.c:551 ../resources/ui/modem-manager-gui.ui:2764 msgid "First name" msgstr "" #: ../src/contacts-page.c:555 ../resources/ui/modem-manager-gui.ui:2776 msgid "First number" msgstr "" #: ../src/contacts-page.c:559 ../resources/ui/modem-manager-gui.ui:2788 msgid "EMail" msgstr "" #: ../src/contacts-page.c:563 ../resources/ui/modem-manager-gui.ui:2800 msgid "Group" msgstr "" #: ../src/contacts-page.c:567 ../resources/ui/modem-manager-gui.ui:2812 msgid "Second name" msgstr "" #: ../src/contacts-page.c:571 ../resources/ui/modem-manager-gui.ui:2824 msgid "Second number" msgstr "" #: ../src/devices-page.c:292 ../src/devices-page.c:345 msgid "Error opening device" msgstr "Errore durante l'apertura del dispositivo" #: ../src/devices-page.c:404 #, c-format msgid "" "%s %s\n" "Version:%s Port:%s Type:%s" msgstr "%s %s\nVersione:%s Porta:%s Tipo:%s" #: ../src/devices-page.c:454 msgid "Selected" msgstr "Selezionato" #: ../src/devices-page.c:460 ../resources/ui/modem-manager-gui.ui:943 msgid "Device" msgstr "Dispositivo" #: ../src/devices-page.c:736 ../src/devices-page.c:768 #: ../resources/ui/modem-manager-gui.ui:595 msgid "Activate" msgstr "" #: ../src/devices-page.c:761 msgid "Deactivate" msgstr "" #: ../src/devices-page.c:800 #, c-format msgid "Connecting to %s..." msgstr "" #: ../src/devices-page.c:811 #, c-format msgid "Disconnecting from %s..." msgstr "" #: ../src/info-page.c:75 ../src/info-page.c:82 ../src/info-page.c:135 #: ../src/info-page.c:143 msgid "Not supported" msgstr "" #: ../src/main.c:392 ../src/main.c:395 ../src/main.c:398 ../src/main.c:2809 #: ../src/main.c:2820 msgid "Error while initialization" msgstr "" #: ../src/main.c:392 msgid "Unable to start needed system services without correct credentials" msgstr "" #: ../src/main.c:395 msgid "Unable to communicate with available system services" msgstr "" #: ../src/main.c:506 msgid "Success" msgstr "" #: ../src/main.c:511 msgid "Failed" msgstr "" #: ../src/main.c:516 ../src/svcmanager.c:640 msgid "Timeout" msgstr "" #: ../src/main.c:653 ../resources/ui/modem-manager-gui.ui:465 msgid "_Stop" msgstr "" #: ../src/main.c:780 msgid "Unlocking device..." msgstr "" #: ../src/main.c:796 msgid "Enabling device..." msgstr "" #: ../src/main.c:1128 msgid "No devices found in system" msgstr "" #: ../src/main.c:1142 msgid "" "Modem is not ready for operation. Please wait while modem being prepared..." msgstr "" #: ../src/main.c:1156 msgid "Modem must be enabled to connect to Internet. Please enable modem." msgstr "" #: ../src/main.c:1157 msgid "" "Modem must be registered in mobile network to connect to Internet. Please " "wait..." msgstr "" #: ../src/main.c:1158 msgid "Modem must be unlocked to connect to Internet. Please enter PIN code." msgstr "" #: ../src/main.c:1159 msgid "" "Connection manager does not support Internet connection management functions." msgstr "" #: ../src/main.c:1175 msgid "Modem must be enabled to read and write SMS. Please enable modem." msgstr "" #: ../src/main.c:1176 msgid "" "Modem must be registered in mobile network to receive and send SMS. Please " "wait..." msgstr "" #: ../src/main.c:1177 msgid "Modem must be unlocked to receive and send SMS. Please enter PIN code." msgstr "" #: ../src/main.c:1178 msgid "Modem manager does not support SMS manipulation functions." msgstr "" #: ../src/main.c:1179 msgid "Modem manager does not support sending of SMS messages." msgstr "" #: ../src/main.c:1197 msgid "Modem must be enabled to send USSD. Please enable modem." msgstr "" #: ../src/main.c:1198 msgid "" "Modem must be registered in mobile network to send USSD. Please wait..." msgstr "" #: ../src/main.c:1199 msgid "Modem must be unlocked to send USSD. Please enter PIN code." msgstr "" #: ../src/main.c:1200 msgid "Modem manager does not support sending of USSD requests." msgstr "" #: ../src/main.c:1227 msgid "" "Modem must be enabled to scan for available networks. Please enable modem." msgstr "" #: ../src/main.c:1229 msgid "" "Modem must be unlocked to scan for available networks. Please enter PIN " "code." msgstr "" #: ../src/main.c:1230 msgid "Modem manager does not support scanning for available mobile networks." msgstr "" #: ../src/main.c:1231 msgid "Modem is connected now. Please disconnect to scan." msgstr "Il modem è attualmente connesso. Si prega di disconnetterlo per effettuare la scansione." #: ../src/main.c:1262 msgid "Modem must be enabled to export contacts from it. Please enable modem." msgstr "" #: ../src/main.c:1264 msgid "" "Modem must be unlocked to export contacts from it. Please enter PIN code." msgstr "" #: ../src/main.c:1265 msgid "Modem manager does not support modem contacts manipulation functions." msgstr "" #: ../src/main.c:1266 msgid "Modem manager does not support modem contacts edition functions." msgstr "" #: ../src/main.c:1304 msgid "Enter PIN" msgstr "" #: ../src/main.c:1306 msgid "" "SIM card is locked with PUK code. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1309 msgid "" "SIM card seems non-functional. Please contact your mobile operator for " "further instructions." msgstr "" #: ../src/main.c:1322 msgid "Enable" msgstr "" #: ../src/main.c:1581 msgid "_Devices" msgstr "" #: ../src/main.c:1585 msgid "_SMS" msgstr "" #: ../src/main.c:1590 msgid "_USSD" msgstr "" #: ../src/main.c:1595 msgid "_Info" msgstr "" #: ../src/main.c:1600 msgid "S_can" msgstr "" #: ../src/main.c:1605 msgid "_Traffic" msgstr "" #: ../src/main.c:1610 msgid "C_ontacts" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Modem Manager GUI window hidden" msgstr "" #: ../src/main.c:1698 ../src/main.c:1729 msgid "Use tray icon or messaging menu to show window again" msgstr "" #: ../src/main.c:1793 msgid "Error while displaying the help contents" msgstr "" #: ../src/main.c:1919 #, c-format msgid "%s disconnected" msgstr "%s disconnesso" #: ../src/main.c:2056 msgid "Show window" msgstr "" #: ../src/main.c:2062 msgid "New SMS" msgstr "" #: ../src/main.c:2068 ../src/main.c:2720 msgid "Quit" msgstr "" #: ../src/main.c:2680 msgid "_Quit" msgstr "" #: ../src/main.c:2686 msgid "_Actions" msgstr "" #: ../src/main.c:2689 msgid "_Preferences" msgstr "" #: ../src/main.c:2692 msgid "_Edit" msgstr "" #: ../src/main.c:2695 ../src/main.c:2699 msgid "_Help" msgstr "" #: ../src/main.c:2697 msgid "_About" msgstr "" #: ../src/main.c:2709 ../resources/ui/modem-manager-gui.ui:3172 msgid "Preferences" msgstr "" #: ../src/main.c:2714 msgid "Help" msgstr "" #: ../src/main.c:2716 ../resources/ui/modem-manager-gui.ui:1719 msgid "About" msgstr "" #: ../src/main.c:2809 ../src/main.c:2864 msgid "" "Unable to find MMGUI modules. Please check if application installed " "correctly" msgstr "" #: ../src/main.c:2820 msgid "Interface building error" msgstr "" #: ../src/main.c:2876 msgid "Modem management modules:\n" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 msgid "Module" msgstr "" #: ../src/main.c:2877 ../src/main.c:2881 ../src/ussd-page.c:544 msgid "Description" msgstr "Descrizione" #: ../src/main.c:2880 msgid "Connection management modules:\n" msgstr "" #: ../src/main.c:2919 #, c-format msgid "Segmentation fault at address: %p\n" msgstr "" #: ../src/main.c:2922 msgid "Stack trace:\n" msgstr "" #: ../src/main.c:2988 msgid "Do not show window on start" msgstr "" #: ../src/main.c:2989 msgid "Use specified modem management module" msgstr "" #: ../src/main.c:2990 msgid "Use specified connection management module" msgstr "" #: ../src/main.c:2991 msgid "List all available modules and exit" msgstr "" #: ../src/main.c:3028 msgid "- tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../src/main.c:3035 #, c-format msgid "Command line option parsing failed: %s\n" msgstr "" #: ../src/preferences-window.c:111 ../src/strformat.c:352 #: ../src/welcome-window.c:197 msgid "Undefined" msgstr "" #: ../src/scan-page.c:44 msgid "Scanning networks..." msgstr "" #: ../src/scan-page.c:46 msgid "Device error" msgstr "Errore del dispositivo" #: ../src/scan-page.c:97 #, c-format msgid "" "%s\n" "%s ID: %u Availability: %s Access tech: %s" msgstr "%s\n%s ID: %u Disponibilità: %s Tecnologia di accesso: %s" #: ../src/scan-page.c:135 msgid "Error scanning networks" msgstr "Errore durante la scansione delle reti" #: ../src/scan-page.c:149 ../resources/ui/modem-manager-gui.ui:1066 msgid "Operator" msgstr "Operatore" #: ../src/sms-page.c:343 #, c-format msgid "Received %u new SMS messages" msgstr "Recevuti %u nuovi messaggi SMS" #: ../src/sms-page.c:345 ../src/sms-page.c:423 msgid "Received new SMS message" msgstr "Ricevuto un nuovo messaggio SMS" #: ../src/sms-page.c:357 msgid "Message senders: " msgstr "" #: ../src/sms-page.c:494 ../src/sms-page.c:1163 #, c-format msgid "" "%s\n" "%s" msgstr "" #: ../src/sms-page.c:548 msgid "" "SMS number is not valid\n" "Only numbers from 2 to 20 digits without\n" "letters and symbols can be used" msgstr "Destinatario dell'SMS non valido\nPossono essere usati solo numeri da 2 a\n20 cifre senza lettere e simboli" #: ../src/sms-page.c:550 msgid "" "SMS text is not valid\n" "Please write some text to send" msgstr "Testo dell'SMS non valido\nSi prega di scrivere del testo da inviare" #: ../src/sms-page.c:675 #, c-format msgid "Sending SMS to number \"%s\"..." msgstr "" #: ../src/sms-page.c:697 msgid "Wrong number or device not ready" msgstr "Numero errato o dispositivo non pronto" #: ../src/sms-page.c:703 msgid "Saving SMS..." msgstr "" #: ../src/sms-page.c:774 #, c-format msgid "Really want to remove messages (%u) ?" msgstr "" #: ../src/sms-page.c:775 msgid "Remove messages" msgstr "" #: ../src/sms-page.c:797 #, c-format msgid "Some messages weren't removed (%u)" msgstr "" #: ../src/sms-page.c:1087 msgid "Incoming" msgstr "" #: ../src/sms-page.c:1092 msgid "" "This is folder for your incoming SMS messages.\n" "You can answer selected message using 'Answer' button." msgstr "Questa è la cartella dei tuoi messaggi SMS in arrivo.\nPuoi rispondere al messaggio selezionato usando il pulsante 'Rispondi'." #: ../src/sms-page.c:1097 msgid "Sent" msgstr "" #: ../src/sms-page.c:1102 msgid "This is folder for your sent SMS messages." msgstr "Questa è la cartella dei tuoi messaggi inviati." #: ../src/sms-page.c:1107 msgid "Drafts" msgstr "" #: ../src/sms-page.c:1112 msgid "" "This is folder for your SMS message drafts.\n" "Select message and click 'Answer' button to start editing." msgstr "" #: ../src/sms-page.c:1219 msgid "" "Incoming\n" "Incoming messages" msgstr "In arrivo\nMessaggi in arrivo" #: ../src/sms-page.c:1220 msgid "" "Sent\n" "Sent messages" msgstr "Inviati\nMessaggi inviati" #: ../src/sms-page.c:1221 msgid "" "Drafts\n" "Message drafts" msgstr "Bozze\nBozze di messaggi" #: ../src/sms-page.c:1749 ../resources/ui/modem-manager-gui.ui:2932 msgid "Disabled" msgstr "" #: ../src/sms-page.c:1903 ../resources/ui/modem-manager-gui.ui:355 #: ../resources/ui/modem-manager-gui.ui:778 #: ../resources/ui/modem-manager-gui.ui:3580 #: ../resources/ui/modem-manager-gui.ui:3999 msgid "SMS" msgstr "SMS" #: ../src/strformat.c:39 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:41 #, c-format msgid "%.3f kbps" msgstr "%.3f kbps" #: ../src/strformat.c:46 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:48 #, c-format msgid "%.3g Mbps" msgstr "%.3g Mbps" #: ../src/strformat.c:53 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:55 #, c-format msgid "%.3g Gbps" msgstr "%.3g Gbps" #: ../src/strformat.c:87 #, c-format msgid "%u sec" msgstr "%u sec" #: ../src/strformat.c:89 #, c-format msgid "%u sec" msgstr "%u sec" #: ../src/strformat.c:93 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:95 #, c-format msgid "%s:%s" msgstr "%s:%s" #: ../src/strformat.c:99 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:101 #, c-format msgid "%s:%s:%s" msgstr "%s:%s:%s" #: ../src/strformat.c:105 msgid "%" msgstr "" #: ../src/strformat.c:107 msgid "%" msgstr "" #: ../src/strformat.c:124 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:126 #, c-format msgid "%u" msgstr "%u" #: ../src/strformat.c:131 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:133 #, c-format msgid "%.3g Kb" msgstr "%.3g Kb" #: ../src/strformat.c:138 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:140 #, c-format msgid "%.3g Mb" msgstr "%.3g Mb" #: ../src/strformat.c:145 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:147 #, c-format msgid "%.3g Gb" msgstr "%.3g Gb" #: ../src/strformat.c:152 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:154 #, c-format msgid "%.3g Tb" msgstr "%.3g Tb" #: ../src/strformat.c:186 msgid "Today, %T" msgstr "" #: ../src/strformat.c:187 ../src/strformat.c:191 ../src/strformat.c:195 #: ../src/strformat.c:206 ../src/strformat.c:236 ../src/strformat.c:244 #: ../src/strformat.c:252 ../src/strformat.c:323 ../src/traffic-page.c:134 #, c-format msgid "Unknown" msgstr "Sconosciuto" #: ../src/strformat.c:190 msgid "Yesterday, %T" msgstr "" #: ../src/strformat.c:194 msgid "%d %B %Y, %T" msgstr "" #: ../src/strformat.c:246 msgid "Available" msgstr "" #: ../src/strformat.c:248 msgid "Current" msgstr "" #: ../src/strformat.c:250 msgid "Forbidden" msgstr "" #: ../src/strformat.c:286 msgid "Not registered" msgstr "" #: ../src/strformat.c:288 msgid "Home network" msgstr "" #: ../src/strformat.c:290 msgid "Searching" msgstr "" #: ../src/strformat.c:292 msgid "Registration denied" msgstr "" #: ../src/strformat.c:294 ../src/strformat.c:298 msgid "Unknown status" msgstr "" #: ../src/strformat.c:296 msgid "Roaming network" msgstr "" #: ../src/strformat.c:337 #, c-format msgid "%3.0f minutes" msgstr "" #: ../src/strformat.c:341 #, c-format msgid "%3.1f hours" msgstr "" #: ../src/strformat.c:345 #, c-format msgid "%2.0f days" msgstr "" #: ../src/strformat.c:349 #, c-format msgid "%2.0f weeks" msgstr "" #: ../src/strformat.c:364 #, c-format msgid "%2.0f sec" msgstr "" #: ../src/strformat.c:367 #, c-format msgid "%u min, %u sec" msgstr "" #: ../src/svcmanager.c:693 msgid "Job canceled" msgstr "" #: ../src/svcmanager.c:695 msgid "Systemd timeout reached" msgstr "" #: ../src/svcmanager.c:697 msgid "Service activation failed" msgstr "" #: ../src/svcmanager.c:699 msgid "Service depends on already failed service" msgstr "" #: ../src/svcmanager.c:701 msgid "Service skipped" msgstr "" #: ../src/svcmanager.c:703 msgid "Unknown error" msgstr "" #: ../src/svcmanager.c:768 msgid "Unknown activation status" msgstr "" #: ../src/svcmanager.c:839 msgid "Unknown entity type" msgstr "" #: ../src/traffic-page.c:246 msgid "Day" msgstr "" #: ../src/traffic-page.c:250 msgid "Received data" msgstr "" #: ../src/traffic-page.c:254 msgid "Transmitted data" msgstr "" #: ../src/traffic-page.c:258 msgid "Session time" msgstr "" #: ../src/traffic-page.c:482 msgid "Application" msgstr "Applicazione" #: ../src/traffic-page.c:486 msgid "PID" msgstr "PID" #: ../src/traffic-page.c:490 msgid "Protocol" msgstr "Protocollo" #: ../src/traffic-page.c:494 ../src/welcome-window.c:269 msgid "State" msgstr "Stato" #: ../src/traffic-page.c:498 msgid "Buffer" msgstr "Buffer" #: ../src/traffic-page.c:502 msgid "Port" msgstr "Porta" #: ../src/traffic-page.c:506 msgid "Destination" msgstr "Destinazione" #: ../src/traffic-page.c:532 msgid "Traffic limit exceeded" msgstr "Limite di traffico superato" #: ../src/traffic-page.c:536 msgid "Time limit exceeded" msgstr "Limite di tempo superato" #: ../src/traffic-page.c:723 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Traffico: %s, limite impostato a: %s\nTempo: %s, limite impostato a: %s\nSi prega di controllare i valori inseriti e di riprovare " #: ../src/traffic-page.c:728 msgid "Wrong traffic and time limit values" msgstr "Valori di traffico e tempo limite errati" #: ../src/traffic-page.c:731 #, c-format msgid "" "Traffic: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Traffico: %s, limite impostato a: %s\nSi prega di controllare i valori inseriti e di riprovare " #: ../src/traffic-page.c:734 msgid "Wrong traffic limit value" msgstr "Valore di traffico limite errato" #: ../src/traffic-page.c:737 #, c-format msgid "" "Time: %s, limit set to: %s\n" "Please check entered values and try once more" msgstr "Tempo: %s, limite impostato a: %s\nSi prega di controllare i valori inseriti e di riprovare " #: ../src/traffic-page.c:740 msgid "Wrong time limit value" msgstr "Valore di tempo limite errato" #: ../src/traffic-page.c:834 ../src/traffic-page.c:858 #: ../src/traffic-page.c:882 msgid "Disconnected" msgstr "Disconnesso" #: ../src/traffic-page.c:846 ../src/traffic-page.c:852 #: ../src/traffic-page.c:870 ../src/traffic-page.c:876 msgid "Limit" msgstr "Limite" #: ../src/traffic-page.c:849 ../src/traffic-page.c:855 #: ../src/traffic-page.c:873 ../src/traffic-page.c:879 msgid "Disabled" msgstr "Disattivato" #: ../src/traffic-page.c:1022 msgid "kbps" msgstr "kbps" #: ../src/traffic-page.c:1036 msgid "sec" msgstr "sec" #: ../src/traffic-page.c:1120 msgid "RX speed" msgstr "velocità RX" #: ../src/traffic-page.c:1139 msgid "TX speed" msgstr "velocità TX" #: ../src/traffic-page.c:1155 msgid "Parameter" msgstr "Parametro" #: ../src/traffic-page.c:1160 msgid "Value" msgstr "Valore" #: ../src/traffic-page.c:1166 msgid "Session" msgstr "" #: ../src/traffic-page.c:1169 ../src/traffic-page.c:1193 #: ../src/traffic-page.c:1205 msgid "Received data" msgstr "Dati ricevuti" #: ../src/traffic-page.c:1172 ../src/traffic-page.c:1196 #: ../src/traffic-page.c:1208 msgid "Transmitted data" msgstr "Dati inviati" #: ../src/traffic-page.c:1175 msgid "Receive speed" msgstr "Velocità di ricezione" #: ../src/traffic-page.c:1178 msgid "Transmit speed" msgstr "Velocità di invio" #: ../src/traffic-page.c:1181 msgid "Session time" msgstr "Tempo della sessione" #: ../src/traffic-page.c:1184 msgid "Traffic left" msgstr "Traffico residuo" #: ../src/traffic-page.c:1187 msgid "Time left" msgstr "Tempo residuo" #: ../src/traffic-page.c:1190 msgid "Month" msgstr "" #: ../src/traffic-page.c:1199 ../src/traffic-page.c:1211 msgid "Total time" msgstr "" #: ../src/traffic-page.c:1202 msgid "Year" msgstr "" #: ../src/traffic-page.c:1236 msgid "Traffic limit exceeded... It's time to take rest \\(^_^)/" msgstr "Limite di traffico superato... È ora di riposarsi \\(^_^)/" #: ../src/traffic-page.c:1261 msgid "Time limit exceeded... Go sleep and have nice dreams -_-" msgstr "Limite di traffico superato... Vai a dormire e fai bei sogni -_-" #: ../src/ussd-page.c:68 msgid "Sample command" msgstr "Comando di esempio" #: ../src/ussd-page.c:290 ../src/ussd-page.c:311 msgid "" "USSD request is not valid\n" "Request must be 160 symbols long\n" "started with '*' and ended with '#'" msgstr "Richiesta USSD non valida\nLa richiesta deve essere lunga 160 caratteri\niniziata con '*' e finita con '#'" #: ../src/ussd-page.c:395 #, c-format msgid "Sending USSD request %s..." msgstr "" #: ../src/ussd-page.c:402 #, c-format msgid "Sending USSD response %s..." msgstr "" #: ../src/ussd-page.c:413 ../src/ussd-page.c:416 ../src/ussd-page.c:419 msgid "Error sending USSD" msgstr "Errore durante l'invio della richiesta USSD" #: ../src/ussd-page.c:413 msgid "Wrong USSD request or device not ready" msgstr "Richiesta USSD errata o dispositivo non pronto" #: ../src/ussd-page.c:416 msgid "USSD session terminated. You can send new request" msgstr "Sessione USSD terminata. E' possibile inviare una nuova richiesta" #: ../src/ussd-page.c:419 msgid "Wrong USSD request" msgstr "Richiesta USSD errata" #: ../src/ussd-page.c:442 msgid "" "\n" "USSD session is active. Waiting for your input...\n" msgstr "\nLa sessione USSD è attiva. In attesa dell'input...\n" #: ../src/ussd-page.c:455 msgid "" "\n" "No answer received..." msgstr "" #: ../src/ussd-page.c:538 ../resources/ui/modem-manager-gui.ui:3517 msgid "Command" msgstr "Comando" #: ../src/welcome-window.c:246 ../resources/ui/modem-manager-gui.ui:289 msgid "_Let's Start!" msgstr "" #: ../src/welcome-window.c:265 msgid "Service" msgstr "" #: ../src/welcome-window.c:280 msgid "_Close" msgstr "" #: ../src/welcome-window.c:310 msgid "Activation..." msgstr "" #: ../src/welcome-window.c:330 msgid "Success" msgstr "" #: ../src/welcome-window.c:333 #, c-format msgid "%s" msgstr "" #: ../resources/ui/modem-manager-gui.ui:62 msgid "Welcome" msgstr "" #: ../resources/ui/modem-manager-gui.ui:111 msgid "" "Despite of it's name, Modem Manager GUI supports different backends. Please " "select backends you plan to use. If not sure, just do not change anything." msgstr "" #: ../resources/ui/modem-manager-gui.ui:125 #: ../resources/ui/modem-manager-gui.ui:3735 msgid "Modem manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:140 #: ../resources/ui/modem-manager-gui.ui:3747 msgid "Connection manager" msgstr "" #: ../resources/ui/modem-manager-gui.ui:175 msgid "Welcome to Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:189 msgid "Enable services after activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:217 msgid "Services activation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:233 msgid "" "Modem Manager GUI uses special system services to communicate with modems " "and network stack. Please wait until all needed services being activated." msgstr "" #: ../resources/ui/modem-manager-gui.ui:317 msgid "Modem Manager GUI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:337 msgid "View and select available devices CTRL+F1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:339 #: ../resources/ui/modem-manager-gui.ui:644 #: ../resources/ui/modem-manager-gui.ui:3983 msgid "Devices" msgstr "" #: ../resources/ui/modem-manager-gui.ui:353 msgid "Send and receive SMS messages CTRL+F2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:369 msgid "Send USSD requests CTRL+F3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:371 #: ../resources/ui/modem-manager-gui.ui:895 #: ../resources/ui/modem-manager-gui.ui:4013 msgid "USSD" msgstr "" #: ../resources/ui/modem-manager-gui.ui:385 msgid "View active device information CTRL+F4" msgstr "" #: ../resources/ui/modem-manager-gui.ui:387 #: ../resources/ui/modem-manager-gui.ui:1318 #: ../resources/ui/modem-manager-gui.ui:4027 msgid "Info" msgstr "" #: ../resources/ui/modem-manager-gui.ui:401 msgid "Scan existing mobile networks CTRL+F5" msgstr "" #: ../resources/ui/modem-manager-gui.ui:403 #: ../resources/ui/modem-manager-gui.ui:1414 #: ../resources/ui/modem-manager-gui.ui:4041 msgid "Scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:417 msgid "Monitor network traffic CTRL+F6" msgstr "" #: ../resources/ui/modem-manager-gui.ui:419 #: ../resources/ui/modem-manager-gui.ui:1560 #: ../resources/ui/modem-manager-gui.ui:4055 #: ../resources/ui/modem-manager-gui.ui:4265 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:433 msgid "View system and modem addressbooks CTRL+F7" msgstr "" #: ../resources/ui/modem-manager-gui.ui:435 #: ../resources/ui/modem-manager-gui.ui:1671 #: ../resources/ui/modem-manager-gui.ui:4069 msgid "Contacts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:580 #: ../resources/ui/modem-manager-gui.ui:846 msgid "Edit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:584 msgid "Open connection editor CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:599 msgid "Activate or deactivate connection CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:664 msgid "Send new SMS message CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:666 msgid "New" msgstr "" #: ../resources/ui/modem-manager-gui.ui:680 msgid "Remove selected message CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:682 msgid "Remove" msgstr "" #: ../resources/ui/modem-manager-gui.ui:696 msgid "Answer selected message CTRL+A" msgstr "" #: ../resources/ui/modem-manager-gui.ui:698 msgid "Answer" msgstr "" #: ../resources/ui/modem-manager-gui.ui:797 msgid "Request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:828 #: ../resources/ui/modem-manager-gui.ui:2901 msgid "Send" msgstr "" #: ../resources/ui/modem-manager-gui.ui:832 msgid "Send ussd request CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:850 msgid "Edit USSD commands list CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:968 msgid "IMEI" msgstr "" #: ../resources/ui/modem-manager-gui.ui:993 msgid "IMSI/ESN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1022 msgid "Equipment" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1091 msgid "Mode" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1116 msgid "Signal level" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1128 msgid "Operator code" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1153 msgid "Registration" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1197 #: ../resources/ui/modem-manager-gui.ui:2166 msgid "Network" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1241 msgid "" "3GPP Location\n" "MCC/MNC/LAC/RNC/CID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1255 msgid "" "GPS location\n" "Longitude/Latitude" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1299 msgid "Location" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1362 msgid "Scan available mobile networks CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1364 msgid "Start scan" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1388 msgid "Create connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1434 msgid "Set traffic amount or time limit for disconnect CTRL+L" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1436 msgid "Set limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1450 msgid "View list of active network connections CTRL+C" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1452 #: ../resources/ui/modem-manager-gui.ui:1883 msgid "Connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1466 msgid "View daily traffic statistics CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1468 msgid "Statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1519 msgid "Transmission speed" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1580 msgid "Add new contact to modem addressbook CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1582 #: ../resources/ui/modem-manager-gui.ui:2637 msgid "New contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1596 msgid "Remove contact from modem addressbook CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1598 msgid "Remove contact" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1622 msgid "Send SMS message to selected contact CTRL+S" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1624 msgid "Send SMS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1729 msgid "Copyright 2012-2017 Alex" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1730 msgid "Tool for EDGE/3G/4G modem specific functions control" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1732 msgid "Homepage" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1733 msgid "GPL3" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1735 msgid "English: Alex " msgstr "" #: ../resources/ui/modem-manager-gui.ui:1771 msgid "Active connections" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1824 msgid "Terminate selected application using SIGTERM signal CTRL+T" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1826 msgid "Terminate application" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1947 msgid "Add new broadband connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1949 msgid "Add connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1964 msgid "Remove selected connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:1966 msgid "Remove connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2048 msgid "Name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2060 msgid "APN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2087 msgid "Connection" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2121 msgid "Network ID" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2131 msgid "Enable roaming" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2199 msgid "Access number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2211 msgid "User name" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2223 msgid "Password" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2278 msgid "Authentication" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2311 msgid "DNS 1" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2323 msgid "DNS 2" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2367 msgid "DNS" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2423 msgid "Error" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2534 msgid "Ask me again" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2552 msgid "Quit or minimize?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2564 msgid "What do you want application to do on window close?" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2573 msgid "Just quit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2588 msgid "Minimize to tray or messaging menu" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2852 msgid "New SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2916 msgid "Save" msgstr "" #: ../resources/ui/modem-manager-gui.ui:2968 msgid "Number" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3100 msgid "Please enter PIN code to unlock modem" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3131 msgid "PIN" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3249 msgid "Use sounds for events" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3264 msgid "Hide window to tray on close" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3279 msgid "Save window geometry and placement" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3294 msgid "Add program to autostart list" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3315 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3325 msgid "Behaviour" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3356 msgid "Concatenate messages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3371 msgid "Expand folders" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3386 msgid "Place old messages on top" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3407 msgid "Presentation" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3437 msgid "Validity period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3446 msgid "Send delivery report if possible" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3484 msgid "Message parameters" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3540 msgid "" "Use %n for message sender number and %t for it's " "text (eg. zenity --info --title=%n --text=%t)." msgstr "" #: ../resources/ui/modem-manager-gui.ui:3559 msgid "Custom command" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3632 msgid "RX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3644 msgid "TX Speed graph color" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3656 msgid "Movement direction" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3670 msgid "Left to right" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3671 msgid "Right to left" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3687 msgid "Traffic" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3700 msgid "Graphs" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3789 msgid "Preferred backends" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3821 msgid "Enable device" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3833 msgid "Send SMS message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3845 msgid "Send USSD request" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3857 msgid "Scan networks" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3937 msgid "Operations timeouts" msgstr "" #: ../resources/ui/modem-manager-gui.ui:3957 msgid "Modules" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4089 msgid "Active pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4102 msgid "Pages" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4135 msgid "Question" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4171 msgid "Traffic limits" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4233 msgid "Enable traffic limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4248 msgid "Enable time limit" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4291 msgid "Mb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4292 msgid "Gb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4293 msgid "Tb" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4305 #: ../resources/ui/modem-manager-gui.ui:4396 msgid "Message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4329 #: ../resources/ui/modem-manager-gui.ui:4420 msgid "Action" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4343 #: ../resources/ui/modem-manager-gui.ui:4434 msgid "Show message" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4344 #: ../resources/ui/modem-manager-gui.ui:4435 msgid "Disconnect" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4357 msgid "Time" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4383 msgid "Minutes" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4384 msgid "Hours" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4464 msgid "Traffic statistics" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4518 msgid "Selected statistics period" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4559 msgid "January" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4560 msgid "February" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4561 msgid "March" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4562 msgid "April" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4563 msgid "May" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4564 msgid "June" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4565 msgid "July" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4566 msgid "August" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4567 msgid "September" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4568 msgid "October" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4569 msgid "November" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4570 msgid "December" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4627 msgid "USSD commands" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4680 msgid "Add new USSD command CTRL+N" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4682 msgid "Add" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4696 msgid "Remove selected USSD command CTRL+D" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4698 msgid "Delete" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4722 msgid "" "Force USSD answer encoding change from GSM7 to UCS2 (useful for Huawei " "modems) CTRL+E" msgstr "" #: ../resources/ui/modem-manager-gui.ui:4724 msgid "Change message encoding" msgstr "" modem-manager-gui-0.0.19.1/polkit/uk.po000664 001750 001750 00000003501 13261703575 017452 0ustar00alexalex000000 000000 # # Translators: # Yarema aka Knedlyk , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Yarema aka Knedlyk \n" "Language-Team: Ukrainian (http://www.transifex.com/ethereal/modem-manager-gui/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Включити і запустити сервіси управління модемом" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Сервіси управління модемом не запущені. Вам потрібно авторизуватися, щоб включити і запустити ці сервіси." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Використання сервісу управління модемом" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Сервіс управління модемом потребує Ваші дані. Вам потрібно авторизуватися для використання цього сервісу." modem-manager-gui-0.0.19.1/meson.build000664 001750 001750 00000005634 13261745400 017335 0ustar00alexalex000000 000000 project('Modem Manager GUI', 'c', version: '0.0.19.1', license : 'GPL3+', meson_version: '>=0.37') glib = dependency('glib-2.0', version: '>=2.32.1') gobject = dependency('gobject-2.0', version: '>=2.32.1') gio = dependency('gio-2.0', version: '>=2.32.1') gmodule = dependency('gmodule-2.0', version: '>=2.32.1') gtk = dependency('gtk+-3.0', version: '>=3.4.0') ofono = dependency('ofono', version: '>=1.9', required: false) gtkspell = dependency('gtkspell3-3.0', version: '>=3.0.3', required: false) appindicator = dependency('appindicator3-0.1', version: '>=0.4.92', required: false) gdbm = meson.get_compiler('c').find_library('gdbm') rt = meson.get_compiler('c').find_library('rt') m = meson.get_compiler('c').find_library('m') po4a = find_program('po4a') resources_h = configuration_data() resources_h.set('RESOURCE_NAME', '"@0@"'.format(meson.project_name())) resources_h.set('RESOURCE_VERSION', '"@0@"'.format(meson.project_version())) resources_h.set('RESOURCE_SCALABLE_ICONS_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'icons', 'hicolor', 'scalable', 'apps' ]))) resources_h.set('RESOURCE_SYMBOLIC_ICONS_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'icons', 'hicolor', 'symbolic', 'apps' ]))) resources_h.set('RESOURCE_PIXMAPS_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'modem-manager-gui', 'pixmaps' ]))) resources_h.set('RESOURCE_SOUNDS_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'modem-manager-gui', 'sounds' ]))) resources_h.set('RESOURCE_UI_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'modem-manager-gui', 'ui' ]))) resources_h.set('RESOURCE_MODULES_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules' ]))) resources_h.set('RESOURCE_LOCALE_DIR', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'locale' ]))) resources_h.set('RESOURCE_LOCALE_DOMAIN', '"modem-manager-gui"') resources_h.set('RESOURCE_DESKTOP_FILE', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'applications', 'modem-manager-gui.desktop' ]))) resources_h.set('RESOURCE_PROVIDERS_DB', '"@0@"'.format(join_paths([ get_option('prefix'), get_option('datadir'), 'mobile-broadband-provider-info', 'serviceproviders.xml' ]))) if gtkspell.found() resources_h.set('RESOURCE_SPELLCHECKER_ENABLED', '1') else resources_h.set('RESOURCE_SPELLCHECKER_ENABLED', '0') endif if appindicator.found() resources_h.set('RESOURCE_INDICATOR_ENABLED', '1') else resources_h.set('RESOURCE_INDICATOR_ENABLED', '0') endif configure_file(input: 'src/resources.h.meson', output: 'resources.h', configuration: resources_h) subdir('appdata') subdir('help') subdir('man') subdir('po') subdir('polkit') subdir('resources') subdir('src') subdir('src/modules') subdir('src/plugins') subdir('src/scripts') modem-manager-gui-0.0.19.1/resources/pixmaps/ussd-tb.png000664 001750 001750 00000003114 13261703575 022753 0ustar00alexalex000000 000000 PNG  IHDR szzsRGBbKGD pHYs  tIME 2 3`c5IDATXÝW]hGܽ{kDhTت)UۢUH Bb|*mCѷX*mD>آJ -(-"j̽ݝ9}0w7I=p`fgo,aT*Rl~#abYKe-BOj70.r)^ܼysF4υaa\.sww7J%0S#̃466i~,ĜD l0z{{vZhG33<>|ȗ.]aۤҀd(h|i``yFi\.1r 1RʟAPvf\r%VXѲiߴ|yRJV_'AP"3O^39Q̇D/^$jhLD9gOOwuu|BRBA`T*0sck֬aeh}{{;"B P(8N*˲0ohѢ8,˖-î]pܹ9mmm`W-ˢ Z!֭[m۶Az>,Y5/^ i /ђ3Q.!֭4B ð*r0< 13Q.cY6q J D@.mHSƃfaHxB Ǐ hP"J䜈+hZkAq011  Ǐ8@=z}޽{`E!|G^GVk8M5{zI y8SNš !p-Xw^cjj*FguCWJx݋'O,٠Be 3ٳv:c0_$1'"q޽'OFZ,a& ÈA"IBR3QXXӧ}vLMMe^V7 _J"TkMhA"\9sf;cjzKH)!SA&\Qѣ+]JZJo'!5e]0IcI8[… 0M/_Ɲ;wi_Z(} "OKs+-wJ>"^Ʊ>¶׈ l=YrH)QT^e]KRʍ-'&ّRR_FU^)UVaF0::5RPF 'KJy nܸy;Й1-pcR#ne0-cOIENDB`modem-manager-gui-0.0.19.1/man/uz@Latn/meson.build000664 001750 001750 00000000363 13261703575 021466 0ustar00alexalex000000 000000 custom_target('man-uz@Latn', input: 'uz@Latn.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'uz@Latn', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/packages/fedora/000775 001750 001750 00000000000 13261745211 020201 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/contacts-page.c000664 001750 001750 00000064100 13261703575 020656 0ustar00alexalex000000 000000 /* * contacts-page.c * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "mmguicore.h" #include "../resources.h" #include "sms-page.h" #include "contacts-page.h" #include "main.h" static mmgui_contact_t mmgui_main_contacts_list_get_selected(mmgui_application_t mmguiapp, guint *type); static void mmgui_main_contacts_list_cursor_changed_signal(GtkTreeView *tree_view, gpointer data); static void mmgui_main_contacts_sms_menu_activate_signal(GtkMenuItem *menuitem, gpointer data); static void mmgui_main_contacts_dialog_entry_changed_signal(GtkEditable *editable, gpointer data); /*CONTACTS*/ static mmgui_contact_t mmgui_main_contacts_list_get_selected(mmgui_application_t mmguiapp, guint *type) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; guint id, contacttype; mmgui_contact_t contact; if (mmguiapp == NULL) return NULL; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); contact = NULL; if ((model != NULL) && (selection != NULL)) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONTACTSLIST_ID, &id, MMGUI_MAIN_CONTACTSLIST_TYPE, &contacttype, -1); if (contacttype != MMGUI_MAIN_CONTACT_HEADER) { if (contacttype == MMGUI_MAIN_CONTACT_MODEM) { //Contact from modem contact = mmguicore_contacts_get(mmguiapp->core, id); } else if (contacttype == MMGUI_MAIN_CONTACT_GNOME) { //Contact from GNOME addressbook contact = mmgui_addressbooks_get_gnome_contact(mmguiapp->addressbooks, id); } else if (contacttype == MMGUI_MAIN_CONTACT_KDE) { //Contact from KDE addressbook contact = mmgui_addressbooks_get_kde_contact(mmguiapp->addressbooks, id); } } //Set contact type if needed if (type != NULL) *(type) = contacttype; } else { if (type != NULL) *(type) = MMGUI_MAIN_CONTACT_UNKNOWN; } } else { if (type != NULL) *(type) = MMGUI_MAIN_CONTACT_UNKNOWN; } return contact; } static void mmgui_main_contacts_list_cursor_changed_signal(GtkTreeView *tree_view, gpointer data) { mmgui_application_t mmguiapp; mmgui_contact_t contact; guint contactscaps; gboolean validated; GtkWidget *menu_sms1, *menu_sms2; guint contacttype; static struct _mmgui_application_data appdata[2]; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; validated = FALSE; contacttype = MMGUI_MAIN_CONTACT_UNKNOWN; contact = mmgui_main_contacts_list_get_selected(mmguiapp, &contacttype); if ((contact != NULL) && (contacttype != MMGUI_MAIN_CONTACT_UNKNOWN)) { if (contacttype != MMGUI_MAIN_CONTACT_HEADER) { //Destroy old menu if (mmguiapp->window->contactssmsmenu != NULL) { gtk_widget_destroy(mmguiapp->window->contactssmsmenu); mmguiapp->window->contactssmsmenu = NULL; } //Create new menu if (mmguiapp->options->smspageenabled) { mmguiapp->window->contactssmsmenu = gtk_menu_new(); } //Contacts numbers validation if ((contact->number != NULL) && (mmguicore_sms_validate_number((const gchar *)contact->number))) { if (mmguiapp->options->smspageenabled) { menu_sms1 = gtk_menu_item_new_with_label(contact->number); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->contactssmsmenu), menu_sms1); appdata[0].mmguiapp = mmguiapp; appdata[0].data = GINT_TO_POINTER(0); g_signal_connect(G_OBJECT(menu_sms1), "activate", G_CALLBACK(mmgui_main_contacts_sms_menu_activate_signal), &(appdata[0])); } validated = TRUE; } if ((contact->number2 != NULL) && (mmguicore_sms_validate_number((const gchar *)contact->number2))) { if (mmguiapp->options->smspageenabled) { menu_sms2 = gtk_menu_item_new_with_label(contact->number2); gtk_menu_shell_append(GTK_MENU_SHELL(mmguiapp->window->contactssmsmenu), menu_sms2); appdata[1].mmguiapp = mmguiapp; appdata[1].data = GINT_TO_POINTER(1); g_signal_connect(G_OBJECT(menu_sms2), "activate", G_CALLBACK(mmgui_main_contacts_sms_menu_activate_signal), &(appdata[1])); } validated = TRUE; } //Set buttons state if (validated) { contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if ((contactscaps & MMGUI_CONTACTS_CAPS_EDIT) && (contacttype == MMGUI_MAIN_CONTACT_MODEM)) { gtk_widget_set_sensitive(mmguiapp->window->removecontactbutton, TRUE); } else { gtk_widget_set_sensitive(mmguiapp->window->removecontactbutton, FALSE); } /*SMS send button*/ if (mmguiapp->options->smspageenabled) { gtk_widget_set_sensitive(mmguiapp->window->smstocontactbutton, TRUE); //Show menu if contact data validated gtk_widget_show_all(GTK_WIDGET(mmguiapp->window->contactssmsmenu)); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(mmguiapp->window->smstocontactbutton), mmguiapp->window->contactssmsmenu); } } else { gtk_widget_set_sensitive(mmguiapp->window->removecontactbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->smstocontactbutton, FALSE); } } } else if (contacttype == MMGUI_MAIN_CONTACT_HEADER) { //Header selected gtk_widget_set_sensitive(mmguiapp->window->removecontactbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->smstocontactbutton, FALSE); } } void mmgui_main_contacts_sms(mmgui_application_t mmguiapp) { mmgui_contact_t contact; gchar *number; guint smscaps, contacttype; if (mmguiapp == NULL) return; smscaps = mmguicore_sms_get_capabilities(mmguiapp->core); if (!(smscaps & MMGUI_SMS_CAPS_SEND)) return; number = NULL; contacttype = MMGUI_MAIN_CONTACT_UNKNOWN; contact = mmgui_main_contacts_list_get_selected(mmguiapp, &contacttype); if ((contact != NULL) && (contacttype != MMGUI_MAIN_CONTACT_UNKNOWN)) { //Find apporitate number if (contact->number != NULL) { number = contact->number; } else if (contact->number2 != NULL) { number = contact->number2; } //Switch to SMS page and send message if (number != NULL) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(mmguiapp->window->smsbutton), TRUE); mmgui_main_sms_send(mmguiapp, number, ""); } } } void mmgui_main_contacts_sms_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_contacts_sms(mmguiapp); } static void mmgui_main_contacts_sms_menu_activate_signal(GtkMenuItem *menuitem, gpointer data) { mmgui_application_data_t appdata; mmgui_contact_t contact; guint contacttype; appdata = (mmgui_application_data_t)data; if (appdata == NULL) return; contacttype = MMGUI_MAIN_CONTACT_UNKNOWN; contact = mmgui_main_contacts_list_get_selected(appdata->mmguiapp, &contacttype); if ((contact != NULL) && (contacttype != MMGUI_MAIN_CONTACT_UNKNOWN)) { if ((GPOINTER_TO_INT(appdata->data) == 0) && (contact->number != NULL)) { //First number: switch to SMS page and send message if number found gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(appdata->mmguiapp->window->smsbutton), TRUE); mmgui_main_sms_send(appdata->mmguiapp, contact->number, ""); } else if ((GPOINTER_TO_INT(appdata->data) == 1) && (contact->number2 != NULL)) { //Second number: switch to SMS page and send message if number found gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(appdata->mmguiapp->window->smsbutton), TRUE); mmgui_main_sms_send(appdata->mmguiapp, contact->number2, ""); } } } static void mmgui_main_contacts_dialog_entry_changed_signal(GtkEditable *editable, gpointer data) { mmgui_application_t mmguiapp; guint16 namelen, numberlen, number2len; const gchar *number, *number2; gboolean valid; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; namelen = gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->contactnameentry)); numberlen = gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->contactnumberentry)); number2len = gtk_entry_get_text_length(GTK_ENTRY(mmguiapp->window->contactnumber2entry)); if ((namelen == 0) || (numberlen == 0)) { gtk_widget_set_sensitive(mmguiapp->window->newcontactaddbutton, FALSE); } else { valid = TRUE; //Number2 validation if (number2len > 0) { number2 = gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactnumber2entry)); if (!mmguicore_sms_validate_number(number2)) { valid = FALSE; } } //Number validation if (valid) { number = gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactnumberentry)); if (!mmguicore_sms_validate_number(number)) { valid = FALSE; } } //Set state of add button if (valid) { gtk_widget_set_sensitive(mmguiapp->window->newcontactaddbutton, TRUE); } else { gtk_widget_set_sensitive(mmguiapp->window->newcontactaddbutton, FALSE); } } } void mmgui_main_contacts_new(mmgui_application_t mmguiapp) { guint contactscaps; gboolean extsensitive; gulong editsignal[3]; gint response; mmgui_contact_t contact; GtkTreeModel *model; GtkTreeIter iter, child; if (mmguiapp == NULL) return; contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (!(contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return; /*Capabilities*/ extsensitive = (gboolean)(contactscaps & MMGUI_CONTACTS_CAPS_EXTENDED); gtk_widget_set_sensitive(mmguiapp->window->contactemailentry, extsensitive); gtk_widget_set_sensitive(mmguiapp->window->contactgroupentry, extsensitive); gtk_widget_set_sensitive(mmguiapp->window->contactname2entry, extsensitive); gtk_widget_set_sensitive(mmguiapp->window->contactnumber2entry, extsensitive); /*Clear entries*/ gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactnameentry), ""); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactnumberentry), ""); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactemailentry), ""); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactgroupentry), ""); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactname2entry), ""); gtk_entry_set_text(GTK_ENTRY(mmguiapp->window->contactnumber2entry), ""); /*Bind signals*/ editsignal[0] = g_signal_connect(G_OBJECT(mmguiapp->window->contactnameentry), "changed", G_CALLBACK(mmgui_main_contacts_dialog_entry_changed_signal), mmguiapp); editsignal[1] = g_signal_connect(G_OBJECT(mmguiapp->window->contactnumberentry), "changed", G_CALLBACK(mmgui_main_contacts_dialog_entry_changed_signal), mmguiapp); editsignal[2] = g_signal_connect(G_OBJECT(mmguiapp->window->contactnumber2entry), "changed", G_CALLBACK(mmgui_main_contacts_dialog_entry_changed_signal), mmguiapp); g_signal_emit_by_name(G_OBJECT(mmguiapp->window->contactnameentry), "changed"); /*Run dialog*/ response = gtk_dialog_run(GTK_DIALOG(mmguiapp->window->newcontactdialog)); /*Unbind signals*/ g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->contactnameentry), editsignal[0]); g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->contactnumberentry), editsignal[1]); g_signal_handler_disconnect(G_OBJECT(mmguiapp->window->contactnumber2entry), editsignal[2]); gtk_widget_hide(mmguiapp->window->newcontactdialog); /*Add contact*/ if (response) { /*Form contact*/ contact = (mmgui_contact_t)g_new0(struct _mmgui_contact, 1); contact->name = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactnameentry))); contact->number = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactnumberentry))); contact->email = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactemailentry))); contact->group = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactgroupentry))); contact->name2 = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactname2entry))); contact->number2 = g_strdup(gtk_entry_get_text(GTK_ENTRY(mmguiapp->window->contactnumber2entry))); contact->hidden = FALSE; contact->storage = 0; /*Add to device*/ if (mmguicore_contacts_add(mmguiapp->core, contact)) { /*Add to list*/ model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if (model != NULL) { gtk_tree_model_get_iter(model, &iter, mmguiapp->window->contmodempath); gtk_tree_store_append(GTK_TREE_STORE(model), &child, &iter); gtk_tree_store_set(GTK_TREE_STORE(model), &child, MMGUI_MAIN_CONTACTSLIST_NAME, contact->name, MMGUI_MAIN_CONTACTSLIST_NUMBER, contact->number, MMGUI_MAIN_CONTACTSLIST_EMAIL, contact->email, MMGUI_MAIN_CONTACTSLIST_GROUP, contact->group, MMGUI_MAIN_CONTACTSLIST_NAME2, contact->name2, MMGUI_MAIN_CONTACTSLIST_NUMBER2, contact->number2, MMGUI_MAIN_CONTACTSLIST_HIDDEN, contact->hidden, MMGUI_MAIN_CONTACTSLIST_STORAGE, contact->storage, MMGUI_MAIN_CONTACTSLIST_ID, contact->id, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACT_MODEM, -1); } } else { /*Can not add, free resources*/ mmguicore_contacts_free_single(contact, TRUE); mmgui_main_ui_error_dialog_open(mmguiapp, _("Error adding contact"), mmguicore_get_last_error(mmguiapp->core)); } } } void mmgui_main_contacts_new_button_clicked_signal(GObject *object, gpointer user_data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)user_data; if (mmguiapp == NULL) return; mmgui_main_contacts_new(mmguiapp); } void mmgui_main_contacts_remove(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; guint id, contacttype, contactcaps; if (mmguiapp == NULL) return; contactcaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (!(contactcaps & MMGUI_CONTACTS_CAPS_EDIT)) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if ((model != NULL) && (selection != NULL)) { if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, MMGUI_MAIN_CONTACTSLIST_ID, &id, MMGUI_MAIN_CONTACTSLIST_TYPE, &contacttype, -1); if (contacttype == MMGUI_MAIN_CONTACT_MODEM) { if (mmgui_main_ui_question_dialog_open(mmguiapp, _("Remove contact"), _("Really want to remove contact?"))) { if (mmguicore_contacts_delete(mmguiapp->core, id)) { gtk_tree_store_remove(GTK_TREE_STORE(model), &iter); } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error removing contact"), _("Contact not removed from device")); } } } } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error removing contact"), _("Contact not selected")); } } } void mmgui_main_contacts_remove_button_clicked_signal(GObject *object, gpointer user_data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)user_data; if (mmguiapp == NULL) return; mmgui_main_contacts_remove(mmguiapp); } void mmgui_main_contacts_list_fill(mmgui_application_t mmguiapp) { guint contactscaps; GSList *contacts; GtkTreeModel *model; GtkTreeIter iter, child; GSList *iterator; mmgui_contact_t contact; if (mmguiapp == NULL) return; contactscaps = mmguicore_contacts_get_capabilities(mmguiapp->core); if (contactscaps & MMGUI_CONTACTS_CAPS_EXPORT) { contacts = mmguicore_contacts_list(mmguiapp->core); model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if (model != NULL) { gtk_tree_store_insert(GTK_TREE_STORE(model), &iter, NULL, 0); gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MMGUI_MAIN_CONTACTSLIST_NAME, _("Modem contacts"), MMGUI_MAIN_CONTACTSLIST_ID, 0, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACT_HEADER, -1); mmguiapp->window->contmodempath = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &iter); if (contacts != NULL) { //Add contacts gtk_tree_model_get_iter(model, &iter, mmguiapp->window->contmodempath); for (iterator=contacts; iterator; iterator=iterator->next) { contact = iterator->data; gtk_tree_store_append(GTK_TREE_STORE(model), &child, &iter); gtk_tree_store_set(GTK_TREE_STORE(model), &child, MMGUI_MAIN_CONTACTSLIST_NAME, contact->name, MMGUI_MAIN_CONTACTSLIST_NUMBER, contact->number, MMGUI_MAIN_CONTACTSLIST_EMAIL, contact->email, MMGUI_MAIN_CONTACTSLIST_GROUP, contact->group, MMGUI_MAIN_CONTACTSLIST_NAME2, contact->name2, MMGUI_MAIN_CONTACTSLIST_NUMBER2, contact->number2, MMGUI_MAIN_CONTACTSLIST_HIDDEN, contact->hidden, MMGUI_MAIN_CONTACTSLIST_STORAGE, contact->storage, MMGUI_MAIN_CONTACTSLIST_ID, contact->id, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACT_MODEM, -1); } } gtk_tree_view_expand_all(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); } } } void mmgui_main_contacts_addressbook_list_fill(mmgui_application_t mmguiapp, guint contacttype) { GSList *contacts; GtkTreeModel *model; GtkTreeIter iter, child; GSList *iterator; mmgui_contact_t contact; if (mmguiapp == NULL) return; contacts = NULL; if ((contacttype == MMGUI_MAIN_CONTACT_GNOME) && (mmguiapp->window->contgnomepath != NULL)) { //Contacts from GNOME addressbook if (mmgui_addressbooks_get_gnome_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_gnome_contacts_list(mmguiapp->addressbooks); } } else if (contacttype == MMGUI_MAIN_CONTACT_KDE) { //Contacts from KDE addressbook if (mmgui_addressbooks_get_kde_contacts_available(mmguiapp->addressbooks)) { contacts = mmgui_addressbooks_get_kde_contacts_list(mmguiapp->addressbooks); } } if (contacts != NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if (model != NULL) { g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), NULL); //Get patrent iterator if (contacttype == MMGUI_MAIN_CONTACT_GNOME) { gtk_tree_model_get_iter(model, &iter, mmguiapp->window->contgnomepath); } else if (contacttype == MMGUI_MAIN_CONTACT_KDE) { gtk_tree_model_get_iter(model, &iter, mmguiapp->window->contkdepath); } //Add contacts for (iterator=contacts; iterator; iterator=iterator->next) { contact = iterator->data; gtk_tree_store_append(GTK_TREE_STORE(model), &child, &iter); gtk_tree_store_set(GTK_TREE_STORE(model), &child, MMGUI_MAIN_CONTACTSLIST_NAME, contact->name, MMGUI_MAIN_CONTACTSLIST_NUMBER, contact->number, MMGUI_MAIN_CONTACTSLIST_EMAIL, contact->email, MMGUI_MAIN_CONTACTSLIST_GROUP, contact->group, MMGUI_MAIN_CONTACTSLIST_NAME2, contact->name2, MMGUI_MAIN_CONTACTSLIST_NUMBER2, contact->number2, MMGUI_MAIN_CONTACTSLIST_HIDDEN, contact->hidden, MMGUI_MAIN_CONTACTSLIST_STORAGE, contact->storage, MMGUI_MAIN_CONTACTSLIST_ID, contact->id, MMGUI_MAIN_CONTACTSLIST_TYPE, contacttype, -1); } //Attach model gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), model); g_object_unref(model); } gtk_tree_view_expand_all(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); } } void mmgui_main_contacts_load_from_system_addressbooks(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeIter iter; if (mmguiapp == NULL) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if (model) { if (mmgui_addressbooks_get_gnome_contacts_available(mmguiapp->addressbooks)) { gtk_tree_store_append(GTK_TREE_STORE(model), &iter, NULL); gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MMGUI_MAIN_CONTACTSLIST_NAME, _("GNOME contacts"), MMGUI_MAIN_CONTACTSLIST_ID, 0, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACT_HEADER, -1); mmguiapp->window->contgnomepath = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &iter); mmgui_main_contacts_addressbook_list_fill(mmguiapp, MMGUI_MAIN_CONTACT_GNOME); } if (mmgui_addressbooks_get_kde_contacts_available(mmguiapp->addressbooks)) { gtk_tree_store_append(GTK_TREE_STORE(model), &iter, NULL); gtk_tree_store_set(GTK_TREE_STORE(model), &iter, MMGUI_MAIN_CONTACTSLIST_NAME, _("KDE contacts"), MMGUI_MAIN_CONTACTSLIST_ID, 0, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACT_HEADER, -1); mmguiapp->window->contkdepath = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &iter); mmgui_main_contacts_addressbook_list_fill(mmguiapp, MMGUI_MAIN_CONTACT_KDE); } } } void mmgui_main_contacts_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeStore *store; if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("First name"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_NAME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("First number"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_NUMBER, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("EMail"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_EMAIL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Group"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_GROUP, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Second name"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_NAME2, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Second number"), renderer, "markup", MMGUI_MAIN_CONTACTSLIST_NUMBER2, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), column); store = gtk_tree_store_new(MMGUI_MAIN_CONTACTSLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT); mmguiapp->window->contmodempath = NULL; gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview), GTK_TREE_MODEL(store)); g_object_unref(store); g_signal_connect(G_OBJECT(mmguiapp->window->contactstreeview), "cursor-changed", G_CALLBACK(mmgui_main_contacts_list_cursor_changed_signal), mmguiapp); mmguiapp->window->contactssmsmenu = NULL; } void mmgui_main_contacts_state_clear(mmgui_application_t mmguiapp) { GtkTreeModel *model; GtkTreeIter catiter, contiter; GtkTreePath *refpath; GtkTreeRowReference *reference; GSList *reflist, *iterator; gboolean validcat, validcont; guint contacttype, numcontacts; gchar *pathstr; if (mmguiapp == NULL) return; /*Clear contacts list*/ if (mmguiapp->window->contmodempath != NULL) { pathstr = gtk_tree_path_to_string(mmguiapp->window->contmodempath); if (pathstr != NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->contactstreeview)); if (model != NULL) { reflist = NULL; numcontacts = 0; /*Iterate through model and save references*/ validcat = gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &catiter, pathstr); while (validcat) { if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(model), &catiter)) { validcont = gtk_tree_model_iter_children(GTK_TREE_MODEL(model), &contiter, &catiter); while (validcont) { gtk_tree_model_get(GTK_TREE_MODEL(model), &contiter, MMGUI_MAIN_CONTACTSLIST_TYPE, &contacttype, -1); /*Save references only on contacts stored on device*/ if (contacttype == MMGUI_MAIN_CONTACT_MODEM) { refpath = gtk_tree_model_get_path(GTK_TREE_MODEL(model), &contiter); if (refpath != NULL) { reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(model), refpath); if (reference != NULL) { reflist = g_slist_prepend(reflist, reference); numcontacts++; } } } validcont = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &contiter); } } validcat = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &catiter); } /*Remove contacts if any found*/ if (numcontacts > 0) { for (iterator = reflist; iterator != NULL; iterator = iterator->next) { refpath = gtk_tree_row_reference_get_path((GtkTreeRowReference *)iterator->data); if (refpath) { if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &contiter, refpath)) { gtk_tree_store_remove(GTK_TREE_STORE(model), &contiter); } } } /*Clear resources allocated for references list*/ g_slist_foreach(reflist, (GFunc)gtk_tree_row_reference_free, NULL); g_slist_free(reflist); } /*Remove category caption*/ if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &catiter, pathstr)) { gtk_tree_store_remove(GTK_TREE_STORE(model), &catiter); } } g_free(pathstr); } } gtk_widget_set_sensitive(mmguiapp->window->removecontactbutton, FALSE); gtk_widget_set_sensitive(mmguiapp->window->smstocontactbutton, FALSE); } modem-manager-gui-0.0.19.1/src/contacts-page.h000664 001750 001750 00000004474 13261703575 020673 0ustar00alexalex000000 000000 /* * contacts-page.h * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __CONTACTS_PAGE_H__ #define __CONTACTS_PAGE_H__ #include #include "main.h" enum _mmgui_main_contactslist_columns { MMGUI_MAIN_CONTACTSLIST_NAME = 0, MMGUI_MAIN_CONTACTSLIST_NUMBER, MMGUI_MAIN_CONTACTSLIST_EMAIL, MMGUI_MAIN_CONTACTSLIST_GROUP, MMGUI_MAIN_CONTACTSLIST_NAME2, MMGUI_MAIN_CONTACTSLIST_NUMBER2, MMGUI_MAIN_CONTACTSLIST_HIDDEN, MMGUI_MAIN_CONTACTSLIST_STORAGE, MMGUI_MAIN_CONTACTSLIST_ID, MMGUI_MAIN_CONTACTSLIST_TYPE, MMGUI_MAIN_CONTACTSLIST_COLUMNS }; enum _mmgui_main_contact_type { MMGUI_MAIN_CONTACT_UNKNOWN = 0, MMGUI_MAIN_CONTACT_HEADER, MMGUI_MAIN_CONTACT_MODEM, MMGUI_MAIN_CONTACT_GNOME, MMGUI_MAIN_CONTACT_KDE }; //CONTACTS void mmgui_main_contacts_sms(mmgui_application_t mmguiapp); void mmgui_main_contacts_sms_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_contacts_new(mmgui_application_t mmguiapp); void mmgui_main_contacts_new_button_clicked_signal(GObject *object, gpointer user_data); void mmgui_main_contacts_remove(mmgui_application_t mmguiapp); void mmgui_main_contacts_remove_button_clicked_signal(GObject *object, gpointer user_data); void mmgui_main_contacts_list_fill(mmgui_application_t mmguiapp); void mmgui_main_contacts_addressbook_list_fill(mmgui_application_t mmguiapp, guint contacttype); void mmgui_main_contacts_load_from_system_addressbooks(mmgui_application_t mmguiapp); void mmgui_main_contacts_list_init(mmgui_application_t mmguiapp); void mmgui_main_contacts_state_clear(mmgui_application_t mmguiapp); #endif /* __CONTACTS_PAGE_H__ */ modem-manager-gui-0.0.19.1/help/uz@Latn/uz@Latn.po000664 001750 001750 00000062274 13261703575 021427 0ustar00alexalex000000 000000 # # Translators: msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Latin) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Latn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Latn\n" "Plural-Forms: nplurals=1; plural=0;\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Umidjon Almasov , 2014" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "Modem Manager GUI haqida ma'lumot." #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "Modem Manager GUI haqida" #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "Tarjimalar" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Modem Manager GUI uchun yordam." #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "GNOME Hello logoModem Manager GUI qo'llanmasi" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "Foydalanish" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "Loyihaga hissani qo'shish" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "Litsenziya" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "Xatolar haqida xabar berish" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "Aloqalar ro'yxatlari" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "Tarmoq haqida ma'lumot" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "Modemlar" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "Tarmoq qidirish" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "SMS" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "Tarmoq trafigi" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "USSD kodlari" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/resources/pixmaps/sms-unread.png000664 001750 001750 00000001035 13261703575 023450 0ustar00alexalex000000 000000 PNG  IHDR KU'sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT(Ja|Lt3`V,1b&&Ru` tmoSn+(B0(c]SRIb2$yÈ7:,esOו#ÃT$I7ȶbn - Mò d)NN~߯MfswmmmQ==^Š=i%~+hiiM{IsKs_5u'i16 |U&&PUB!28==ca~7uׄ9NHnzLHmfoS*jªn,e CD"WzO'zXqm' vPVЕuQ]yIO9Π;An Fb|@tu~N)^KwIENDB`modem-manager-gui-0.0.19.1/src/plugins/Makefile000664 001750 001750 00000001455 13261703575 021107 0ustar00alexalex000000 000000 include ../../Makefile_h GCCMOD = gcc -fPIC GCCLMOD = gcc -shared INCMOD = `pkg-config --cflags glib-2.0 ofono` OFONOLIBMOD = `pkg-config --libs glib-2.0` -lgdbm -lrt OFONOOBJMOD = ofonohistory.o OFONOLIBDIR = $(LIBPATH)/ofono/plugins/ FILES_OFONO:= $(wildcard libmmgui-ofono*.so) all: ofonohistory ifeq ($(OFONOPLUGIN),true) ofonohistory: $(OFONOOBJMOD) $(GCCLMOD) $(INCMOD) $(LDFLAGS) $(OFONOOBJMOD) $(OFONOLIBMOD) -o libmmgui-ofono-history.so else ofonohistory: endif .c.o: $(GCCMOD) $(INCMOD) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ install: mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(OFONOLIBDIR) for f in $(FILES_OFONO); do \ cp $$f $(INSTALLPREFIX)$(DESTDIR)$(OFONOLIBDIR); \ done uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(OFONOLIBDIR)/*.so clean: rm -f *.o rm -f *.so modem-manager-gui-0.0.19.1/polkit/meson.build000664 001750 001750 00000000557 13261703575 020645 0ustar00alexalex000000 000000 i18n = import('i18n') i18n.merge_file('polkit-file', input: 'ru.linuxonly.modem-manager-gui.policy.in', output: 'ru.linuxonly.modem-manager-gui.policy', type: 'xml', data_dirs: join_paths(meson.source_root(), 'polkit'), po_dir: join_paths(meson.source_root(), 'polkit'), install: true, install_dir: join_paths(get_option('datadir'), 'polkit-1', 'actions') ) modem-manager-gui-0.0.19.1/src/modules/meson.build000664 001750 001750 00000004066 13261703575 021601 0ustar00alexalex000000 000000 mm06_c_sources = [ '../smsdb.c', '../encoding.c', '../dbus-utils.c', 'mm06.c' ] mm06_c_args = [ ] mm06 = shared_library('modmm_mm06', mm06_c_sources, c_args: mm06_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule, gdbm, m]) mm07_c_sources = [ '../smsdb.c', '../encoding.c', '../dbus-utils.c', 'mm07.c' ] mm07_c_args = [ ] mm07 = shared_library('modmm_mm07', mm07_c_sources, c_args: mm07_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule, gdbm, m]) nm09_c_sources = [ 'uuid.c', 'nm09.c' ] nm09_c_args = [ ] nm09 = shared_library('modcm_nm09', nm09_c_sources, c_args: nm09_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule]) pppd245_c_sources = [ 'pppd245.c' ] pppd245_c_args = [ ] pppd245 = shared_library('modcm_pppd245', pppd245_c_sources, c_args: pppd245_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule]) ofono109_c_sources = [ '../smsdb.c', '../encoding.c', '../vcard.c', 'historyshm.c', 'ofono109.c' ] ofono109_c_args = [ ] ofono109 = shared_library('modmm_ofono109', ofono109_c_sources, c_args: ofono109_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule, gdbm, rt, m]) connman112_c_sources = [ 'uuid.c', 'connman112.c' ] connman112_c_args = [ ] connman112 = shared_library('modcm_connman112', connman112_c_sources, c_args: connman112_c_args, install: true, install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'modem-manager-gui', 'modules'), dependencies : [glib, gobject, gio, gmodule]) modem-manager-gui-0.0.19.1/packages/mageia/000775 001750 001750 00000000000 13261703575 020173 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/ru/ru.po000664 001750 001750 00000012752 13261703575 017370 0ustar00alexalex000000 000000 # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alex , 2013-2015,2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 23:05+0300\n" "PO-Revision-Date: 2018-01-24 18:34+0000\n" "Last-Translator: Alex \n" "Language-Team: Russian (http://www.transifex.com/ethereal/modem-manager-gui/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "modem-manager-gui" msgstr "modem-manager-gui" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Nov 2017" msgstr "Ноя 2017" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "Modem Manager GUI v0.0.19" msgstr "Modem Manager GUI v0.0.19" #. type: TH #: modem-manager-gui.1:1 #, no-wrap msgid "User Commands" msgstr "Команды пользовательского уровня" #. type: SH #: modem-manager-gui.1:2 #, no-wrap msgid "NAME" msgstr "ИМЯ" #. type: Plain text #: modem-manager-gui.1:4 msgid "" "modem-manager-gui - simple graphical interface for Modem Manager daemon." msgstr "modem-manager-gui - простой графический интерфейс для демона Modem Manager." #. type: SH #: modem-manager-gui.1:4 #, no-wrap msgid "SYNOPSIS" msgstr "СИНТАКСИС" #. type: Plain text #: modem-manager-gui.1:7 msgid "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." msgstr "B [ -i ] [ -m module ] [ -c module ] [ -l ]..." #. type: SH #: modem-manager-gui.1:7 #, no-wrap msgid "DESCRIPTION" msgstr "ОПИСАНИЕ" #. type: Plain text #: modem-manager-gui.1:11 msgid "" "This program is simple graphical interface for Modem Manager 0.6/0.7, Wader " "and oFono daemons using dbus interface." msgstr "Данная программа является простым графическим интерфейсом для демонов Modem Manager 0.6/0.7 Wader и oFono, использующим интерфейс dbus." #. type: TP #: modem-manager-gui.1:11 #, no-wrap msgid "B<-i, --invisible>" msgstr "B<-i, --invisible>" #. type: Plain text #: modem-manager-gui.1:14 msgid "Do not show window on start" msgstr "Не показывать окно при запуске" #. type: TP #: modem-manager-gui.1:14 #, no-wrap msgid "B<-m, --mmmodule>" msgstr "B<-m, --mmmodule>" #. type: Plain text #: modem-manager-gui.1:17 msgid "Use specified modem management module" msgstr "Использовать указанный модуль поддержки системы управления модемами" #. type: TP #: modem-manager-gui.1:17 #, no-wrap msgid "B<-c, --cmmodule>" msgstr "B<-c, --cmmodule>" #. type: Plain text #: modem-manager-gui.1:20 msgid "Use specified connection management module" msgstr "Использовать указанный модуль поддержки системы управления соединениями" #. type: TP #: modem-manager-gui.1:20 #, no-wrap msgid "B<-l, --listmodules>" msgstr "B<-l, --listmodules>" #. type: Plain text #: modem-manager-gui.1:23 msgid "List all available modules and exit" msgstr "Вывести список всех доступных модулей и выйти" #. type: SH #: modem-manager-gui.1:23 #, no-wrap msgid "AUTHOR" msgstr "АВТОР" #. type: Plain text #: modem-manager-gui.1:25 msgid "Written by Alex. See the about dialog for all contributors." msgstr "Основным разработчиком является Alex. Имена других участников процесса разработки находятся в диалоге сведений о программе." #. type: SH #: modem-manager-gui.1:25 #, no-wrap msgid "REPORTING BUGS" msgstr "ОШИБКИ" #. type: Plain text #: modem-manager-gui.1:28 msgid "" "Report bugs to Ealex@linuxonly.ruE, or to the support forum section " "at Ehttps://linuxonly.ru/forum/modem-manager-gui/E." msgstr "Сообщения об ошибках отправляйте на адрес электронной почты Ealex@linuxonly.ruE, либо оcтавляйте в разделе форума технической поддержки, расположенном по адресу Ehttps://linuxonly.ru/forum/modem-manager-gui/E." #. type: SH #: modem-manager-gui.1:28 #, no-wrap msgid "COPYRIGHT" msgstr "АВТОРСКИЕ ПРАВА" #. type: Plain text #: modem-manager-gui.1:30 msgid "Copyright \\(co 2012-2017 Alex" msgstr "Copyright \\(co 2012-2017 Alex" #. type: Plain text #: modem-manager-gui.1:33 msgid "" "This is free software. You may redistribute copies of it under the terms of" " the GNU General Public License " "Ehttp://www.gnu.org/licenses/gpl.htmlE." msgstr "Это свободное программное обеспечение. Вы можете распространять его копии в соответствии с условиями лицензии GNU General Public License Ehttp://www.gnu.org/licenses/gpl.htmlE." #. type: SH #: modem-manager-gui.1:33 #, no-wrap msgid "SEE ALSO" msgstr "СМ. ТАКЖЕ" #. type: Plain text #: modem-manager-gui.1:34 msgid "B(1)" msgstr "B(1)" modem-manager-gui-0.0.19.1/help/Makefile000664 001750 001750 00000002165 13261703575 017566 0ustar00alexalex000000 000000 include ../Makefile_h HELPDIR = $(PREFIX)/share/help all: while read lang; do \ msgfmt $$lang/$$lang.po -f -v -o $$lang/$$lang.mo;\ for page in C/*.page; do \ itstool -m $$lang/$$lang.mo -o $$lang/ $$page; \ done \ done < LINGUAS install: install -d $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/C/modem-manager-gui cp -r C/* $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/C/modem-manager-gui while read lang; do \ install -d $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/$$lang/modem-manager-gui/figures; \ cp C/figures/* $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/$$lang/modem-manager-gui/figures/; \ cp $$lang/*.page $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/$$lang/modem-manager-gui/; \ done < LINGUAS uninstall: rm -rf $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/C/modem-manager-gui while read lang; do \ rm -rf $(INSTALLPREFIX)$(DESTDIR)$(HELPDIR)/$$lang/modem-manager-gui; \ done < LINGUAS messages: itstool -o modem-manager-gui-help.pot C/*.page; while read lang; do \ msgmerge -U $$lang/$$lang.po modem-manager-gui-help.pot; \ done < LINGUAS clean: while read lang; do \ rm -f $$lang/$$lang.mo; \ rm -f $$lang/*.page; \ done < LINGUAS modem-manager-gui-0.0.19.1/polkit/pt_BR.po000664 001750 001750 00000003055 13261703575 020045 0ustar00alexalex000000 000000 # # Translators: # Rafael Fontenelle , 2015 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/ethereal/modem-manager-gui/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Habilitar e iniciar serviços de gerenciamento de modem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Serviços de gerenciamento de modem não estão ativos. Você precisa se autenticar habilitar e iniciar estes serviços." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Usar serviços de gerenciamento de modem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Serviço de gerenciamento de modem precisa de suas credenciais. Você precisa se autenticar para usar este serviço." modem-manager-gui-0.0.19.1/man/id/000775 001750 001750 00000000000 13261703575 016341 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/polkit/LINGUAS000664 001750 001750 00000000060 13261703575 017515 0ustar00alexalex000000 000000 ar bn_BD de fr id pl pl_PL pt_BR ru tr uk zh_CN modem-manager-gui-0.0.19.1/polkit/Makefile000664 001750 001750 00000001503 13261703575 020133 0ustar00alexalex000000 000000 include ../Makefile_h POLKITACTIONSDIR = $(PREFIX)/share/polkit-1/actions all: while read lang; do \ msgfmt $$lang.po -f -v -o $$lang.mo; \ done < LINGUAS itstool -i its/polkit.its -j ru.linuxonly.modem-manager-gui.policy.in -o ru.linuxonly.modem-manager-gui.policy *.mo install: install -d $(INSTALLPREFIX)$(DESTDIR)$(POLKITACTIONSDIR) cp ru.linuxonly.modem-manager-gui.policy $(INSTALLPREFIX)$(DESTDIR)$(POLKITACTIONSDIR) uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(POLKITACTIONSDIR)/ru.linuxonly.modem-manager-gui.policy messages: itstool -i its/polkit.its -o ru.linuxonly.modem-manager-gui.policy.pot ru.linuxonly.modem-manager-gui.policy.in while read lang; do \ msgmerge -U $$lang.po ru.linuxonly.modem-manager-gui.policy.pot; \ done < LINGUAS clean: rm -f *.mo rm -f ru.linuxonly.modem-manager-gui.policy modem-manager-gui-0.0.19.1/polkit/id.po000664 001750 001750 00000002762 13261703575 017437 0ustar00alexalex000000 000000 # # Translators: # windi anto , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2015-10-11 20:38+0300\n" "PO-Revision-Date: 2018-01-24 18:50+0000\n" "Last-Translator: windi anto \n" "Language-Team: Indonesian (http://www.transifex.com/ethereal/modem-manager-gui/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:10 msgid "Enable and start modem management services" msgstr "Aktifkan dan mulai service manajeman modem" #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:11 msgid "" "Modem management services aren't running. You need to authenticate to enable" " and start these services." msgstr "Service manajeman modem tidak berjalan. Anda perlu melakukan otentikasi untuk mengaktifkan dan memulai layanan ini." #. (itstool) path: action/description #: ru.linuxonly.modem-manager-gui.policy.in:21 msgid "Use modem management service" msgstr "Gunakan service manajemen modem " #. (itstool) path: action/message #: ru.linuxonly.modem-manager-gui.policy.in:22 msgid "" "Modem management service needs your credentials. You need to authenticate to" " use this service." msgstr "Layanan pengelolaan modem memerlukan kredensial Anda. Anda perlu melakukan otentikasi untuk menggunakan layanan ini." modem-manager-gui-0.0.19.1/resources/pixmaps/sms-read.png000664 001750 001750 00000001343 13261703575 023107 0ustar00alexalex000000 000000 PNG  IHDRoUtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<`IDAT8ԽOqP`zQ,DRC" 09h"$`4N8:h)&J!P@ ~Or=~߻Q(@$IF"P'^Tf`PQ26JLSkƲ _ ^yrUIiG3664L'uqfn>(W' =\߫WC`xx(r0O0h[1>br %$ٸM-%arr횏FveUwDKKYTUUe YX,[ߠ݊N;Igx?鬥n @8Li:YYYevfUU!;;)>ܦ  ͋ppňhhl觩NO˕,$ lIQi,|_ PWj`wV:J "4EF|o8$sYwL0BQ c 'zdY*tPX~,a`0r%UF#~`LT՟J0j1{rQ,4d2i,f3> OҀ,v{| pIENDB`modem-manager-gui-0.0.19.1/resources/pixmaps/traffic-tb.png000664 001750 001750 00000004436 13261703575 023423 0ustar00alexalex000000 000000 PNG  IHDR szzbKGD pHYs B(xtIME.yIDATXíMlT罙`cƞbl1|ٍV5V"(TU*mh7iR"JR CԴPH`bᏎ a3v3;FAUt{9<)͛7kmu]_SVVϷMD"RcL9Ryk0-!K94t}}}[__RpiW7nܐ/$u=G?苝oڴi} 8ֶq۶mqmq2J/iDhhhfffOMM=#Xs#7+dۦM,Ku]\ץ0, 4,8 \z˲u]EQfuuoG-k#?~).7oԴgUTQ__O,#SVVyd247o$.4G}$ J]Լݽyluuuq֯_Oyy9yAD2::nݢq=\2944tG::::|>-[D(%ilݺ6B\v`&vahh/>%r> I&8illիNDؾ};]]]CӴȂ} PSSٳgpdxxeYH x!,"EYEkk+/333{SVVFss3;v젧x<^ܳk./t---$ )"r\iW\\(WUUR p@ |cǎ155Ųe裏h44`NXv-W… ܾ}P(D,CDOSFFFp^z&\LLL8{졳|gtuu؈eY|y~?"UnߏmR8mH$mk׮dذaxMx4Mlɓ~4Mcdd sssxC)mši""+**ض|^,"Nsu<+\.HVu7n9 4 ˲0MuPS@{Q^^NMM r9A)뺴@kk+@aA&"q]xRljAaCi |ٱc1;;,mvZ:::N>,^GaLOOyb $jhh@u<|۷~zRLMM133Css3DQ=J)4My!뢯\r8<rDUVd0 q!  /Efٲe$Iz{{O:U̪ił< ~t J4w&3<)~;w0??iD"֬YCgg'xG6_ghh] W""J F7"[D/"RTXjlܸZ)//;399I*رc<|)~'"(s2<,"Шf VPh4Jee%`p|>tL&SbaƨshO+KA< c;?MRh.'ul;WK}ڱvIR|T ø n= x0k_Xc?P%"d/,LI)GDpZX#a|X kw2`E[n<)> aM,t   XZ 40_{_LIENDB`modem-manager-gui-0.0.19.1/help/id/000775 001750 001750 00000000000 13261703575 016516 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/appdata/its/appdata.loc000664 001750 001750 00000000512 13261703575 021512 0ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/help/C/contrib-code.page000664 001750 001750 00000003007 13261703575 021512 0ustar00alexalex000000 000000 How you can help make Modem Manager GUI better. Mario Blättermann mario.blaettermann@gmail.com Alex alex@linuxonly.ru

Creative Commons Share Alike 3.0

Provide code

Modem Manager GUI has a version control system at Bitbucket.com. You can clone the repository with the following command:

hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-gui

Note, this clone command doesn't give you write access to the repository.

For general help on how Bitbucket works, see the Bitbucket documentation.

Modem Manager GUI source code is stored inside Mercurial repository, so you don't have to read Git tutorials; just make sure you know basic Mercurial commands and able to make pull requests on Bitbucket platform.

modem-manager-gui-0.0.19.1/src/libpaths.h000664 001750 001750 00000003023 13261703575 017736 0ustar00alexalex000000 000000 /* * libpaths.h * * Copyright 2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __LIBPATHS_H__ #define __LIBPATHS_H__ #include struct _mmgui_libpaths_cache { gint fd; gchar *mapping; gsize mapsize; time_t modtime; GHashTable *cache; gchar *safename; /*Local cache*/ gchar *localfilename; gboolean updatelocal; GKeyFile *localkeyfile; }; typedef struct _mmgui_libpaths_cache *mmgui_libpaths_cache_t; mmgui_libpaths_cache_t mmgui_libpaths_cache_new(gchar *libname, ...); void mmgui_libpaths_cache_close(mmgui_libpaths_cache_t libcache); gchar *mmgui_libpaths_cache_get_library_full_path(mmgui_libpaths_cache_t libcache, gchar *libname); gboolean mmgui_libpaths_cache_check_library_version(mmgui_libpaths_cache_t libcache, gchar *libname, gint major, gint minor, gint release); #endif /* __LIBPATHS_H__ */ modem-manager-gui-0.0.19.1/src/modules/mm06.c000664 001750 001750 00000307171 13261703575 020365 0ustar00alexalex000000 000000 /* * mm06.c * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "../mmguicore.h" #include "../smsdb.h" #include "../encoding.h" #include "../dbus-utils.h" #define MMGUI_MODULE_SERVICE_NAME "org.freedesktop.ModemManager" #define MMGUI_MODULE_SYSTEMD_NAME "modem-manager.service" #define MMGUI_MODULE_IDENTIFIER 60 #define MMGUI_MODULE_DESCRIPTION "Modem Manager <= 0.6.0/Wader" #define MMGUI_MODULE_COMPATIBILITY "org.freedesktop.NetworkManager;/usr/sbin/pppd;" #define MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT 20000 #define MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT 35000 #define MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT 25000 #define MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT 60000 #define MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT 20000 #define MMGUI_MODULE_SMS_POLL_INTERVAL 3 //Location types internal flags typedef enum { MODULE_INT_MODEM_LOCATION_CAPABILITY_UNKNOWN = 0x0, MODULE_INT_MODEM_LOCATION_CAPABILITY_GPS_NMEA = 0x1, MODULE_INT_MODEM_LOCATION_CAPABILITY_GSM_LAC_CI = 0x2 } ModuleIntModemLocationCapability; /*Registration types internal flags*/ typedef enum { MODULE_INT_GSM_NETWORK_REG_STATUS_IDLE = 0, MODULE_INT_GSM_NETWORK_REG_STATUS_HOME = 1, MODULE_INT_GSM_NETWORK_REG_STATUS_SEARCHING = 2, MODULE_INT_GSM_NETWORK_REG_STATUS_DENIED = 3, MODULE_INT_GSM_NETWORK_REG_STATUS_UNKNOWN = 4, MODULE_INT_GSM_NETWORK_REG_STATUS_ROAMING = 5 } ModuleIntGsmNetworkRegStatus; typedef enum { MODULE_INT_CDMA_REGISTRATION_STATE_UNKNOWN = 0, MODULE_INT_CDMA_REGISTRATION_STATE_REGISTERED = 1, MODULE_INT_CDMA_REGISTRATION_STATE_HOME = 2, MODULE_INT_CDMA_REGISTRATION_STATE_ROAMING = 3 } ModuleIntCdmaRegistrationState; /*State internal flags*/ typedef enum { MODULE_INT_MODEM_STATE_UNKNOWN = 0, MODULE_INT_MODEM_STATE_DISABLED = 10, MODULE_INT_MODEM_STATE_DISABLING = 20, MODULE_INT_MODEM_STATE_ENABLING = 30, MODULE_INT_MODEM_STATE_ENABLED = 40, MODULE_INT_MODEM_STATE_SEARCHING = 50, MODULE_INT_MODEM_STATE_REGISTERED = 60, MODULE_INT_MODEM_STATE_DISCONNECTING = 70, MODULE_INT_MODEM_STATE_CONNECTING = 80, MODULE_INT_MODEM_STATE_CONNECTED = 90 }ModuleIntModemState; /*Service type*/ typedef enum { MODULE_INT_SERVICE_UNDEFINED = 0x0, MODULE_INT_SERVICE_MODEM_MANAGER = 0x1, MODULE_INT_SERVICE_WADER = 0x2 } ModuleIntService; //Private module variables struct _mmguimoduledata { //DBus connection GDBusConnection *connection; //DBus proxy objects GDBusProxy *managerproxy; GDBusProxy *cardproxy; GDBusProxy *netproxy; GDBusProxy *modemproxy; GDBusProxy *smsproxy; GDBusProxy *ussdproxy; GDBusProxy *locationproxy; GDBusProxy *timeproxy; GDBusProxy *contactsproxy; //Attached signal handlers gulong statesignal; gulong smssignal; //Property change signal gulong netsignal; gulong netpropsignal; gulong locationpropsignal; //Service type ModuleIntService service; //Legacy ModemManager versions gboolean needsmspolling; time_t polltimestamp; //USSD reencoding flag gboolean reencodeussd; //Last error message gchar *errormessage; //Cancellable GCancellable *cancellable; //Operations timeouts guint timeouts[MMGUI_DEVICE_OPERATIONS]; }; typedef struct _mmguimoduledata *moduledata_t; static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error); static guint mmgui_module_device_id(const gchar *devpath); static gint mmgui_module_gsm_operator_code(const gchar *opcodestr); static void mmgui_module_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data); static void mmgui_module_property_change_handler(GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, gpointer data); static gboolean mmgui_module_device_enabled_from_state(guint state); static gboolean mmgui_module_device_locked_from_unlock_string(gchar *ustring); static gint mmgui_module_device_lock_type_from_unlock_string(gchar *ustring); static gboolean mmgui_module_device_connected_from_state(gint state); static gboolean mmgui_module_device_registered_from_state(gint state); static gboolean mmgui_module_device_registered_from_status(guint status); static gboolean mmgui_module_cdma_device_registered_from_status(guint status); static enum _mmgui_reg_status mmgui_module_registration_status_translate(guint status); static enum _mmgui_reg_status mmgui_module_cdma_registration_status_translate(guint status); static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath); static gboolean mmgui_module_devices_update_device_mode(gpointer mmguicore, gint oldstate, gint newstate, guint changereason); static gboolean mmgui_module_devices_update_location(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_devices_enable_location(gpointer mmguicore, mmguidevice_t device, gboolean enable); static gboolean mmgui_module_devices_restart_ussd(gpointer mmguicore); static void mmgui_module_devices_enable_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static time_t mmgui_module_str_to_time(const gchar *str); static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, GVariant *messagev); static void mmgui_module_sms_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static void mmgui_module_ussd_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static mmgui_scanned_network_t mmgui_module_network_retrieve(GVariant *networkv); static void mmgui_module_networks_scan_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data); static mmgui_contact_t mmgui_module_contact_retrieve(GVariant *contactv); static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error) { moduledata_t moduledata; if ((mmguicore == NULL) || (error == NULL)) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (error->message != NULL) { moduledata->errormessage = g_strdup(error->message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static guint mmgui_module_device_id(const gchar *devpath) { guint id; gchar *devidstr; devidstr = strrchr(devpath, '/') + 1; if ((devidstr != NULL) && (devidstr[0] != '\0')) { id = atoi(devidstr); } else { id = 0; } return id; } static gint mmgui_module_gsm_operator_code(const gchar *opcodestr) { gsize length; gchar codepartbuf[4]; gint operatorcode; gchar *decopcodestr; gsize decopcodelen; if (opcodestr == NULL) return 0; length = strlen(opcodestr); operatorcode = 0; decopcodestr = NULL; decopcodelen = 0; if ((length == 5) || (length == 6)) { /*UTF-8 operator code*/ decopcodestr = g_strdup(opcodestr); decopcodelen = length; } else if ((length == 20) || (length == 24)) { /*UCS-2 operator code*/ decopcodestr = (gchar *)ucs2_to_utf8((const guchar *)opcodestr, length, &decopcodelen); if ((decopcodelen != 5) && (decopcodelen != 6)) { if (decopcodestr != NULL) { g_free(decopcodestr); } return operatorcode; } } else { /*Unknown format*/ return operatorcode; } /*MCC*/ memset(codepartbuf, 0, sizeof(codepartbuf)); memcpy(codepartbuf, decopcodestr, 3); operatorcode |= (atoi(codepartbuf) & 0x0000ffff) << 16; /*MNC*/ memset(codepartbuf, 0, sizeof(codepartbuf)); memcpy(codepartbuf, decopcodestr + 3, decopcodelen - 3); operatorcode |= atoi(codepartbuf) & 0x0000ffff; g_free(decopcodestr); return operatorcode; } static void mmgui_module_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; mmguidevice_t device; moduledata_t moduledata; gchar *devpath, *operatorcode, *operatorname; guint id, oldstate, newstate, changereason, regstatus, regstatus2; gboolean status; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (g_str_equal(signal_name, "DeviceAdded")) { g_variant_get(parameters, "(o)", &devpath); if (devpath != NULL) { device = mmgui_module_device_new(mmguicore, devpath); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_ADDED, mmguicore, device); } } } else if (g_str_equal(signal_name, "DeviceRemoved")) { g_variant_get(parameters, "(o)", &devpath); if (devpath != NULL) { id = mmgui_module_device_id(devpath); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_REMOVED, mmguicore, GUINT_TO_POINTER(id)); } } } else if (g_str_equal(signal_name, "Completed")) { g_variant_get(parameters, "(ub)", &id, &status); if ((status) && (!moduledata->needsmspolling)) { if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_SMS_COMPLETED, mmguicore, GUINT_TO_POINTER(id)); } } } else if (g_str_equal(signal_name, "SignalQuality")) { g_variant_get(parameters, "(u)", &id); if (mmguicore->device != NULL) { mmguicore->device->siglevel = id; if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_SIGNAL_LEVEL_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(signal_name, "RegistrationInfo")) { if (mmguicore->device != NULL) { g_variant_get(parameters, "(uss)", ®status, &operatorcode, &operatorname); if (mmguicore->device->operatorname != NULL) { g_free(mmguicore->device->operatorname); mmguicore->device->operatorname = NULL; } mmguicore->device->registered = mmgui_module_device_registered_from_status(regstatus); mmguicore->device->regstatus = mmgui_module_registration_status_translate(regstatus); mmguicore->device->operatorcode = mmgui_module_gsm_operator_code(operatorcode); mmguicore->device->operatorname = g_strdup(operatorname); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(signal_name, "RegistrationStateChanged")) { if (mmguicore->device != NULL) { g_variant_get(parameters, "(uu)", ®status, ®status2); mmguicore->device->registered = mmgui_module_cdma_device_registered_from_status(regstatus); mmguicore->device->regstatus = mmgui_module_cdma_registration_status_translate(regstatus); if (mmguicore->device->regstatus == MMGUI_REG_STATUS_UNKNOWN) { mmguicore->device->registered = mmgui_module_cdma_device_registered_from_status(regstatus2); mmguicore->device->regstatus = mmgui_module_cdma_registration_status_translate(regstatus2); } if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(signal_name, "StateChanged")) { if (mmguicore->device != NULL) { g_variant_get(parameters, "(uuu)", &oldstate, &newstate, &changereason); mmgui_module_devices_update_device_mode(mmguicore, oldstate, newstate, changereason); } } g_debug("SIGNAL: %s (%s) argtype: %s\n", signal_name, sender_name, g_variant_get_type_string(parameters)); } static void mmgui_module_property_change_handler(GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, gpointer data) { mmguicore_t mmguicore; GVariantIter *iter; const gchar *key; GVariant *value; if ((changed_properties == NULL) || (data == NULL)) return; mmguicore = (mmguicore_t)data; if (mmguicore->device == NULL) return; if (g_variant_n_children(changed_properties) > 0) { g_variant_get(changed_properties, "a{sv}", &iter); while (g_variant_iter_loop(iter, "{&sv}", &key, &value)) { if (g_str_equal(key, "Location")) { /*Update location*/ if (mmgui_module_devices_update_location(mmguicore, mmguicore->device)) { if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(key, "AllowedMode")) { /*Update allowed mode*/ mmguicore->device->allmode = g_variant_get_uint32(value); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_MODE_CHANGE, mmguicore, mmguicore->device); } } else if (g_str_equal(key, "AccessTechnology")) { /*Update access technology*/ mmguicore->device->mode = g_variant_get_uint32(value); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_MODE_CHANGE, mmguicore, mmguicore->device); } } g_debug("Property changed: %s\n", key); } g_variant_iter_free(iter); } } static gboolean mmgui_module_device_enabled_from_state(guint state) { gboolean enabled; switch (state) { case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: enabled = FALSE; break; case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: enabled = TRUE; break; default: enabled = FALSE; break; } return enabled; } static gboolean mmgui_module_device_locked_from_unlock_string(gchar *ustring) { gboolean locked; if (ustring == NULL) return FALSE; if (ustring[0] == '\0') { locked = FALSE; } else { locked = TRUE; } return locked; } static gint mmgui_module_device_lock_type_from_unlock_string(gchar *ustring) { gint locktype; locktype = MMGUI_LOCK_TYPE_OTHER; if (ustring == NULL) return locktype; if (ustring[0] == '\0') { locktype = MMGUI_LOCK_TYPE_NONE; } else if (g_str_equal(ustring, "sim-pin")) { locktype = MMGUI_LOCK_TYPE_PIN; } else if (g_str_equal(ustring, "sim-puk")) { locktype = MMGUI_LOCK_TYPE_PUK; } else { locktype = MMGUI_LOCK_TYPE_OTHER; } return locktype; } static gboolean mmgui_module_device_connected_from_state(gint state) { gboolean connected; switch (state) { case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: connected = TRUE; break; case MODULE_INT_MODEM_STATE_CONNECTING: connected = FALSE; break; case MODULE_INT_MODEM_STATE_CONNECTED: connected = TRUE; break; default: connected = FALSE; break; } return connected; } static gboolean mmgui_module_device_registered_from_state(gint state) { gboolean registered; switch (state) { case MODULE_INT_MODEM_STATE_UNKNOWN: case MODULE_INT_MODEM_STATE_DISABLED: case MODULE_INT_MODEM_STATE_DISABLING: case MODULE_INT_MODEM_STATE_ENABLING: case MODULE_INT_MODEM_STATE_ENABLED: case MODULE_INT_MODEM_STATE_SEARCHING: registered = FALSE; break; case MODULE_INT_MODEM_STATE_REGISTERED: case MODULE_INT_MODEM_STATE_DISCONNECTING: case MODULE_INT_MODEM_STATE_CONNECTING: case MODULE_INT_MODEM_STATE_CONNECTED: registered = TRUE; break; default: registered = FALSE; break; } return registered; } static gboolean mmgui_module_device_registered_from_status(guint status) { gboolean registered; switch (status) { case MODULE_INT_GSM_NETWORK_REG_STATUS_IDLE: registered = FALSE; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_HOME: registered = TRUE; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_SEARCHING: case MODULE_INT_GSM_NETWORK_REG_STATUS_DENIED: case MODULE_INT_GSM_NETWORK_REG_STATUS_UNKNOWN: registered = FALSE; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_ROAMING: registered = TRUE; break; default: registered = FALSE; break; } return registered; } static gboolean mmgui_module_cdma_device_registered_from_status(guint status) { gboolean registered; switch (status) { case MODULE_INT_CDMA_REGISTRATION_STATE_UNKNOWN: registered = FALSE; break; case MODULE_INT_CDMA_REGISTRATION_STATE_REGISTERED: case MODULE_INT_CDMA_REGISTRATION_STATE_HOME: case MODULE_INT_CDMA_REGISTRATION_STATE_ROAMING: registered = TRUE; break; default: registered = FALSE; break; } return registered; } static enum _mmgui_reg_status mmgui_module_registration_status_translate(guint status) { enum _mmgui_reg_status tstatus; switch (status) { case MODULE_INT_GSM_NETWORK_REG_STATUS_IDLE: tstatus = MMGUI_REG_STATUS_IDLE; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_HOME: tstatus = MMGUI_REG_STATUS_HOME; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_SEARCHING: tstatus = MMGUI_REG_STATUS_SEARCHING; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_DENIED: tstatus = MMGUI_REG_STATUS_DENIED; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_UNKNOWN: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; case MODULE_INT_GSM_NETWORK_REG_STATUS_ROAMING: tstatus = MMGUI_REG_STATUS_ROAMING; break; default: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; } return tstatus; } static enum _mmgui_reg_status mmgui_module_cdma_registration_status_translate(guint status) { enum _mmgui_reg_status tstatus; switch (status) { case MODULE_INT_CDMA_REGISTRATION_STATE_UNKNOWN: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; case MODULE_INT_CDMA_REGISTRATION_STATE_REGISTERED: tstatus = MMGUI_REG_STATUS_IDLE; break; case MODULE_INT_CDMA_REGISTRATION_STATE_HOME: tstatus = MMGUI_REG_STATUS_HOME; break; case MODULE_INT_CDMA_REGISTRATION_STATE_ROAMING: tstatus = MMGUI_REG_STATUS_ROAMING; break; default: tstatus = MMGUI_REG_STATUS_UNKNOWN; break; } return tstatus; } static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath) { mmguidevice_t device; moduledata_t moduledata; GDBusProxy *deviceproxy; GError *error; GVariant *deviceinfo; gchar *manufacturer, *model, *version, *blockstr; gsize strsize; if ((mmguicore == NULL) || (devpath == NULL)) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return NULL; if (moduledata->connection == NULL) return NULL; device = g_new0(struct _mmguidevice, 1); //Save device identifier and object path device->id = mmgui_module_device_id(devpath); device->objectpath = g_strdup(devpath); //If service type not defined, guess it using device object path if (devpath != NULL) { if (moduledata->service == MODULE_INT_SERVICE_UNDEFINED) { if (strstr(devpath, "Modems") != NULL) { moduledata->service = MODULE_INT_SERVICE_MODEM_MANAGER; } else if (strstr(devpath, "Devices") != NULL) { moduledata->service = MODULE_INT_SERVICE_WADER; } } } device->operation = MMGUI_DEVICE_OPERATION_IDLE; //Zero values we can't get this moment //SMS device->smscaps = MMGUI_SMS_CAPS_NONE; device->smsdb = NULL; //Networks //Info device->operatorname = NULL; device->operatorcode = 0; device->imei = NULL; device->imsi = NULL; //USSD device->ussdcaps = MMGUI_USSD_CAPS_NONE; device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; //Location device->locationcaps = MMGUI_LOCATION_CAPS_NONE; memset(device->loc3gppdata, 0, sizeof(device->loc3gppdata)); memset(device->locgpsdata, 0, sizeof(device->locgpsdata)); //Scan device->scancaps = MMGUI_SCAN_CAPS_NONE; //Traffic device->rxbytes = 0; device->txbytes = 0; device->sessiontime = 0; device->speedchecktime = 0; device->smschecktime = 0; device->speedindex = 0; device->connected = FALSE; memset(device->speedvalues, 0, sizeof(device->speedvalues)); memset(device->interface, 0, sizeof(device->interface)); //Contacts device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; device->contactslist = NULL; error = NULL; deviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", devpath, "org.freedesktop.ModemManager.Modem", NULL, &error); if ((deviceproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); //Fill default values device->manufacturer = g_strdup(_("Unknown")); device->model = g_strdup(_("Unknown")); device->version = g_strdup(_("Unknown")); device->port = g_strdup(_("Unknown")); device->type = MMGUI_DEVICE_TYPE_GSM; return device; } //Is device enabled deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Enabled"); if (deviceinfo != NULL) { device->enabled = g_variant_get_boolean(deviceinfo); g_variant_unref(deviceinfo); } else { device->enabled = TRUE; g_debug("Failed to retrieve device enabled state, assuming enabled\n"); } /*If device locked and what type of lock it is*/ deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "UnlockRequired"); if (deviceinfo != NULL) { strsize = 256; blockstr = (gchar *)g_variant_get_string(deviceinfo, &strsize); device->blocked = mmgui_module_device_locked_from_unlock_string(blockstr); device->locktype = mmgui_module_device_lock_type_from_unlock_string(blockstr); g_variant_unref(deviceinfo); } else { device->blocked = FALSE; g_debug("Failed to retrieve device blocked state, assuming not blocked\n"); } /*Wader needs to enable modem before working with it*/ if (moduledata->service == MODULE_INT_SERVICE_WADER) { if (!device->enabled) { error = NULL; g_dbus_proxy_call_sync(deviceproxy, "Enable", g_variant_new("(b)", TRUE), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); //Fill default values device->manufacturer = g_strdup(_("Unknown")); device->model = g_strdup(_("Unknown")); device->version = g_strdup(_("Unknown")); device->port = g_strdup(_("Unknown")); device->type = MMGUI_DEVICE_TYPE_GSM; return device; } } } error = NULL; deviceinfo = g_dbus_proxy_call_sync(deviceproxy, "GetInfo", NULL, 0, -1, NULL, &error); if ((deviceinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); //Fill default values device->manufacturer = g_strdup(_("Unknown")); device->model = g_strdup(_("Unknown")); device->version = g_strdup(_("Unknown")); device->port = g_strdup(_("Unknown")); device->type = MMGUI_DEVICE_TYPE_GSM; return device; } g_variant_get(deviceinfo, "((sss))", &manufacturer, &model, &version); if (manufacturer != NULL) { device->manufacturer = g_strdup(manufacturer); } else { device->manufacturer = g_strdup(_("Unknown")); } if (model != NULL) { device->model = g_strdup(model); } else { device->model = g_strdup(_("Unknown")); } if (version != NULL) { device->version = g_strdup(version); } else { device->version = g_strdup(_("Unknown")); } g_variant_unref(deviceinfo); //Device path deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Device"); if (deviceinfo != NULL) { strsize = 256; device->port = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->sysfspath = NULL; g_debug("Failed to retrieve device path\n"); } //Need to get usb device serial for fallback traffic monitoring deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "MasterDevice"); if (deviceinfo != NULL) { strsize = 256; device->sysfspath = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->sysfspath = NULL; g_debug("Failed to retrieve device serial specification\n"); } //Device type deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "Type"); if (deviceinfo != NULL) { device->type = g_variant_get_uint32(deviceinfo); g_variant_unref(deviceinfo); } else { device->type = MMGUI_DEVICE_TYPE_GSM; g_debug("Failed to retrieve device type, assuming GSM\n"); } //Internal Modem Manager identifier (some services, e.g. Wader not using it) if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { deviceinfo = g_dbus_proxy_get_cached_property(deviceproxy, "DeviceIdentifier"); if (deviceinfo != NULL) { strsize = 256; device->internalid = g_strdup(g_variant_get_string(deviceinfo, &strsize)); g_variant_unref(deviceinfo); } else { device->internalid = NULL; g_debug("Failed to retrieve device internal identifier\n"); } } else { device->internalid = NULL; } //Persistent device identifier blockstr = g_strdup_printf("%s_%s_%s", device->manufacturer, device->model, device->version); device->persistentid = g_compute_checksum_for_string(G_CHECKSUM_MD5, (const gchar *)blockstr, -1); g_free(blockstr); g_object_unref(deviceproxy); return device; } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_MODEM_MANAGER; module->requirement = MMGUI_MODULE_REQUIREMENT_SERVICE; module->priority = MMGUI_MODULE_PRIORITY_LOW; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t *)&mmguicorelc->moduledata; (*moduledata) = g_new0(struct _mmguimoduledata, 1); error = NULL; (*moduledata)->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); (*moduledata)->errormessage = NULL; if (((*moduledata)->connection == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_free(mmguicorelc->moduledata); return FALSE; } error = NULL; (*moduledata)->managerproxy = g_dbus_proxy_new_sync((*moduledata)->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", "/org/freedesktop/ModemManager", "org.freedesktop.ModemManager", NULL, &error); if (((*moduledata)->managerproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->moduledata); return FALSE; } g_signal_connect(G_OBJECT((*moduledata)->managerproxy), "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); //Set service type to undefined before using any functions (*moduledata)->service = MODULE_INT_SERVICE_UNDEFINED; /*Cancellable*/ (*moduledata)->cancellable = g_cancellable_new(); /*Operations timeouts*/ (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_ENABLE] = MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS] = MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD] = MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SCAN] = MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK] = MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT; return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); //Close device //Stop subsystems if (moduledata != NULL) { if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (moduledata->cancellable != NULL) { g_object_unref(moduledata->cancellable); moduledata->cancellable = NULL; } if (moduledata->managerproxy != NULL) { g_object_unref(moduledata->managerproxy); moduledata->managerproxy = NULL; } if (moduledata->connection != NULL) { g_object_unref(moduledata->connection); moduledata->connection = NULL; } g_free(moduledata); } return TRUE; } G_MODULE_EXPORT gchar *mmgui_module_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); return moduledata->errormessage; } G_MODULE_EXPORT gboolean mmgui_module_interrupt_operation(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (device->operation == MMGUI_DEVICE_OPERATION_IDLE) return FALSE; if (moduledata->cancellable != NULL) { g_cancellable_cancel(moduledata->cancellable); return TRUE; } else { return FALSE; } } G_MODULE_EXPORT gboolean mmgui_module_set_timeout(gpointer mmguicore, guint operation, guint timeout) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (timeout < 1000) timeout *= 1000; if (operation < MMGUI_DEVICE_OPERATIONS) { moduledata->timeouts[operation] = timeout; return TRUE; } else { return FALSE; } } G_MODULE_EXPORT guint mmgui_module_devices_enum(gpointer mmguicore, GSList **devicelist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *devices; guint devnum; GVariantIter diterl1, diterl2; GVariant *dnodel1, *dnodel2; gsize devpathsize; const gchar *devpath; if ((mmguicore == NULL) || (devicelist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; devices = g_dbus_proxy_call_sync(moduledata->managerproxy, "EnumerateDevices", NULL, 0, -1, NULL, &error); if ((devices == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } devnum = 0; g_variant_iter_init(&diterl1, devices); while ((dnodel1 = g_variant_iter_next_value(&diterl1)) != NULL) { g_variant_iter_init(&diterl2, dnodel1); while ((dnodel2 = g_variant_iter_next_value(&diterl2)) != NULL) { devpathsize = 256; devpath = g_variant_get_string(dnodel2, &devpathsize); if (devpath != NULL) { //Add device to list *devicelist = g_slist_prepend(*devicelist, mmgui_module_device_new(mmguicore, devpath)); devnum++; g_variant_unref(dnodel2); } } g_variant_unref(dnodel1); } g_variant_unref(devices); return devnum; } G_MODULE_EXPORT gboolean mmgui_module_devices_state(gpointer mmguicore, enum _mmgui_device_state_request request) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GVariant *data; GError *error; gsize strsize = 256; gchar *lockstr, *operatorcode, *operatorname; guint regstatus, intval1, intval2; gboolean res; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; res = FALSE; switch (request) { case MMGUI_DEVICE_STATE_REQUEST_ENABLED: /*Is device enabled*/ if (moduledata->modemproxy != NULL) { data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "Enabled"); if (data != NULL) { res = g_variant_get_boolean(data); if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { device->enabled = res; } g_variant_unref(data); } else { res = FALSE; } } else { res = FALSE; } break; case MMGUI_DEVICE_STATE_REQUEST_LOCKED: /*Is device blocked*/ if (moduledata->modemproxy != NULL) { data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "UnlockRequired"); if (data != NULL) { lockstr = (gchar *)g_variant_get_string(data, &strsize); /*If device locked and what type of lock it is*/ res = mmgui_module_device_locked_from_unlock_string(lockstr); device->locktype = mmgui_module_device_lock_type_from_unlock_string(lockstr); device->blocked = res; g_variant_unref(data); } else { res = FALSE; } } else { res = FALSE; } break; case MMGUI_DEVICE_STATE_REQUEST_REGISTERED: /*Is device registered in network*/ if (moduledata->netproxy != NULL) { if (moduledata->netproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationInfo", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); res = FALSE; } else { g_variant_get(data, "((uss))", ®status, &operatorcode, &operatorname); res = mmgui_module_device_registered_from_status(regstatus); device->registered = res; g_variant_unref(data); } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationState", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((uu))", &intval1, &intval2); res = mmgui_module_cdma_device_registered_from_status(intval1); device->registered = res; if (device->regstatus == MMGUI_REG_STATUS_UNKNOWN) { res = mmgui_module_cdma_device_registered_from_status(intval2); device->registered = res; } g_variant_unref(data); } } } else { res = FALSE; } } else { res = FALSE; } break; case MMGUI_DEVICE_STATE_REQUEST_CONNECTED: /*Is device connected (modem manager state)*/ if (moduledata->modemproxy != NULL) { data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "State"); if (data != NULL) { res = mmgui_module_device_connected_from_state(g_variant_get_uint32(data)); g_variant_unref(data); } else { res = FALSE; } } else { res = FALSE; } break; case MMGUI_DEVICE_STATE_REQUEST_PREPARED: /*Not clear what state property means - just return TRUE*/ res = TRUE; break; default: res = FALSE; break; } return res; } G_MODULE_EXPORT gboolean mmgui_module_devices_update_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; time_t currenttime; guint msgnum; GError *error; GVariant *messages; GVariantIter miterl1, miterl2; GVariant *mnodel1, *mnodel2; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->smsproxy == NULL) return FALSE; if (!device->enabled) return FALSE; if (!(device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return FALSE; if (moduledata->needsmspolling) { currenttime = time(NULL); if (abs((gint)difftime(moduledata->polltimestamp, currenttime)) >= MMGUI_MODULE_SMS_POLL_INTERVAL) { moduledata->polltimestamp = currenttime; error = NULL; messages = g_dbus_proxy_call_sync(moduledata->smsproxy, "List", NULL, 0, -1, NULL, &error); if ((messages == NULL) && (error != NULL)) { g_error_free(error); msgnum = 0; } else { msgnum = 0; g_variant_iter_init(&miterl1, messages); while ((mnodel1 = g_variant_iter_next_value(&miterl1)) != NULL) { g_variant_iter_init(&miterl2, mnodel1); while ((mnodel2 = g_variant_iter_next_value(&miterl2)) != NULL) { msgnum++; g_variant_unref(mnodel2); } g_variant_unref(mnodel1); } g_variant_unref(messages); } g_debug("SMS messages number from polling handler: %u\n", msgnum); if (msgnum > 0) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_SMS_LIST_READY, mmguicore, GUINT_TO_POINTER(TRUE)); } } } } return TRUE; } static gboolean mmgui_module_devices_update_device_mode(gpointer mmguicore, gint oldstate, gint newstate, guint changereason) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; gboolean enabledsignal, blockedsignal, regsignal, oldenabled, oldblocked, oldregistered; gsize strsize; GVariant *data; GError *error; gchar *blockstr; guint intval1, intval2; gchar *strval1, *strval2; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; /*Device enabled status*/ enabledsignal = FALSE; oldenabled = device->enabled; device->enabled = mmgui_module_device_enabled_from_state(newstate); /*Is enabled signal needed */ enabledsignal = (oldenabled != device->enabled); /*Device blocked status and lock type*/ blockedsignal = FALSE; if (moduledata->modemproxy != NULL) { oldblocked = device->blocked; data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "UnlockRequired"); if (data != NULL) { blockstr = (gchar *)g_variant_get_string(data, &strsize); device->blocked = mmgui_module_device_locked_from_unlock_string(blockstr); device->locktype = mmgui_module_device_lock_type_from_unlock_string(blockstr); g_variant_unref(data); /*Is blocked signal needed */ blockedsignal = (oldblocked != device->blocked); } else { device->blocked = FALSE; } } /*Device registered status*/ oldregistered = device->registered; device->registered = mmgui_module_device_registered_from_state(newstate); /*Is registered signal needed*/ regsignal = (oldregistered != device->registered); /*Return if no signals will be sent*/ if ((!enabledsignal) && (!blockedsignal) && (!regsignal)) return TRUE; /*Handle device registration*/ if ((regsignal) && (device->registered)) { if (moduledata->netproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { /*Operator information*/ device->regstatus = MMGUI_REG_STATUS_UNKNOWN; device->operatorcode = 0; if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationInfo", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((uss))", &intval1, &strval1, &strval2); device->regstatus = mmgui_module_registration_status_translate(intval1); device->operatorcode = mmgui_module_gsm_operator_code(strval1); device->operatorname = g_strdup(strval2); g_variant_unref(data); } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Operator information*/ device->regstatus = MMGUI_REG_STATUS_UNKNOWN; device->operatorcode = 0; /*Registration state*/ error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationState", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((uu))", &intval1, &intval2); device->regstatus = mmgui_module_cdma_registration_status_translate(intval1); if (device->regstatus == MMGUI_REG_STATUS_UNKNOWN) { device->regstatus = mmgui_module_cdma_registration_status_translate(intval2); } g_variant_unref(data); } /*SID*/ error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetServingSystem", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((usu))", &intval1, &strval1, &intval2); device->operatorcode = intval2; g_variant_unref(data); } } } } /*Handle device enablement*/ if ((enabledsignal) && (device->enabled)) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { if (moduledata->cardproxy != NULL) { /*IMEI*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->cardproxy, "GetImei", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imei); device->imei = g_strdup(device->imei); g_variant_unref(data); } /*IMSI*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->cardproxy, "GetImsi", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imsi); device->imsi = g_strdup(device->imsi); g_variant_unref(data); } } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { if (moduledata->netproxy != NULL) { /*ESN*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetEsn", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imsi); device->imsi = g_strdup(device->imsi); g_variant_unref(data); } /*No IMSI in CDMA*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } } } if (moduledata->locationproxy != NULL) { /*Enable location interface and update location*/ if (mmgui_module_devices_enable_location(mmguicorelc, device, TRUE)) { if (mmgui_module_devices_update_location(mmguicorelc, device)) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicorelc, device); } } } } } /*Enabled status signal*/ if (enabledsignal) { if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_ENABLED_STATUS, mmguicorelc, GUINT_TO_POINTER(device->enabled)); } } else { if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } } } /*Blocked status signal*/ if (blockedsignal) { if (mmguicorelc->eventcb != NULL) { if (device->operation != MMGUI_DEVICE_OPERATION_UNLOCK) { (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_BLOCKED_STATUS, mmguicorelc, GUINT_TO_POINTER(device->blocked)); } else { if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, mmguicorelc, GUINT_TO_POINTER(TRUE)); } } } } /*Registered status signal*/ if (regsignal) { if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicorelc, device); } } return TRUE; } static gboolean mmgui_module_devices_update_location(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *data; GVariantIter *iter; guint32 locationtype; GVariant *locationdata; gchar *locationstring; gsize strlength; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if ((!(device->locationcaps & MMGUI_LOCATION_CAPS_3GPP)) && (!(device->locationcaps & MMGUI_LOCATION_CAPS_GPS))) return FALSE; error = NULL; data = g_dbus_proxy_call_sync(moduledata->locationproxy, "GetLocation", NULL, 0, -1, NULL, &error); if ((data != NULL) && (error == NULL)) { g_variant_get(data, "(a{uv})", &iter); while (g_variant_iter_next(iter, "{uv}", &locationtype, &locationdata)) { if ((locationtype == MODULE_INT_MODEM_LOCATION_CAPABILITY_GSM_LAC_CI) && (locationdata != NULL)) { //3GPP location strlength = 256; locationstring = g_strdup(g_variant_get_string(locationdata, &strlength)); device->loc3gppdata[0] = (guint)strtol(strsep(&locationstring, ","), NULL, 10); device->loc3gppdata[1] = (guint)strtol(strsep(&locationstring, ","), NULL, 10); device->loc3gppdata[2] = (guint)strtol(strsep(&locationstring, ","), NULL, 16); device->loc3gppdata[3] = (guint)strtol(strsep(&locationstring, ","), NULL, 16); g_free(locationstring); g_variant_unref(locationdata); g_debug("3GPP location: %u, %u, %4x, %4x", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], device->loc3gppdata[3]); } } g_variant_unref(data); return TRUE; } else { if (device->locationcaps & MMGUI_LOCATION_CAPS_3GPP) { memset(device->loc3gppdata, 0, sizeof(device->loc3gppdata)); } if (device->locationcaps & MMGUI_LOCATION_CAPS_GPS) { memset(device->locgpsdata, 0, sizeof(device->locgpsdata)); } mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } } static gboolean mmgui_module_devices_enable_location(gpointer mmguicore, mmguidevice_t device, gboolean enable) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *properties; guint locationtypes; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (!device->enabled) return FALSE; if (moduledata->locationproxy == NULL) return FALSE; if ((enable) && ((device->locationcaps & MMGUI_LOCATION_CAPS_3GPP) || (device->locationcaps & MMGUI_LOCATION_CAPS_GPS))) return TRUE; if ((!enable) && ((!(device->locationcaps & MMGUI_LOCATION_CAPS_3GPP)) && (!(device->locationcaps & MMGUI_LOCATION_CAPS_GPS)))) return TRUE; if (enable) { //Determine supported capabilities and turn on location engine properties = g_dbus_proxy_get_cached_property(moduledata->locationproxy, "Capabilities"); if (properties != NULL) { locationtypes = g_variant_get_uint32(properties); if (locationtypes & MODULE_INT_MODEM_LOCATION_CAPABILITY_GSM_LAC_CI) { error = NULL; //Apply new settings g_dbus_proxy_call_sync(moduledata->locationproxy, "Enable", g_variant_new("(bb)", TRUE, TRUE), 0, -1, NULL, &error); //Set enabled properties if (error == NULL) { //3gpp location if (locationtypes & MODULE_INT_MODEM_LOCATION_CAPABILITY_GSM_LAC_CI) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } return TRUE; } else { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } g_variant_unref(properties); } } else { error = NULL; g_dbus_proxy_call_sync(moduledata->locationproxy, "Enable", g_variant_new("(bb)", FALSE, FALSE), 0, -1, NULL, &error); if (error == NULL) { return TRUE; } else { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } } return FALSE; } G_MODULE_EXPORT gboolean mmgui_module_devices_information(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GVariant *data; GError *error; gchar *blockstr; gsize strsize = 256; guint intval1, intval2; gchar *strval1, *strval2; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->modemproxy != NULL) { //Is device enabled data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "Enabled"); if (data != NULL) { device->enabled = g_variant_get_boolean(data); g_variant_unref(data); } else { device->enabled = TRUE; g_debug("Failed to get device enabled state\n"); } /*Is device locked and what type of lock it is*/ data = g_dbus_proxy_get_cached_property(moduledata->modemproxy, "UnlockRequired"); if (data != NULL) { blockstr = (gchar *)g_variant_get_string(data, &strsize); device->blocked = mmgui_module_device_locked_from_unlock_string(blockstr); device->locktype = mmgui_module_device_lock_type_from_unlock_string(blockstr); g_variant_unref(data); } else { device->blocked = FALSE; g_debug("Failed to get device blocked state\n"); } } if (moduledata->netproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { if (device->enabled) { /*Signal level*/ device->siglevel = 0; error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetSignalQuality", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(u)", &device->siglevel); g_variant_unref(data); } } /*Operator information*/ device->registered = FALSE; device->regstatus = MMGUI_REG_STATUS_UNKNOWN; device->operatorcode = 0; if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationInfo", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((uss))", &intval1, &strval1, &strval2); device->registered = mmgui_module_device_registered_from_status(intval1); device->regstatus = mmgui_module_registration_status_translate(intval1); device->operatorcode = mmgui_module_gsm_operator_code(strval1); device->operatorname = g_strdup(strval2); g_variant_unref(data); } /*Allowed mode*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "AllowedMode"); if (data != NULL) { device->allmode = g_variant_get_uint32(data); g_variant_unref(data); } else { device->allmode = 0; g_debug("Failed to get device allowed mode\n"); } /*Access technology*/ data = g_dbus_proxy_get_cached_property(moduledata->netproxy, "AccessTechnology"); if (data != NULL) { device->mode = g_variant_get_uint32(data); g_variant_unref(data); } else { device->mode = 0; g_debug("Failed to get device access mode\n"); } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*Operator information*/ device->registered = FALSE; device->regstatus = MMGUI_REG_STATUS_UNKNOWN; device->operatorcode = 0; /*Registration state*/ error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetRegistrationState", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((uu))", &intval1, &intval2); device->registered = mmgui_module_cdma_device_registered_from_status(intval1); device->regstatus = mmgui_module_cdma_registration_status_translate(intval1); if (device->regstatus == MMGUI_REG_STATUS_UNKNOWN) { device->registered = mmgui_module_cdma_device_registered_from_status(intval2); device->regstatus = mmgui_module_cdma_registration_status_translate(intval2); } g_variant_unref(data); } /*SID*/ error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetServingSystem", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "((usu))", &intval1, &strval1, &intval2); device->operatorcode = intval2; g_variant_unref(data); } /*Identification*/ if (device->enabled) { /*ESN*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->netproxy, "GetEsn", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imsi); device->imsi = g_strdup(device->imsi); g_variant_unref(data); } } /*No IMSI in CDMA*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } } } if (moduledata->cardproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { if (device->enabled) { //IMEI if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->cardproxy, "GetImei", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imei); device->imei = g_strdup(device->imei); g_variant_unref(data); } } if (device->enabled) { //IMSI if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } error = NULL; data = g_dbus_proxy_call_sync(moduledata->cardproxy, "GetImsi", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { g_variant_get(data, "(s)", &device->imsi); device->imsi = g_strdup(device->imsi); g_variant_unref(data); } } } } //Update location if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { mmgui_module_devices_update_location(mmguicore, device); } //Network time. This code makes ModemManager crash, so it commented out /*gchar *timev; if (moduledata->timeproxy != NULL) { error = NULL; data = g_dbus_proxy_call_sync(moduledata->timeproxy, "GetNetworkTime", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { mmgui_module_print_error_message(error); g_error_free(error); } else { g_variant_get(data, "(s)", &timev); //device->imsi = g_strdup(device->imsi); g_variant_unref(data); } }*/ return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GHashTable *interfaces; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; //ModemManager uses 'Modems' prefix and Wader uses 'Devices' prefix //SIM card interface error = NULL; moduledata->cardproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.Card", NULL, &error); if ((moduledata->cardproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } //Mobile network interface if (device->type == MMGUI_DEVICE_TYPE_GSM) { error = NULL; moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.Network", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { device->scancaps = MMGUI_SCAN_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->scancaps = MMGUI_SCAN_CAPS_OBSERVE; moduledata->netsignal = g_signal_connect(moduledata->netproxy, "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); moduledata->netpropsignal = g_signal_connect(moduledata->netproxy, "g-properties-changed", G_CALLBACK(mmgui_module_property_change_handler), mmguicore); } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { error = NULL; moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Cdma", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { device->scancaps = MMGUI_SCAN_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->scancaps = MMGUI_SCAN_CAPS_NONE; moduledata->netsignal = g_signal_connect(moduledata->netproxy, "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); } } //Modem interface error = NULL; moduledata->modemproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem", NULL, &error); if ((moduledata->modemproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->statesignal = g_signal_connect(moduledata->modemproxy, "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); } //SMS interface error = NULL; moduledata->smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.SMS", NULL, &error); if ((moduledata->smsproxy == NULL) && (error != NULL)) { device->smscaps = MMGUI_SMS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->smscaps = MMGUI_SMS_CAPS_RECEIVE | MMGUI_SMS_CAPS_SEND; moduledata->smssignal = g_signal_connect(moduledata->smsproxy, "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); } //Assume fully-fuctional modem manager moduledata->needsmspolling = FALSE; if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { //USSD interface error = NULL; moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.Ussd", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*No USSD in CDMA*/ moduledata->ussdproxy = NULL; device->ussdcaps = MMGUI_USSD_CAPS_NONE; } //Location interface (capabilities will be defined later) error = NULL; moduledata->locationproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Location", NULL, &error); if ((moduledata->locationproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->locationpropsignal = g_signal_connect(moduledata->locationproxy, "g-properties-changed", G_CALLBACK(mmgui_module_property_change_handler), mmguicore); mmgui_module_devices_enable_location(mmguicore, device, TRUE); } /*Supplimentary interfaces*/ interfaces = mmgui_dbus_utils_list_service_interfaces(moduledata->connection, "org.freedesktop.ModemManager", device->objectpath); if ((interfaces != NULL) && (g_hash_table_contains(interfaces, "org.freedesktop.ModemManager.Modem.Time"))) { //Time interface error = NULL; moduledata->timeproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Time", NULL, &error); if ((moduledata->timeproxy == NULL) && (error != NULL)) { moduledata->needsmspolling = TRUE; moduledata->polltimestamp = time(NULL); device->smscaps &= ~MMGUI_SMS_CAPS_SEND; g_error_free(error); } else { g_debug("SMS messages polling disabled\n"); moduledata->needsmspolling = FALSE; } } else { g_debug("SMS messages polling enabled\n"); moduledata->timeproxy = NULL; moduledata->needsmspolling = TRUE; moduledata->polltimestamp = time(NULL); device->smscaps &= ~MMGUI_SMS_CAPS_SEND; } if (interfaces != NULL) { g_hash_table_destroy(interfaces); } //No contacts API device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; } else if (moduledata->service == MODULE_INT_SERVICE_WADER) { //Contacts manipulation interface supported only by Wader error = NULL; moduledata->contactsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.Contacts", NULL, &error); if ((moduledata->contactsproxy == NULL) && (error != NULL)) { device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { device->contactscaps = MMGUI_CONTACTS_CAPS_EXPORT | MMGUI_CONTACTS_CAPS_EDIT; } //USSD interface is broken device->ussdcaps = MMGUI_USSD_CAPS_NONE; //No location API device->locationcaps = MMGUI_LOCATION_CAPS_NONE; } //Update device information using created proxy objects mmgui_module_devices_information(mmguicore); //Initialize SMS database return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; //Close SMS database //Free resources //Change device pointer if (moduledata->cardproxy != NULL) { g_object_unref(moduledata->cardproxy); moduledata->cardproxy = NULL; } if (moduledata->netproxy != NULL) { if (g_signal_handler_is_connected(moduledata->netproxy, moduledata->netsignal)) { g_signal_handler_disconnect(moduledata->netproxy, moduledata->netsignal); } if (g_signal_handler_is_connected(moduledata->netproxy, moduledata->netpropsignal)) { g_signal_handler_disconnect(moduledata->netproxy, moduledata->netpropsignal); } g_object_unref(moduledata->netproxy); moduledata->netproxy = NULL; } if (moduledata->modemproxy != NULL) { if (g_signal_handler_is_connected(moduledata->modemproxy, moduledata->statesignal)) { g_signal_handler_disconnect(moduledata->modemproxy, moduledata->statesignal); } g_object_unref(moduledata->modemproxy); moduledata->modemproxy = NULL; } if (moduledata->smsproxy != NULL) { if (g_signal_handler_is_connected(moduledata->smsproxy, moduledata->smssignal)) { g_signal_handler_disconnect(moduledata->smsproxy, moduledata->smssignal); } g_object_unref(moduledata->smsproxy); moduledata->smsproxy = NULL; } if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { if (moduledata->ussdproxy != NULL) { g_object_unref(moduledata->ussdproxy); moduledata->ussdproxy = NULL; } } if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { if (moduledata->locationproxy != NULL) { if (g_signal_handler_is_connected(moduledata->locationproxy, moduledata->locationpropsignal)) { g_signal_handler_disconnect(moduledata->locationproxy, moduledata->locationpropsignal); } g_object_unref(moduledata->locationproxy); moduledata->locationproxy = NULL; } if (moduledata->timeproxy != NULL) { g_object_unref(moduledata->timeproxy); moduledata->timeproxy = NULL; } } else if (moduledata->service == MODULE_INT_SERVICE_WADER) { if (moduledata->contactsproxy != NULL) { g_object_unref(moduledata->contactsproxy); moduledata->contactsproxy = NULL; } } return TRUE; } static gboolean mmgui_module_devices_restart_ussd(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->ussdproxy != NULL) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; g_object_unref(moduledata->ussdproxy); } if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { error = NULL; moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.ModemManager", device->objectpath, "org.freedesktop.ModemManager.Modem.Gsm.Ussd", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; return TRUE; } } return FALSE; } static void mmgui_module_devices_enable_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(result); } } G_MODULE_EXPORT gboolean mmgui_module_devices_enable(gpointer mmguicore, gboolean enabled) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->modemproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; //Device already in requested state if (mmguicorelc->device->enabled == enabled) return TRUE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_ENABLE; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->modemproxy, "Enable", g_variant_new("(b)", enabled), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_ENABLE], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_enable_handler, mmguicore); return TRUE; } static void mmgui_module_devices_unlock_with_pin_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { /*Handle error*/ if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(data); } } G_MODULE_EXPORT gboolean mmgui_module_devices_unlock_with_pin(gpointer mmguicore, gchar *pin) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->cardproxy == NULL) return FALSE; if (mmguicorelc->device->locktype != MMGUI_LOCK_TYPE_PIN) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_UNLOCK; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->cardproxy, "SendPin", g_variant_new("(s)", pin), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_unlock_with_pin_handler, mmguicore); return TRUE; } static time_t mmgui_module_str_to_time(const gchar *str) { guint i, len; gchar strbuf[3]; struct tm btime; time_t timestamp; gint *fields[] = {&btime.tm_year, &btime.tm_mon, &btime.tm_mday, &btime.tm_hour, &btime.tm_min, &btime.tm_sec}; timestamp = time(NULL); if (str == NULL) return timestamp; len = strlen(str); if (len > 12) { if (str[12] == '+') { //v.0.4.998 timestamp format for (i=0; i<6; i++) { strncpy(strbuf, str+(i*2), 2); strbuf[2] = '\0'; *fields[i] = atoi(strbuf); } } else if (str[8] == ',') { //v.0.5.2 timestamp format for (i=0; i<6; i++) { strncpy(strbuf, str+(i*3), 2); strbuf[2] = '\0'; *fields[i] = atoi(strbuf); } } btime.tm_year += 100; btime.tm_mon -= 1; timestamp = mktime(&btime); } return timestamp; } static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, GVariant *messagev) { moduledata_t moduledata; mmgui_sms_message_t message; GVariant *value; gsize strlength, declength; const gchar *valuestr; gchar *decstr; gboolean gottext, gotindex; guint index; if ((mmguicore == NULL) || (messagev == NULL)) return NULL; if (mmguicore->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; index = 0; message = mmgui_smsdb_message_create(); /*Sender number*/ value = g_variant_lookup_value(messagev, "number", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { if (moduledata->needsmspolling) { /*Old ModemManager versions tend to not bcd-decode sender numbers, doing it*/ decstr = (gchar *)bcd_to_utf8_ascii_part((const guchar *)valuestr, strlength, &declength); if (decstr != NULL) { mmgui_smsdb_message_set_number(message, decstr); g_debug("SMS number: %s\n", decstr); g_free(decstr); } else { mmgui_smsdb_message_set_number(message, valuestr); g_debug("SMS number: %s\n", valuestr); } } else { mmgui_smsdb_message_set_number(message, valuestr); g_debug("SMS number: %s\n", valuestr); } } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } g_variant_unref(value); } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } /*Service center number*/ value = g_variant_lookup_value(messagev, "smsc", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_service_number(message, valuestr); g_debug("SMS service center number: %s\n", valuestr); } else { mmgui_smsdb_message_set_service_number(message, _("Unknown")); } g_variant_unref(value); } else { mmgui_smsdb_message_set_service_number(message, _("Unknown")); } /*Try to get decoded message text first*/ gottext = FALSE; value = g_variant_lookup_value(messagev, "text", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256*160; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_text(message, valuestr, FALSE); gottext = TRUE; g_debug("SMS text: %s\n", valuestr); } g_variant_unref(value); } /*If there is no text (message isn't decoded), try to get binary data*/ if (!gottext) { value = g_variant_lookup_value(messagev, "data", G_VARIANT_TYPE_BYTESTRING); if (value != NULL) { strlength = g_variant_get_size(value); if (strlength > 0) { valuestr = g_variant_get_data(value); mmgui_smsdb_message_set_binary(message, TRUE); mmgui_smsdb_message_set_data(message, valuestr, strlength, FALSE); gottext = TRUE; } g_variant_unref(value); } } /*Message timestamp (ModemManager uses string, Wader uses double)*/ if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { value = g_variant_lookup_value(messagev, "timestamp", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_timestamp(message, mmgui_module_str_to_time(valuestr)); g_debug("SMS timestamp: %s", ctime((const time_t *)&message->timestamp)); } g_variant_unref(value); } } else if (moduledata->service == MODULE_INT_SERVICE_WADER) { value = g_variant_lookup_value(messagev, "timestamp", G_VARIANT_TYPE_DOUBLE); if (value != NULL) { mmgui_smsdb_message_set_timestamp(message, (time_t)g_variant_get_double(value)); g_debug("SMS timestamp: %s", ctime((const time_t *)&message->timestamp)); g_variant_unref(value); } } /*Message index (ModemManager uses unsigned integer, Wader uses signed one.) This is a critical parameter, so message will be skipped if index value unknown.*/ gotindex = FALSE; if (moduledata->service == MODULE_INT_SERVICE_MODEM_MANAGER) { value = g_variant_lookup_value(messagev, "index", G_VARIANT_TYPE_UINT32); if (value != NULL) { index = g_variant_get_uint32(value); mmgui_smsdb_message_set_identifier(message, index, FALSE); g_debug("SMS index: %u\n", index); gotindex = TRUE; g_variant_unref(value); } } else if (moduledata->service == MODULE_INT_SERVICE_WADER) { value = g_variant_lookup_value(messagev, "index", G_VARIANT_TYPE_INT32); if (value != NULL) { index = (guint)g_variant_get_int32(value); mmgui_smsdb_message_set_identifier(message, index, FALSE); g_debug("SMS index: %u\n", index); gotindex = TRUE; g_variant_unref(value); } } if ((!gotindex) || (!gottext)) { /*Message identifier unknown or no text - skip it*/ mmgui_smsdb_message_free(message); return NULL; } return message; } G_MODULE_EXPORT guint mmgui_module_sms_enum(gpointer mmguicore, GSList **smslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *messages; guint msgnum; GVariantIter miterl1, miterl2; GVariant *mnodel1, *mnodel2; mmgui_sms_message_t message; if ((mmguicore == NULL) || (smslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return 0; if (mmguicorelc->device == NULL) return 0; if (!mmguicorelc->device->enabled) return 0; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return 0; error = NULL; messages = g_dbus_proxy_call_sync(moduledata->smsproxy, "List", NULL, 0, -1, NULL, &error); if ((messages == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } msgnum = 0; g_variant_iter_init(&miterl1, messages); while ((mnodel1 = g_variant_iter_next_value(&miterl1)) != NULL) { g_variant_iter_init(&miterl2, mnodel1); while ((mnodel2 = g_variant_iter_next_value(&miterl2)) != NULL) { message = mmgui_module_sms_retrieve(mmguicore, mnodel2); if (message != NULL) { *smslist = g_slist_prepend(*smslist, message); msgnum++; } g_variant_unref(mnodel2); } g_variant_unref(mnodel1); } g_variant_unref(messages); return msgnum; } G_MODULE_EXPORT mmgui_sms_message_t mmgui_module_sms_get(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *indexv; GVariant *messagevt, *messagev; mmgui_sms_message_t message; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return NULL; if (mmguicorelc->device == NULL) return NULL; if (!mmguicorelc->device->enabled) return NULL; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return NULL; error = NULL; indexv = g_variant_new("(u)", index); messagevt = g_dbus_proxy_call_sync(moduledata->smsproxy, "Get", indexv, 0, -1, NULL, &error); if ((messagevt == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return NULL; } messagev = g_variant_get_child_value(messagevt, 0); message = mmgui_module_sms_retrieve(mmguicore, messagev); g_variant_unref(messagev); g_variant_unref(messagevt); return message; } G_MODULE_EXPORT gboolean mmgui_module_sms_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *indexv; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return FALSE; error = NULL; indexv = g_variant_new("(u)", index); g_dbus_proxy_call_sync(moduledata->smsproxy, "Delete", indexv, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } static void mmgui_module_sms_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; gboolean sent; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); sent = FALSE; } else { g_variant_unref(result); sent = TRUE; } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SMS_SENT, user_data, GUINT_TO_POINTER(sent)); } } G_MODULE_EXPORT gboolean mmgui_module_sms_send(gpointer mmguicore, gchar* number, gchar *text, gint validity, gboolean report) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariantBuilder *builder; GVariant *array, *message; if ((number == NULL) || (text == NULL)) return FALSE; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_SEND)) return FALSE; builder = g_variant_builder_new(G_VARIANT_TYPE_ARRAY); g_variant_builder_add_parsed(builder, "{'number', <%s>}", number); g_variant_builder_add_parsed(builder, "{'text', <%s>}", text); if ((validity > -1) && (validity <= 255)) { g_variant_builder_add_parsed(builder, "{'validity', <%u>}", (guint)validity); } array = g_variant_builder_end(builder); builder = g_variant_builder_new(G_VARIANT_TYPE_TUPLE); g_variant_builder_add_value(builder, array); message = g_variant_builder_end(builder); mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_SMS; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->smsproxy, "Send", message, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_sms_send_handler, mmguicore); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_ussd_cancel_session(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; error = NULL; g_dbus_proxy_call_sync(moduledata->ussdproxy, "Cancel", NULL, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } G_MODULE_EXPORT enum _mmgui_ussd_state mmgui_module_ussd_get_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *session; gchar *state; enum _mmgui_ussd_state stateid; gsize strsize; stateid = MMGUI_USSD_STATE_UNKNOWN; if (mmguicore == NULL) return stateid; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return stateid; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return stateid; if (mmguicorelc->device == NULL) return stateid; if (!mmguicorelc->device->enabled) return stateid; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return stateid; session = g_dbus_proxy_get_cached_property(moduledata->ussdproxy, "State"); if (session == NULL) return stateid; strsize = 256; state = (gchar *)g_variant_get_string(session, &strsize); if (state != NULL) { if (g_str_equal(state, "idle")) { stateid = MMGUI_USSD_STATE_IDLE; } else if (g_str_equal(state, "active")) { stateid = MMGUI_USSD_STATE_ACTIVE; } else if (g_str_equal(state, "user-response")) { stateid = MMGUI_USSD_STATE_USER_RESPONSE; } } g_variant_unref(session); return stateid; } static void mmgui_module_ussd_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; gchar *answer; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; answer = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { /*For some reason after timeout ussd does not work - restart it*/ mmgui_module_devices_restart_ussd(mmguicorelc); if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { g_variant_get(result, "(s)", &answer); if (moduledata->reencodeussd) { /*Fix answer broken encoding*/ answer = encoding_ussd_gsm7_to_ucs2(answer); } else { /*Do not touch answer*/ answer = g_strdup(answer); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_USSD_RESULT, user_data, answer); } } G_MODULE_EXPORT gboolean mmgui_module_ussd_send(gpointer mmguicore, gchar *request, enum _mmgui_ussd_validation validationid, gboolean reencode) { mmguicore_t mmguicorelc; moduledata_t moduledata; enum _mmgui_ussd_state sessionstate; GVariant *ussdreq; gchar *command; if ((mmguicore == NULL) || (request == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; sessionstate = mmgui_module_ussd_get_state(mmguicore); if ((sessionstate == MMGUI_USSD_STATE_UNKNOWN) || (sessionstate == MMGUI_USSD_STATE_ACTIVE)) { mmgui_module_ussd_cancel_session(mmguicore); } ussdreq = g_variant_new("(s)", request); command = NULL; if (sessionstate == MMGUI_USSD_STATE_IDLE) { command = "Initiate"; } else if (sessionstate == MMGUI_USSD_STATE_USER_RESPONSE) { if (validationid == MMGUI_USSD_VALIDATION_REQUEST) { mmgui_module_ussd_cancel_session(mmguicore); command = "Initiate"; } else { command = "Respond"; } } moduledata->reencodeussd = reencode; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_USSD; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->ussdproxy, command, ussdreq, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_ussd_send_handler, mmguicore); return TRUE; } static mmgui_scanned_network_t mmgui_module_network_retrieve(GVariant *networkv) { mmgui_scanned_network_t network; GVariant *value; gsize strlength; const gchar *valuestr; /*guint i;*/ if (networkv == NULL) return NULL; network = g_new0(struct _mmgui_scanned_network, 1); //Mobile operator code (MCCMNC) value = g_variant_lookup_value(networkv, "operator-num", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_num = atoi(valuestr); g_variant_unref(value); } else { network->operator_num = 0; } //Network access technology value = g_variant_lookup_value(networkv, "access-tech", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->access_tech = atoi(valuestr); g_variant_unref(value); } else { network->access_tech = MMGUI_ACCESS_TECH_GSM; } //Long-format name of operator value = g_variant_lookup_value(networkv, "operator-long", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_long = g_strdup(valuestr); g_variant_unref(value); } else { network->operator_long = g_strdup("--"); } //Short-format name of operator value = g_variant_lookup_value(networkv, "operator-short", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->operator_short = g_strdup(valuestr); g_variant_unref(value); } else { network->operator_short = g_strdup("--"); } //Network availability status (this is a critical parameter, so entry will be skipped if value is unknown) value = g_variant_lookup_value(networkv, "status", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); network->status = atoi(valuestr); g_variant_unref(value); return network; } else { if (network->operator_long != NULL) g_free(network->operator_long); if (network->operator_short != NULL) g_free(network->operator_short); g_free(network); return NULL; } } static void mmgui_module_networks_scan_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; GSList *networks; GVariantIter niterl1, niterl2; GVariant *nnodel1, *nnodel2; mmgui_scanned_network_t network; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; networks = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { g_variant_iter_init(&niterl1, result); while ((nnodel1 = g_variant_iter_next_value(&niterl1)) != NULL) { g_variant_iter_init(&niterl2, nnodel1); while ((nnodel2 = g_variant_iter_next_value(&niterl2)) != NULL) { network = mmgui_module_network_retrieve(nnodel2); if (network != NULL) { networks = g_slist_prepend(networks, network); } g_variant_unref(nnodel2); } g_variant_unref(nnodel1); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SCAN_RESULT, user_data, networks); } } G_MODULE_EXPORT gboolean mmgui_module_networks_scan(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->netproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->scancaps & MMGUI_SCAN_CAPS_OBSERVE)) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SCAN; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->netproxy, "Scan", NULL, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SCAN], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_networks_scan_handler, mmguicore); return TRUE; } static mmgui_contact_t mmgui_module_contact_retrieve(GVariant *contactv) { mmgui_contact_t contact; if (contactv == NULL) return NULL; contact = g_new0(struct _mmgui_contact, 1); g_variant_get(contactv, "(uss)", &contact->id, &contact->name, &contact->number); //Full name of the contact if (contact->name != NULL) { contact->name = g_strdup(contact->name); } else { g_free(contact); return NULL; } //Telephone number if (contact->number != NULL) { contact->number = g_strdup(contact->number); } else { g_free(contact->name); g_free(contact); return NULL; } //Email address contact->email = NULL; //Group this contact belongs to contact->group = g_strdup("SIM"); //Additional contact name contact->name2 = NULL; //Additional contact telephone number contact->number2 = NULL; //Boolean flag to specify whether this entry is hidden or not contact->hidden = FALSE; //Phonebook in which the contact is stored contact->storage = MMGUI_MODEM_CONTACTS_STORAGE_ME; return contact; } G_MODULE_EXPORT guint mmgui_module_contacts_enum(gpointer mmguicore, GSList **contactslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *contacts; guint contactsnum; GVariantIter citerl1, citerl2; GVariant *cnodel1, *cnodel2; mmgui_contact_t contact; if ((mmguicore == NULL) || (contactslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->service != MODULE_INT_SERVICE_WADER) return 0; if (moduledata->contactsproxy == NULL) return 0; if (mmguicorelc->device == NULL) return 0; if (!mmguicorelc->device->enabled) return 0; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT)) return 0; error = NULL; contacts = g_dbus_proxy_call_sync(moduledata->contactsproxy, "List", NULL, 0, -1, NULL, &error); if ((contacts == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } contactsnum = 0; g_variant_iter_init(&citerl1, contacts); while ((cnodel1 = g_variant_iter_next_value(&citerl1)) != NULL) { g_variant_iter_init(&citerl2, cnodel1); while ((cnodel2 = g_variant_iter_next_value(&citerl2)) != NULL) { contact = mmgui_module_contact_retrieve(cnodel2); if (contact != NULL) { *contactslist = g_slist_prepend(*contactslist, contact); contactsnum++; } g_variant_unref(cnodel2); } g_variant_unref(cnodel1); } g_variant_unref(contacts); if (contactsnum > 0) { *contactslist = g_slist_reverse(*contactslist); } return contactsnum; } G_MODULE_EXPORT gboolean mmgui_module_contacts_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return FALSE; error = NULL; g_dbus_proxy_call_sync(moduledata->contactsproxy, "Delete", g_variant_new("(u)", index), 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } G_MODULE_EXPORT gint mmgui_module_contacts_add(gpointer mmguicore, mmgui_contact_t contact) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *contactv, *idv; GError *error; guint id; if ((mmguicore == NULL) || (contact == NULL)) return -1; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return -1; moduledata = (moduledata_t)mmguicorelc->moduledata; if ((contact->name == NULL) || (contact->number == NULL)) return -1; if (moduledata->contactsproxy == NULL) return -1; if (mmguicorelc->device == NULL) return -1; if (!mmguicorelc->device->enabled) return -1; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return -1; contactv = g_variant_new("(ss)", contact->name, contact->number); error = NULL; idv = g_dbus_proxy_call_sync(moduledata->contactsproxy, "Add", contactv, 0, -1, NULL, &error); if ((idv == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return -1; } g_variant_get(idv, "(u)", &id); g_variant_unref(idv); contact->id = id; return id; } modem-manager-gui-0.0.19.1/packages/debian/source/000775 001750 001750 00000000000 13261703575 021472 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/modem-settings.h000664 001750 001750 00000004405 13261703575 021074 0ustar00alexalex000000 000000 /* * modem-settings.h * * Copyright 2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __MODEM_SETTINGS_H__ #define __MODEM_SETTINGS_H__ struct _modem_settings { gchar *filename; GKeyFile *keyfile; }; typedef struct _modem_settings *modem_settings_t; modem_settings_t mmgui_modem_settings_open(const gchar *persistentid); gboolean mmgui_modem_settings_close(modem_settings_t settings); gboolean mmgui_modem_settings_set_string(modem_settings_t settings, gchar *key, gchar *value); gchar *mmgui_modem_settings_get_string(modem_settings_t settings, gchar *key, gchar *defvalue); gboolean mmgui_modem_settings_set_string_list(modem_settings_t settings, gchar *key, gchar **value); gchar **mmgui_modem_settings_get_string_list(modem_settings_t settings, gchar *key, gchar **defvalue); gboolean mmgui_modem_settings_set_boolean(modem_settings_t settings, gchar *key, gboolean value); gboolean mmgui_modem_settings_get_boolean(modem_settings_t settings, gchar *key, gboolean defvalue); gboolean mmgui_modem_settings_set_int(modem_settings_t settings, gchar *key, gint value); gint mmgui_modem_settings_get_int(modem_settings_t settings, gchar *key, gint defvalue); gboolean mmgui_modem_settings_set_int64(modem_settings_t settings, gchar *key, gint64 value); gint64 mmgui_modem_settings_get_int64(modem_settings_t settings, gchar *key, gint64 defvalue); gboolean mmgui_modem_settings_set_double(modem_settings_t settings, gchar *key, gdouble value); gdouble mmgui_modem_settings_get_double(modem_settings_t settings, gchar *key, gdouble defvalue); #endif /* __MODEM_SETTINGS_H__ */ modem-manager-gui-0.0.19.1/help/bn_BD/bn_BD.po000664 001750 001750 00000070323 13261703575 020377 0ustar00alexalex000000 000000 # # Translators: # Md. Emruz Hossain , 2016 # Md. Emruz Hossain , 2016-2017 # Reazul Iqbal , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/ethereal/modem-manager-gui/language/bn_BD/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn_BD\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "অনুবাদক-ক্রেডিট" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "মডেম ম্যানেজার গুই সম্পর্কিত তথ্য।" #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "ম্যারিও ব্লাটারমান " #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "মডেম ম্যানেজার গুই সম্পর্কে। " #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "এই প্রোগ্রামটি Free Software Foundation হতে প্রকাশিত GNU General Public license version 3 এর শর্ত অনুযায়ী বিতরণ করা হয়েছে। এই লাইসেন্সেের কপি পাওয়া যাবে এই লিঙ্কে, link অথবা এই প্রোগ্রামের মূল কোডের সাথে সংযুক্ত COPYING ফাইলের মধ্যে। " #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "আপনি কিভাবে মডেম ম্যানাজার গুই অ্যাপ আরও ভাল করতে সাহায্য করতে পারেন। " #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "কোড দিন" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "বিশেষ দ্রষ্টব্যঃ এই ক্লোন করার কমান্ড আপনাকে রিপোজিটরিতে লেখার অনুমতি দেয় না। " #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr " মডেম ম্যানেজার গুই আপনার নিজের ভাষায় অনুবাদ করুন। " #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "অনুবাদসমূহ" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "মডেম ম্যানেজার GUIএর এই গ্রাফিকাল ইউজার ইন্টারফেছ, গতানুগতিক মান্যুয়াল পেইজ এবং GOME স্টাইল ম্যানুয়াল আপনার ভাষায় অনুবাদ করা যাবে।" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "মডেম ম্যানেজার গুই এর জন্য সাহায্য করুন। " #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "external ref='figures/gnome-hello-logo.png' md5='__failed__'" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "মডেম ম্যনেজার গুই" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "external ref='figures/modem-manager-gui-logo.png' md5='a5ab22246356ef7c194bb09f1ec8e432'" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "GNOME Hello logoModem Manager GUI manual" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "মডেম ম্যনেজার গুই ModemManager daemon এর গ্রাফিকাল রূপ যা মডেম এর কিছু নির্দিষ্ট কাজ করতে পারে।" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "আপনি মডেম ম্যনেজার গুই ব্যবহার করতে পারেন এই কাজগুলোর জন্যঃ" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "মোবাইল নেটওয়ার্ক স্ক্যান করা" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "ব্যবহার সমূহ" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "প্রজেক্টে অবদান রাখুন" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "আইনগত তথ্য।" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "লাইসেন্স" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "এই কাজ বিতরণ করা হয় একটি CreativeCommons Attribution-Share Alike 3.0 Unported license এর অধীনে।" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "আপনি মুক্তঃ " #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "শেয়ার করতে" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "কাজটি কপি, বিতরণ এবং প্রেরণ করতে।" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "রিমিক্স করতে" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "কাজের সাথে খাপ খাওয়াতে।" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "নিচের শর্তগুলো অনুসারেঃ" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "আরোপণ" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "ত্রুটি সমূহ ধরিয়ে দিন এবং নতুন বৈশিষ্ট্যের জন্য আবেদন করুন।" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "ত্রুটি সমূহ ধরিয়ে দিন" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/src/modem-settings.c000664 001750 001750 00000014630 13261703575 021070 0ustar00alexalex000000 000000 /* * modem-settings.c * * Copyright 2014-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include "modem-settings.h" modem_settings_t mmgui_modem_settings_open(const gchar *persistentid) { modem_settings_t settings; gchar *filepath; if (persistentid == NULL) return NULL; /*Form path using XDG standard*/ filepath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_data_dir(), "modem-manager-gui", "devices", persistentid, NULL); if (filepath == NULL) return NULL; if (g_mkdir_with_parents(filepath, 0755) != 0) { g_warning("Cant create modem settings directory"); g_free(filepath); return NULL; } settings = g_new(struct _modem_settings, 1); settings->filename = g_build_filename(filepath, "modem-settings.conf", NULL); settings->keyfile = g_key_file_new(); g_free(filepath); /*Do not show any error messages here*/ g_key_file_load_from_file(settings->keyfile, settings->filename, G_KEY_FILE_NONE, NULL); return settings; } gboolean mmgui_modem_settings_close(modem_settings_t settings) { gchar *filedata; gsize datasize; GError *error; if (settings == NULL) return FALSE; if ((settings->filename == NULL) || (settings->keyfile == NULL)) return FALSE; error = NULL; filedata = g_key_file_to_data(settings->keyfile, &datasize, &error); if (filedata != NULL) { if (!g_file_set_contents(settings->filename, filedata, datasize, &error)) { g_warning("No data saved to file"); g_error_free(error); error = NULL; } } else { g_warning("No data saved to file - empty"); g_error_free(error); error = NULL; } g_free(filedata); g_free(settings->filename); g_key_file_free(settings->keyfile); g_free(settings); return TRUE; } gboolean mmgui_modem_settings_set_string(modem_settings_t settings, gchar *key, gchar *value) { if ((settings == NULL) || (key == NULL) || (value == NULL)) return FALSE; g_key_file_set_string(settings->keyfile, "settings", key, value); return TRUE; } gchar *mmgui_modem_settings_get_string(modem_settings_t settings, gchar *key, gchar *defvalue) { gchar *value; GError *error; if ((settings == NULL) || (key == NULL)) return g_strdup(defvalue); error = NULL; value = g_key_file_get_string(settings->keyfile, "settings", key, &error); if ((value == NULL) && (error != NULL)) { g_error_free(error); return g_strdup(defvalue); } else { return g_strdup(value); } } gboolean mmgui_modem_settings_set_string_list(modem_settings_t settings, gchar *key, gchar **value) { gsize length; gint i; if ((settings == NULL) || (key == NULL) || (value == NULL)) return FALSE; i = 0; length = 0; while (value[i] != NULL) { length++; i++; } if (length == 0) return FALSE; g_key_file_set_string_list(settings->keyfile, "settings", key, (const gchar *const *)value, length); return TRUE; } gchar **mmgui_modem_settings_get_string_list(modem_settings_t settings, gchar *key, gchar **defvalue) { gchar **value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_string_list(settings->keyfile, "settings", key, NULL, &error); if ((value == NULL) && (error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean mmgui_modem_settings_set_boolean(modem_settings_t settings, gchar *key, gboolean value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_boolean(settings->keyfile, "settings", key, value); return TRUE; } gboolean mmgui_modem_settings_get_boolean(modem_settings_t settings, gchar *key, gboolean defvalue) { gboolean value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean mmgui_modem_settings_set_int(modem_settings_t settings, gchar *key, gint value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_integer(settings->keyfile, "settings", key, value); return TRUE; } gint mmgui_modem_settings_get_int(modem_settings_t settings, gchar *key, gint defvalue) { gint value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_integer(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean mmgui_modem_settings_set_int64(modem_settings_t settings, gchar *key, gint64 value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_int64(settings->keyfile, "settings", key, value); return TRUE; } gint64 mmgui_modem_settings_get_int64(modem_settings_t settings, gchar *key, gint64 defvalue) { gint value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_int64(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } gboolean mmgui_modem_settings_set_double(modem_settings_t settings, gchar *key, gdouble value) { if ((settings == NULL) || (key == NULL)) return FALSE; g_key_file_set_double(settings->keyfile, "settings", key, value); return TRUE; } gdouble mmgui_modem_settings_get_double(modem_settings_t settings, gchar *key, gdouble defvalue) { gdouble value; GError *error; if ((settings == NULL) || (key == NULL)) return defvalue; error = NULL; value = g_key_file_get_boolean(settings->keyfile, "settings", key, &error); if ((error != NULL)) { g_error_free(error); return defvalue; } else { return value; } } modem-manager-gui-0.0.19.1/resources/pixmaps/signal-100.png000664 001750 001750 00000005620 13261703575 023151 0ustar00alexalex000000 000000 PNG  IHDR}\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxb?- ###-YåB |tRΠ͙PD `ߏDKb 8f{7B lAq!jxS5؂WxAA0( f xFU5P,mG%Hm0os=IENDB`modem-manager-gui-0.0.19.1/src/ussdlist.h000664 001750 001750 00000002661 13261703575 020011 0ustar00alexalex000000 000000 /* * ussdlist.h * * Copyright 2012 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __USSDLIST_H__ #define __USSDLIST_H__ #include struct _ussdlist_entry { gchar *command; gchar *description; }; typedef struct _ussdlist_entry *ussdlist_entry_t; typedef void (*ussdlist_read_callback)(gchar *command, gchar *description, gboolean reencode, gpointer data); gboolean ussdlist_read_commands(ussdlist_read_callback callback, const gchar *persistentid, const gchar *internalid, gpointer data); gboolean ussdlist_start_xml_export(gboolean reencode); gboolean ussdlist_add_command_to_xml_export(gchar *command, gchar *description); gboolean ussdlist_end_xml_export(const gchar *persistentid); #endif /* __USSDLIST_H__ */ modem-manager-gui-0.0.19.1/man/000775 001750 001750 00000000000 13261703575 015745 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/appdata/ar.po000664 001750 001750 00000010266 13261703575 017553 0ustar00alexalex000000 000000 # # Translators: # Eslam Maolaoy , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Arabic (http://www.transifex.com/ethereal/modem-manager-gui/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "واجهة مستخدم البرنامج" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "التحكم بوظيفة EDGE/3G/4G والبرودباند والمودم المحددة" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "الواجهة البسيطة متوافقة مع البرنامج ,خدمات نظام Wader و oFono قادرة على التحكم بوظيفة EDGE/3G/4G والبرودباند والمودم المحددة" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "بإمكانك التحقق من الرصيد في هاتفك ,ارسال واستقبال الرسائل القصيرة ,التحكم باستهلاك البيانات والمزيد باستخدام واجهة المستحدم للبرنامج" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "الميزات الحالية" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "ارسل واستقبل الرسائل القصيرة واحفظها في قاعدة البيانات" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "بادر بطلبات USSD وإقرأ الإجابات (ايضا باستخدام الجلسات المتفاعلة)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "معلومات الجهاز : اسم مقدم الخدمة ,وضع الجهاز ,قوة الإشارة ,IMEI ,IMSI" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "البحث عن الشبكات المتوفرة" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "أنظر إلى احصائيات شبكة الهاتف وضع قيود" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "بعض الميزات قد لا تكون متوفرة بسبب قيود الأنظمة المختلفة أو حتى الإصدارات المختلفة من خدمات النظام التي تعمل حاليا" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/packages/000775 001750 001750 00000000000 13261703575 016750 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/resources/sounds/000775 001750 001750 00000000000 13261703575 020517 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/resources/modem-manager-gui.png000664 001750 001750 00000031631 13261703575 023211 0ustar00alexalex000000 000000 PNG  IHDR>asRGBbKGD pHYs B(xtIME Z IDATxweu[ksn{7`7"ɬ%ZJHɦd%?EI%RϦŏh* XeQ, !6fz){>)*>ܹ^~gѥ;HnQ$ؔ;%.`ϤήѷWGNl}j:?߫fkZY|,BbSgDur=R2"\>ǰbh?&]qٛrvnmciq^@HVAB2yl29/`Oy=h{\~ @Dݒ&&'2eܵogSݺ:nd;j=ά/Kci{lF`YER{G/^813'_'{n5–sy_^tz{?](*{ťQ7q}y+b !(%"@`~d~Ńsx%_v_ŭZg'l M<{i;yIGTzUGOLPX A{fYH]7]]ǥ%awl~nzW,Nw{'XovOtxkg>_D\1z;o:='v4:(&0EM0_unt1-><޷}CƍF0D).rA vqmJ#ur,Gl~ 0 7` ˟ȇ֧qwɂ@ҸEv (0 Mi|ۗƧ=zP2wff@Qh"w?{<]s4Eɏ߽ȵ7o\h@CHIB:_X&y%[,`Ϭ-*b23%!d5}xv|lU!h4}PNQ5<[d7/Ю-yW|l^PSY[B\ sJ%xھKHZZ}Wgeʈ3;pBs7o]ݵ<)©{-F>K^&܅y .>HPJ`T/٬yuny@N.>Ƴٖ@ m*> 4Q; FZtd{1f+7ZK 䢔"@Ad!2э}<`i@ B%wv,88Lg[(>c08\|E'58h!h+QF3(Dj_+ݶXZ|{ʇp97|LRĥWĶ,\ C`\T(8>nխɏ` j1 OGu`L$W {ؗMj,=p(>Uy(q5%q/ CWvg~j^rM%%+8ϩF\7,=K/zz+u1g #^U"֢qa尵c[糗,0 O Joqܽqb_r)k!Z]V \}xe.BO6'FI2<2ܮCa*SmZlgzGj|FRC9ǴʧP}5$^]R $[2{P.9ጡD 4LPbK琄h9x&~*@O:<*pp"ײ&,1y ^ْc^(bh^ Ez{iU7,8Skh+Z=hZv RM$*F"3 Iy Ύg&!ȣ$+s-s)1y"BDݹĤA0b@\|&$ rEg-,!C\?N7{ `O AjOeୈieWa2QIBppD@B0 ,HM$s݇d 5Yŵ K5D(Z'bd\9YtaN&( a+(_]ǁ==}e5mncn) ܿ,Q8;Mq T,|,yaE٦#K$ BS9G`4C)(0o}zeDvbQPBY$|agNݷ6n-PÑ%U"ǁ'W_mi=>>vv$ŶK!8tE+ zo$  / /~W[SA*7V!{H8Y ^`]4)/}٥,S*!s G/X|0=ӋfoD%qּ@~xkC΢F 53Y ۈ/=F_6f^JJ 0ȥA(J|;B"W" Q1OIտɶպnAΘL#r` ! Y=q+tT{z2?% :|rQ:Dk0!komg]%heCw Hy8o7m, .RmI2ȿ@ x x1:ԙ!OȾrsT߲+={jJ `H#|'r7E Nm] `FzcHKSl8baуH=W^r@$f_ t>CM-․}m}t!jL:evx^!лUF$GF÷5<^@ːMi.GȨ"D>R[>mxB Ģa5Qdr|sSKhL hMkD@ض ׍mѰO~B9G`PRq˘@[GDAk(x}CI D1 I M5IiP^{!ՅrV U=  J$`y|>Bn0}T*zT!9X̼ãݑ4;Rߩd vAN=ap؊ȓB=ƩeAURÌm1 A |뮏aD8$(bF/ccBq+ YXa0( * Y_~YҥK@G,`Kpn̩F@; ܳ.۩축!ÛiL柫A H9 \<)?KY/`%YS_iIB/ Ay`HTt5ݴ3>x,$S6Pl8%FzH]$dP4k\d/l%tA!G\JKT%WD S0hhz㱣@ RZ z E⺍ź&Pl$<˧RH[}.q=Wމ5qOeI\ 7@I>baC!YycSCJp `Eh5|ɥJTP_PaG53䣈y|@$/ Tq*qE}&L ۧ]Φ聩)jHyE^Jp)ŁNFm8,@XD7fpl~>>@y&b rB5B =s>Bځͫ ,  ¿NN5F$:c5JMkwhgÇJЩ R?⚅kq/i+SYѭ eoIWՐ9wyI;㇨j]ee$p4SaX_9"ɂ}=2&E hmB+UӠ"j'9 X%m!`<)ĕ`=;/s]|D{&P L˫0 @a8@`h.(Q d4yW14 U.`X0-`W4o+yGwz G8,'p vb (OԔ)2$-`W֩Owd= df)¨K(ziIV>D쉁6ӯy"}9JNߥ+]@`P{Of4fDnJ3 x.*l)'C_(4WjF"Pb/@ADZjNjUA J@ylU\_[38}uw<\َT3P#TBs5{8t.iMf5:Y xV(`*NR(KMzAW@XO[;墚^Wa.l=#D  _ZyW+`ݺ>?"[xB)R/i&fC-nE칎Ic5fTv]?( T^Y)GhHʣ]v[}.GKg[ %GlQT͑7"&z䉞B ).(.BD5-5y^ܙ !ǛS~TM\J*LT\Y@TJb?9=&5QWRuv_pɇ7.<MOeMz!BMF4-ZQV>{vRdj'Nhz8r4v ~L%?K%R{hWN/]l,)C( !%T7坋ZR];iq|u,2(P 9H]zp߇fT2+i;7Hȉ|#HA)>Y_9Y+ÇrL3۲qv^/FsMݼP| !Ɇa*(D:=>tw`h,)TPU~; } ~iTڭeXN[(5ϫE'r|L RTӆ9[h!Nh0\0皓[` XE =J լ/;Ch.d_qZhOGds(ل7`ٳc cfMD"d#cA+O j6!3_.McOpA@5j.-u_XN0`MM7,Jezz[~^-)+m`.Ai,@G=Il#Y5phi3TMf]5L0z5UXA0E@AݫBl҆)`9S1g6GAb\<$=֞==3pE\ JnhU=ڟ,O)j#07/.x<=bn$L\ /QҀJ/DbٜPSC"*&!lm,}eShG($Ui8USC13ASYG66A4*2%rb;T&]r֍;BDzo7Qz3s=VGv\l`J2pzBK8*0'k!`\8ȥEa1 2a?L3.~|ဆN3cj:EAŅV eH jv9~@$LJ: tLRِx=$툜;Ȯ95&e>Z@} zqgW&t1HR7gۋ@M:WI[/6TިႹC-uآիG8ʷsX(I:Cª E* B f/D""D^mZ6)esnlkJz4aT^`G}VU ]s7һ{g.yUy@ax:́H.d/2`Η'bt6AhUѵI~ΜOvTR0xTDq<^- ==;A\i KE $ADԣ6)?[;_<'գ_PC!>Ц ;݄) [iUaT$@~jWX.&TxM:gRE 6셚6}o} 輨.@ _ڞN[<rmyG R5ADދ.,G A" );:Xv]~G$h2(J'jD,T:J. zXziD^}PӭT3@vhFvCϿ쯐t8Ξz&|õO(+*+1$_f%uxʼ;UƗz+*؅-6sWGFVlJ5 Pĥz!kH4ޗxԎp),ayB`m陁+QV`0j';ajb@F(D8yuli16ADdA[8S_Tڔ)m~pHtQ{vKtyEDGCܼPxoGw⌕ =oFEA.%Ի-?ݴ~Cv|aR,\+ج!=޹ޮ{K *Rnvye(zVHodz"nmBZ'5}vQŎܵYHdTKZ+ѓUHk4[N@ߏ3d[ =~'óHY)''ĀC [Wޞ<:x`Vaʇ0hM?|c̲n +"UC]Yҟ j9>uP4Pb2{,Bd+ʚoPEVtI{Suyhke!HU0,TJًᫀ-^j>ht_K8Z+JBd92+ʌ=0S\GlF$ JI;%"dvYO&>h.TBQTSB7("@_>m7{YGˆ]fQ]nξN"w`;!? ;#@IF $7OGAPp*#*nO BƥSJ9 IDAT>'S^:@ОXm[-e\ 7G۵S"hg|DA*t~p#ߵwB ;].7QtBV}3_϶!UOQ߰fjqb┮jw+9*0F.{ϓEUJ VMIDYpp g$}d7dz·mꁱ墭E%UQԭS8%ayt`أP\wp){ݒw$k:_|vѪz3J4~GMDX78(O`+=yb7$(J8JC &B?]@[A:Vy0ss ;VbiKe:.)-cWlD5E\wz~CRy&x({5}W9K_~~vb*ȨreY!Ұg\>xV ]tw,jkSbaj(Oʧ#c OTB;ae7h羙_o;z5sO(SOf/yL*؅T;䉁7Gw}x MܡEV^k*JwFq߸1l8Z|ˁ?M/n}G"\=9>!IPPz55"3sJ[XV9pzK㿮wnm1Deؽ?Qdߖ>4 שa>z2ˀ#TэлgEL T~b߼<|'? 5'7w\g6OF3>ڍKUN3W'tϏ^ʾgUoڱ!.~ec0V-( d5sebTҁʈWQ$Fn'~Q$S+C$<`"{];%Tkt;R1*]ؾwԯ^}5TX\r9ΞmIZ_07 M:V YCQ=}|x1}p귭8>bni#'\-Fœ8d sxm|N_ϭe[Ҫ g #z|U!wF$+en%o}sSv)>wFHK1FZ)t6N}{ޱ뾕 )!Wvf3#ǣ[y E^`Wk1Ł_;?_ӾILwBYpJџiעYT — Rߎѵ ?57J($̥/ }egԯQߍtW}buie.dP\̭U],ȌK4K}ǹno<(Q=Zl̳(5Dze SJwрOU&Ḅ&ca'ΕfS/7O6_"!d2'!yp_ߺܼ@P'KT$gnW+9WSɓC'>YSwVZd)䛣/w<&{>ryr6޽-֗.n~ʟ噅6:ja:{tx?nڍ3ɼMU>I%-f셁d嵛[vw-,PO'zWf/ÅVO#7s``B-j'cJWlSx#;U WìF{7~6:ڮ" Z1\;rzɅ}~lu^Moһmst:-7dr'2V~vP7K|!;/T"&dž3j,'FI#G?w߭u~YAS+{;8K?P)"ynGGEM7\}o4Լs.nPYoN./~{??c]u+@Ñ?_* 匆2:lOٺ/ GwU1Yӵ  5[*7 G2N@z~LMqtEI'{v9>߻wT3V3Y.ܟg|v;~XH|{h_@P'b']AR=2NrJzt}z^cu9zyf}s{t 65nH mUPң!OO6.7l^ÃTTNRH!?Ժj}Xv 8'v[e__־S%!N@vC!}fgXrD~[I`ףo.԰mx{4|UݲىZ\m-<]#f- dDm0yB~80lv5jkt_g7˿_۽nG_zݴyP%kiWg؝*RNz ˺N.njw*Ҁd_ᱬ8),E޽cǶ>y/)vlx礣[;W d"!mʞxܼWow#Y.Ő1e5Wk \g_7KXƢ`!=*TU="ȮF'eKGjw6}ug{ƑM-<߭XdzO,7pvIe@(1rڔktT^d/B+tv5NinC[EvQ n@\(<,,%KQNm獲ϟה\eWZjy2QIaUaK(OX8fbRPB)EmOg/ |zD_rB2>W|HM%[nOҢXtH(P#1LRЃ\ڂW822f1Z#3Ko}i N,8s_nywz&9C8eC*N:pA E#pbhlՖZl7OO._IjIcr{K[_y DW2,vMT$(lTEcA3=|Y_ֽ>j,;#aJIFd;@ ) MVJXs~cә[#V?-T25 hR'0G.d%6X]9ø/T0ڻ Sg!tIaۺ1`͝I UVѤ d qN|>Dțɾ\` nhZgk}ևg@r  ^N+;/o@:m~\|,nE9gH&/)|GT>| 97wh'=w|@-]@_  tF~Y|r~w@ QeЗs/tIENDB`modem-manager-gui-0.0.19.1/man/de/meson.build000664 001750 001750 00000000344 13261703575 020500 0ustar00alexalex000000 000000 custom_target('man-de', input: 'de.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'de', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/help/zh_CN/zh_CN.po000664 001750 001750 00000062016 13261703575 020471 0ustar00alexalex000000 000000 # # Translators: # 周磊 , 2017 # 周磊 , 2017 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-11 00:57+0300\n" "PO-Revision-Date: 2018-01-24 18:19+0000\n" "Last-Translator: Alex \n" "Language-Team: Chinese (China) (http://www.transifex.com/ethereal/modem-manager-gui/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" #. (itstool) path: info/desc #: C/about.page:9 msgid "Information about Modem Manager GUI." msgstr "有关 Modem Manager GUI 的信息。" #. (itstool) path: credit/name #: C/about.page:13 C/contrib-code.page:13 C/contrib-translations.page:13 #: C/index.page:11 C/report-bugs.page:13 C/usage-config.page:13 #: C/usage-contacts.page:13 C/usage-getinfo.page:13 C/usage-modem.page:13 #: C/usage-netsearch.page:13 C/usage-sms.page:14 C/usage-traffic.page:13 #: C/usage-ussd.page:13 msgid "Mario Blättermann" msgstr "Mario Blättermann" #. (itstool) path: credit/name #: C/about.page:17 C/contrib-code.page:17 C/index.page:15 #: C/report-bugs.page:17 C/usage-contacts.page:17 C/usage-netsearch.page:17 #: C/usage-sms.page:18 C/usage-traffic.page:17 C/usage-ussd.page:17 msgid "Alex" msgstr "Alex" #. (itstool) path: license/p #: C/about.page:21 C/contrib-code.page:21 C/contrib-translations.page:17 #: C/index.page:19 C/report-bugs.page:21 C/usage-config.page:17 #: C/usage-contacts.page:21 C/usage-getinfo.page:17 C/usage-modem.page:17 #: C/usage-netsearch.page:21 C/usage-sms.page:22 C/usage-traffic.page:21 #: C/usage-ussd.page:21 msgid "Creative Commons Share Alike 3.0" msgstr "Creative Commons Share Alike 3.0" #. (itstool) path: page/title #: C/about.page:25 msgid "About Modem Manager GUI" msgstr "关于 Modem Manager GUI " #. (itstool) path: page/p #: C/about.page:27 msgid "" "Modem Manager GUI was written by Alex. To find more information " "about Modem Manager GUI, please visit the Modem Manager " "GUI Web page." msgstr "" #. (itstool) path: page/p #: C/about.page:33 msgid "" "To report a bug or make a suggestion regarding this application or this " "manual, use " "Modem Manager GUI support forum." msgstr "" #. (itstool) path: page/p #: C/about.page:39 msgid "" "This program is distributed under the terms of the GNU General Public " "license version 3, as published by the Free Software Foundation. A copy of " "this license can be found at this link, or in the file COPYING included with the source " "code of this program." msgstr "" #. (itstool) path: info/desc #: C/contrib-code.page:9 msgid "How you can help make Modem Manager GUI better." msgstr "如何帮助使 Modem Manager GUI 更好。" #. (itstool) path: page/title #: C/contrib-code.page:25 msgid "Provide code" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:26 msgid "" "Modem Manager GUI has a version control system at Bitbucket.com. " "You can clone the repository with the following command:" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:29 msgid "" "hg clone https://linuxonly@bitbucket.org/linuxonly/modem-manager-" "gui" msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:31 msgid "" "Note, this clone command doesn't give you write access to the repository." msgstr "注意,此克隆命令不向您提供存储库的写入访问权限。" #. (itstool) path: page/p #: C/contrib-code.page:33 msgid "" "For general help on how Bitbucket works, see the Bitbucket" " documentation." msgstr "" #. (itstool) path: page/p #: C/contrib-code.page:36 msgid "" "Modem Manager GUI source code is stored inside Mercurial " "repository, so you don't have to read Git tutorials; just make sure you know" " basic Mercurial commands and able to make pull requests on Bitbucket " "platform." msgstr "" #. (itstool) path: info/desc #: C/contrib-translations.page:9 msgid "Translate Modem Manager GUI into your native language." msgstr "翻译 Modem Manager GUI 为您的母语" #. (itstool) path: page/title #: C/contrib-translations.page:21 msgid "Translations" msgstr "翻译" #. (itstool) path: page/p #: C/contrib-translations.page:22 msgid "" "The graphical user interface, the traditional man page and the Gnome-style " "user manual of Modem Manager GUI can be translated into your " "language." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:25 msgid "" "There is a project page on Transifex where existing translations are " "hosted and also new ones can be provided." msgstr "" #. (itstool) path: page/p #: C/contrib-translations.page:31 msgid "" "For general help on how Transifex works, see the Transifex Help Desk." msgstr "" #. (itstool) path: note/p #: C/contrib-translations.page:35 msgid "" "For your work you should have a look at the rules and dictionaries of the " "local Gnome translation teams " ". Although Modem Manager GUI shouldn't be considered as " "pure Gnome software, it will be often used in GTK based environments and " "should match the conceptual world of such applications." msgstr "" #. (itstool) path: info/desc #: C/index.page:6 msgid "Help for Modem Manager GUI." msgstr "Modem Manager GUI的帮助" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:7 msgctxt "_" msgid "external ref='figures/gnome-hello-logo.png' md5='__failed__'" msgstr "" #. (itstool) path: info/title #: C/index.page:8 msgctxt "text" msgid "Modem Manager GUI" msgstr "" #. (itstool) path: title/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/index.page:24 msgctxt "_" msgid "" "external ref='figures/modem-manager-gui-logo.png' " "md5='a5ab22246356ef7c194bb09f1ec8e432'" msgstr "" #. (itstool) path: page/title #: C/index.page:24 msgid "" "GNOME Hello" " logoModem Manager GUI manual" msgstr "" #. (itstool) path: page/p #: C/index.page:26 msgid "" "Modem Manager GUI is a graphical frontend for the ModemManager " "daemon which is able to control specific modem functions." msgstr "" #. (itstool) path: page/p #: C/index.page:30 msgid "You can use Modem Manager GUI for the following tasks:" msgstr "" #. (itstool) path: item/p #: C/index.page:35 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: item/p #: C/index.page:38 msgid "Send and receive SMS messages and store messages in database" msgstr "" #. (itstool) path: item/p #: C/index.page:41 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: item/p #: C/index.page:44 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "" #. (itstool) path: item/p #: C/index.page:47 msgid "Scan available mobile networks" msgstr "" #. (itstool) path: item/p #: C/index.page:50 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: section/title #: C/index.page:55 msgid "Usage" msgstr "" #. (itstool) path: section/title #: C/index.page:59 msgid "Contribute to the project" msgstr "" #. (itstool) path: info/desc #: C/license.page:8 msgid "Legal information." msgstr "法律信息。" #. (itstool) path: page/title #: C/license.page:11 msgid "License" msgstr "证书" #. (itstool) path: page/p #: C/license.page:12 msgid "" "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0" " Unported license." msgstr "" #. (itstool) path: page/p #: C/license.page:20 msgid "You are free:" msgstr "" #. (itstool) path: item/title #: C/license.page:25 msgid "To share" msgstr "" #. (itstool) path: item/p #: C/license.page:26 msgid "To copy, distribute and transmit the work." msgstr "" #. (itstool) path: item/title #: C/license.page:29 msgid "To remix" msgstr "" #. (itstool) path: item/p #: C/license.page:30 msgid "To adapt the work." msgstr "" #. (itstool) path: page/p #: C/license.page:33 msgid "Under the following conditions:" msgstr "" #. (itstool) path: item/title #: C/license.page:38 msgid "Attribution" msgstr "Attribution" #. (itstool) path: item/p #: C/license.page:39 msgid "" "You must attribute the work in the manner specified by the author or " "licensor (but not in any way that suggests that they endorse you or your use" " of the work)." msgstr "" #. (itstool) path: item/title #: C/license.page:46 msgid "Share Alike" msgstr "" #. (itstool) path: item/p #: C/license.page:47 msgid "" "If you alter, transform, or build upon this work, you may distribute the " "resulting work only under the same, similar or a compatible license." msgstr "" #. (itstool) path: page/p #: C/license.page:53 msgid "" "For the full text of the license, see the CreativeCommons website, or read the full Commons Deed." msgstr "" #. (itstool) path: info/desc #: C/report-bugs.page:9 msgid "Report bugs and request new features." msgstr "" #. (itstool) path: page/title #: C/report-bugs.page:25 msgid "Report bugs" msgstr "报告BUG" #. (itstool) path: page/p #: C/report-bugs.page:26 msgid "" "If you found a bug in Modem Manager GUI, you can use the support forum." msgstr "" #. (itstool) path: page/p #: C/report-bugs.page:29 msgid "" "Before filing a new topic, please have a look at the existing " "ones first. Maybe someone else has already encountered the same " "problem? Then you might write your comments there." msgstr "" #. (itstool) path: note/p #: C/report-bugs.page:34 msgid "You can also use the support forum for feature requests." msgstr "" #. (itstool) path: info/desc #: C/usage-config.page:9 msgid "Configure the application to match your needs." msgstr "" #. (itstool) path: page/title #: C/usage-config.page:21 msgid "Configuration" msgstr "" #. (itstool) path: info/desc #: C/usage-contacts.page:9 msgid "Use your contact lists." msgstr "" #. (itstool) path: page/title #: C/usage-contacts.page:25 msgid "Contact lists" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:26 msgid "" "Broadband modem has access to contacts stored on SIM card. Some modems can " "also store contacts in internal memory. Modem Manager GUI can " "work with contacts from these storages and also can export contacts from " "system contacts storages. Supported system contact storages are: Evolution " "Data Server used by GNOME applications (GNOME contacts section) and Akonadi " "server used by KDE applications (KDE contacts section)." msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-contacts.page:33 msgctxt "_" msgid "" "external ref='figures/contacts-window.png' " "md5='d5d3b2a8dd0db7eacf7dd9f80950cfc7'" msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:32 msgid "" " Contacts window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-contacts.page:38 msgid "" "Use New contact button to fill form and add new " "contact to SIM card or modem storage, Remove " "contact button to remove selected contact from SIM card or modem " "storage and Send SMS button to compose and send " "SMS message to selected contact (either from SIM card or modem, or exported " "from system contacts storage)." msgstr "" #. (itstool) path: note/p #: C/usage-contacts.page:44 msgid "" "Some backends don't support modem contacts manipulation functions. For " "example, ModemManager doesn't work with contacts from SIM card and modem " "memory at all (this functionality isn't implemented yet), and oFono can only" " export contacts from SIM card (this is developer's decision)." msgstr "" #. (itstool) path: info/desc #: C/usage-getinfo.page:9 msgid "Get info about the mobile network." msgstr "" #. (itstool) path: page/title #: C/usage-getinfo.page:21 msgid "Network info" msgstr "网络信息" #. (itstool) path: page/p #: C/usage-getinfo.page:22 msgid "" "Your network operator provides some info which you can view in Modem " "Manager GUI. Click on the Info button in " "the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:26 msgid "" "In the following window you see all available information as provided from " "your operator:" msgstr "" #. (itstool) path: p/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-getinfo.page:30 msgctxt "_" msgid "" "external ref='figures/network-info.png' " "md5='46b945ab670dabf253f73548c0e6b1a0'" msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:29 msgid "" " " "Network information window of Modem Manager GUI. " msgstr "" #. (itstool) path: page/p #: C/usage-getinfo.page:35 msgid "" "The most informations are self-explained and well known from traditional " "mobile phones or smartphones. Note, the GPS based location detection (in the" " lower part of the window) won't work in most cases because mobile broadband" " devices usually don't have a GPS sensor." msgstr "" #. (itstool) path: info/desc #: C/usage-modem.page:9 msgid "Activate your modem devices." msgstr "" #. (itstool) path: page/title #: C/usage-modem.page:21 msgid "Modems" msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:22 msgid "" "After starting Modem Manager GUI, the following window will be " "displayed:" msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-modem.page:25 msgctxt "_" msgid "" "external ref='figures/startup-window.png' " "md5='0732138275656f836e2c0f2905b715fd'" msgstr "" #. (itstool) path: media/app #: C/usage-modem.page:26 C/usage-netsearch.page:31 C/usage-sms.page:38 #: C/usage-traffic.page:35 C/usage-ussd.page:34 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: figure/media #: C/usage-modem.page:25 msgid "The startup window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:30 msgid "" "You can see the modem devices available on your system. Click on one of the " "entries to use that device." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:33 msgid "" "After clicking on a device, it might be needed to activate it first, if it " "was not otherwise activated on your system. Modem Manager GUI " "will ask you for confirmation in that case." msgstr "" #. (itstool) path: page/p #: C/usage-modem.page:37 msgid "" "Be patient after connecting a removable device such as an USB stick or " "PCMCIA card. It may take a while until the system detects it." msgstr "" #. (itstool) path: note/p #: C/usage-modem.page:41 msgid "" "You cannot use multiple modems at the same time. If you click on another " "entry in the device list, the previously activated one will be disabled." msgstr "" #. (itstool) path: info/desc #: C/usage-netsearch.page:9 msgid "Search for available networks." msgstr "" #. (itstool) path: page/title #: C/usage-netsearch.page:25 msgid "Network Search" msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:26 msgid "" "Modem Manager GUI can be used to search available mobile " "networks. Click on the Scan button in the " "toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-netsearch.page:30 msgctxt "_" msgid "" "external ref='figures/scan-window.png' " "md5='8a9dd66ef917dcd42de0d8a69fb84ccd'" msgstr "" #. (itstool) path: figure/media #: C/usage-netsearch.page:30 msgid "Network search window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-netsearch.page:35 msgid "" "If one mobile network appears more than once in the list, this mobile " "network use different broadcasting standards. It is obvioius that you can't " "scan mobile networks using broadcasting standards that your modem doesn't " "support." msgstr "" #. (itstool) path: info/desc #: C/usage-sms.page:10 msgid "Use Modem Manager GUI for sending and receiving SMS." msgstr "" #. (itstool) path: page/title #: C/usage-sms.page:26 msgid "SMS" msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:27 msgid "" "Most broadband modems able to send and receive SMS messages just like any " "mobile phone. You can use Modem Manager GUI if you want to send " "or read received SMS messages. Click on the SMS " "button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:32 msgid "" "As you can see, all messages are stored in three folders. You can find " "received messages in the Incoming folder, sent messages in the Sent folder " "and saved messages in the Drafts folder." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-sms.page:37 msgctxt "_" msgid "" "external ref='figures/sms-window.png' md5='7032b1a7fff2f2834ea821cf8eeb14ac'" msgstr "" #. (itstool) path: figure/media #: C/usage-sms.page:37 msgid "SMS window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:42 msgid "" "You can tweak messages sorting order and SMS special parameters using " "Preferences window." msgstr "" #. (itstool) path: page/p #: C/usage-sms.page:45 msgid "" "Use New button to compose and send or save " "message, Remove button to remove selected " "message(s) and Answer button to answer selected " "message (if this message has valid number). Don't forget that you can select" " more than one message at once." msgstr "" #. (itstool) path: info/desc #: C/usage-traffic.page:9 msgid "Get statistics about network traffic." msgstr "" #. (itstool) path: page/title #: C/usage-traffic.page:25 msgid "Network traffic" msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:26 msgid "" "Modem Manager GUI collects mobile broadband traffic statistics " "and able to disconnect modem when traffic consumption or time of the session" " exceeds user-defined limit. To use such functions, click on the Traffic button in the toolbar." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:30 msgid "" "Network traffic window has list with session, month and year traffic " "consumption information on the left and graphical representation of current " "network connection speed on the right." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-traffic.page:34 msgctxt "_" msgid "" "external ref='figures/traffic-window.png' " "md5='3cced75039a5230c68834ba4aebabcc3'" msgstr "" #. (itstool) path: figure/media #: C/usage-traffic.page:34 msgid "Network traffic window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-traffic.page:39 msgid "" "Use Set limit button to set traffic or time " "limit for current session, Connections button to" " view list of active network connections and terminate applications " "consuming network traffic and Statistics button " "to view daily traffic consumption statistics for selected months." msgstr "" #. (itstool) path: note/p #: C/usage-traffic.page:45 msgid "" "Traffic statistics are collected only while Modem Manager GUI is " "running, so result values can be inaccurate and must be treated as reference" " only. The most accurate traffic statistics are collected by mobile " "operator." msgstr "" #. (itstool) path: info/desc #: C/usage-ussd.page:9 msgid "" "Use Modem Manager GUI for send USSD codes and receive the " "answers." msgstr "" #. (itstool) path: page/title #: C/usage-ussd.page:25 msgid "USSD codes" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:26 msgid "" "Modem Manager GUI is able to send USSD codes. These codes are " "controlling some network functions, for example the visibility of your phone" " number when sending a SMS." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:29 msgid "" "To use the USSD functions, click on the USSD " "button in the toolbar." msgstr "" #. (itstool) path: figure/media #. This is a reference to an external file such as an image or video. When #. the file changes, the md5 hash will change to let you know you need to #. update your localized copy. The msgstr is not used at all. Set it to #. whatever you like once you have updated your copy of the file. #: C/usage-ussd.page:33 msgctxt "_" msgid "" "external ref='figures/ussd-window.png' " "md5='c1f2437ed53d67408c1fdfeb270f001a'" msgstr "" #. (itstool) path: figure/media #: C/usage-ussd.page:33 msgid "USSD window of <_:app-1/>." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:38 msgid "" "In the text entry on top of the window, the code *100# is already" " displayed. This code is the usual one for requesting the balance for a " "prepaid card. If you like to send another code, click on the Edit button on the right" msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:42 msgid "" "Modem Manager GUI supports interactive USSD sessions, so pay " "attention to hints displayed under USSD answers. You can send USSD responses" " using text entry for USSD commands. If you'll send new USSD command while " "USSD session is active, this session will be closed automatically." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:47 msgid "" "If you use Huawei device and get unreadable USSD answers, you can try to " "click on the Edit button and toggle the Change message encoding button in the toolbar of " "opened window." msgstr "" #. (itstool) path: note/p #: C/usage-ussd.page:53 msgid "" "USSD codes are only available in networks which use the 3GPP" " standards ." msgstr "" #. (itstool) path: page/p #: C/usage-ussd.page:58 msgid "" "You can use such codes for many purposes: change plan, request balance, " "block number, etc." msgstr "" #. (itstool) path: C/usage-ussd.page/page #: C/usage-ussd.page:4 msgid "" "<_:info-1/> <_:title-2/> <_:p-3/> <_:p-4/> <_:figure-5/> <_:p-6/>. <_:p-7/> " "<_:note-8/> <_:note-9/> <_:p-10/>" msgstr "" modem-manager-gui-0.0.19.1/resources/modem-manager-gui-symbolic.svg000664 001750 001750 00000021017 13261703575 025040 0ustar00alexalex000000 000000 image/svg+xml Openclipart 2008-02-06T04:32:31 https://openclipart.org/detail/12947/lotus-by-anonymous-12947 Anonymous flower icon kamal lotus nature plant tree modem-manager-gui-0.0.19.1/help/C/figures/scan-window.png000664 001750 001750 00000152233 13261703575 022715 0ustar00alexalex000000 000000 PNG  IHDRCwsBIT|dtEXtSoftwaremate-screenshotȖJ IDATxyxE_=W&'P@DQUDe9dAQ*\EDQS$drM2wȷ{gd&IUﮪtէ$|pʾ @ XnT~NKKRq@ kFx{W;wU@ @p3rHϮn@ uI:e, 7p@ J {~z!@ q8cXnZ-zDDD:ꀮx t Z@ Yˣۭp:\.V+fHbcc \w #\ @pYpdggSZZ,Oxx8:Iqq1999\xv;h4:|a k޽{OӣG@ ,`Z4i҄0FIdd$jرcXVrrrHHHE/p@_?|m۶USlnJKKq:4hIp\Un t:)--kA jŁ8~8 6d͚5DEEQPPYܹӧOJ~h׮z>DcySe Yx1+qw݄? =zT~ivիq\tԉÇ駟ry, F 0l07oLJzCq1RRRx駩W^\.1{zݻÇ9t=ǂ HOOd21|֭D!Iǎn}`Zq\DFFR1ZHdd$VJhh5ܹsiԨ:uRݼy3Ǐgȑ.˲&6)<@Y}8qS{^n:L¡Ci׮_gݺuyK.o:xbl6=V"""|h/_/_Mjj*qqqϲa:t@qq1k֬[XXHhh(]ve4nܘSPPeHII!**tfϞT8K.eʕX,ڷo… հCBB쫯Bp 7eߟ0%++,bcc+hO۪V6Ӊ ::ګx;wkپ}׾hN3𕭴>Rǫ~f͘;w.6lri&0&|FKRl6Zч- N:k׎͛7Fwޤ(u0`&M>૯b}@a5jgϞejx?ϟG$Zl,4oޜCq<7߬?h ƏҥKyZ|p :ur :wsԮ]~"nFKQQr-5?0Xl.Ai& رc9}4 f=z`ԩvէyyy$$$QFr zO dYp`4۵k-瞣VZ\pwyƍӦMՎ tbL6'jΩn;vD3c ;?ѣ뮻(-- 8|?#<XBCC.L G@ \. ?޽{ѣ. .P^=߀і @||<999Fp mɒ%W[.^'DFFmN>ݧ P\\JJ ³$jժEvvv8Y֭9{zOVVΝSߟ={O?y{j.$Ir&M⣏>c4lؐz u}e.&w\̙33g0ydO;v׻[,ڶmKnذa:u;PW>THӦM"**Mb4)))b. 2-Z 99~y N:9rDwj׮KLLԩSȲɓ'«UVYťѰa߯nk׮g<<}Hƍ>|8vRW*f_q GL [n@&Ȳ?LϞ=+C:xo@X0Clb[شZ-$a۽4 0a 6dԫWg}"v;$jt'pIx nLٳgOՅu_7ҵkWnʚ5k*SUP wJ:u&vxN8QT,iӦa6[W+.n6lSNo!;;IرcPf`*w}|,_PWСԩS 0n ٳg9~8 .jY|LZޤ$~+ӻwof͚Ųe.f6l+Ge„ nZ/o~z= ~, 0y/ kVVpc<3L6 &`6+yłNC߱cGF^N믿t)O,XѣGөS'Zh3eY6>nv,˄Pn]JJJ|޽;̛7ЪU+{1Zh0CQXXȷ~ˁ7nngܹ|lڴ-[Brr2F9xUw)}Wy79z(bҤI/| q &~QXXիٿ?O>$ PGh ܹsYhׯgϞ=ȲL\\]v{j8]vvduvFCѥK j)j&$a20>]4i>G k UV(s%jݥ>}Ӻukrrr[?~<{r[*|{?#}QXX$I4nk2Uddda G&Mi<;NLL (3f$I$$$,\x$Z-L&z=nAII /^D qPV2ԖؔBCC),,$++MoHHIII%G9/8$..xdYfL8_TK@$"""t:l{MTT/((IN,˜>}XVΝ;Gjjj+Z^Z^#""0@Ÿ8qbFᠰNGBBP60t)f $77^zۣشiyyylْ7|z(hZQrqi0LnO81xwVKDDx@DD|.+dnݺ|8j׮̓>СCxՎ@ 4:NN>MZ*]f DDDTj~Vt~` #\ aaa̞=ш$I8T7@ v1 dffd"$$VR]v;u!""PV A trԩ @ Kii)4mL~~>8Nt:.g_@ ˊjEIll:,%%%U.ps=@ A:X/Z@ +0@ +0@ +ʖ6@ W.@ \a4ִ@ <$!P@ +Nh\ @ \~$I(@ 䪸j@2JOOƧ|W9?%@ $IeFxUn~G4hM6u:z#I^^^b|QW_y*LtW7>P @ j&$6O}(,,_ogΜnݺq_/BQQ <裼=ӰaC&Oܹs1 sz=:t`hZ2224^|Ef37ޠur S1:S\\̫Sj2|j^8͛7ٳ$^{e˖1h ݻٳgZZ_ @ *L̮]ԩ..]m6uje۶m=Ʉl&::,F^^^Cݻw3|pv;eF@qq1={$==FF!==srHMM$QƍǨQmҥg f`0Я_ ˲\e/%>zjuVFpп~' :Km۶U;n@ Q͛7͍7ވm۶̙3;vбcG.^,DEEt:Կ\*<^xpn7QQQjʹ!!!qFnrK/IJeX`c4i$h!{-X'jRRR{s%#s1z)U?Y4iz\$N'.g>B<$@ Hԯ_?^yBdd$,'[X,HDXXF墨˅dR)))t"k4L&:nW].t:׹rssj*. R-R rL\.V+Vkt;8W˧ƩSx饗/B$Uk.@pxשwﱂ2# eq:^rq)WynwM_°jK @plfG"@ t$IBs)K j 4`͚5buL@ L j>@ +h @  -[/@ Xt$=}@ @ W;.@ "@ \<@ DuGY9}4OVu:8\.UGբ 55z] up@ 9ut:jz  nݎVرcHDjjՎ@ ,-`߾};v|'I!!!ҼysڴiCdd~?#Bsos=jN#)))k9{,F!))nMGGsN8Q-#vSZZJNN###,, . H\\4k֌&M` )\eM $IH< /\r`|^Z}A+ff&G%==(J&M.96=zlÆ hZj׮]y6;vcǎt gϞ\Qdffv޽{Pם={-[p)$I"))x"""0Hb`6&''$nV?E?&7D2d_R@?#[n}nnw˲^… lܸ3<#K 7B3hn:ILL{Ξ={X~%x libp=|͢Eعs'r ɘL&4kpEAAn3jԨ?̟ x*V_|xo\Z'Nyf{95kV{#?fW&66 ǜN'| za\_R\.w^W_[sQvù뮻\ʚ@ wym˖-_;j2zh5jDp88Nu˥.)\.n:FիGJJ \.f3dffb+Ga͚5дi˟jH_\\̿/RRRhذ!>˒V!IFz=m۶/6~)vӪU+F#'Nѣ8s|q5@8$! >\~gg%""oY;h42rHrt̛7OѰn:LBrrr. T`W4=ԩCyNM#,))~v2--ZD^^^CW&!!8uߌ3Cݺuի4 +VPXXX! EQFpWM.^HNNN(?3uvQ{r 7ft:dYbcc޽;WFz]^hh(Y޽{_B2k64o׮-Zۭ+yc@м|8"%O۷S17%-8u;wy^=,h;hٲ%ᤧs!Uc@c2hذ!r k~cӦM^ G?Я_bʚ,4l3.oݻwT_keM G%&&T4tbbbԮKvܹ70aM4y۷BefӦMYd zBT/5תU|WyB۶m9rqk^U,y>w:{<fׯgƍFn76 өuõَ;*p8xh4|ڵPƌƍ$#G;wB7o?Μ9s곦MaڷoMY矉@$U'(_:vH6ml̟?'OzMS>r[nemۖBo߮j!Iqqqlݺ{FLXoӉV5(_Zn͎;G_cWjBYU#IAUVQ~}v].((𪄷mFVVw}7wuv4$IW^`nNplrY'Oz_ikȕ7*3={vʲLtt5yeTvNDŽ TE >(rrrؼynVˢEVȉ'hXb'Ooe̘1tЁ?)Sp-rJZ{[oϳvZΟ?ۭ[6s(--E$Ucۍh{怒UVa6 O>4jVKFFF>}Ebb"_~ϳgNڵkNJ+ Ұ06o\mgȑoۍ $$D7wܠWTTIJe裏hذ!Ofʕ̜9zQTTĊ+˫~USNir 0dP]6=oW e=zITTm۶wDDDT+ +@p-#I:̅d2yM 26 &p8(..fΜ94mڔoQ G߿kגL9r$fBoXXGGe n7'N`ٲeW^t@q8\xé4O>`РAq!}O9O3} a+kg6l`c2ի{oP{[nU4?.=i$}^}U&OLnn.Szi ATynn.EEEtM7nݺ^-gP6v۶muVw_|T8K_FҗRn&99Y4L`5dzU[cccleu-M< &df3)))5:uk.f̘Q0̜9b>s8^C 0@oOΞ=륃V%,, ÁNcn~7mۆVEJѣO?ԫ%ȑ#oߞd:\oVLEywAvvq\\jv6lX,2p@j׮Ν;پ};z6lߏdٳ̜9!CBj׮M+21##^PZ5kСCsmѴiS\. ,hZn7֭}8=UPP*i_yy<[f3NbɌ3˗KZZ?#x"͛3l0"##+%%}w%_|ҺU5F ;vlΊ&6M&XVUC_|<@߾}l°aTWSee4&&3ӣG~>o3`ߝAM@$4.\P<}\.M6M6h4'T9+_1f̘^SN~o9J_8N, ]vy摟ٳObٲet֍L`˖-lْDފNiii?~7|ZTv̼yxYl3gά—{Q? p:$%%n(_eᑑ#GRZZu/壏>_~!??ˀW;ٹs'.\ '=9>}Syn?+ӥ)\j Vh/r_ˏ9PZ)3`5Sܹ{ŋSNh߾=P`̙ngܹ|ݻUV$Iy,Dcx V+,dtbTi̙zrxlzQQEEE\U:ܹs9pl6Vԕ+WrY^z%>3&N5qqq*+5ʇΥ@Z]-;Ye=L:k.E#Fqٳ`۽Z@f3޽ÇX4ITG_ݺuh4"99tܙ8jժEqq1`( /2III||oưaԙX HD-0 ?F>}HOOۃ l:vș3g+XJ]eaaaGz鑒'W3 9rD Rף>P6Stt4t:~a<3/*QYYSܓO>`Y?7N|,} :hyUF"*=  :N;iL9NN$I?EѵkWn6T2Cزe M4m۶<^J .\P(M4+.SEu֍?sa[+t*aEGGqRVu&O̲eX`cРA@5W'2QQQkL&ڴi傡]ٳ馛ԅ"< LsY.[U-//3g^{nݺyfN>? +N z$%%m|w*F5PmeiOxᩓoV20SnP҃kE!""BoTTTQwhh(,O6me/FСC۷/)Sx;寲lvܞr__yOeh>SPP zN$={i&rrrԲ)*V W+yzNߩ|*G9wuؑlpРAZn$I_+-}y@aΝ|7dffiUz85+QYYs\3+S||<&K2|pɲ̌3*Ztt4PoU@˓2ʞEV)$ d% {=cj|wIHH`ذaUvAYSO1i$h޼9w}]Vl><_.mٲ֭[#˲j3k֬ ؔʠiӦzvݻܹ}$sQ~}yz뭸n/^̴i|Ls;z:o,3uT 3gܹsۏT9UJ VWIOZjŬY]6 5/][oֳ׳gAqO!Lſ6;;uff&1SUZմ|f(odyh*- )-ʋWS N(ggg3}CAAjcj呞Ν;;v,7|3$/h"vڅR[ot:pFjTtT VKϞ=Ժ&++URR?N0 ߿_- ʬH+W~!2999nZ- +K@n/Ae233xb_U *G2ÉV+jhZ"""h4j>OCT4eժUj oiڴ|M} SNرc9u:.y^S@5TBBBYt)rJwIѣlɄFQ}KKK)--Ep;v,9C !55Ihժ999f\.-[DQTTTA(fl 6иqoF='''`0˾}Xx1W.O}P/**R(..ɓFZlfcٲeL&ԩĉӧƍGU ^xƏOzXp!6lP{, VUm% !2ٰ0, f5eIuҴiӰlxU+h^ $$$v=z4ׯgeB_}VyD"UU?ʴ^uޝAM!`w233lj_|9[nU_BZBrvv6ǏW_Zaaa^ǍF#6Nqqjرc{&&&Һukf͚ ,3zh.\+2гgOp:w̒%KWix5 o`XHLLdرUGeVZOIIJsYٿ://FV%$$DzW[P233y)..&,,ozʧV > 2=usIxӧ U\1֏9BVǬ*ʲ̓O>… yװX,DGGӳgO`٪LkZTϫYy4j /ft{@muQZ̙3{FT=zgݺuՏ`6j(uzQ_n(EEEon~ (`?o߾jIUeA[|嗬YETTwq::I!**3uTN' gϞ>ʴMHH^-~w 5IF-+UƶmHKKjiQ*Y.7MFԖ€Tff4%i&| gill,oW|t:QQQ^VGߗ_&,,Ldd_=ʇfd2Keu/+Wz+$I̘1~{_<˚g93f׼OJBCCq+JQZZ+O.dRQ*))jV,*Ӷ|xJ~)fϞM}:ʔ@JQ~{;j+~rJ뭯$_/rԦM ;΀VQ^Ԁ>U1˥v?ׯ_}$O {Ds]l=cU@`II Æ G",ޯO2=*[UR4 @4t5qEO+3-V~svh4սS &pB>\.w}7K.s΄5U2^\\$s!z}݇?rrݴlg=-((PoH3);Ξ=>!55(eC0Lۗ^{M6kעjth4Ξ=˩S^M2x`tBLL 羷~UOJ*+/@ʨ/zikN;JDD͛7.=?eXǎFU{vIzVC۶miѢ=#HMY9sڂ)IݺuSPw /Fa٤yƍWJ@p*l$Im۶l߾ug}۷/7|3III 4HuT<ݻYlEEEt:<&2:uR)_y?^%lk)T`P}&'p(뮼6+k%/o CYJe+(/F}Y>SU3k>c|ת I6\zB0n͛vw+q~\u͔x*Fxrr2M4jz=}eFj׮,ҧO>ׯ̿;]f͚1sL4 OfĈ^ˉ+7+.[~}n6l+44lf͚Exx8DFFb4pJAA+C]t䁙 5r$2֭cݺu>*|(Ȳ|M5@<IJ GVʟlzʜC^sHW+x=5WO>ٳίWGY)))wެZ ͛9~xOjf9s?{w5ID#bZJ*R|FA&EUCUCZbX"ϩ-UM9t;!4ooB}?y\}_m5r믿άY8p 7ƻ[ܭ}V2,V?d 8иbߟI&ѺukL&k׮%""-Z}v>ضmG.7h;~)駟ͭkXqX|w~$k$~grssKY&WSu\%>t{(=5dsYnjcׁ̜9󦯷M&52-,,$99ԧx;;;+WybڴiҾߕ^[DEEaڵkWx {?laO5U2w[fnJvpss3SRRxwnJ֭?> 6,p 9q*׮]id2Ѳe ogw'si?{W2g222*JOhhh{uyךoʕ&L`_jgΜ߾]ٛ-og޼yw׸wZy}nZjF{ϫ?r/-H}?񏛂p,_jAhтzMRXXȏ?W_}ťK7jkz6m]7*ƒKF.\`ٲe@Iu "88^k"bUVaձcGnذ!۷Ff,n m/~޶m[^}*4>WT{ϫ?a?Rf{~K]w4h@6mꫯʼ~p%k>s<7|õkϿ)/~?unz瓒B۶m+\ݝ;rIn)+9fذa?kMDw O=ԬJԯ_nݺqqoY2tYoN M&7ߐS洸K7PlذaAve/Masyf}JxI>cn9O+ڴiCΝҥK Q_k"bXLQQQjoȑ#$%% TN:ѵkWcY{yi#!!&MаaCrgΜĉ|dj2}}u#ţ7jbX-_p3d|I/v[Ju#""""b+Rw}8q%#Zr0aZ1a½n Z...4o|* y7 bڴiLjJAAA%""""b* oРW.a6?fҮ/j-5 n2h֬YsSSSȠgϞz!`رѷo_Ǯ]|2NNNoߞH܌Q &yf.^l.3ݻ[}GPP@]c>#+222`ĉxzzTɓ'qF]F˖-?~<͚5Ԉ=JA8@r)>>̀+ߞL /#GСC+F5~|ٓzwww\\\={6/2+V(5͍ɓ'ӤIXh~!?ϑ#G3gNNN/eSҵkXj ۷'33Tcʕ+x"3gÃd#/[ٳg²eXb!CDDDD~EaJ-L.;HOO'#732ohR{4"!! n_XWYxhذ!k׮ge֬Y$''WXΝ;ӬY3_>_HJJ*quukd_%;;WWWZj@NN"22ƍ5>#G GGGzŹsl{'x{~}G:dddÙ9ݷt~ ٻg_tЁ+W|*1cr W7(D>j%''T߸qc{M2e v">>|#GҦM._jiӦUOk&??ł]DDDDawW9r'N}dvLz%OOr&MD˖-9t""""W9+wnn.iӆ?ŋ}0p@|S>|]ҨQ#233O0_t-ZZ,cjǥK+lSYU_vQR}ILL YYY<?ۦ)-[h"7o^ꇕ_άY~:7fĉl)**:n8vNNNSN6MZ\~ݘ\XXHzz:jɉ>Cwo"""""˗R~FzɑV~(ۉ888LXXǏ&^1؟'+((0V4ԯ_<-/""""XUafsԮ]Ed… @%+{fcJ.\"""""v7jԈ={Я_?ZjUjxq0]yɑ駟ү_jnͮ bcc]$& ///ziO[DDDDfz{{ 戈^^DDDDDnp \DDDD)a EDDDDjp \DDDD)a EDDDDjX-~ZjQPPp#""""T26XDDDDDN> h:H3F6lx'!""""a&?Nll,?f;2n8<==k7:s _كHUT嗼L4瓗ĉy^|+ܧ&QPadFgԩØ1c8<~!*=ƍodggϤIQꜜ-[),,Ϗ'd?c ֬Yŋٻw/;w?ҥK8;;OyN82x`Xp!_5Ӈ1cPVr1ͷEDDDDJ*7OMM姟~w7mݻ7nÇf233yYncƌ`dddvZL&/2Wf$&&gggjժ;sի̚5 2{l,YرcٱcG(o&lܸׯ3e\\\5jT刈Դr4<<?1+WW_[~a2۷/-⥗^AdPXXH]6+V2kР+[Օ]|rf͚e#((+ EDDDN0֭cʕ{888㏳|rZlYaaadeeѫW/Fml>}:111%==ƍ&M0ydΝKff&Zb|7L&7nLXX'N$?? &3g;0tP۷/ )**ڣGW ;Fqvvꉈ~޽>3+f(aZG!8 (a EDDDDjp \DDDD)a EDDDDjM ܹ|ܹ\IOO ::tLy/ҥK/z*...4mڔ޽{3j(Pn]<==Jq̞="""""b ٸqܹo4rHy||<xyyݴ9sؿ?Ϲs8ź/h h4رc;w[111L68Ν;]X,?w."""""k$ˋΝ;w^qpp`ذa]*1c fΜIrr2c߾}Ӈ_Ă JSr`nWWW-uver1hҤ-WC 66ɓ'Ӿ}{_ Mi)/AAA8;;Kmwvv //H+~^vm"""""r+»uFf̀:|WL&yBCCYh-++ ({IǍ5k* yS=RRRݻw,\p-[Vk<3K/e˖ΐ!C8qDm+OYXjj*SNeĈzEu8|p aÆ TV{*+ze < V+{6WNFMHH&L`ť:]^vQx'<<{X>33bT^gΜ!''{ n @PP{조]vѽ{w\\\߿?k׮%..R{y*:&33;i&:t%KlnԩSX ľ}ܲe dgg{ӹtڵܒ233iӦ ׯgذa7kѫW/V^c޼ya?̶sX,::vڱqF6l@ppp,\+WǦM *7Fe)=`(~'""ryL///]ƾ}v62n8BBB8vO6F*]j5Fm˅ pwwgǎ4jԈ\,X[oEtttT[n%00(7IMMI&xyyq!ضm[ƧOfddd`ZȨ1/VMnnnsN̖-[XtiO)VZ۷̿8|0,]("?g۷_~Ρ$&&pBcwwr+k:uСӧOO:u]vX2+SYy3%%>(""{fײ}aܹUrwwW^Ջ={2cƌ*N⡇y駟l2Ã5Ç3ydh鸹jLh=ؽ{7NNN|'m6Fٱc͛7ONLL m۶>֭[ /ش-""_N`` eNqٶm+裏bX8~8:u20~x"##qww/5ǽ<Jbb"˗/^z̝;ӊRRSS2d?Æ +5E2l޼NWCDDD䮦p \DDDD)a EDDDDjp \DDDD)a EDDDDjp \DDDD)al٩ssһworss $==h p19z(,]/WBӦMݻ7Fnuӓoگdoٳ.""""")/iƍFsN#ȑ#uӾsaH~~>Νѣ6xzzrI6m}-[}QqIΜ9C6mشinnne/80FK:r< Fzy~Yٳg«."""""kNAcǎq9o0m48wnnnvcX8~8x{{߱Ǯp///:w޽{INNaÆv[Č39s&۷}ЧO^uL& ,(uLɑvٳg]]]EDDDDV}wÇ˱cI&\:X&OLػw/_5P4FLff&/<#yڵȭ;͚֭5W_a2xG eѢEƶ,%%7 `֬Y$$$pAc{SNiZ[aQx|2O___ #::oƈ#9rM,x^ȑ#2dSN%))ɦ/2d˜0a?My?>l{EFy饗ͭt[^^QQQhCeҥ MWڵk;h-uh+ɚ5knpwyT:w;U9ju\JJqk`- ]]]9wٸpR˷@ћÉ3Y,y}]cɴ4l`:uJwAL¼yرc<.]`2ؼy3s!&&̼KZx1oyfBCC+f6 AFXtž={ѦR~}VXQmͯdzVVDFFryws_TlTv$`tݻ+P&$$|KÜ222hܸV^RTڣ{;֦:gggvj9?$''TN@@+5JV6SO=ٶmj*,X`쓖F޽ >>3f ?#Pcy{ aܸq\rJϟ?,5j֭cƾW^o߾}qt^{5yy饗ݷKMMeԩ1Pbcc+LxNXX!!!lذn}1+ej5Fmv˅ pwwgǎ4jԈ\,X[oe [n%00({7IMMI&xyyq!ضmSL1;}4W&##JFFFeUtlgϞ@Q/VMnnnsN̖-[Xti^ꋼ<>Lrr2K.888yxxKbb" .4www/7ԩC>}:ӟԩڵj^+)))8;;|۷o/T-9$""b/ӧseΜ9vN^ի={dƌU~;u=_O?e˖oNNN4j(2|p&O 7upp ==777RSS+f,P42ݻٶmjbӍc'N/L||<[^i[DD)))\~@|}}˜m6W*Gbpq:udL(=pqqaDFF^j{y*;ՕD/_Nz;wny>>^g5IDD:=z"3g3)+55!CO?1lذ;]]QD*͛t5DDDDj a EDDDDjp \DDDD)a EDDDDjp \DDDD)a EDDDDjpV˖:wl<;w.{ 77@f7SGҥK/z*...4mڔ޽{3j(Pn]<==Jq̞="""""b 6nh;w49x/^^^7;gߏ;s9=js닧''O$))iӦGѲeKWu]A'O̙3iӆM6Vf /ϋc#G3j8LX,={ :"""""R4( ?vΝ#88+@LL ӦM#..sfW>ǏHy sݻd6lk׮J̘13g̾}طo}_d2`Rǔi={1Օh<==oK]DDDDDnwG>|8;v ???4ir˕С?eɴo{_ESZJ>nKPPdffR۝3Ҋ׮]ۮ nݺѬY3( _}&GyP-Zdl^Rqf͚ū @BB4 ?uꔑXjuv{˗/OTK%&NHӦMi۶- 6on7ءC۷/$%%Cn0L 67x;vpYV+gϞ`ذa."""""e;hժZJDDDpq͍]2n8oĉ?~гgOc˖-\p֭[lvEDDDDF(k=߿ZBB}i EDDDDjp \DDDDUйsg^yR顡ѣG%,,0o?~}6T&--.];شE]رcR+/陙Yww_ؚGE}Su[{ɐ!Cg̘1]WlnI6ݢՕsΑ gϞ-|~ >8cbw5VLKK#--ͦ ֩ST~dʔ)̛7;Vzҥ &͛73gbbb̻ŋ@HHo7o&44mfp4h`IHHK.ٳ(m:,gŊU>JgeeKdd-w7EuNyNj3o<x.\_|v]%""r'<{ 60'' 7nlիW*޽;cǎiٙ]o>(6@~Jl6SOfs{mFDD>>>FZ ѻwo'""0ƌÏ?T>ÇFHH6l0ϩ-WOe˖ΐ!C8qD}TlL>|A~iJU["""Ax@@ XV:Dm:N:=&LŋK-_:t0V,92geeNxx8,}ff&=<mj۶N;… |c5jDnn. ,୷2ׄ[CF IDATؽ曤ҤI8t~~~l۶)Sǝ>}իWj%##Ҳ*:l6ӳgO(@}&777عs'f˖-,]t/E^^&99KE#L[^<<<%11 ^YuԡCL>?OtԉvaZLLeWϔ۷_~.4vXwʭ\DDDn'ӧseΜ9vN^ի={dƌUO:C=dׯO?eٲeƛ5 >ɓ'EsIHOO͍Tk#//ݻw'|@AA۶mc 8;vмys_n/((`жm[Ο?_7U9V0sL4h@V*ztj~ \^o2XlgϞԩS,Z͛3sron6o4*Fƍ+V %%]F1[+r]Ea`` |LNNy7ߤ$ZhaOцÇj* 6ҥKquu5SRRX,@Ѩގ;J}ݽ{wvݻѣMluAعs'[ne֭,^۷Obb"qqq 0'??lRiYSXXȁ<6N:撟oy{{S^=yZiZ_`ٲe\*ٙN:oU^QYYY\x~Csqrot9y+Ǝ˛oiJU["""]# 4 ""Bo… qrrl6ӢEJGߊ@bG֭yyGSN-+WҬY3}Yhd.66ݻwm6jժbLJӧN8_~xZn /`ӶRRR~:9e۶mׯTڣ>btɘ~Qw\z @nn.̀nC5m_Icǎeܸq5^~ݺu$""+O۷og=z .]_|իWqqqiӦݛQFeS^ƍ |ΝF~7}5^''O$))iӦGѲeK3gݝ@9wGU.""";`Wɓ'9s mڴaӦMj*>̥KϏ1c @AA-bΝ8;;+h7| 駟~:...<H5'|РA@hc8w7헛ѣv 8WWW4i5kOff&O>$1117uejժE_BV8~8SL!--Ծvbزe SLԩS<<䓜:u_|-[Tu[.gΜa6b888MF\\ΝDDDDcWEΝٻw/+VaÆݴ߁駟0L\{ޟ)YYYϑ#GxwxꩧXt)g̘1ooo,YB׮]*[ܹsܹ3ڵ+W/bq>aqzOxdd$өS9{,7;wxF+Vh[z[`hm{z!#ڶUz}]wPQQ0`:t࣏>?!CTVVRUUe޺uk#- /Çr>Cƍg""""W<{ Shт|8`p=3gTW^^111RPPlܹ3'O4joED˖N6j'&&g /..6ҊA͊>(111F^yyy&""""?NG-Z`ʕ|w-[fÆ L&~_c|㇧'qqqDGGŧ~Z݁}={L:tRzrzҥKmڴi|WF?vXfΜIn8}4| ݺucƌƇ^f\ڷoOQQ><{[+""""6}tː!C9rO^UUb1?x֯_U_I)((`Ϟ=oGiNϟCUVl۶ N>}dDDDDDn;{yyq=uVԩaaaL877;4m۶eݺuw """"".פfH KJJ߿?J vV{`2ڻl6W7+::pfϞmuӞJfΜIxx8&SX? Ν#>>q1k,*++:5.]bРAkNSc.\IՎ-V_2~[jws\Sr3Css _|L0pbccy㏍/)S`2"::ȿϙ""voooNVZ9<6 l֭Dꫛ^^^NZZ&Ls5u y=.ͥ9vj9۶m#++%Koo>}O>̟'VXA^9.]2긓ϙ""v@7}˗Y`>,̚5ǎ#** DJJJ,0L>>tؑyǹv}!,,\;vH6msc2eeeۗ-[իWk*vZZcƌa׮]XJEEyj5#… '33Ӹ#yO\VBB={ddff2vXvUVZ`˖-YMo;2iml=/_̷~">>NJJJJw)""?o;.\`׮]Ӻuk#BΞ=˚5kl[믍Ç{=ʦMr +Wymɓ5A߬Y|OOO# ի?M,V4N>͛o /tЁJ/_ҥKIHHhrl15 Y[x1t ???OPPyyy̘1(gknUݝC56șvؾ};ƍ#''5k؝\S-[dN:srr{(?_L2[ǢE8rgϞロ~Ӻukr]wѵkW鸺mܶmϯ_g9GGGgee0`i߫W/gotڕS^^ξ}HKKoeݵkW>̑#G{t;EDDDDP/ᡡbײ[uYު5kشi|Sulĉ EDDDs(o;vW_8A5[ TWWp=8\l>Etݩ4m ?S>SoooopG裏/<<<9sCuϟ?MBB]vu}"""""Mqۂpkl:f3)))x{{l2{10`:t࣏>?!CTVVRUUen냟"""""hŋL6w}￟4p_ طo_7H+**'""""wtO63f cǎugysF޽S >,9ڵk}nݺ1vXƌT"""""uM>2dFy"""""VPP={~{EDDDD~pS.""""bvxL& 0Ʉd"!!zi&)SPRRBppM*SYY̙3 d21uT4ڮL4SNY=wII Æ ZWu덎&<<ٳgs{Ce({97nf͢ҡqVΚK.1h ^{5d˅ 4iѿ![YnzYYo-h-;H?+gZsocpt\ݹ)))+1 _0eL&QQQDGG7""#d+ 7nӉ$##+))˫^#l7n ͍lXvzrrrXt)k֬q-o߾}̘1%Kзo_mVSRR %""W_}lbbbi\c 4h|ӧOUVMC/Yn];Z_rҘ0a-)n]7nܰ\soۛ'ORQQA6m8qnnnFN̟'VXA^H.]rm'DDAmG'0ݛg:To- dҤIJKhh(#F0Vi5yyyo%tÆ ,_8ҥK 6 d2scmkZZ˖-#""ɓ'syMONNĉywINN6>|8׮]9|>>{ZUUUΝ;`֭\~<=z4t҅W߯_Μ9sXv-=zԩSvWRVDDD0o<ڵkǃ>xoݺu vX,@bOOF>u{smsss#55'NP\\믿N.]7o[9-Q]>>>|Ǐ#e||| /]Ć (,,ocǎs yپ};L>W^y?˗s^J6mxy۷osZ]߷o?xg 2]0a=zxDwnw|j_VVFpp0f'N8g%&&H!sjO1crIƎ{qǓE֭=z4dddf~m(++׿5k׮-[SO=Ń>g}ƌ3tRcwˍ ''3fP\\c=Ưk9s&9997w{ᮻ$''; -Z87ԱcG֮]˟g2228y$>>>N%""""? #G8tDFF2|,YrS]L<UV5_|Ec?S#G;SOtRyꩧ5~x.\H\\ǎsh|ϟπ1c,Y]:Tsҹsgٵk+W$::_~t}""""H8 SN7sY, _o?w%%%<+V 33Ѷ|_~%?ȑ#|ᇌ7QEDDD(}ɦ6w4{a֭TWWөS'˜8q"nnnwi""""" ۶m˺udDDDDD\Iп^yz111 65 d2?wlo:Wtt4̞=۸=̜9pL&SN5~eϝ;G||<ƍc֬YTVVͳu>k.]ĠAxל\pI&G[lgeee۷渦Gc=fl5۩9&)Wwny>d2YZKHH/`ʔ)L&?nJ7EDG̡(ޜ}:Zrxl/٬[W74&LpKkƍV{\Ks\s|;{>ܸq#PGFFֻf3ӟXbzj^ ]tɵ;( nJ˗/`}Ybcc5kϟ7;FTT&z~YYYa2xo믿g%**^x/Jll,:tnI&92Ok׮k]SV"66oDGG͛VSSVii)g&**l{geed"""Lu5cGg@<45׮]ʕ+}FZ۶m1WDD~CCC)((b~/X6mDzz:AAA,Y_p!&M"##U#G;dCpFҽ{wRRR2eeeΔ)Sx7:ZjPVVAAAKll,+W4n?_VVl;RRRb7:~8׮]O> @XX|ciӦ `{nU}eXzj͞=XNKKc̘1ڵ˜BCC9OMy?~Xp!dff7r$əkJHHgϞl޼LƎk3Vۮ^ʪUX~=lٲ0 5cGZ;3ck=ZE||<L:F,""?};.\`׮]Ӻuk#BΞ=˚5k][믍Ç{=ʦMr +Wymɓ5A߬Y|OOO# ի?M,V4N>͛o /tЁJ/_ҥK=˨QUŋSZZJNcnj3r[e:t(P3o3glj!((۷3n8rrrXfyj5ղeKT?o3''n8w[;RYYIQQV2nm^^^0gH~ٳ't{Z;KJJ6鶞>==>T:tjH^xfi-|2>>>oUʳuعs'lݺ<=z4t҅Wߛ27c>m`޼yk׎|𶽭ߺuzAk7wHMMĉӥK͛g5VgKS|||lYxEڵkwӱ֞KHH!!! :s*q*5j&L`k'b6cǎ5c~~~ݻ]ve6@[ڴiCٽ{7;w_~t!lذfc\f3رː!Cʳvۇ۷o'77\RRR;STTDFFO>הWƍW:kyyyQYYIuuֽ{wڶmkO?p] 9{M9//t$ӓ~۟}EV^^ιsxyÇ76fu<==ӧqZ,no~󛛎|h˵kػwoGkrEDɩvh^BBW&66łlf̘1W^y ~z{1~_5ϔ)S0a65וHRR֭sͲvlnݺl2}Qf/ٳ}+X{wYKKKcΝѲeKf3̙3(;m4^~e֭/<[k(//#FKݻ7f>~[QjWKisc7EEE[mۖE٭nѣGױcDzzj ؞'[ǼyHHH`ƍ 8<{'G92$'';#F ..j3w\UVKV׆slo,kg퇙c?>`XeЖm۶j*<<2d?T_ŋo9!))]3馈TPP={\wC7i%Wii)SL}OWsY㏻t3бcGt3DDDD暯{pS.""""b EDDDD\LA)q1""""". \DDDDpAl۶ѿEDDDD~Z:rPݺuk~L&F- +::|KDDDDvs(5`/9t!!'|{„ sQxjȝԞ;v|rf̘c=@ee%deeѺukF7f١cr=p]wqqnȝT駟g}7=w̙3ѧOZjţ> #G8tC8c,\8;p[DDDDDn|2 .dϞ=$$$ٳgX,soڭ'wuEDDDDNq*C޽ٳg?ԩ-Z //8_;wfΝvq-o#mS wW_}ťK @pp0?gΜ!..TWWs)K1^^^)WGDDDD) ?S>S<==i߾=o|w HKKO>aǎxzzҥK}Y<==qww{Lsp-"""""w-C aȑw-"""""?iٳyz2""""". \DDDD `2!&&i 4iR9'::pfϞ͑#G3gdbԩw׭({97nf͢;tDEE1w\k̥K4hcdM9;:Z}uxoݍE~~u8ҏ 6Мs;5פ#MII W^wLLLqL||<&zZBB_|SLd2Ettծ"""}E'99;Qު_[mnnj3Xd }[~ܸq 4777IJJbڵ]WJJ DDDꫯMLL /2-" {l5A0}tZj4sb夥1a„[:pč7ZuVs\s|;y{{sI***hӦ 'N߸q#PGFFֻf3ӟXbzj^ ]tɵ,YVVf&˗Yr%NΝ;?;_ݻ###ٿ?̛7o ===y'{޽{={6#F7$&&+Wp%0` .$::f5yyyKlܸ}† t/"PG6mʢ7nЦM͛G׮]ICZleѢEoj}uӓ)//d2ѪU+BBB8{1v=QQQҺukƾ$***ܹ3 m;v,wǏ'11777X|l]ilktRΜ9C->|8'Nn1O˖-fرXM=_c5j3ٷo#F#Gfܵk׸rJmۖm6KDDϡ=,O~z , $$M6NPPK,q8ߚ2IOOgʔ)\58qpn[(#IDATLVVAAAʕ+)//7b6cǎp]w'|]o5\v>}Fnn.aaa|; M69wy L&˗/w[e۷/[l! իW;05fϞmb1fveeNNTTT؜… $&&͛޽;)))#… '33www]Ƕ YZ ٓ͛7رcmjիWYjׯ'##-[f5sXXk1jm`Xؿ?">>NJJJ ŷiqz;l&55 6* 9{,k֬1iѢ&oՋ\5xѭiii>}7|___С,_K{DmYx1VbÆ ߿^f+\cu000ŋSZZJNcnj3rGeӦM\r•+WVwww 3gδ[5>>>}vƍGNNk֬;OmGɓ ȑ#5k߲eKT?o3''n#ױ@c}ǎUVZM6///3g_~h=g%%%VQw[t???.\]wꝗɓ'9z(g&**':\t9E1}t~cX^-uR5>ѣGO.]zי3gk׮G:u bS܊͛GvxoyZn}K/ul1Аoʉ'(.._K.̛7jGǨ.***~:-[< ^xvt~;-ZDRRS킚 !!!0tPΝ \DD&~Eaaa!<{SSS1@ͪձco殳 68133֬Y^RRbl6Ȏ;عs'C 1.^Sؾ};撒¶m |IcկjEAJ-ܸq/sN~_٭TWWiݻwm۶k7mrF6m޽{:k{zzү_?2332/^nm;w~~?>|jzccVwyiMI>}buV~tQ0a pk׮wz/9}6OC+{k&{3gիb`63f =zp()nf֭˖-GjΞ=ѷϟ?ϊ+{yܹ3glE]-tʔ)L0___e7EEE[mۖE٭nѣGgxر^ɖDXnL[mq#!!7K[ypdINN&** wwwFA\\t[m+//gܹAVx饗76 X4Pcb?>`Xծ];✙mƪUݝ;""6}tː!C9rnMIIItڕgyN7EDDDI سg)?|sƏ#"""r˜`uؑ; fpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1""""". \DDDDpS.""""b EDDDD\LA)q1"ۻ㿭KVeEDW-DIDԋtQt,|iIl%R+.0@IYDTM QIMEJ;?sνwdZaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`FaD8`Õ+W:>#J&N 7n`; `FaD8`XTӧj@CzÇpA#?"':_GV]7@N:DFFp|%?om'e7oJQQ >Ȟ=Ǐtv:t$Yj aZ+11Q[ngffNyyyڳg֦ׯ_kԨQ8eddJjhhP[[$i͚53gNmٲ_~ڰaFZرCR^^$4WWswta۷/OРWjժUa HwZʾ\?tr8BpI߿jjj$ۭEDdGs:x2335aIǏU__p>mQZZeggwp $66$~]x13'_v%%,̙3U^^DݺuKIIItR677ӧO}}W\Qii"##ڪ%KhʕSAA޼y#á+%%E/_א!C{+VB~_6mɓxNUXXW^UC Qjj(I]JMMMʒTNNNLzݎhI nKCR.IIII***ܹ3x$wI .[%;C#Gݻw5vX]f/_J=\/.xrG566.<~III*--uG&MѣG5}t%$$hܸqjiiǏ{nX555Ӹq\5k$izmZZZTQQwaޮH|Wkt7N @opr5G7o;}A3X111;wΝٳgرc#cOx{{u9edd(::ZMMMjkk)666칂p8w^UWWٳg***СCxk=s#ּb ?ֳ-ۑrr} iӦ}Oss;dUU Z~=zϟriҤIY˲tuM:5<u=I۷=z-[uɓ'r:2e._l_vi܄n/q:1cΞ=+˲ŋxҢ֠ 3M궓@.$5u}eee*,,TDD͛7uQJJt"0 #Èp0"0 #Èp(Iz{@_)[9IENDB`modem-manager-gui-0.0.19.1/src/ussdlist.c000664 001750 001750 00000015721 13261703575 020005 0ustar00alexalex000000 000000 /* * ussdlist.c * * Copyright 2012 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "ussdlist.h" #include "encoding.h" #define USSDLIST_XML_HEADER "\n\n" #define USSDLIST_XML_ENTRY "\n\t" #define USSDLIST_XML_FOOTER "\n" struct _ussdlist_user_data { ussdlist_read_callback callback; gpointer data; }; typedef struct _ussdlist_user_data *ussdlist_user_data_t; static GString *xmlstring = NULL; static const gchar *ussdlist_form_file_path(const gchar *persistentid, const gchar *internalid); static void ussdlist_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error); static const gchar *ussdlist_form_file_path(const gchar *persistentid, const gchar *internalid) { const gchar *newfilepath; const gchar *newfilename; gchar filename[64]; const gchar *oldfilename; if (persistentid == NULL) return NULL; //Form path using XDG standard newfilepath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_data_dir(), "modem-manager-gui", "devices", persistentid, NULL); if (newfilepath == NULL) return NULL; //If directory structure not exists, create it if (!g_file_test(newfilepath, G_FILE_TEST_IS_DIR)) { if (g_mkdir_with_parents(newfilepath, S_IRWXU|S_IXGRP|S_IXOTH) == -1) { g_warning("Failed to make XDG data directory: %s", newfilepath); } } //Form file name newfilename = g_build_filename(newfilepath, "ussdlist.xml", NULL); g_free((gchar *)newfilepath); if (newfilename == NULL) return NULL; //If file already exists, just work with it if ((g_file_test(newfilename, G_FILE_TEST_EXISTS)) || (internalid == NULL)) { return newfilename; } //Form old-style file path memset(filename, 0, sizeof(filename)); g_snprintf(filename, sizeof(filename), "ussd-%s.xml", internalid); oldfilename = g_build_filename(g_get_home_dir(), ".config", "modem-manager-gui", filename, NULL); if (oldfilename == NULL) return newfilename; //If file exists in old location, move it if (g_file_test(oldfilename, G_FILE_TEST_EXISTS)) { if (g_rename(oldfilename, newfilename) == -1) { g_warning("Failed to move file into XDG data directory: %s -> %s", oldfilename, newfilename); } } g_free((gchar *)oldfilename); return newfilename; } gboolean ussdlist_read_commands(ussdlist_read_callback callback, const gchar *persistentid, const gchar *internalid, gpointer data) { const gchar *filepath; gchar *contents; gsize length; GError *error; GMarkupParser mp; GMarkupParseContext *mpc; struct _ussdlist_user_data userdata; if ((callback == NULL) || (persistentid == NULL)) return FALSE; filepath = ussdlist_form_file_path(persistentid, internalid); if (filepath == NULL) return FALSE; error = NULL; if (!g_file_get_contents((const gchar *)filepath, &contents, &length, &error)) { g_free((gchar *)filepath); g_error_free(error); return FALSE; } g_free((gchar *)filepath); mp.start_element = ussdlist_xml_get_element; mp.end_element = NULL; mp.text = NULL; mp.passthrough = NULL; mp.error = NULL; userdata.callback = callback; userdata.data = data; mpc = g_markup_parse_context_new(&mp, 0, (gpointer)&userdata, NULL); g_markup_parse_context_parse(mpc, contents, length, &error); if (error != NULL) { //g_warning(error->message); g_error_free(error); g_markup_parse_context_free(mpc); return FALSE; } g_markup_parse_context_free(mpc); return TRUE; } static void ussdlist_xml_get_element(GMarkupParseContext *context, const gchar *element, const gchar **attr_names, const gchar **attr_values, gpointer data, GError **error) { gint i; gchar *command, *description; gboolean reencode; ussdlist_user_data_t userdata; userdata = (ussdlist_user_data_t)data; if (g_str_equal(element, "ussdlist")) { if (g_str_equal(attr_names[0], "reencode")) { reencode = (gboolean)atoi(attr_values[0]); (userdata->callback)(NULL, NULL, reencode, userdata->data); } } else if (g_str_equal(element, "ussd")) { i = 0; command = NULL; description = NULL; while (attr_names[i] != NULL) { if (g_str_equal(attr_names[i], "command")) { command = encoding_unescape_xml_markup((const gchar *)attr_values[i], strlen(attr_values[i])); } else if (g_str_equal(attr_names[i], "description")) { description = encoding_unescape_xml_markup((const gchar *)attr_values[i], strlen(attr_values[i])); } i++; } if ((command != NULL) && (description != NULL)) { (userdata->callback)(command, description, FALSE, userdata->data); } if (command != NULL) g_free(command); if (description != NULL) g_free(description); } } gboolean ussdlist_start_xml_export(gboolean reencode) { if (xmlstring != NULL) { g_string_free(xmlstring, TRUE); xmlstring = NULL; } xmlstring = g_string_new(NULL); g_string_append_printf(xmlstring, USSDLIST_XML_HEADER, reencode); return TRUE; } gboolean ussdlist_add_command_to_xml_export(gchar *command, gchar *description) { gchar *esccommand, *escdescription; if (xmlstring == NULL) return FALSE; if ((command == NULL) || (description == NULL)) return FALSE; esccommand = g_markup_escape_text(command, -1); escdescription = g_markup_escape_text(description, -1); if ((esccommand != NULL) && (escdescription != NULL)) { g_string_append_printf(xmlstring, USSDLIST_XML_ENTRY, esccommand, escdescription); g_free(esccommand); g_free(escdescription); return TRUE; } if (esccommand != NULL) g_free(esccommand); if (escdescription != NULL) g_free(escdescription); return FALSE; } gboolean ussdlist_end_xml_export(const gchar *persistentid) { const gchar *filepath; GError *error; if ((xmlstring == NULL) || (persistentid == NULL)) return FALSE; g_string_append(xmlstring, USSDLIST_XML_FOOTER); filepath = ussdlist_form_file_path(persistentid, NULL); if (filepath == NULL) return FALSE; error = NULL; if (!g_file_set_contents((const gchar *)filepath, xmlstring->str, xmlstring->len, &error)) { g_free((gchar *)filepath); g_error_free(error); return FALSE; } g_free((gchar *)filepath); return TRUE; } modem-manager-gui-0.0.19.1/src/modules/ofono109.c000664 001750 001750 00000327266 13261703575 021167 0ustar00alexalex000000 000000 /* * ofono109.c * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include "historyshm.h" #include "../vcard.h" #include "../mmguicore.h" #include "../smsdb.h" #define MMGUI_MODULE_SERVICE_NAME "org.ofono" #define MMGUI_MODULE_SYSTEMD_NAME "ofono.service" #define MMGUI_MODULE_IDENTIFIER 109 #define MMGUI_MODULE_DESCRIPTION "oFono >= 1.9" #define MMGUI_MODULE_COMPATIBILITY "net.connman;" #define MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT 20000 #define MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT 35000 #define MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT 25000 #define MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT 60000 #define MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT 20000 //Location data bitmask typedef enum { MODULE_INT_MODEM_LOCATION_NULL = 0x00, MODULE_INT_MODEM_LOCATION_MCC = 0x01, MODULE_INT_MODEM_LOCATION_MNC = 0x02, MODULE_INT_MODEM_LOCATION_LAC = 0x04, MODULE_INT_MODEM_LOCATION_CID = 0x08, MODULE_INT_MODEM_LOCATION_ALL = 0x0f, } ModuleIntModemLocationBitmask; //Private module variables struct _mmguimoduledata { //DBus connection GDBusConnection *connection; //DBus proxy objects GDBusProxy *managerproxy; GDBusProxy *cardproxy; GDBusProxy *netproxy; GDBusProxy *modemproxy; GDBusProxy *smsproxy; GDBusProxy *ussdproxy; GDBusProxy *contactsproxy; GDBusProxy *connectionproxy; //Attached signal handlers gulong netsignal; gulong netopsignal; gulong modemsignal; gulong cardsignal; gulong smssignal; gulong connectionsignal; gulong broadcastsignal; //Error message gchar *errormessage; //Pending power devices queue, sms messages queue GList *devqueue, *msgqueue; //Available location data gint location; //History storage mmgui_history_shm_client_t historyshm; //Cancellable GCancellable *cancellable; //Operations timeouts guint timeouts[MMGUI_DEVICE_OPERATIONS]; }; typedef struct _mmguimoduledata *moduledata_t; static enum _mmgui_device_modes mmgui_module_access_mode_translate(const gchar *mode); static enum _mmgui_reg_status mmgui_module_registration_status_translate(const gchar *status); static gboolean mmgui_module_device_get_locked_from_unlock_string(const gchar *ustring); static gint mmgui_module_device_get_lock_type_from_unlock_string(const gchar *ustring); static GVariant *mmgui_module_proxy_get_property(GDBusProxy *proxy, const gchar *name, const GVariantType *type); static gboolean mmgui_module_device_get_enabled(mmguicore_t mmguicore); static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath, GVariant *devprops); static gboolean mmgui_module_devices_queue_remove(mmguicore_t mmguicore, const gchar *devpath); static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, GVariant *smsdata); gboolean mmgui_module_devices_information(gpointer mmguicore); /*Dynamic interfaces*/ static gboolean mmgui_module_open_network_registration_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_cdma_network_registration_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_sim_manager_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_message_manager_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_cdma_message_manager_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_supplementary_services_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_phonebook_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_connection_manager_interface(gpointer mmguicore, mmguidevice_t device); static gboolean mmgui_module_open_cdma_connection_manager_interface(gpointer mmguicore, mmguidevice_t device); static void mmgui_module_handle_error_message(mmguicore_t mmguicore, GError *error) { moduledata_t moduledata; if ((mmguicore == NULL) || (error == NULL)) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (error->message != NULL) { moduledata->errormessage = g_strdup(error->message); } else { moduledata->errormessage = g_strdup("Unknown error"); } g_warning("%s: %s", MMGUI_MODULE_DESCRIPTION, moduledata->errormessage); } static guint mmgui_module_device_id(const gchar *devpath) { guint pathlen; guint id; guint i; id = 0; i = 0; if (devpath == NULL) return id; pathlen = strlen(devpath); if (pathlen == 0) return id; /*SDBM Hash Function*/ for (i=0; imoduledata; if (moduledata == NULL) return; if (mmguicore->eventcb != NULL) { if (g_str_equal(signal_name, "ModemAdded")) { devpathv = g_variant_get_child_value(parameters, 0); devpropsv = g_variant_get_child_value(parameters, 1); if ((devpathv != NULL) && (devpropsv != NULL)) { /*Determine if modem is not emulated*/ devreal = FALSE; devtypev = g_variant_lookup_value(devpropsv, "Type", G_VARIANT_TYPE_STRING); if (devtypev != NULL) { typestrsize = 256; typestr = g_variant_get_string(devtypev, &typestrsize); if ((typestr != NULL) && (typestr[0] != '\0')) { if (g_str_equal(typestr, "hardware")) { devreal = TRUE; } } g_variant_unref(devtypev); } /*If modem is not emulated, work with it*/ if (devreal) { /*Determine path and add device to queue*/ devpathsize = 256; devpath = g_variant_get_string(devpathv, &devpathsize); if ((devpath != NULL) && (devpath[0] != '\0')) { moduledata->devqueue = g_list_prepend(moduledata->devqueue, g_strdup(devpath)); } } g_variant_unref(devpathv); g_variant_unref(devpropsv); } } else if (g_str_equal(signal_name, "ModemRemoved")) { g_variant_get(parameters, "(o)", &devpath); if (devpath != NULL) { /*First we need to test devices queue*/ if (!mmgui_module_devices_queue_remove(mmguicore, devpath)) { /*Then remove already opened device*/ id = mmgui_module_device_id(devpath); (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_REMOVED, mmguicore, GUINT_TO_POINTER(id)); } } } } g_debug("SIGNAL: %s (%s) argtype: %s\n", signal_name, sender_name, g_variant_get_type_string(parameters)); } static void mmgui_module_network_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GVariant *propname, *propvalue, *value; const gchar *parameter; gsize strsize; gint oldlocation; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { g_debug("SIGNAL: %s: %s\n", parameter, g_variant_print(value, TRUE)); if (g_str_equal(parameter, "Strength")) { /*Signal level*/ if (mmguicore->device != NULL) { mmguicore->device->siglevel = g_variant_get_byte(value); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_SIGNAL_LEVEL_CHANGE, mmguicore, mmguicore->device); } } } else if (g_str_equal(parameter, "Status")) { /*Registration state*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { mmguicore->device->regstatus = mmgui_module_registration_status_translate(parameter); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } } else if (g_str_equal(parameter, "MobileCountryCode")) { /*Registration state*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { /*Operator code*/ mmguicore->device->operatorcode |= (atoi(parameter) & 0x0000ffff) << 16; /*Location*/ mmguicore->device->loc3gppdata[0] = atoi(parameter); oldlocation = moduledata->location; moduledata->location |= MODULE_INT_MODEM_LOCATION_MCC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { mmguicore->device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; /*Location capabilities updated*/ if ((oldlocation != MODULE_INT_MODEM_LOCATION_ALL) && (mmguicore->eventcb != NULL)) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_LOCATION)); } /*Update location*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } if ((moduledata->location & MODULE_INT_MODEM_LOCATION_MCC) && (moduledata->location & MODULE_INT_MODEM_LOCATION_MNC)) { /*Update operator code*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } } } else if (g_str_equal(parameter, "MobileNetworkCode")) { /*Registration state*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { /*Operator code*/ mmguicore->device->operatorcode |= atoi(parameter) & 0x0000ffff; /*Location*/ mmguicore->device->loc3gppdata[1] = atoi(parameter); oldlocation = moduledata->location; moduledata->location |= MODULE_INT_MODEM_LOCATION_MNC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { mmguicore->device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; /*Location capabilities updated*/ if ((oldlocation != MODULE_INT_MODEM_LOCATION_ALL) && (mmguicore->eventcb != NULL)) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_LOCATION)); } /*Update location*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } if ((moduledata->location & MODULE_INT_MODEM_LOCATION_MCC) && (moduledata->location & MODULE_INT_MODEM_LOCATION_MNC)) { /*Update operator code*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } } } else if (g_str_equal(parameter, "LocationAreaCode")) { /*Location*/ if (mmguicore->device != NULL) { mmguicore->device->loc3gppdata[2] = g_variant_get_uint16(value); oldlocation = moduledata->location; moduledata->location |= MODULE_INT_MODEM_LOCATION_LAC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { mmguicore->device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; /*Location capabilities updated*/ if ((oldlocation != MODULE_INT_MODEM_LOCATION_ALL) && (mmguicore->eventcb != NULL)) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_LOCATION)); } /*Update location*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } } } else if (g_str_equal(parameter, "CellId")) { /*Location*/ if (mmguicore->device != NULL) { mmguicore->device->loc3gppdata[3] = g_variant_get_uint32(value); oldlocation = moduledata->location; moduledata->location |= MODULE_INT_MODEM_LOCATION_CID; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { mmguicore->device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; /*Location capabilities updated*/ if ((oldlocation != MODULE_INT_MODEM_LOCATION_ALL) && (mmguicore->eventcb != NULL)) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_LOCATION)); } /*Update location*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_LOCATION_CHANGE, mmguicore, mmguicore->device); } } } } else if (g_str_equal(parameter, "Name")) { /*Registration state*/ if (mmguicore->device != NULL) { if (mmguicore->device->operatorname != NULL) { g_free(mmguicore->device->operatorname); } strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { mmguicore->device->operatorname = g_strdup(parameter); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, mmguicore, mmguicore->device); } } } } else if (g_str_equal(parameter, "Technology")) { /*Network mode*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { mmguicore->device->mode = mmgui_module_access_mode_translate(parameter); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_MODE_CHANGE, mmguicore, mmguicore->device); } } } } g_variant_unref(value); } } } } static void mmgui_module_modem_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GVariant *propname, *propvalue, *value; const gchar *parameter; gsize strsize; GVariantIter iterl1; GVariant *nodel1; const gchar *interface; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "Interfaces")) { if (mmguicore->device != NULL) { g_variant_iter_init(&iterl1, value); while ((nodel1 = g_variant_iter_next_value(&iterl1)) != NULL) { strsize = 256; interface = g_variant_get_string(nodel1, &strsize); if ((interface != NULL) && (interface[0] != '\0')) { if ((moduledata->netproxy == NULL) && (g_str_equal(interface, "org.ofono.NetworkRegistration"))) { if (mmgui_module_open_network_registration_interface(mmguicore, mmguicore->device)) { /*Scan capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_SCAN)); } mmgui_module_devices_information(mmguicore); } } else if ((moduledata->netproxy == NULL) && (g_str_equal(interface, "org.ofono.cdma.NetworkRegistration"))) { if (mmgui_module_open_cdma_network_registration_interface(mmguicore, mmguicore->device)) { mmgui_module_devices_information(mmguicore); } } else if ((moduledata->cardproxy == NULL) && (g_str_equal(interface, "org.ofono.SimManager"))) { if (mmgui_module_open_sim_manager_interface(mmguicore, mmguicore->device)) { mmgui_module_devices_information(mmguicore); } } else if ((moduledata->smsproxy == NULL) && (g_str_equal(interface, "org.ofono.MessageManager"))) { if (mmgui_module_open_message_manager_interface(mmguicore, mmguicore->device)) { /*SMS messaging capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_SMS)); } } } else if ((moduledata->smsproxy == NULL) && (g_str_equal(interface, "org.ofono.cdma.MessageManager"))) { if (mmgui_module_open_cdma_message_manager_interface(mmguicore, mmguicore->device)) { /*SMS messaging capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_SMS)); } } } else if ((moduledata->ussdproxy == NULL) && (g_str_equal(interface, "org.ofono.SupplementaryServices"))) { if (mmgui_module_open_supplementary_services_interface(mmguicore, mmguicore->device)) { /*Supplimentary services capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_USSD)); } } } else if ((moduledata->contactsproxy == NULL) && (g_str_equal(interface, "org.ofono.Phonebook"))) { if (mmgui_module_open_phonebook_interface(mmguicore, mmguicore->device)) { /*Contacts capabilities updated*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_EXTEND_CAPABILITIES, mmguicore, GINT_TO_POINTER(MMGUI_CAPS_CONTACTS)); } } } else if ((moduledata->connectionproxy == NULL) && (g_str_equal(interface, "org.ofono.ConnectionManager"))) { if (mmgui_module_open_connection_manager_interface(mmguicore, mmguicore->device)) { mmgui_module_devices_information(mmguicore); } } else if ((moduledata->connectionproxy == NULL) && (g_str_equal(interface, "org.ofono.cdma.ConnectionManager"))) { if (mmgui_module_open_cdma_connection_manager_interface(mmguicore, mmguicore->device)) { mmgui_module_devices_information(mmguicore); } } } g_variant_unref(nodel1); } } } else if (g_str_equal(parameter, "Online")) { if (mmguicore->device != NULL) { mmguicore->device->enabled = g_variant_get_boolean(value); if (mmguicore->eventcb != NULL) { if (mmguicore->device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_ENABLED_STATUS, mmguicore, GUINT_TO_POINTER(mmguicore->device->enabled)); } else { if (mmguicore->device != NULL) { mmguicore->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, mmguicore, GUINT_TO_POINTER(TRUE)); } } } } } g_variant_unref(value); } } } } static void mmgui_module_card_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GVariant *propname, *propvalue, *value; const gchar *parameter; gsize strsize; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "PinRequired")) { /*Locked state*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { mmguicore->device->blocked = mmgui_module_device_get_locked_from_unlock_string(parameter); mmguicore->device->locktype = mmgui_module_device_get_lock_type_from_unlock_string(parameter); if (mmguicore->eventcb != NULL) { if (mmguicore->device->operation != MMGUI_DEVICE_OPERATION_UNLOCK) { (mmguicore->eventcb)(MMGUI_EVENT_DEVICE_BLOCKED_STATUS, mmguicore, GUINT_TO_POINTER(mmguicore->device->blocked)); } else { if (mmguicore->device != NULL) { mmguicore->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, mmguicore, GUINT_TO_POINTER(TRUE)); } } } } } } g_variant_unref(value); } } } } static void mmgui_module_sms_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; mmgui_sms_message_t message; moduledata_t moduledata; guint messageid; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (mmguicore->eventcb != NULL) { if ((g_str_equal(signal_name, "IncomingMessage")) || (g_str_equal(signal_name, "ImmediateMessage"))) { /*Receive message*/ message = mmgui_module_sms_retrieve(mmguicore, parameters); if (message != NULL) { /*Store message in list*/ messageid = g_list_length(moduledata->msgqueue); moduledata->msgqueue = g_list_append(moduledata->msgqueue, message); /*Send signal*/ if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_SMS_COMPLETED, mmguicore, GUINT_TO_POINTER(messageid)); } } } } } static void mmgui_module_connection_signal_handler(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, gpointer data) { mmguicore_t mmguicore; moduledata_t moduledata; GVariant *propname, *propvalue, *value; const gchar *parameter; gsize strsize; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return; if (g_str_equal(signal_name, "PropertyChanged")) { /*Property name and value*/ propname = g_variant_get_child_value(parameters, 0); propvalue = g_variant_get_child_value(parameters, 1); if ((propname != NULL) && (propvalue != NULL)) { /*Unboxed parameter and value*/ strsize = 256; parameter = g_variant_get_string(propname, &strsize); value = g_variant_get_variant(propvalue); if ((parameter != NULL) && (parameter[0] != '\0') && (value != NULL)) { if (g_str_equal(parameter, "Bearer")) { /*Network mode*/ if (mmguicore->device != NULL) { strsize = 256; parameter = g_variant_get_string(value, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { mmguicore->device->mode = mmgui_module_access_mode_translate(parameter); if (mmguicore->eventcb != NULL) { (mmguicore->eventcb)(MMGUI_EVENT_NETWORK_MODE_CHANGE, mmguicore, mmguicore->device); } } } } g_variant_unref(value); } } } } static enum _mmgui_device_modes mmgui_module_access_mode_translate(const gchar *mode) { enum _mmgui_device_modes tmode; if (mode == NULL) return MMGUI_DEVICE_MODE_UNKNOWN; if (g_str_equal(mode, "gsm")) { tmode = MMGUI_DEVICE_MODE_GSM; } else if (g_str_equal(mode, "gprs")) { tmode = MMGUI_DEVICE_MODE_GSM; } else if (g_str_equal(mode, "edge")) { tmode = MMGUI_DEVICE_MODE_EDGE; } else if (g_str_equal(mode, "umts")) { tmode = MMGUI_DEVICE_MODE_UMTS; } else if (g_str_equal(mode, "hsdpa")) { tmode = MMGUI_DEVICE_MODE_HSDPA; } else if (g_str_equal(mode, "hsupa")) { tmode = MMGUI_DEVICE_MODE_HSUPA; } else if (g_str_equal(mode, "hspa")) { tmode = MMGUI_DEVICE_MODE_HSPA; } else if (g_str_equal(mode, "lte")) { tmode = MMGUI_DEVICE_MODE_LTE; } else { tmode = MMGUI_DEVICE_MODE_UNKNOWN; } return tmode; } static enum _mmgui_reg_status mmgui_module_registration_status_translate(const gchar *status) { enum _mmgui_reg_status tstatus; if (status == NULL) return MMGUI_REG_STATUS_UNKNOWN; if (g_str_equal(status, "unregistered")) { tstatus = MMGUI_REG_STATUS_IDLE; } else if (g_str_equal(status, "registered")) { tstatus = MMGUI_REG_STATUS_HOME; } else if (g_str_equal(status, "searching")) { tstatus = MMGUI_REG_STATUS_SEARCHING; } else if (g_str_equal(status, "denied")) { tstatus = MMGUI_REG_STATUS_DENIED; } else if (g_str_equal(status, "unknown")) { tstatus = MMGUI_REG_STATUS_UNKNOWN; } else if (g_str_equal(status, "roaming")) { tstatus = MMGUI_REG_STATUS_ROAMING; } else { tstatus = MMGUI_REG_STATUS_UNKNOWN; } return tstatus; } static enum _mmgui_network_availability mmgui_module_network_availability_status_translate(const gchar* status) { guint tstatus; if (status == NULL) return MMGUI_REG_STATUS_UNKNOWN; if (g_str_equal(status, "unknown")) { tstatus = MMGUI_NA_UNKNOWN; } else if (g_str_equal(status, "available")) { tstatus = MMGUI_NA_AVAILABLE; } else if (g_str_equal(status, "current")) { tstatus = MMGUI_NA_CURRENT; } else if (g_str_equal(status, "forbidden")) { tstatus = MMGUI_NA_FORBIDDEN; } else { tstatus = MMGUI_NA_UNKNOWN; } return tstatus; } static enum _mmgui_access_tech mmgui_module_access_technology_translate(const gchar *technology) { enum _mmgui_access_tech ttechnology; if (technology == NULL) return MMGUI_ACCESS_TECH_UNKNOWN; if (g_str_equal(technology, "gsm")) { ttechnology = MMGUI_ACCESS_TECH_GSM; } else if (g_str_equal(technology, "edge")) { ttechnology = MMGUI_ACCESS_TECH_EDGE; } else if (g_str_equal(technology, "umts")) { ttechnology = MMGUI_ACCESS_TECH_UMTS; } else if (g_str_equal(technology, "hspa")) { ttechnology = MMGUI_ACCESS_TECH_HSPA; } else if (g_str_equal(technology, "lte")) { ttechnology = MMGUI_ACCESS_TECH_LTE; } else { ttechnology = MMGUI_ACCESS_TECH_UNKNOWN; } return ttechnology; } static GVariant *mmgui_module_proxy_get_property(GDBusProxy *proxy, const gchar *name, const GVariantType *type) { GError *error; GVariant *data, *dict, *property; if ((proxy == NULL) || (name == NULL) || (type == NULL)) return NULL; error = NULL; data = g_dbus_proxy_call_sync(proxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((data == NULL) && (error != NULL)) { g_error_free(error); return NULL; } dict = g_variant_get_child_value(data, 0); if (dict == NULL) { g_variant_unref(data); return NULL; } property = g_variant_lookup_value(dict, name, type); if (property == NULL) { g_variant_unref(dict); g_variant_unref(data); return NULL; } g_variant_unref(dict); g_variant_unref(data); return property; } static gboolean mmgui_module_device_get_enabled(mmguicore_t mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *deviceinfo, *propdict, *propenabled; gboolean enabled; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->modemproxy == NULL) return FALSE; error = NULL; deviceinfo = g_dbus_proxy_call_sync(moduledata->modemproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((deviceinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return FALSE; } enabled = FALSE; /*Properties dictionary (not dbus properties)*/ propdict = g_variant_get_child_value(deviceinfo, 0); if (propdict != NULL) { propenabled = g_variant_lookup_value(propdict, "Online", G_VARIANT_TYPE_BOOLEAN); if (propenabled != NULL) { enabled = g_variant_get_boolean(propenabled); g_variant_unref(propenabled); } g_variant_unref(propdict); } g_variant_unref(deviceinfo); return enabled; } static gchar *mmgui_module_device_get_unlock_string(mmguicore_t mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *deviceinfo, *propdict, *proplocked; const gchar *propstring; gsize propstrsize; gchar *res; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return NULL; if (moduledata->cardproxy == NULL) return NULL; error = NULL; deviceinfo = g_dbus_proxy_call_sync(moduledata->cardproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((deviceinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return NULL; } res = NULL; /*Properties dictionary (not dbus properties)*/ propdict = g_variant_get_child_value(deviceinfo, 0); if (propdict != NULL) { proplocked = g_variant_lookup_value(propdict, "PinRequired", G_VARIANT_TYPE_STRING); if (proplocked != NULL) { propstrsize = 256; propstring = g_variant_get_string(proplocked, &propstrsize); if ((propstring != NULL) && (propstring[0] != '\0')) { res = g_strdup(propstring); } g_variant_unref(proplocked); } g_variant_unref(propdict); } g_variant_unref(deviceinfo); return res; } static gboolean mmgui_module_device_get_locked_from_unlock_string(const gchar *ustring) { gboolean locked; if (ustring == NULL) return FALSE; if (g_strcmp0(ustring, "none") == 0) { locked = FALSE; } else { locked = TRUE; } return locked; } static gint mmgui_module_device_get_lock_type_from_unlock_string(const gchar *ustring) { gint locktype; locktype = MMGUI_LOCK_TYPE_NONE; if (ustring == NULL) return locktype; if (g_strcmp0(ustring, "none") == 0) { locktype = MMGUI_LOCK_TYPE_NONE; } else if (g_strcmp0(ustring, "pin") == 0) { locktype = MMGUI_LOCK_TYPE_PIN; } else if (g_strcmp0(ustring, "puk") == 0) { locktype = MMGUI_LOCK_TYPE_PUK; } else { locktype = MMGUI_LOCK_TYPE_OTHER; } return locktype; } static gboolean mmgui_module_device_get_registered(mmguicore_t mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *deviceinfo, *propdict, *propreg; const gchar *regstr; gsize regstrsize; gboolean registered; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->netproxy == NULL) return FALSE; error = NULL; deviceinfo = g_dbus_proxy_call_sync(moduledata->netproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((deviceinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return FALSE; } registered = FALSE; /*Properties dictionary (not dbus properties)*/ propdict = g_variant_get_child_value(deviceinfo, 0); if (propdict != NULL) { propreg = g_variant_lookup_value(propdict, "Status", G_VARIANT_TYPE_STRING); if (propreg != NULL) { regstrsize = 256; regstr = g_variant_get_string(propreg, ®strsize); if ((regstr != NULL) && (regstr[0] != '\0')) { if (g_str_equal(regstr, "registered") || g_str_equal(regstr, "roaming")) { registered = TRUE; } else { registered = FALSE; } } g_variant_unref(propreg); } g_variant_unref(propdict); } g_variant_unref(deviceinfo); return registered; } static gboolean mmgui_module_device_get_connected(mmguicore_t mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *contexts, *properties, *propdict; GVariantIter coniterl1, coniterl2; GVariant *connodel1, *connodel2; GVariant *conparams, *typev, *statev; gsize strlength; const gchar *type; gboolean connected; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (moduledata->connectionproxy == NULL) return FALSE; connected = FALSE; error = NULL; if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { contexts = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetContexts", NULL, 0, -1, NULL, &error); if ((contexts == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return FALSE; } g_variant_iter_init(&coniterl1, contexts); while (((connodel1 = g_variant_iter_next_value(&coniterl1)) != NULL) && (!connected)) { g_variant_iter_init(&coniterl2, connodel1); while (((connodel2 = g_variant_iter_next_value(&coniterl2)) != NULL) && (!connected)) { /*Parameters*/ conparams = g_variant_get_child_value(connodel2, 1); if (conparams != NULL) { /*Type*/ typev = g_variant_lookup_value(conparams, "Type", G_VARIANT_TYPE_STRING); if (typev != NULL) { strlength = 256; type = g_variant_get_string(typev, &strlength); if ((type != NULL) && (type[0] != '\0')) { if (g_str_equal(type, "internet")) { /*State*/ statev = g_variant_lookup_value(conparams, "Active", G_VARIANT_TYPE_BOOLEAN); if (statev != NULL) { connected = g_variant_get_boolean(statev); g_variant_unref(statev); } } } g_variant_unref(typev); } g_variant_unref(conparams); } g_variant_unref(connodel2); } g_variant_unref(connodel1); } g_variant_unref(contexts); } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { properties = g_dbus_proxy_call_sync(moduledata->connectionproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((properties == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return FALSE; } propdict = g_variant_get_child_value(properties, 0); if (propdict == NULL) { g_variant_unref(properties); return FALSE; } statev = g_variant_lookup_value(propdict, "Powered", G_VARIANT_TYPE_BOOLEAN); if (statev != NULL) { connected = g_variant_get_boolean(statev); g_variant_unref(statev); } } return connected; } static GVariant *mmgui_module_device_queue_get_properties(mmguicore_t mmguicore, const gchar *devpath) { moduledata_t moduledata; GDBusProxy *deviceproxy; GError *error; GVariant *deviceinfo, *propdict, *devproppow, *devpropman, *devpropmod, *devproprev; gboolean powered; if ((mmguicore == NULL) || (devpath == NULL)) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return NULL; if (moduledata->connection == NULL) return NULL; error = NULL; deviceproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", devpath, "org.ofono.Modem", NULL, &error); if ((deviceproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); return NULL; } error = NULL; deviceinfo = g_dbus_proxy_call_sync(deviceproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((deviceinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_object_unref(deviceproxy); return NULL; } /*Properties dictionary (not dbus properties)*/ propdict = g_variant_get_child_value(deviceinfo, 0); if (propdict == NULL) { g_variant_unref(deviceinfo); g_object_unref(deviceproxy); return NULL; } /*If device is powered*/ devproppow = g_variant_lookup_value(propdict, "Powered", G_VARIANT_TYPE_BOOLEAN); if (devproppow != NULL) { /*Test if modem powered*/ powered = g_variant_get_boolean(devproppow); g_variant_unref(devproppow); if (!powered) { /*If modem is not powered try to power on*/ error = NULL; g_dbus_proxy_call_sync(deviceproxy, "SetProperty", g_variant_new("(sv)", "Powered", g_variant_new_boolean(TRUE)), 0, -1, NULL, &error); /*If powered on, return properties*/ if (error != NULL) { /*Proxy is not needed anymore*/ g_object_unref(deviceproxy); mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); return NULL; } } } /*These values are strictly required, so test existence*/ devpropman = g_variant_lookup_value(propdict, "Manufacturer", G_VARIANT_TYPE_STRING); devpropmod = g_variant_lookup_value(propdict, "Model", G_VARIANT_TYPE_STRING); devproprev = g_variant_lookup_value(propdict, "Revision", G_VARIANT_TYPE_STRING); if ((devpropman != NULL) && (devpropmod != NULL) && (devproprev != NULL)) { g_variant_unref(devpropman); g_variant_unref(devpropmod); g_variant_unref(devproprev); g_object_unref(deviceproxy); return propdict; } if (devpropman != NULL) { g_variant_unref(devpropman); } if (devpropmod != NULL) { g_variant_unref(devpropmod); } if (devproprev != NULL) { g_variant_unref(devproprev); } g_variant_unref(propdict); g_variant_unref(deviceinfo); g_object_unref(deviceproxy); return NULL; } static mmguidevice_t mmgui_module_device_new(mmguicore_t mmguicore, const gchar *devpath, GVariant *devprops) { mmguidevice_t device; moduledata_t moduledata; GVariant *devprop, *interfaces; GVariantIter iterl1; GVariant *nodel1; gsize strsize; const gchar *parameter; if ((mmguicore == NULL) || (devpath == NULL) || (devprops == NULL)) return NULL; moduledata = (moduledata_t)mmguicore->moduledata; if (moduledata == NULL) return NULL; if (moduledata->connection == NULL) return NULL; device = g_new0(struct _mmguidevice, 1); //Save device identifier and object path device->id = mmgui_module_device_id(devpath); device->objectpath = g_strdup(devpath); device->operation = MMGUI_DEVICE_OPERATION_IDLE; //Zero values we can't get this moment //SMS device->smscaps = MMGUI_SMS_CAPS_NONE; device->smsdb = NULL; //Networks //Info device->operatorname = NULL; device->operatorcode = 0; device->imei = NULL; device->imsi = NULL; //USSD device->ussdcaps = MMGUI_USSD_CAPS_NONE; device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; //Location device->locationcaps = MMGUI_LOCATION_CAPS_NONE; memset(device->loc3gppdata, 0, sizeof(device->loc3gppdata)); memset(device->locgpsdata, 0, sizeof(device->locgpsdata)); //Scan device->scancaps = MMGUI_SCAN_CAPS_NONE; //Traffic device->rxbytes = 0; device->txbytes = 0; device->sessiontime = 0; device->speedchecktime = 0; device->smschecktime = 0; device->speedindex = 0; device->connected = FALSE; memset(device->speedvalues, 0, sizeof(device->speedvalues)); memset(device->interface, 0, sizeof(device->interface)); //Contacts device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; device->contactslist = NULL; devprop = g_variant_lookup_value(devprops, "Online", G_VARIANT_TYPE_BOOLEAN); if (devprop != NULL) { device->enabled = g_variant_get_boolean(devprop); g_variant_unref(devprop); } else { device->enabled = FALSE; } //Blocked must be retrived from SIM interface device->blocked = FALSE; devprop = g_variant_lookup_value(devprops, "Manufacturer", G_VARIANT_TYPE_STRING); if (devprop != NULL) { strsize = 256; parameter = g_variant_get_string(devprop, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->manufacturer = g_strdup(parameter); } else { device->manufacturer = g_strdup(_("Unknown")); } g_variant_unref(devprop); } else { device->manufacturer = g_strdup(_("Unknown")); } devprop = g_variant_lookup_value(devprops, "Model", G_VARIANT_TYPE_STRING); if (devprop != NULL) { strsize = 256; parameter = g_variant_get_string(devprop, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->model = g_strdup(parameter); } else { device->model = g_strdup(_("Unknown")); } g_variant_unref(devprop); } else { device->model = g_strdup(_("Unknown")); } devprop = g_variant_lookup_value(devprops, "Revision", G_VARIANT_TYPE_STRING); if (devprop != NULL) { strsize = 256; parameter = g_variant_get_string(devprop, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->version = g_strdup(parameter); } else { device->version = g_strdup(_("Unknown")); } g_variant_unref(devprop); } else { device->version = g_strdup(_("Unknown")); } /*No port information can be obtained from oFono*/ device->port = g_strdup(_("Unknown")); /*No sysfs path can be obtained from oFono*/ device->sysfspath = NULL; /*Internal identifier is MM-only thing*/ device->internalid = NULL; /*Device type*/ device->type = MMGUI_DEVICE_TYPE_GSM; interfaces = g_variant_lookup_value(devprops, "Interfaces", G_VARIANT_TYPE_STRING); if (interfaces != NULL) { g_variant_iter_init(&iterl1, interfaces); while ((nodel1 = g_variant_iter_next_value(&iterl1)) != NULL) { strsize = 256; parameter = g_variant_get_string(nodel1, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { if (strstr(parameter, "org.ofono.cdma") != NULL) { device->type = MMGUI_DEVICE_TYPE_CDMA; break; } } g_variant_unref(nodel1); } } /*Persistent device identifier*/ parameter = g_strdup_printf("%s_%s_%s", device->manufacturer, device->model, device->version); device->persistentid = g_compute_checksum_for_string(G_CHECKSUM_MD5, parameter, -1); g_free((gchar *)parameter); return device; } G_MODULE_EXPORT gboolean mmgui_module_init(mmguimodule_t module) { if (module == NULL) return FALSE; module->type = MMGUI_MODULE_TYPE_MODEM_MANAGER; module->requirement = MMGUI_MODULE_REQUIREMENT_SERVICE; module->priority = MMGUI_MODULE_PRIORITY_LOW; module->identifier = MMGUI_MODULE_IDENTIFIER; module->functions = MMGUI_MODULE_FUNCTION_BASIC; g_snprintf(module->servicename, sizeof(module->servicename), MMGUI_MODULE_SERVICE_NAME); g_snprintf(module->systemdname, sizeof(module->systemdname), MMGUI_MODULE_SYSTEMD_NAME); g_snprintf(module->description, sizeof(module->description), MMGUI_MODULE_DESCRIPTION); g_snprintf(module->compatibility, sizeof(module->compatibility), MMGUI_MODULE_COMPATIBILITY); return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_open(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t *moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t *)&mmguicorelc->moduledata; (*moduledata) = g_new0(struct _mmguimoduledata, 1); error = NULL; (*moduledata)->connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); (*moduledata)->errormessage = NULL; /*Initialize queues*/ (*moduledata)->devqueue = NULL; (*moduledata)->msgqueue = NULL; if (((*moduledata)->connection == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); g_free(mmguicorelc->moduledata); return FALSE; } error = NULL; (*moduledata)->managerproxy = g_dbus_proxy_new_sync((*moduledata)->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", "/", "org.ofono.Manager", NULL, &error); if (((*moduledata)->managerproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); g_object_unref((*moduledata)->connection); g_free(mmguicorelc->moduledata); return FALSE; } g_signal_connect(G_OBJECT((*moduledata)->managerproxy), "g-signal", G_CALLBACK(mmgui_module_signal_handler), mmguicore); /*History storage*/ (*moduledata)->historyshm = mmgui_history_client_new(); /*Cancellable*/ (*moduledata)->cancellable = g_cancellable_new(); /*Operations timeouts*/ (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_ENABLE] = MMGUI_MODULE_ENABLE_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS] = MMGUI_MODULE_SEND_SMS_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD] = MMGUI_MODULE_SEND_USSD_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_SCAN] = MMGUI_MODULE_NETWORKS_SCAN_OPERATION_TIMEOUT; (*moduledata)->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK] = MMGUI_MODULE_NETWORKS_UNLOCK_OPERATION_TIMEOUT; return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); //Close device //Stop subsystems if (moduledata != NULL) { if (moduledata->errormessage != NULL) { g_free(moduledata->errormessage); } if (moduledata->cancellable != NULL) { g_object_unref(moduledata->cancellable); moduledata->cancellable = NULL; } if (moduledata->historyshm != NULL) { mmgui_history_client_close(moduledata->historyshm); moduledata->historyshm = NULL; } if (moduledata->managerproxy != NULL) { g_object_unref(moduledata->managerproxy); moduledata->managerproxy = NULL; } if (moduledata->connection != NULL) { g_object_unref(moduledata->connection); moduledata->connection = NULL; } g_free(moduledata); } return TRUE; } G_MODULE_EXPORT gchar *mmgui_module_last_error(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; moduledata = (moduledata_t)(mmguicorelc->moduledata); return moduledata->errormessage; } G_MODULE_EXPORT gboolean mmgui_module_interrupt_operation(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (device->operation == MMGUI_DEVICE_OPERATION_IDLE) return FALSE; if (moduledata->cancellable != NULL) { g_cancellable_cancel(moduledata->cancellable); return TRUE; } else { return FALSE; } } G_MODULE_EXPORT gboolean mmgui_module_set_timeout(gpointer mmguicore, guint operation, guint timeout) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (timeout < 1000) timeout *= 1000; if (operation < MMGUI_DEVICE_OPERATIONS) { moduledata->timeouts[operation] = timeout; return TRUE; } else { return FALSE; } } G_MODULE_EXPORT guint mmgui_module_devices_enum(gpointer mmguicore, GSList **devicelist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *devices; guint devnum; GVariantIter diterl1, diterl2; GVariant *dnodel1, *dnodel2; GVariant *devpathv, *devprops; const gchar *devpath; gsize devpathsize; GVariant *devtypev; const gchar *typestr; gsize typestrsize; gboolean devreal; GVariant *devpoweredv; gboolean devpowered; if ((mmguicore == NULL) || (devicelist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; devices = g_dbus_proxy_call_sync(moduledata->managerproxy, "GetModems", NULL, 0, -1, NULL, &error); if ((devices == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } devnum = 0; g_variant_iter_init(&diterl1, devices); while ((dnodel1 = g_variant_iter_next_value(&diterl1)) != NULL) { g_variant_iter_init(&diterl2, dnodel1); while ((dnodel2 = g_variant_iter_next_value(&diterl2)) != NULL) { devpathv = g_variant_get_child_value(dnodel2, 0); devprops = g_variant_get_child_value(dnodel2, 1); if ((devpathv != NULL) && (devprops != NULL)) { devpathsize = 256; devpath = g_variant_get_string(devpathv, &devpathsize); if ((devpath != NULL) && (devpath[0] != '\0')) { /*Determine if modem is not emulated*/ devreal = FALSE; devtypev = g_variant_lookup_value(devprops, "Type", G_VARIANT_TYPE_STRING); if (devtypev != NULL) { typestrsize = 256; typestr = g_variant_get_string(devtypev, &typestrsize); if ((typestr != NULL) && (typestr[0] != '\0')) { if (g_str_equal(typestr, "hardware")) { devreal = TRUE; } } g_variant_unref(devtypev); } /*If modem is not emulated, work with it*/ if (devreal) { /*Determine if modem is powered*/ devpoweredv = g_variant_lookup_value(devprops, "Powered", G_VARIANT_TYPE_BOOLEAN); if (devpoweredv != NULL) { devpowered = g_variant_get_boolean(devpoweredv); g_variant_unref(devpoweredv); } else { devpowered = FALSE; } /*Add device to apporitate list*/ if (!devpowered) { /*Add device to waiting queue if not powered*/ moduledata->devqueue = g_list_prepend(moduledata->devqueue, g_strdup(devpath)); } else { /*Add device to list if already powered*/ *devicelist = g_slist_prepend(*devicelist, mmgui_module_device_new(mmguicore, devpath, devprops)); devnum++; } } g_variant_unref(devpathv); g_variant_unref(devprops); } } g_variant_unref(dnodel2); } g_variant_unref(dnodel1); } g_variant_unref(devices); return devnum; } G_MODULE_EXPORT gboolean mmgui_module_devices_state(gpointer mmguicore, enum _mmgui_device_state_request request) { mmguicore_t mmguicorelc; /*moduledata_t moduledata;*/ mmguidevice_t device; gchar *ustring; gboolean res; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; /*moduledata = (moduledata_t)mmguicorelc->moduledata;*/ if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; switch (request) { case MMGUI_DEVICE_STATE_REQUEST_ENABLED: /*Is device enabled*/ res = mmgui_module_device_get_enabled(mmguicorelc); if (device->operation != MMGUI_DEVICE_OPERATION_ENABLE) { device->enabled = res; } break; case MMGUI_DEVICE_STATE_REQUEST_LOCKED: /*Is device blocked*/ ustring = mmgui_module_device_get_unlock_string(mmguicorelc); res = mmgui_module_device_get_locked_from_unlock_string(ustring); device->locktype = mmgui_module_device_get_lock_type_from_unlock_string(ustring); g_free(ustring); device->blocked = res; break; case MMGUI_DEVICE_STATE_REQUEST_REGISTERED: /*Is device registered in network*/ res = mmgui_module_device_get_registered(mmguicorelc); device->registered = res; break; case MMGUI_DEVICE_STATE_REQUEST_CONNECTED: /*Is device connected*/ res = mmgui_module_device_get_connected(mmguicorelc); device->connected = res; break; case MMGUI_DEVICE_STATE_REQUEST_PREPARED: /*Is device ready for opearation - maybe add additional code in future*/ res = TRUE; device->prepared = TRUE; break; default: res = FALSE; break; } return res; } static gboolean mmgui_module_devices_queue_remove(mmguicore_t mmguicore, const gchar *devpath) { moduledata_t moduledata; GList *dqlnode; GList *dqlnext; gchar *dqlpath; gboolean res; if ((mmguicore == NULL) || (devpath == NULL)) return FALSE; if (mmguicore->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicore->moduledata; res = FALSE; //Search for specified device and remove if any if (moduledata->devqueue != NULL) { dqlnode = moduledata->devqueue; while (dqlnode != NULL) { dqlpath = (gchar *)dqlnode->data; dqlnext = g_list_next(dqlnode); if (g_str_equal(devpath, dqlpath)) { //Free resources g_free(dqlpath); //Remove list node moduledata->devqueue = g_list_delete_link(moduledata->devqueue, dqlnode); //Set flag and break res = TRUE; break; } dqlnode = dqlnext; } } return res; } G_MODULE_EXPORT gboolean mmgui_module_devices_update_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GList *dqlnode; GList *dqlnext; gchar *dqlpath; GVariant *devprops; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; /*Search for ready devices*/ if ((moduledata->devqueue != NULL) && (mmguicorelc->eventcb != NULL)) { dqlnode = moduledata->devqueue; while (dqlnode != NULL) { dqlpath = (gchar *)dqlnode->data; dqlnext = g_list_next(dqlnode); /*If device is not ready, NULL is returned*/ devprops = mmgui_module_device_queue_get_properties(mmguicore, dqlpath); if (devprops != NULL) { device = mmgui_module_device_new(mmguicore, dqlpath, devprops); if (device != NULL) { /*Free resources*/ g_free(dqlpath); g_variant_unref(devprops); /*Remove list node*/ moduledata->devqueue = g_list_delete_link(moduledata->devqueue, dqlnode); /*Send notification*/ (mmguicorelc->eventcb)(MMGUI_EVENT_DEVICE_ADDED, mmguicore, device); } } dqlnode = dqlnext; } } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_information(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GVariant *data; /*GError *error;*/ //gchar opcode[6]; //guchar locvalues; gsize strsize = 256; const gchar *parameter; gchar *ustring; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->modemproxy != NULL) { /*Is device enabled and blocked*/ device->enabled = mmgui_module_device_get_enabled(mmguicorelc); ustring = mmgui_module_device_get_unlock_string(mmguicorelc); device->blocked = mmgui_module_device_get_locked_from_unlock_string(ustring); device->locktype = mmgui_module_device_get_lock_type_from_unlock_string(ustring); g_free(ustring); device->registered = mmgui_module_device_get_registered(mmguicorelc); if (device->enabled) { /*Device identifier (IMEI)*/ if (device->imei != NULL) { g_free(device->imei); device->imei = NULL; } data = mmgui_module_proxy_get_property(moduledata->modemproxy, "Serial", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->imei = g_strdup(parameter); } else { device->imei = NULL; } g_variant_unref(data); } else { device->imei = NULL; } } } if (moduledata->netproxy != NULL) { /*Operator information*/ device->operatorcode = 0; if (device->operatorname != NULL) { g_free(device->operatorname); device->operatorname = NULL; } /*Signal level*/ data = mmgui_module_proxy_get_property(moduledata->netproxy, "Strength", G_VARIANT_TYPE_BYTE); if (data != NULL) { device->siglevel = g_variant_get_byte(data); g_variant_unref(data); } else { device->siglevel = 0; } /*Used access technology*/ data = mmgui_module_proxy_get_property(moduledata->netproxy, "Technology", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->mode = mmgui_module_access_mode_translate(parameter); } else { device->mode = MMGUI_DEVICE_MODE_UNKNOWN; } g_variant_unref(data); } else { device->mode = MMGUI_DEVICE_MODE_UNKNOWN; } /*Registration state*/ data = mmgui_module_proxy_get_property(moduledata->netproxy, "Status", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->regstatus = mmgui_module_registration_status_translate(parameter); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } g_variant_unref(data); } else { device->regstatus = MMGUI_REG_STATUS_UNKNOWN; } /*Operator name*/ data = mmgui_module_proxy_get_property(moduledata->netproxy, "Name", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->operatorname = g_strdup(parameter); } else { device->operatorname = NULL; } g_variant_unref(data); } else { device->operatorname = NULL; } /*3gpp location, Operator code*/ data = mmgui_module_proxy_get_property(moduledata->netproxy, "MobileCountryCode", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->loc3gppdata[0] = atoi(parameter); device->operatorcode |= (device->loc3gppdata[0] & 0x0000ffff) << 16; moduledata->location |= MODULE_INT_MODEM_LOCATION_MCC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } } g_variant_unref(data); } data = mmgui_module_proxy_get_property(moduledata->netproxy, "MobileNetworkCode", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->loc3gppdata[1] = atoi(parameter); device->operatorcode |= device->loc3gppdata[1] & 0x0000ffff; moduledata->location |= MODULE_INT_MODEM_LOCATION_MNC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } } g_variant_unref(data); } data = mmgui_module_proxy_get_property(moduledata->netproxy, "LocationAreaCode", G_VARIANT_TYPE_UINT16); if (data != NULL) { device->loc3gppdata[2] = g_variant_get_uint16(data); moduledata->location |= MODULE_INT_MODEM_LOCATION_LAC; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } g_variant_unref(data); } data = mmgui_module_proxy_get_property(moduledata->netproxy, "CellId", G_VARIANT_TYPE_UINT32); if (data != NULL) { device->loc3gppdata[3] = g_variant_get_uint32(data); moduledata->location |= MODULE_INT_MODEM_LOCATION_CID; if (moduledata->location == MODULE_INT_MODEM_LOCATION_ALL) { device->locationcaps |= MMGUI_LOCATION_CAPS_3GPP; } g_variant_unref(data); } } if (moduledata->cardproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { if (device->enabled) { /*IMSI*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } data = mmgui_module_proxy_get_property(moduledata->cardproxy, "SubscriberIdentity", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->imsi = g_strdup(parameter); } else { device->imsi = NULL; } g_variant_unref(data); } else { device->imsi = NULL; } } } else if (device->type == MMGUI_DEVICE_TYPE_CDMA) { /*No IMSI in CDMA*/ if (device->imsi != NULL) { g_free(device->imsi); device->imsi = NULL; } } } if (moduledata->connectionproxy != NULL) { if (device->type == MMGUI_DEVICE_TYPE_GSM) { /*Used access technology*/ data = mmgui_module_proxy_get_property(moduledata->connectionproxy, "Bearer", G_VARIANT_TYPE_STRING); if (data != NULL) { strsize = 256; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { device->mode = mmgui_module_access_mode_translate(parameter); } else { device->mode = MMGUI_DEVICE_MODE_UNKNOWN; } g_variant_unref(data); } else { device->mode = MMGUI_DEVICE_MODE_UNKNOWN; } } } return TRUE; } static gboolean mmgui_module_open_network_registration_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->location = MODULE_INT_MODEM_LOCATION_NULL; moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.NetworkRegistration", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { device->scancaps = MMGUI_SCAN_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->scancaps = MMGUI_SCAN_CAPS_OBSERVE; moduledata->netsignal = g_signal_connect(G_OBJECT(moduledata->netproxy), "g-signal", G_CALLBACK(mmgui_module_network_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_cdma_network_registration_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->location = MODULE_INT_MODEM_LOCATION_NULL; /*Update device type*/ device->type = MMGUI_DEVICE_TYPE_CDMA; device->scancaps = MMGUI_SCAN_CAPS_NONE; moduledata->netproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.cdma.NetworkRegistration", NULL, &error); if ((moduledata->netproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { moduledata->netsignal = g_signal_connect(G_OBJECT(moduledata->netproxy), "g-signal", G_CALLBACK(mmgui_module_network_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_sim_manager_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->cardproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.SimManager", NULL, &error); if ((moduledata->cardproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { moduledata->cardsignal = g_signal_connect(G_OBJECT(moduledata->cardproxy), "g-signal", G_CALLBACK(mmgui_module_card_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_message_manager_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.MessageManager", NULL, &error); if ((moduledata->smsproxy == NULL) && (error != NULL)) { device->smscaps = MMGUI_SMS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->smscaps = MMGUI_SMS_CAPS_RECEIVE | MMGUI_SMS_CAPS_SEND; moduledata->smssignal = g_signal_connect(moduledata->smsproxy, "g-signal", G_CALLBACK(mmgui_module_sms_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_cdma_message_manager_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; /*Update device type*/ device->type = MMGUI_DEVICE_TYPE_CDMA; error = NULL; moduledata->smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.cdma.MessageManager", NULL, &error); if ((moduledata->smsproxy == NULL) && (error != NULL)) { device->smscaps = MMGUI_SMS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->smscaps = MMGUI_SMS_CAPS_RECEIVE | MMGUI_SMS_CAPS_SEND; moduledata->smssignal = g_signal_connect(moduledata->smsproxy, "g-signal", G_CALLBACK(mmgui_module_sms_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_supplementary_services_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.SupplementaryServices", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; return TRUE; } } static gboolean mmgui_module_open_phonebook_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->contactsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.Phonebook", NULL, &error); if ((moduledata->contactsproxy == NULL) && (error != NULL)) { device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->contactscaps = MMGUI_CONTACTS_CAPS_EXPORT | MMGUI_CONTACTS_CAPS_EXTENDED; return TRUE; } } static gboolean mmgui_module_open_connection_manager_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; error = NULL; moduledata->connectionproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.ConnectionManager", NULL, &error); if ((moduledata->connectionproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { moduledata->connectionsignal = g_signal_connect(moduledata->connectionproxy, "g-signal", G_CALLBACK(mmgui_module_connection_signal_handler), mmguicore); return TRUE; } } static gboolean mmgui_module_open_cdma_connection_manager_interface(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device->objectpath == NULL) return FALSE; /*Update device type*/ device->type = MMGUI_DEVICE_TYPE_CDMA; error = NULL; moduledata->connectionproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.cdma.ConnectionManager", NULL, &error); if ((moduledata->connectionproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { moduledata->connectionsignal = g_signal_connect(moduledata->connectionproxy, "g-signal", G_CALLBACK(mmgui_module_connection_signal_handler), mmguicore); return TRUE; } } G_MODULE_EXPORT gboolean mmgui_module_devices_open(gpointer mmguicore, mmguidevice_t device) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *interfaces; GVariantIter iterl1; GVariant *nodel1; const gchar *interface; gsize strsize; if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (device == NULL) return FALSE; if (device->objectpath == NULL) return FALSE; /*Interfaces can appear suddenly*/ moduledata->netproxy = NULL; moduledata->cardproxy = NULL; moduledata->smsproxy = NULL; moduledata->ussdproxy = NULL; moduledata->contactsproxy = NULL; moduledata->connectionproxy = NULL; error = NULL; moduledata->modemproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.Modem", NULL, &error); if ((moduledata->modemproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { moduledata->modemsignal = g_signal_connect(G_OBJECT(moduledata->modemproxy), "g-signal", G_CALLBACK(mmgui_module_modem_signal_handler), mmguicore); /*Get available interfaces*/ interfaces = mmgui_module_proxy_get_property(moduledata->modemproxy, "Interfaces", G_VARIANT_TYPE_ARRAY); if (interfaces != NULL) { g_variant_iter_init(&iterl1, interfaces); while ((nodel1 = g_variant_iter_next_value(&iterl1)) != NULL) { interface = g_variant_get_string(nodel1, &strsize); if ((interface != NULL) && (interface[0] != '\0')) { if (g_str_equal(interface, "org.ofono.NetworkRegistration")) { mmgui_module_open_network_registration_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.cdma.NetworkRegistration")) { mmgui_module_open_cdma_network_registration_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.SimManager")) { mmgui_module_open_sim_manager_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.MessageManager")) { mmgui_module_open_message_manager_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.cdma.MessageManager")) { mmgui_module_open_cdma_message_manager_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.SupplementaryServices")) { mmgui_module_open_supplementary_services_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.Phonebook")) { mmgui_module_open_phonebook_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.ConnectionManager")) { mmgui_module_open_connection_manager_interface(mmguicore, device); } else if (g_str_equal(interface, "org.ofono.cdma.ConnectionManager")) { mmgui_module_open_cdma_connection_manager_interface(mmguicore, device); } } g_variant_unref(nodel1); } g_variant_unref(interfaces); } } /*Update device information using created proxy objects*/ mmgui_module_devices_information(mmguicore); /*Open device history storage*/ if (moduledata->historyshm != NULL) { mmgui_history_client_open_device(moduledata->historyshm, device->objectpath); } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_devices_close(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; /*Close proxy objects*/ if (moduledata->cardproxy != NULL) { if (g_signal_handler_is_connected(moduledata->cardproxy, moduledata->cardsignal)) { g_signal_handler_disconnect(moduledata->cardproxy, moduledata->cardsignal); } g_object_unref(moduledata->cardproxy); moduledata->cardproxy = NULL; } if (moduledata->netproxy != NULL) { if (g_signal_handler_is_connected(moduledata->netproxy, moduledata->netsignal)) { g_signal_handler_disconnect(moduledata->netproxy, moduledata->netsignal); } g_object_unref(moduledata->netproxy); moduledata->netproxy = NULL; } if (moduledata->modemproxy != NULL) { if (g_signal_handler_is_connected(moduledata->modemproxy, moduledata->modemsignal)) { g_signal_handler_disconnect(moduledata->modemproxy, moduledata->modemsignal); } g_object_unref(moduledata->modemproxy); moduledata->modemproxy = NULL; } if (moduledata->smsproxy != NULL) { if (g_signal_handler_is_connected(moduledata->smsproxy, moduledata->smssignal)) { g_signal_handler_disconnect(moduledata->smsproxy, moduledata->smssignal); } g_object_unref(moduledata->smsproxy); moduledata->smsproxy = NULL; } if (moduledata->ussdproxy != NULL) { g_object_unref(moduledata->ussdproxy); moduledata->ussdproxy = NULL; } if (moduledata->contactsproxy != NULL) { g_object_unref(moduledata->contactsproxy); moduledata->contactsproxy = NULL; } if (moduledata->connectionproxy != NULL) { if (g_signal_handler_is_connected(moduledata->connectionproxy, moduledata->connectionsignal)) { g_signal_handler_disconnect(moduledata->connectionproxy, moduledata->connectionsignal); } g_object_unref(moduledata->connectionproxy); moduledata->connectionproxy = NULL; } /*Close device history storage*/ if (moduledata->historyshm != NULL) { mmgui_history_client_close_device(moduledata->historyshm); } return TRUE; } static gboolean mmgui_module_devices_restart_ussd(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmguidevice_t device; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; device = mmguicorelc->device; if (moduledata->ussdproxy != NULL) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; g_object_unref(moduledata->ussdproxy); } error = NULL; moduledata->ussdproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", device->objectpath, "org.ofono.SupplementaryServices", NULL, &error); if ((moduledata->ussdproxy == NULL) && (error != NULL)) { device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } else { device->ussdcaps = MMGUI_USSD_CAPS_SEND; return TRUE; } } static void mmgui_module_devices_enable_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_ENABLE_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(data); } } G_MODULE_EXPORT gboolean mmgui_module_devices_enable(gpointer mmguicore, gboolean enabled) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *value; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->modemproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; //Device already in requested state if (mmguicorelc->device->enabled == enabled) return TRUE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_ENABLE; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } value = g_variant_new_boolean(enabled); g_dbus_proxy_call(moduledata->modemproxy, "SetProperty", g_variant_new("(sv)", "Online", value), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_ENABLE], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_enable_handler, mmguicore); return TRUE; } static void mmgui_module_devices_unlock_with_pin_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); if ((data == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if (mmguicorelc->eventcb != NULL) { (mmguicorelc->eventcb)(MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, user_data, GUINT_TO_POINTER(FALSE)); } } else { /*Handle event if state transition was successful*/ g_variant_unref(data); } } G_MODULE_EXPORT gboolean mmgui_module_devices_unlock_with_pin(gpointer mmguicore, gchar *pin) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return FALSE; if (moduledata->cardproxy == NULL) return FALSE; if (mmguicorelc->device->locktype != MMGUI_LOCK_TYPE_PIN) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_UNLOCK; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->cardproxy, "EnterPin", g_variant_new("(ss)", "pin", pin), G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_UNLOCK], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_devices_unlock_with_pin_handler, mmguicore); return TRUE; } /*Time format: 2013-10-18T22:22:22+0400*/ static time_t mmgui_module_str_to_time(const gchar *str) { guint i, len, field, fieldlen; gint prevptr, curptr; gchar strbuf[5]; struct tm btime; time_t timestamp; gint *fields[] = {&btime.tm_year, &btime.tm_mon, &btime.tm_mday, &btime.tm_hour, &btime.tm_min, &btime.tm_sec}; timestamp = time(NULL); if (str == NULL) return timestamp; len = strlen(str); if (len == 0) return timestamp; prevptr = 0; curptr = -1; field = 0; fieldlen = 0; for (i=0; i 1900) { btime.tm_year -= 1900; } btime.tm_mon -= 1; timestamp = mktime(&btime); return timestamp; } static mmgui_sms_message_t mmgui_module_sms_retrieve(mmguicore_t mmguicore, GVariant *smsdata) { mmgui_sms_message_t message; GVariant *smsmessagev, *smsparamsv, *value; gsize strlength; const gchar *valuestr; gboolean gottext; if ((mmguicore == NULL) || (smsdata == NULL)) return NULL; /*Message text and parameters*/ smsmessagev = g_variant_get_child_value(smsdata, 0); smsparamsv = g_variant_get_child_value(smsdata, 1); if ((smsmessagev == NULL) || (smsparamsv == NULL)) return NULL; message = mmgui_smsdb_message_create(); /*Message text*/ gottext = FALSE; strlength = 160*256; valuestr = g_variant_get_string(smsmessagev, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_text(message, valuestr, FALSE); gottext = TRUE; } g_variant_unref(smsmessagev); /*Message has no text - skip it*/ if (!gottext) { mmgui_smsdb_message_free(message); return NULL; } /*Message sender*/ value = g_variant_lookup_value(smsparamsv, "Sender", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_number(message, valuestr); g_debug("SMS number: %s\n", valuestr); } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } g_variant_unref(value); } else { mmgui_smsdb_message_set_number(message, _("Unknown")); } /*Message local time*/ value = g_variant_lookup_value(smsparamsv, "LocalSentTime", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; valuestr = g_variant_get_string(value, &strlength); if ((valuestr != NULL) && (valuestr[0] != '\0')) { mmgui_smsdb_message_set_timestamp(message, mmgui_module_str_to_time(valuestr)); g_debug("SMS timestamp: %s", ctime((const time_t *)&message->timestamp)); } g_variant_unref(value); } /*Message index (0 since oFono automatically removes messages from modem memory)*/ mmgui_smsdb_message_set_identifier(message, 0, FALSE); return message; } G_MODULE_EXPORT guint mmgui_module_sms_enum(gpointer mmguicore, GSList **smslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; guint msgnum; GSList *messages; if ((mmguicore == NULL) || (smslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (mmguicorelc->device == NULL) return 0; if (moduledata->historyshm == NULL) return 0; messages = NULL; msgnum = 0; /*Get messages from history storage*/ messages = mmgui_history_client_enum_messages(moduledata->historyshm); if (messages != NULL) { msgnum = g_slist_length(messages); *smslist = messages; } return msgnum; } G_MODULE_EXPORT mmgui_sms_message_t mmgui_module_sms_get(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; mmgui_sms_message_t message; if (mmguicore == NULL) return NULL; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return NULL; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return NULL; if (mmguicorelc->device == NULL) return NULL; if (!mmguicorelc->device->enabled) return NULL; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return NULL; /*Message queue is not initialized*/ if (moduledata->msgqueue == NULL) return NULL; /*Message queue is shorter than assumed*/ if (g_list_length(moduledata->msgqueue) <= index) return NULL; /*Retrieve message*/ message = g_list_nth_data(moduledata->msgqueue, index); /*And remove it from queue*/ moduledata->msgqueue = g_list_remove(moduledata->msgqueue, message); return message; } G_MODULE_EXPORT gboolean mmgui_module_sms_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_RECEIVE)) return FALSE; /*Ofono automatically removes messages, so doing nothing there*/ return TRUE; } static void mmgui_module_sms_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *data; gboolean sent; const gchar *smspath; GDBusProxy *smsproxy; GVariant *smsinfo, *smsdict, *smsstatev; gsize smsstatesize; const gchar *smsstate; if (user_data == NULL) return; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; data = g_dbus_proxy_call_finish(proxy, res, &error); sent = FALSE; /*Operation result*/ if ((error != NULL) && (data == NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else if (data != NULL) { /*Get message object path*/ g_variant_get(data, "(o)", &smspath); if (smspath != NULL) { /*Message proxy*/ error = NULL; smsproxy = g_dbus_proxy_new_sync(moduledata->connection, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.ofono", smspath, "org.ofono.Message", NULL, &error); if ((smsproxy == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { /*Message properties*/ error = NULL; smsinfo = g_dbus_proxy_call_sync(smsproxy, "GetProperties", NULL, 0, -1, NULL, &error); if ((smsinfo == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); } else { smsdict = g_variant_get_child_value(smsinfo, 0); if (smsdict != NULL) { /*Message state*/ smsstatev = g_variant_lookup_value(smsdict, "State", G_VARIANT_TYPE_STRING); if (smsstatev != NULL) { smsstatesize = 256; smsstate = g_variant_get_string(smsstatev, &smsstatesize); if ((smsstate != NULL) && (smsstate[0] != '\0')) { /*Message must be already sent or pending*/ if ((g_str_equal(smsstate, "pending")) || (g_str_equal(smsstate, "sent"))) { sent = TRUE; } } g_variant_unref(smsstatev); } g_variant_unref(smsdict); } g_variant_unref(smsinfo); } g_object_unref(smsproxy); } } g_variant_unref(data); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SMS_SENT, user_data, GUINT_TO_POINTER(sent)); } } G_MODULE_EXPORT gboolean mmgui_module_sms_send(gpointer mmguicore, gchar* number, gchar *text, gint validity, gboolean report) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *message; GVariantBuilder *messagebuilder; if ((number == NULL) || (text == NULL)) return FALSE; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->smsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->smscaps & MMGUI_SMS_CAPS_SEND)) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_SMS; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } error = NULL; /*Set delivery reports state*/ if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { g_dbus_proxy_call_sync(moduledata->smsproxy, "SetProperty", g_variant_new("(sv)", "UseDeliveryReports", g_variant_new_boolean(report)), 0, -1, NULL, &error); } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { g_dbus_proxy_call_sync(moduledata->smsproxy, "SetProperty", g_variant_new("(sv)", "UseDeliveryAcknowledgement", g_variant_new_boolean(report)), 0, -1, NULL, &error); } /*Save error message if something going wrong*/ if (error != NULL) { mmgui_module_handle_error_message(mmguicore, error); g_error_free(error); } /*Form message and send it*/ if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_GSM) { /*In GSM message is simple two string tuple*/ message = g_variant_new("(ss)", number, text); g_dbus_proxy_call(moduledata->smsproxy, "SendMessage", message, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_sms_send_handler, mmguicore); } else if (mmguicorelc->device->type == MMGUI_DEVICE_TYPE_CDMA) { /*In CDMA it is dictionary with some string flags not used here*/ messagebuilder = g_variant_builder_new(G_VARIANT_TYPE_DICTIONARY); g_variant_builder_add(messagebuilder, "{ss}", "To", number); g_variant_builder_add(messagebuilder, "{ss}", "Text", text); message = g_variant_builder_end(messagebuilder); g_dbus_proxy_call(moduledata->smsproxy, "SendMessage", message, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_SMS], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_sms_send_handler, mmguicore); } return TRUE; } G_MODULE_EXPORT gboolean mmgui_module_ussd_cancel_session(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; error = NULL; g_dbus_proxy_call_sync(moduledata->ussdproxy, "Cancel", NULL, 0, -1, NULL, &error); if (error != NULL) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return FALSE; } return TRUE; } G_MODULE_EXPORT enum _mmgui_ussd_state mmgui_module_ussd_get_state(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; GVariant *session; gchar *state; enum _mmgui_ussd_state stateid; gsize strsize; stateid = MMGUI_USSD_STATE_UNKNOWN; if (mmguicore == NULL) return stateid; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return stateid; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return stateid; if (mmguicorelc->device == NULL) return stateid; if (!mmguicorelc->device->enabled) return stateid; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return stateid; session = mmgui_module_proxy_get_property(moduledata->ussdproxy, "State", G_VARIANT_TYPE_STRING); if (session == NULL) return stateid; strsize = 256; state = (gchar *)g_variant_get_string(session, &strsize); if ((state != NULL) && (state[0] != '\0')) { if (g_str_equal(state, "idle")) { stateid = MMGUI_USSD_STATE_IDLE; } else if (g_str_equal(state, "active")) { stateid = MMGUI_USSD_STATE_ACTIVE; } else if (g_str_equal(state, "user-response")) { stateid = MMGUI_USSD_STATE_USER_RESPONSE; } } g_variant_unref(session); return stateid; } static void mmgui_module_ussd_send_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; const gchar *restype; const gchar *parameter; gchar *reqtype, *answer; gsize strsize; GVariant *data; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; answer = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { /*For some reason after timeout ussd does not work - restart it*/ mmgui_module_devices_restart_ussd(mmguicorelc); if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { restype = g_variant_get_type_string(result); if (g_str_equal(restype, "(sv)")) { /*Initiate*/ g_variant_get(result, "(sv)", &reqtype, &data); if (g_str_equal(reqtype, "USSD")) { strsize = 4096; parameter = g_variant_get_string(data, &strsize); if ((parameter != NULL) && (parameter[0] != '\0')) { answer = g_strdup(parameter); } else { answer = NULL; } } g_variant_unref(data); } else if (g_str_equal(restype, "(s)")) { /*Response*/ g_variant_get(result, "(s)", &answer); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_USSD_RESULT, user_data, answer); } } G_MODULE_EXPORT gboolean mmgui_module_ussd_send(gpointer mmguicore, gchar *request, enum _mmgui_ussd_validation validationid, gboolean reencode) { mmguicore_t mmguicorelc; moduledata_t moduledata; enum _mmgui_ussd_state sessionstate; GVariant *ussdreq; gchar *command; if ((mmguicore == NULL) || (request == NULL)) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->ussdproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->ussdcaps & MMGUI_USSD_CAPS_SEND)) return FALSE; sessionstate = mmgui_module_ussd_get_state(mmguicore); if ((sessionstate == MMGUI_USSD_STATE_UNKNOWN) || (sessionstate == MMGUI_USSD_STATE_ACTIVE)) { mmgui_module_ussd_cancel_session(mmguicore); } ussdreq = g_variant_new("(s)", request); command = "Initiate"; if (sessionstate == MMGUI_USSD_STATE_IDLE) { command = "Initiate"; } else if (sessionstate == MMGUI_USSD_STATE_USER_RESPONSE) { if (validationid == MMGUI_USSD_VALIDATION_REQUEST) { mmgui_module_ussd_cancel_session(mmguicore); command = "Initiate"; } else { command = "Respond"; } } /*No problems with USSD in oFono, so just ignore the 'reencode' argument*/ mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SEND_USSD; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->ussdproxy, command, ussdreq, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SEND_USSD], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_ussd_send_handler, mmguicore); return TRUE; } static guint mmgui_module_network_retrieve(GVariant *networkv, GSList **networks) { mmgui_scanned_network_t network; gsize technologies; GVariant *dict, *techs, *value; gsize strlength; guint i, mcc, mnc, mul, num; const gchar *parameter; if ((networkv == NULL) || (networks == NULL)) return 0; dict = g_variant_get_child_value(networkv, 1); techs = g_variant_lookup_value(dict, "Technologies", G_VARIANT_TYPE_ARRAY); if (techs != NULL) { technologies = g_variant_n_children(techs); } else { technologies = 0; } num = 0; if (technologies > 0) { for (i=0; ioperator_num = 0; /*MCC*/ mcc = 0; value = g_variant_lookup_value(dict, "MobileCountryCode", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; parameter = g_variant_get_string(value, &strlength); if ((parameter != NULL) && (parameter[0] != '\0')) { mcc = atoi(parameter); } g_variant_unref(value); } /*MNC*/ mnc = 0; value = g_variant_lookup_value(dict, "MobileNetworkCode", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; parameter = g_variant_get_string(value, &strlength); if ((parameter != NULL) && (parameter[0] != '\0')) { mnc = atoi(parameter); } g_variant_unref(value); } mul = 1; while (mul <= mnc) { mul *= 10; } if (mnc < 10) { network->operator_num = mcc * mul * 10 + mnc; } else { network->operator_num = mcc * mul + mnc; } /*Network access technology*/ value = g_variant_get_child_value(techs, i); if (value != NULL) { strlength = 256; parameter = g_variant_get_string(value, &strlength); if ((parameter != NULL) && (parameter[0] != '\0')) { network->access_tech = mmgui_module_access_technology_translate(parameter); } else { network->access_tech = MMGUI_ACCESS_TECH_GSM; } g_variant_unref(value); } else { network->access_tech = MMGUI_ACCESS_TECH_GSM; } /*Name of operator*/ value = g_variant_lookup_value(dict, "Name", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; parameter = g_variant_get_string(value, &strlength); if ((parameter != NULL) && (parameter[0] != '\0')) { network->operator_long = g_strdup(parameter); network->operator_short = g_strdup(parameter); } else { network->operator_long = g_strdup(_("Unknown")); network->operator_short = g_strdup(_("Unknown")); } g_variant_unref(value); } else { network->operator_long = g_strdup(_("Unknown")); network->operator_short = g_strdup(_("Unknown")); } /*Network availability status*/ value = g_variant_lookup_value(dict, "Status", G_VARIANT_TYPE_STRING); if (value != NULL) { strlength = 256; parameter = g_variant_get_string(value, &strlength); if ((parameter != NULL) && (parameter[0] != '\0')) { network->status = mmgui_module_network_availability_status_translate(parameter); } else { network->status = MMGUI_NA_UNKNOWN; } g_variant_unref(value); /*Add network to list*/ *networks = g_slist_prepend(*networks, network); num++; } else { if (network->operator_long != NULL) g_free(network->operator_long); if (network->operator_short != NULL) g_free(network->operator_short); g_free(network); } } g_variant_unref(techs); } return num; } static void mmgui_module_networks_scan_handler(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *result; GSList *networks; GVariantIter niterl1, niterl2; GVariant *nnodel1, *nnodel2; mmguicorelc = (mmguicore_t)user_data; if (mmguicorelc == NULL) return; if (mmguicorelc->moduledata == NULL) return; moduledata = (moduledata_t)mmguicorelc->moduledata; error = NULL; networks = NULL; result = g_dbus_proxy_call_finish(proxy, res, &error); if ((result == NULL) && (error != NULL)) { if ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable)))) { mmgui_module_handle_error_message(mmguicorelc, error); } g_error_free(error); } else { g_variant_iter_init(&niterl1, result); while ((nnodel1 = g_variant_iter_next_value(&niterl1)) != NULL) { g_variant_iter_init(&niterl2, nnodel1); while ((nnodel2 = g_variant_iter_next_value(&niterl2)) != NULL) { mmgui_module_network_retrieve(nnodel2, &networks); g_variant_unref(nnodel2); } g_variant_unref(nnodel1); } g_variant_unref(result); } if (mmguicorelc->device != NULL) { mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_IDLE; } if ((mmguicorelc->eventcb != NULL) && ((moduledata->cancellable == NULL) || ((moduledata->cancellable != NULL) && (!g_cancellable_is_cancelled(moduledata->cancellable))))) { (mmguicorelc->eventcb)(MMGUI_EVENT_SCAN_RESULT, user_data, networks); } } G_MODULE_EXPORT gboolean mmgui_module_networks_scan(gpointer mmguicore) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->netproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->scancaps & MMGUI_SCAN_CAPS_OBSERVE)) return FALSE; mmguicorelc->device->operation = MMGUI_DEVICE_OPERATION_SCAN; if (moduledata->cancellable != NULL) { g_cancellable_reset(moduledata->cancellable); } g_dbus_proxy_call(moduledata->netproxy, "Scan", NULL, G_DBUS_CALL_FLAGS_NONE, moduledata->timeouts[MMGUI_DEVICE_OPERATION_SCAN], moduledata->cancellable, (GAsyncReadyCallback)mmgui_module_networks_scan_handler, mmguicore); return TRUE; } G_MODULE_EXPORT guint mmgui_module_contacts_enum(gpointer mmguicore, GSList **contactslist) { mmguicore_t mmguicorelc; moduledata_t moduledata; GError *error; GVariant *contacts, *contpayload; guint contactsnum; gsize vcardstrlen; const gchar *vcardstr; if ((mmguicore == NULL) || (contactslist == NULL)) return 0; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return 0; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return 0; if (mmguicorelc->device == NULL) return 0; //if (!mmguicorelc->device->enabled) return 0; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT)) return 0; error = NULL; contacts = g_dbus_proxy_call_sync(moduledata->contactsproxy, "Import", NULL, 0, -1, NULL, &error); if ((contacts == NULL) && (error != NULL)) { mmgui_module_handle_error_message(mmguicorelc, error); g_error_free(error); return 0; } contactsnum = 0; /*Get vcard string*/ contpayload = g_variant_get_child_value(contacts, 0); if (contpayload != NULL) { /*Convert to string*/ vcardstrlen = 16384; vcardstr = g_variant_get_string(contpayload, &vcardstrlen); if ((vcardstr != NULL) && (vcardstr[0] != '\0')) { /*Enumerate contacts*/ contactsnum = vcard_parse_string(vcardstr, contactslist, "SIM"); } /*Free resources*/ g_variant_unref(contpayload); } g_variant_unref(contacts); return contactsnum; } G_MODULE_EXPORT gboolean mmgui_module_contacts_delete(gpointer mmguicore, guint index) { mmguicore_t mmguicorelc; moduledata_t moduledata; if (mmguicore == NULL) return FALSE; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return FALSE; moduledata = (moduledata_t)mmguicorelc->moduledata; if (moduledata->contactsproxy == NULL) return FALSE; if (mmguicorelc->device == NULL) return FALSE; if (!mmguicorelc->device->enabled) return FALSE; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return FALSE; /*oFono can only export contacts, so do nothing here*/ return TRUE; } G_MODULE_EXPORT gint mmgui_module_contacts_add(gpointer mmguicore, mmgui_contact_t contact) { mmguicore_t mmguicorelc; moduledata_t moduledata; if ((mmguicore == NULL) || (contact == NULL)) return -1; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc->moduledata == NULL) return -1; moduledata = (moduledata_t)mmguicorelc->moduledata; if ((contact->name == NULL) || (contact->number == NULL)) return -1; if (moduledata->contactsproxy == NULL) return -1; if (mmguicorelc->device == NULL) return -1; if (!mmguicorelc->device->enabled) return -1; if (!(mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return -1; /*oFono can only export contacts, so do nothing here*/ return 0; } modem-manager-gui-0.0.19.1/appdata/modem-manager-gui.appdata.xml.in000664 001750 001750 00000005500 13261703575 024637 0ustar00alexalex000000 000000 modem-manager-gui.desktop CC0-1.0 GPL-3.0+ and CC0-1.0 Modem Manager GUI Alex alex@linuxonly.ru modem-manager-gui Control EDGE/3G/4G broadband modem specific functions

Simple graphical interface compatible with Modem manager, Wader and oFono system services able to control EDGE/3G/4G broadband modem specific functions.

You can check balance of your SIM card, send or receive SMS messages, control mobile traffic consuption and more using Modem Manager GUI.

Current features:

  • Create and control mobile broadband connections
  • Send and receive SMS messages and store messages in database
  • Initiate USSD requests and read answers (also using interactive sessions)
  • View device information: operator name, device mode, IMEI, IMSI, signal level
  • Scan available mobile networks
  • View mobile traffic statistics and set limits

Please note that some features may be not available due to limitations of different system services or even different versions of system service in use.

modem-manager-gui modem-manager-gui.desktop Broadband devices overview http://download.tuxfamily.org/gsf/appdata/mmgui-devices.png SMS messages list http://download.tuxfamily.org/gsf/appdata/mmgui-sms.png Traffic control http://download.tuxfamily.org/gsf/appdata/mmgui-traffic.png http://linuxonly.ru/page/modem-manager-gui https://linuxonly.ru/forum/modem-manager-gui https://www.transifex.com/projects/p/modem-manager-gui https://linuxonly.ru/page/donate GTK System Utility Network TelephonyTools AppMenu Notifications ModernToolkit UserDocs
modem-manager-gui-0.0.19.1/help/LINGUAS000664 001750 001750 00000000062 13261703575 017145 0ustar00alexalex000000 000000 ar bn_BD de fr id pl pl_PL ru tr uk uz@Latn zh_CN modem-manager-gui-0.0.19.1/src/libpaths.c000664 001750 001750 00000045575 13261703575 017753 0ustar00alexalex000000 000000 /* * libpaths.c * * Copyright 2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include "libpaths.h" #define MMGUI_LIBPATHS_CACHE_FILE "/etc/ld.so.cache" #define MMGUI_LIBPATHS_CACHE_PATH_TEMP "/usr/lib/%s.so" #define MMGUI_LIBPATHS_LIB_PATH_TEMP_MMR "%s/%s.so.%i.%i.%i" #define MMGUI_LIBPATHS_LIB_PATH_TEMP_MM "%s/%s.so.%i.%i" #define MMGUI_LIBPATHS_LIB_PATH_TEMP_M "%s/%s.so.%i" #define MMGUI_LIBPATHS_LIB_PATH_TEMP "%s/%s.so" /*Cache file*/ #define MMGUI_LIBPATHS_LOCAL_CACHE_XDG ".cache" #define MMGUI_LIBPATHS_LOCAL_CACHE_DIR "modem-manager-gui" #define MMGUI_LIBPATHS_LOCAL_CACHE_FILE "libpaths.conf" #define MMGUI_LIBPATHS_LOCAL_CACHE_PERM 0755 #define MMGUI_LIBPATHS_LOCAL_CACHE_VER 3 /*Cache file sections*/ #define MMGUI_LIBPATHS_FILE_ROOT_SECTION "cache" #define MMGUI_LIBPATHS_FILE_TIMESTAMP "timestamp" #define MMGUI_LIBPATHS_FILE_VERSION "version" #define MMGUI_LIBPATHS_FILE_PATH "path" #define MMGUI_LIBPATHS_FILE_MAJOR_VER "majorver" #define MMGUI_LIBPATHS_FILE_MINOR_VER "minorver" #define MMGUI_LIBPATHS_FILE_RELEASE_VER "releasever" struct _mmgui_libpaths_entry { gchar *id; gchar *libpath; gint majorver; gint minorver; gint releasever; }; typedef struct _mmgui_libpaths_entry *mmgui_libpaths_entry_t; static gboolean mmgui_libpaths_cache_open_local_cache_file(mmgui_libpaths_cache_t libcache, guint64 dbtimestamp) { const gchar *homepath; gchar *confpath; guint64 localtimestamp; gint filever; GError *error; if (libcache == NULL) return FALSE; homepath = g_get_home_dir(); if (homepath == NULL) return FALSE; confpath = g_build_filename(homepath, MMGUI_LIBPATHS_LOCAL_CACHE_XDG, MMGUI_LIBPATHS_LOCAL_CACHE_DIR, NULL); if (g_mkdir_with_parents(confpath, MMGUI_LIBPATHS_LOCAL_CACHE_PERM) != 0) { g_debug("No write access to program settings directory"); g_free(confpath); return FALSE; } g_free(confpath); libcache->localfilename = g_build_filename(homepath, MMGUI_LIBPATHS_LOCAL_CACHE_XDG, MMGUI_LIBPATHS_LOCAL_CACHE_DIR, MMGUI_LIBPATHS_LOCAL_CACHE_FILE, NULL); libcache->localkeyfile = g_key_file_new(); error = NULL; if (!g_key_file_load_from_file(libcache->localkeyfile, libcache->localfilename, G_KEY_FILE_NONE, &error)) { libcache->updatelocal = TRUE; g_debug("Local cache file loading error: %s", error->message); g_error_free(error); } else { error = NULL; if (g_key_file_has_key(libcache->localkeyfile, MMGUI_LIBPATHS_FILE_ROOT_SECTION, MMGUI_LIBPATHS_FILE_TIMESTAMP, &error)) { error = NULL; localtimestamp = g_key_file_get_uint64(libcache->localkeyfile, MMGUI_LIBPATHS_FILE_ROOT_SECTION, MMGUI_LIBPATHS_FILE_TIMESTAMP, &error); if (error == NULL) { if (localtimestamp == dbtimestamp) { /*Timestamp is up to date - check version*/ filever = g_key_file_get_integer(libcache->localkeyfile, MMGUI_LIBPATHS_FILE_ROOT_SECTION, MMGUI_LIBPATHS_FILE_VERSION, &error); if (error == NULL) { if (filever >= MMGUI_LIBPATHS_LOCAL_CACHE_VER) { /*Acceptable version of file*/ libcache->updatelocal = FALSE; } else { /*Old version of file*/ libcache->updatelocal = TRUE; } } else { /*Unknown version of file*/ libcache->updatelocal = TRUE; g_debug("Local cache contain unreadable version identifier: %s", error->message); g_error_free(error); } } else { /*Wrong timestamp*/ libcache->updatelocal = TRUE; } } else { /*Unknown timestamp*/ libcache->updatelocal = TRUE; g_debug("Local cache contain unreadable timestamp: %s", error->message); g_error_free(error); } } else { libcache->updatelocal = TRUE; g_debug("Local cache does not contain timestamp: %s", error->message); g_error_free(error); } } return !libcache->updatelocal; } static gboolean mmgui_libpaths_cache_close_local_cache_file(mmgui_libpaths_cache_t libcache, gboolean update) { gchar *filedata; gsize datasize; GError *error; if (libcache == NULL) return FALSE; if ((libcache->localfilename == NULL) || (libcache->localkeyfile == NULL)) return FALSE; if (update) { /*Save timestamp*/ g_key_file_set_int64(libcache->localkeyfile, MMGUI_LIBPATHS_FILE_ROOT_SECTION, MMGUI_LIBPATHS_FILE_TIMESTAMP, (gint64)libcache->modtime); /*Save version of file*/ g_key_file_set_integer(libcache->localkeyfile, MMGUI_LIBPATHS_FILE_ROOT_SECTION, MMGUI_LIBPATHS_FILE_VERSION, MMGUI_LIBPATHS_LOCAL_CACHE_VER); /*Write to file*/ error = NULL; filedata = g_key_file_to_data(libcache->localkeyfile, &datasize, &error); if (filedata != NULL) { if (!g_file_set_contents(libcache->localfilename, filedata, datasize, &error)) { g_debug("No data saved to local cache file file: %s", error->message); g_error_free(error); } } g_free(filedata); } /*Free resources*/ g_free(libcache->localfilename); g_key_file_free(libcache->localkeyfile); return TRUE; } static gboolean mmgui_libpaths_cache_add_to_local_cache_file(mmgui_libpaths_cache_t libcache, mmgui_libpaths_entry_t cachedlib) { if ((libcache == NULL) || (cachedlib == NULL)) return FALSE; if ((libcache->updatelocal) && (libcache->localkeyfile != NULL)) { if (cachedlib->id != NULL) { /*Library path*/ if (cachedlib->libpath != NULL) { g_key_file_set_string(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_PATH, cachedlib->libpath); } /*Library major version*/ g_key_file_set_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MAJOR_VER, cachedlib->majorver); /*Library minor version*/ g_key_file_set_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MINOR_VER, cachedlib->minorver); /*Library release version*/ g_key_file_set_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_RELEASE_VER, cachedlib->releasever); } } return TRUE; } static gboolean mmgui_libpaths_cache_get_from_local_cache_file(mmgui_libpaths_cache_t libcache, mmgui_libpaths_entry_t cachedlib) { GError *error; if ((libcache == NULL) || (cachedlib == NULL)) return FALSE; if ((!libcache->updatelocal) && (libcache->localkeyfile != NULL)) { if (cachedlib->id != NULL) { /*Library path*/ error = NULL; if (g_key_file_has_key(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_PATH, &error)) { error = NULL; cachedlib->libpath = g_key_file_get_string(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_PATH, &error); if (error != NULL) { g_debug("Local cache contain unreadable library path: %s", error->message); g_error_free(error); } } else { cachedlib->libpath = NULL; if (error != NULL) { g_debug("Local cache does not contain library path: %s", error->message); g_error_free(error); } } /*Library major version*/ error = NULL; if (g_key_file_has_key(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MAJOR_VER, &error)) { error = NULL; cachedlib->majorver = g_key_file_get_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MAJOR_VER, &error); if (error != NULL) { g_debug("Local cache contain unreadable library major version: %s", error->message); g_error_free(error); } } else { cachedlib->majorver = -1; if (error != NULL) { g_debug("Local cache does not contain library major version: %s", error->message); g_error_free(error); } } /*Library minor version*/ error = NULL; if (g_key_file_has_key(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MINOR_VER, &error)) { error = NULL; cachedlib->minorver = g_key_file_get_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_MINOR_VER, &error); if (error != NULL) { g_debug("Local cache contain unreadable library minor version: %s", error->message); g_error_free(error); } } else { cachedlib->minorver = -1; if (error != NULL) { g_debug("Local cache does not contain library minor version: %s", error->message); g_error_free(error); } } /*Library release version*/ error = NULL; if (g_key_file_has_key(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_RELEASE_VER, &error)) { error = NULL; cachedlib->releasever = g_key_file_get_integer(libcache->localkeyfile, cachedlib->id, MMGUI_LIBPATHS_FILE_RELEASE_VER, &error); if (error != NULL) { g_debug("Local cache contain unreadable library major version: %s", error->message); g_error_free(error); } } else { cachedlib->releasever = -1; if (error != NULL) { g_debug("Local cache does not contain library major version: %s", error->message); g_error_free(error); } } } } return TRUE; } static void mmgui_libpaths_cache_destroy_entry(gpointer data) { mmgui_libpaths_entry_t cachedlib; cachedlib = (mmgui_libpaths_entry_t)data; if (cachedlib == NULL) return; if (cachedlib->id != NULL) { g_free(cachedlib->id); } if (cachedlib->libpath != NULL) { g_free(cachedlib->libpath); } cachedlib->majorver = -1; cachedlib->minorver = -1; cachedlib->releasever = -1; g_free(cachedlib); } static gboolean mmgui_libpaths_cache_get_entry(mmgui_libpaths_cache_t libcache, const gchar *libpath) { mmgui_libpaths_entry_t cachedlib; const gchar versep[2] = "."; gchar *pathendptr; gchar *path; gchar *linktarget; gchar *soextptr; gchar *name; gchar *verptr; gchar *version; gchar *token; gint *verarray[3]; gint i; gboolean mustbecached; if ((libcache == NULL) || (libpath == NULL)) return FALSE; pathendptr = strrchr(libpath, '/'); if (pathendptr == NULL) { return FALSE; } path = g_malloc0(pathendptr - libpath + 1); strncpy(path, libpath, pathendptr - libpath); linktarget = NULL; if (g_file_test(libpath, G_FILE_TEST_IS_SYMLINK)) { linktarget = g_file_read_link(libpath, NULL); } if (linktarget != NULL) { soextptr = strstr(linktarget, ".so"); } else { soextptr = strstr(libpath, ".so"); } if (soextptr == NULL) { if (linktarget != NULL) { g_free(linktarget); } g_free(path); return FALSE; } if (linktarget != NULL) { name = g_malloc0(soextptr - linktarget + 1); strncpy(name, linktarget, soextptr - linktarget); } else { name = g_malloc0(soextptr - pathendptr); strncpy(name, pathendptr + 1, soextptr - pathendptr - 1); } cachedlib = (mmgui_libpaths_entry_t)g_hash_table_lookup(libcache->cache, name); if (cachedlib == NULL) { if (linktarget != NULL) { g_free(linktarget); } g_free(path); g_free(name); return FALSE; } g_free(name); mustbecached = FALSE; if (cachedlib->libpath == NULL) { cachedlib->libpath = path; mustbecached = TRUE; } else { g_free(path); } verptr = strchr(soextptr + 1, '.'); if (verptr != NULL) { version = g_strdup(verptr + 1); token = strtok(version, versep); verarray[0] = &cachedlib->majorver; verarray[1] = &cachedlib->minorver; verarray[2] = &cachedlib->releasever; i = 0; while ((token != NULL) && (i < sizeof(verarray)/sizeof(int *))) { *(verarray[i]) = atoi(token); token = strtok(NULL, versep); i++; } g_free(version); mustbecached = TRUE; } if (linktarget != NULL) { g_free(linktarget); } if (mustbecached) { mmgui_libpaths_cache_add_to_local_cache_file(libcache, cachedlib); } return TRUE; } static guint mmgui_libpaths_cache_parse_db(mmgui_libpaths_cache_t libcache) { guint ptr, start, end, entry, entries; /*gchar *entryhash, *entryname, *entryext;*/ if (libcache == NULL) return 0; /*Cache file must be terminated with value 0x00*/ if (libcache->mapping[libcache->mapsize-1] != 0x00) { g_debug("Cache file seems to be non-valid\n"); return 0; } start = 0; end = libcache->mapsize-1; entries = 0; entry = 0; for (ptr = libcache->mapsize-1; ptr > 0; ptr--) { if (libcache->mapping[ptr] == 0x00) { /*String separator - value 0x00*/ if ((end - ptr) == 1) { /*Termination sequence - two values 0x00 0x00*/ if (start < end) { if (libcache->mapping[start] == '/') { mmgui_libpaths_cache_get_entry(libcache, libcache->mapping+start); entries++; } entry++; } break; } else { /*Regular cache entry*/ if (start < end) { if (libcache->mapping[start] == '/') { mmgui_libpaths_cache_get_entry(libcache, libcache->mapping+start); entries++; } entry++; } /*Set end pointer to string end*/ end = ptr; } } else if (isprint(libcache->mapping[ptr])) { /*Move start pointer because this value is print symbol*/ start = ptr; } } return entries; } mmgui_libpaths_cache_t mmgui_libpaths_cache_new(gchar *libname, ...) { va_list libnames; gchar *currentlib; struct stat statbuf; gboolean localcopy; mmgui_libpaths_cache_t libcache; mmgui_libpaths_entry_t cachedlib; if (libname == NULL) return NULL; libcache = (mmgui_libpaths_cache_t)g_new0(struct _mmgui_libpaths_cache, 1); if (stat(MMGUI_LIBPATHS_CACHE_FILE, &statbuf) == -1) { g_debug("Failed to get library paths cache file size\n"); g_free(libcache); return NULL; } libcache->modtime = statbuf.st_mtime; localcopy = mmgui_libpaths_cache_open_local_cache_file(libcache, (guint64)libcache->modtime); if (!localcopy) { /*Open system cache*/ libcache->fd = open(MMGUI_LIBPATHS_CACHE_FILE, O_RDONLY); if (libcache->fd == -1) { g_debug("Failed to open library paths cache file\n"); mmgui_libpaths_cache_close_local_cache_file(libcache, FALSE); g_free(libcache); return NULL; } /*Memory mapping size*/ libcache->mapsize = (size_t)statbuf.st_size; if (libcache->mapsize == 0) { g_debug("Failed to map empty library paths cache file\n"); mmgui_libpaths_cache_close_local_cache_file(libcache, FALSE); close(libcache->fd); g_free(libcache); return NULL; } /*Map file into memory*/ libcache->mapping = mmap(NULL, libcache->mapsize, PROT_READ, MAP_PRIVATE, libcache->fd, 0); if (libcache->mapping == MAP_FAILED) { g_debug("Failed to map library paths cache file into memory\n"); mmgui_libpaths_cache_close_local_cache_file(libcache, FALSE); close(libcache->fd); g_free(libcache); return NULL; } } /*When no entry found in cache, form safe name adding .so extension*/ libcache->safename = NULL; /*Cache for requested libraries*/ libcache->cache = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, (GDestroyNotify)mmgui_libpaths_cache_destroy_entry); va_start(libnames, libname); /*Dont forget about first library name*/ currentlib = libname; do { /*Allocate structure*/ cachedlib = (mmgui_libpaths_entry_t)g_new0(struct _mmgui_libpaths_entry, 1); cachedlib->id = g_strdup(currentlib); cachedlib->libpath = NULL; cachedlib->majorver = -1; cachedlib->minorver = -1; cachedlib->releasever = -1; g_hash_table_insert(libcache->cache, cachedlib->id, cachedlib); /*If available, get from local cache*/ if (localcopy) { mmgui_libpaths_cache_get_from_local_cache_file(libcache, cachedlib); } /*Next library name*/ currentlib = va_arg(libnames, gchar *); } while (currentlib != NULL); va_end(libnames); if (!localcopy) { /*Parse system database*/ mmgui_libpaths_cache_parse_db(libcache); /*Save local cache*/ mmgui_libpaths_cache_close_local_cache_file(libcache, TRUE); } else { /*Close used cache file*/ mmgui_libpaths_cache_close_local_cache_file(libcache, FALSE); } return libcache; } void mmgui_libpaths_cache_close(mmgui_libpaths_cache_t libcache) { if (libcache == NULL) return; if (libcache->safename != NULL) { g_free(libcache->safename); } g_hash_table_destroy(libcache->cache); munmap(libcache->mapping, libcache->mapsize); g_free(libcache); } gchar *mmgui_libpaths_cache_get_library_full_path(mmgui_libpaths_cache_t libcache, gchar *libname) { mmgui_libpaths_entry_t cachedlib; if ((libcache == NULL) || (libname == NULL)) return NULL; cachedlib = (mmgui_libpaths_entry_t)g_hash_table_lookup(libcache->cache, libname); if (cachedlib != NULL) { if (cachedlib->libpath != NULL) { /*Safe library path*/ if (libcache->safename != NULL) { g_free(libcache->safename); } /*Handle version variations*/ if ((cachedlib->majorver != -1) && (cachedlib->minorver != -1) && (cachedlib->releasever != -1)) { libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_LIB_PATH_TEMP_MMR, cachedlib->libpath, libname, cachedlib->majorver, cachedlib->minorver, cachedlib->releasever); } else if ((cachedlib->majorver != -1) && (cachedlib->minorver != -1)) { libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_LIB_PATH_TEMP_MM, cachedlib->libpath, libname, cachedlib->majorver, cachedlib->minorver); } else if (cachedlib->majorver != -1) { libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_LIB_PATH_TEMP_M, cachedlib->libpath, libname, cachedlib->majorver); } else { libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_LIB_PATH_TEMP, cachedlib->libpath, libname); } return libcache->safename; } else { /*Safe library path*/ if (libcache->safename != NULL) { g_free(libcache->safename); } libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_CACHE_PATH_TEMP, libname); return libcache->safename; } } else { /*Safe library path*/ if (libcache->safename != NULL) { g_free(libcache->safename); } libcache->safename = g_strdup_printf(MMGUI_LIBPATHS_CACHE_PATH_TEMP, libname); return libcache->safename; } } gboolean mmgui_libpaths_cache_check_library_version(mmgui_libpaths_cache_t libcache, gchar *libname, gint major, gint minor, gint release) { mmgui_libpaths_entry_t cachedlib; gboolean compatiblever; if ((libcache == NULL) || (libname == NULL) || (major == -1)) return FALSE; cachedlib = (mmgui_libpaths_entry_t)g_hash_table_lookup(libcache->cache, libname); if (cachedlib == NULL) return FALSE; if (cachedlib->majorver == -1) return FALSE; compatiblever = (cachedlib->majorver >= major); if ((cachedlib->majorver == major) && (minor != -1) && (cachedlib->minorver != -1)) { compatiblever = compatiblever && (cachedlib->minorver >= minor); if ((cachedlib->minorver == minor) && (release != -1) && (cachedlib->releasever != -1)) { compatiblever = compatiblever && (cachedlib->releasever >= release); } } return compatiblever; } modem-manager-gui-0.0.19.1/man/Makefile000664 001750 001750 00000002225 13261703575 017406 0ustar00alexalex000000 000000 include ../Makefile_h CMANDIR = $(PREFIX)/share/man/man1 LMANDIR = $(PREFIX)/share/man all: while read lang; do \ po4a-translate -f man -m modem-manager-gui.1 -p $$lang/$$lang.po -l $$lang/modem-manager-gui.1 -k 1; \ done < LINGUAS install: install -d $(INSTALLPREFIX)$(DESTDIR)$(CMANDIR) cp modem-manager-gui.1 $(INSTALLPREFIX)$(DESTDIR)$(CMANDIR) gzip -f --best $(INSTALLPREFIX)$(DESTDIR)$(CMANDIR)/modem-manager-gui.1 while read lang; do \ install -d $(INSTALLPREFIX)$(DESTDIR)$(LMANDIR)/$$lang/man1; \ cp $$lang/modem-manager-gui.1 $(INSTALLPREFIX)$(DESTDIR)$(LMANDIR)/$$lang/man1; \ gzip -f --best $(INSTALLPREFIX)$(DESTDIR)$(LMANDIR)/$$lang/man1/modem-manager-gui.1; \ done < LINGUAS uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(CMANDIR)/modem-manager-gui.1.gz while read lang; do \ rm -f $(INSTALLPREFIX)$(DESTDIR)$(LMANDIR)/$$lang/man1/modem-manager-gui.1.gz; \ done < LINGUAS messages: po4a-gettextize -f man -m modem-manager-gui.1 -p modem-manager-gui.pot while read lang; do \ msgmerge -U $$lang/$$lang.po modem-manager-gui.pot; \ done < LINGUAS clean: while read lang; do \ rm -f $$lang/modem-manager-gui.1; \ done < LINGUAS modem-manager-gui-0.0.19.1/src/mmguicore.h000664 001750 001750 00000056511 13261703575 020131 0ustar00alexalex000000 000000 /* * mmguicore.h * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __MMGUICORE_H__ #define __MMGUICORE_H__ #include #include #include #include "netlink.h" #include "polkit.h" #include "svcmanager.h" #include "smsdb.h" #define MMGUI_SPEED_VALUES_NUMBER 20 #define MMGUI_THREAD_SLEEP_PERIOD 1 /*seconds*/ enum _mmgui_event { /*Device events*/ MMGUI_EVENT_DEVICE_ADDED = 0, MMGUI_EVENT_DEVICE_REMOVED, MMGUI_EVENT_DEVICE_OPENED, MMGUI_EVENT_DEVICE_CLOSING, MMGUI_EVENT_DEVICE_ENABLED_STATUS, MMGUI_EVENT_DEVICE_BLOCKED_STATUS, MMGUI_EVENT_DEVICE_PREPARED_STATUS, MMGUI_EVENT_DEVICE_CONNECTION_STATUS, /*Messaging events*/ MMGUI_EVENT_SMS_LIST_READY, MMGUI_EVENT_SMS_COMPLETED, MMGUI_EVENT_SMS_SENT, MMGUI_EVENT_SMS_REMOVED, MMGUI_EVENT_SMS_NEW_DAY, /*Network events*/ MMGUI_EVENT_SIGNAL_LEVEL_CHANGE, MMGUI_EVENT_NETWORK_MODE_CHANGE, MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE, MMGUI_EVENT_LOCATION_CHANGE, /*Modem events*/ MMGUI_EVENT_MODEM_ENABLE_RESULT, MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT, MMGUI_EVENT_MODEM_CONNECTION_RESULT, MMGUI_EVENT_SCAN_RESULT, MMGUI_EVENT_USSD_RESULT, MMGUI_EVENT_NET_STATUS, MMGUI_EVENT_TRAFFIC_LIMIT, MMGUI_EVENT_TIME_LIMIT, MMGUI_EVENT_UPDATE_CONNECTIONS_LIST, /*Special-purpose events*/ MMGUI_EVENT_EXTEND_CAPABILITIES, MMGUI_EVENT_SERVICE_ACTIVATION_STARTED, MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_CHANGED, MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ACTIVATED, MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ERROR, MMGUI_EVENT_SERVICE_ACTIVATION_FINISHED, MMGUI_EVENT_SERVICE_ACTIVATION_AUTH_ERROR, MMGUI_EVENT_SERVICE_ACTIVATION_STARTUP_ERROR, MMGUI_EVENT_SERVICE_ACTIVATION_OTHER_ERROR, /*System addressbooks export*/ MMGUI_EVENT_ADDRESS_BOOKS_EXPORT_FINISHED }; /*External event callback*/ typedef void (*mmgui_event_ext_callback)(enum _mmgui_event event, gpointer mmguicore, gpointer data, gpointer userdata); /*Internal event callback*/ typedef void (*mmgui_event_int_callback)(enum _mmgui_event event, gpointer mmguicore, gpointer data); enum _mmgui_module_priority { /*module priority levels*/ MMGUI_MODULE_PRIORITY_LOW = 0, MMGUI_MODULE_PRIORITY_NORMAL = 1, MMGUI_MODULE_PRIORITY_RECOMMENDED = 2 }; enum _mmgui_module_type { /*module types*/ MMGUI_MODULE_TYPE_MODEM_MANAGER = 0, MMGUI_MODULE_TYPE_CONNECTION_MANGER = 1 }; enum _mmgui_module_functions { /*module functions bitmask*/ MMGUI_MODULE_FUNCTION_BASIC = 0, MMGUI_MODULE_FUNCTION_POLKIT_PROTECTION = 1 << 0 }; enum _mmgui_module_requirement { /*module requirements*/ MMGUI_MODULE_REQUIREMENT_SERVICE = 0x00, MMGUI_MODULE_REQUIREMENT_FILE, MMGUI_MODULE_REQUIREMENT_NONE }; struct _mmguimodule { /*Module description*/ guint identifier; gboolean applicable; gboolean recommended; gint type; gint requirement; gint priority; gint functions; gint activationtech; gchar servicename[256]; gchar systemdname[256]; gchar description[256]; gchar compatibility[256]; gchar filename[256]; gchar shortname[256]; }; typedef struct _mmguimodule *mmguimodule_t; enum _mmgui_device_types { MMGUI_DEVICE_TYPE_GSM = 1, MMGUI_DEVICE_TYPE_CDMA }; enum _mmgui_device_modes { MMGUI_DEVICE_MODE_UNKNOWN = 0, MMGUI_DEVICE_MODE_GSM, MMGUI_DEVICE_MODE_GSM_COMPACT, MMGUI_DEVICE_MODE_GPRS, MMGUI_DEVICE_MODE_EDGE, MMGUI_DEVICE_MODE_UMTS, MMGUI_DEVICE_MODE_HSDPA, MMGUI_DEVICE_MODE_HSUPA, MMGUI_DEVICE_MODE_HSPA, MMGUI_DEVICE_MODE_HSPA_PLUS, MMGUI_DEVICE_MODE_1XRTT, MMGUI_DEVICE_MODE_EVDO0, MMGUI_DEVICE_MODE_EVDOA, MMGUI_DEVICE_MODE_EVDOB, MMGUI_DEVICE_MODE_LTE }; enum _mmgui_network_availability { MMGUI_NA_UNKNOWN = 0, MMGUI_NA_AVAILABLE, MMGUI_NA_CURRENT, MMGUI_NA_FORBIDDEN }; enum _mmgui_access_tech { MMGUI_ACCESS_TECH_GSM = 0, MMGUI_ACCESS_TECH_GSM_COMPACT, MMGUI_ACCESS_TECH_UMTS, MMGUI_ACCESS_TECH_EDGE, MMGUI_ACCESS_TECH_HSDPA, MMGUI_ACCESS_TECH_HSUPA, MMGUI_ACCESS_TECH_HSPA, MMGUI_ACCESS_TECH_HSPA_PLUS, MMGUI_ACCESS_TECH_1XRTT, MMGUI_ACCESS_TECH_EVDO0, MMGUI_ACCESS_TECH_EVDOA, MMGUI_ACCESS_TECH_EVDOB, MMGUI_ACCESS_TECH_LTE, MMGUI_ACCESS_TECH_UNKNOWN }; enum _mmgui_ussd_encoding { MMGUI_USSD_ENCODING_GSM7 = 0, MMGUI_USSD_ENCODING_UCS2 }; enum _mmgui_reg_status { MMGUI_REG_STATUS_IDLE = 0, MMGUI_REG_STATUS_HOME, MMGUI_REG_STATUS_SEARCHING, MMGUI_REG_STATUS_DENIED, MMGUI_REG_STATUS_UNKNOWN, MMGUI_REG_STATUS_ROAMING }; enum _mmgui_device_state { MMGUI_DEVICE_STATE_UNKNOWN = 0, MMGUI_DEVICE_STATE_DISABLED = 10, MMGUI_DEVICE_STATE_DISABLING = 20, MMGUI_DEVICE_STATE_ENABLING = 30, MMGUI_DEVICE_STATE_ENABLED = 40, MMGUI_DEVICE_STATE_SEARCHING = 50, MMGUI_DEVICE_STATE_REGISTERED = 60, MMGUI_DEVICE_STATE_DISCONNECTING = 70, MMGUI_DEVICE_STATE_CONNECTING = 80, MMGUI_DEVICE_STATE_CONNECTED = 90 }; enum _mmgui_lock_type { MMGUI_LOCK_TYPE_NONE = 0, MMGUI_LOCK_TYPE_PIN, MMGUI_LOCK_TYPE_PUK, MMGUI_LOCK_TYPE_OTHER }; enum _mmgui_ussd_state { MMGUI_USSD_STATE_UNKNOWN = 0, MMGUI_USSD_STATE_IDLE, MMGUI_USSD_STATE_ACTIVE, MMGUI_USSD_STATE_USER_RESPONSE }; enum _mmgui_ussd_validation { MMGUI_USSD_VALIDATION_INVALID = 0, MMGUI_USSD_VALIDATION_REQUEST, MMGUI_USSD_VALIDATION_RESPONSE }; enum _mmgui_contacts_storage { MMGUI_CONTACTS_STORAGE_UNKNOWN = 0, MMGUI_MODEM_CONTACTS_STORAGE_ME = 1, MMGUI_MODEM_CONTACTS_STORAGE_SM = 2, MMGUI_MODEM_CONTACTS_STORAGE_MT = 3, }; /*Capbilities specifications*/ enum _mmgui_capabilities { MMGUI_CAPS_NONE = 0, MMGUI_CAPS_SMS = 1 << 1, MMGUI_CAPS_USSD = 1 << 2, MMGUI_CAPS_LOCATION = 1 << 3, MMGUI_CAPS_SCAN = 1 << 4, MMGUI_CAPS_CONTACTS = 1 << 5, MMGUI_CAPS_CONNECTIONS = 1 << 6 }; enum _mmgui_sms_capabilities { MMGUI_SMS_CAPS_NONE = 0, MMGUI_SMS_CAPS_RECEIVE = 1 << 1, MMGUI_SMS_CAPS_SEND = 1 << 2, MMGUI_SMS_CAPS_RECEIVE_BROADCAST = 1 << 3 }; enum _mmgui_ussd_capabilities { MMGUI_USSD_CAPS_NONE = 0, MMGUI_USSD_CAPS_SEND = 1 << 1 }; enum _mmgui_location_capabilities { MMGUI_LOCATION_CAPS_NONE = 0, MMGUI_LOCATION_CAPS_3GPP = 1 << 1, MMGUI_LOCATION_CAPS_GPS = 1 << 2 }; enum _mmgui_scan_capabilities { MMGUI_SCAN_CAPS_NONE = 0, MMGUI_SCAN_CAPS_OBSERVE = 1 << 1 }; enum _mmgui_contacts_capabilities { MMGUI_CONTACTS_CAPS_NONE = 0, MMGUI_CONTACTS_CAPS_EXPORT = 1 << 1, MMGUI_CONTACTS_CAPS_EDIT = 1 << 2, MMGUI_CONTACTS_CAPS_EXTENDED = 1 << 3 }; enum _mmgui_connection_manager_caps { MMGUI_CONNECTION_MANAGER_CAPS_BASIC = 0, MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT = 1 << 1, MMGUI_CONNECTION_MANAGER_CAPS_MONITORING = 1 << 2 }; enum _mmgui_device_operation { MMGUI_DEVICE_OPERATION_IDLE = 0, MMGUI_DEVICE_OPERATION_ENABLE, MMGUI_DEVICE_OPERATION_UNLOCK, MMGUI_DEVICE_OPERATION_SEND_SMS, MMGUI_DEVICE_OPERATION_SEND_USSD, MMGUI_DEVICE_OPERATION_SCAN, MMGUI_DEVICE_OPERATIONS }; enum _mmgui_device_state_request { MMGUI_DEVICE_STATE_REQUEST_ENABLED = 0, MMGUI_DEVICE_STATE_REQUEST_LOCKED, MMGUI_DEVICE_STATE_REQUEST_REGISTERED, MMGUI_DEVICE_STATE_REQUEST_CONNECTED, MMGUI_DEVICE_STATE_REQUEST_PREPARED }; enum _mmgui_event_action { MMGUI_EVENT_ACTION_NOTHING = 0, MMGUI_EVENT_ACTION_DISCONNECT }; struct _mmgui_scanned_network { enum _mmgui_network_availability status; enum _mmgui_access_tech access_tech; guint operator_num; gchar *operator_long; gchar *operator_short; }; typedef struct _mmgui_scanned_network *mmgui_scanned_network_t; struct _mmgui_contact { guint id; /*Internal private number*/ gchar *name; /*Full name of the contact*/ gchar *number; /*Telephone number*/ gchar *email; /*Email address*/ gchar *group; /*Group this contact belongs to*/ gchar *name2; /*Additional contact name*/ gchar *number2; /*Additional contact telephone number*/ gboolean hidden; /*Boolean flag to specify whether this entry is hidden or not*/ guint storage; /*Phonebook in which the contact is stored*/ }; typedef struct _mmgui_contact *mmgui_contact_t; struct _mmgui_traffic_stats { gint64 rxbytes; gint64 rxpackets; gint64 rxerrs; gint64 rxdrop; gint64 rxfifo; gint64 rxframe; gint64 rxcompressed; gint64 rxmulticast; gint64 txbytes; gint64 txpackets; gint64 txerrs; gint64 txdrop; gint64 txfifo; gint64 txcolls; gint64 txcarrier; gint64 txcompressed; }; typedef struct _mmgui_traffic_stats *mmgui_traffic_stats_t; struct _mmgui_core_options { /*Preferred modules*/ gchar *mmmodule; gchar *cmmodule; gboolean enableservices; /*Timeouts*/ gint enabletimeout; gint sendsmstimeout; gint sendussdtimeout; gint scannetworkstimeout; /*Traffic limits*/ gboolean trafficenabled; gboolean trafficexecuted; guint trafficamount; guint trafficunits; guint64 trafficfull; gchar *trafficmessage; guint trafficaction; gboolean timeenabled; gboolean timeexecuted; guint timeamount; guint timeunits; guint64 timefull; gchar *timemessage; guint timeaction; }; typedef struct _mmgui_core_options *mmgui_core_options_t; struct _mmguidevice { guint id; /*State*/ gboolean enabled; gboolean blocked; gboolean registered; gboolean prepared; enum _mmgui_device_operation operation; enum _mmgui_lock_type locktype; gboolean conntransition; /*Info*/ gchar *manufacturer; gchar *model; gchar *version; gchar *port; gchar *internalid; gchar *persistentid; gchar *objectpath; gchar *sysfspath; enum _mmgui_device_types type; gchar *imei; gchar *imsi; gint operatorcode; /*mcc/mnc*/ gchar *operatorname; enum _mmgui_reg_status regstatus; guint allmode; enum _mmgui_device_modes mode; guint siglevel; /*Location*/ guint locationcaps; guint loc3gppdata[4]; /*mcc/mnc/lac/ci*/ gfloat locgpsdata[4]; /*latitude/longitude/altitude/time*/ /*SMS*/ guint smscaps; gpointer smsdb; /*USSD*/ guint ussdcaps; enum _mmgui_ussd_encoding ussdencoding; /*Scan*/ guint scancaps; /*Traffic*/ guint64 rxbytes; guint64 txbytes; guint64 sessiontime; time_t speedchecktime; time_t smschecktime; gfloat speedvalues[2][MMGUI_SPEED_VALUES_NUMBER]; guint speedindex; gboolean connected; gchar interface[IFNAMSIZ]; time_t sessionstarttime; gpointer trafficdb; /*Contacts*/ guint contactscaps; GSList *contactslist; }; typedef struct _mmguidevice *mmguidevice_t; struct _mmguiconn { gchar *uuid; gchar *name; gchar *number; gchar *username; gchar *password; gchar *apn; guint networkid; guint type; gboolean homeonly; gchar *dns1; gchar *dns2; }; typedef struct _mmguiconn *mmguiconn_t; /*Modem manager module functions*/ typedef gboolean (*mmgui_module_init_func)(mmguimodule_t module); typedef gboolean (*mmgui_module_open_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_close_func)(gpointer mmguicore); typedef gchar *(*mmgui_module_last_error_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_interrupt_operation_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_set_timeout_func)(gpointer mmguicore, guint operation, guint timeout); typedef guint (*mmgui_module_devices_enum_func)(gpointer mmguicore, GSList **devicelist); typedef gboolean (*mmgui_module_devices_open_func)(gpointer mmguicore, mmguidevice_t device); typedef gboolean (*mmgui_module_devices_close_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_devices_state_func)(gpointer mmguicore, enum _mmgui_device_state_request request); typedef gboolean (*mmgui_module_devices_update_state_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_devices_information_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_devices_enable_func)(gpointer mmguicore, gboolean enabled); typedef gboolean (*mmgui_module_devices_unlock_with_pin_func)(gpointer mmguicore, gchar *pin); typedef guint (*mmgui_module_sms_enum_func)(gpointer mmguicore, GSList **smslist); typedef mmgui_sms_message_t (*mmgui_module_sms_get_func)(gpointer mmguicore, guint index); typedef gboolean (*mmgui_module_sms_delete_func)(gpointer mmguicore, guint index); typedef gboolean (*mmgui_module_sms_send_func)(gpointer mmguicore, gchar* number, gchar *text, gint validity, gboolean report); typedef gboolean (*mmgui_module_ussd_cancel_session_func)(gpointer mmguicore); typedef enum _mmgui_ussd_state (*mmgui_module_ussd_get_state_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_ussd_send_func)(gpointer mmguicore, gchar *request, enum _mmgui_ussd_validation validationid, gboolean reencode); typedef gboolean (*mmgui_module_networks_scan_func)(gpointer mmguicore); typedef guint (*mmgui_module_contacts_enum_func)(gpointer mmguicore, GSList **contactslist); typedef gboolean (*mmgui_module_contacts_delete_func)(gpointer mmguicore, guint index); typedef gint (*mmgui_module_contacts_add_func)(gpointer mmguicore, mmgui_contact_t contact); /*Connection manager module functions*/ typedef gboolean (*mmgui_module_connection_open_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_connection_close_func)(gpointer mmguicore); typedef guint (*mmgui_module_connection_enum_func)(gpointer mmguicore, GSList **connlist); typedef mmguiconn_t (*mmgui_module_connection_add_func)(gpointer mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2); typedef mmguiconn_t (*mmgui_module_connection_update_func)(gpointer mmguicore, mmguiconn_t connection, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2); typedef gboolean (*mmgui_module_connection_remove_func)(gpointer mmguicore, mmguiconn_t connection); typedef gchar *(*mmgui_module_connection_last_error_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_device_connection_open_func)(gpointer mmguicore, mmguidevice_t device); typedef gboolean (*mmgui_module_device_connection_close_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_device_connection_status_func)(gpointer mmguicore); typedef guint64 (*mmgui_module_device_connection_timestamp_func)(gpointer mmguicore); typedef gchar *(*mmgui_module_device_connection_get_active_uuid_func)(gpointer mmguicore); typedef gboolean (*mmgui_module_device_connection_connect_func)(gpointer mmguicore, mmguiconn_t connection); typedef gboolean (*mmgui_module_device_connection_disconnect_func)(gpointer mmguicore); struct _mmguicore { /*Modules list*/ GSList *modules; GSList *modulepairs; /*Cache*/ gchar *cachefilename; GKeyFile *cachekeyfile; gboolean updatecache; time_t updcachetime; /*Modem manager module*/ GModule *module; gpointer moduledata; gpointer moduleptr; /*Connection manager module*/ GModule *cmodule; gpointer cmoduledata; gpointer cmoduleptr; /*Modem manager module functions*/ mmgui_module_open_func open_func; mmgui_module_close_func close_func; mmgui_module_last_error_func last_error_func; mmgui_module_interrupt_operation_func interrupt_operation_func; mmgui_module_set_timeout_func set_timeout_func; mmgui_module_devices_enum_func devices_enum_func; mmgui_module_devices_open_func devices_open_func; mmgui_module_devices_close_func devices_close_func; mmgui_module_devices_state_func devices_state_func; mmgui_module_devices_update_state_func devices_update_state_func; mmgui_module_devices_information_func devices_information_func; mmgui_module_devices_enable_func devices_enable_func; mmgui_module_devices_unlock_with_pin_func devices_unlock_with_pin_func; mmgui_module_sms_enum_func sms_enum_func; mmgui_module_sms_get_func sms_get_func; mmgui_module_sms_delete_func sms_delete_func; mmgui_module_sms_send_func sms_send_func; mmgui_module_ussd_cancel_session_func ussd_cancel_session_func; mmgui_module_ussd_get_state_func ussd_get_state_func; mmgui_module_ussd_send_func ussd_send_func; mmgui_module_networks_scan_func networks_scan_func; mmgui_module_contacts_enum_func contacts_enum_func; mmgui_module_contacts_delete_func contacts_delete_func; mmgui_module_contacts_add_func contacts_add_func; /*Connection manager module functions*/ mmgui_module_connection_open_func connection_open_func; mmgui_module_connection_close_func connection_close_func; mmgui_module_connection_enum_func connection_enum_func; mmgui_module_connection_add_func connection_add_func; mmgui_module_connection_update_func connection_update_func; mmgui_module_connection_remove_func connection_remove_func; mmgui_module_connection_last_error_func connection_last_error_func; mmgui_module_device_connection_open_func device_connection_open_func; mmgui_module_device_connection_close_func device_connection_close_func; mmgui_module_device_connection_status_func device_connection_status_func; mmgui_module_device_connection_timestamp_func device_connection_timestamp_func; mmgui_module_device_connection_get_active_uuid_func device_connection_get_active_uuid_func; mmgui_module_device_connection_connect_func device_connection_connect_func; mmgui_module_device_connection_disconnect_func device_connection_disconnect_func; /*Devices*/ GSList *devices; mmguidevice_t device; /*Connections*/ guint cmcaps; GSList *connections; /*Callbacks*/ mmgui_event_int_callback eventcb; mmgui_event_ext_callback extcb; /*Core options*/ mmgui_core_options_t options; /*User data pointer*/ gpointer userdata; /*Netlink interface*/ mmgui_netlink_t netlink; /*Polkit interface*/ mmgui_polkit_t polkit; /*Service manager interface*/ mmgui_svcmanager_t svcmanager; /*New day time*/ time_t newdaytime; /*Work thread*/ GThread *workthread; gint workthreadctl[2]; #if GLIB_CHECK_VERSION(2,32,0) GMutex workthreadmutex; GMutex connsyncmutex; #else GMutex *workthreadmutex; GMutex *connsyncmutex; #endif }; typedef struct _mmguicore *mmguicore_t; /*Modules*/ GSList *mmguicore_modules_get_list(mmguicore_t mmguicore); void mmguicore_modules_mm_set_timeouts(mmguicore_t mmguicore, gint operation1, gint timeout1, ...); /*Connections*/ gboolean mmguicore_connections_enum(mmguicore_t mmguicore); GSList *mmguicore_connections_get_list(mmguicore_t mmguicore); mmguiconn_t mmguicore_connections_add(mmguicore_t mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2); gboolean mmguicore_connections_update(mmguicore_t mmguicore, const gchar *uuid, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2); gboolean mmguicore_connections_remove(mmguicore_t mmguicore, const gchar *uuid); gchar *mmguicore_connections_get_active_uuid(mmguicore_t mmguicore); gboolean mmguicore_connections_connect(mmguicore_t mmguicore, const gchar *uuid); gboolean mmguicore_connections_disconnect(mmguicore_t mmguicore); guint mmguicore_connections_get_capabilities(mmguicore_t mmguicore); gboolean mmguicore_connections_get_transition_flag(mmguicore_t mmguicore); /*Devices*/ gboolean mmguicore_devices_enum(mmguicore_t mmguicore); gboolean mmguicore_devices_open(mmguicore_t mmguicore, guint deviceid, gboolean openfirst); gboolean mmguicore_devices_enable(mmguicore_t mmguicore, gboolean enabled); gboolean mmguicore_devices_unlock_with_pin(mmguicore_t mmguicore, gchar *pin); GSList *mmguicore_devices_get_list(mmguicore_t mmguicore); mmguidevice_t mmguicore_devices_get_current(mmguicore_t mmguicore); gboolean mmguicore_devices_get_enabled(mmguicore_t mmguicore); gboolean mmguicore_devices_get_locked(mmguicore_t mmguicore); gboolean mmguicore_devices_get_registered(mmguicore_t mmguicore); gboolean mmguicore_devices_get_prepared(mmguicore_t mmguicore); gboolean mmguicore_devices_get_connected(mmguicore_t mmguicore); gint mmguicore_devices_get_lock_type(mmguicore_t mmguicore); gboolean mmguicore_devices_update_state(mmguicore_t mmguicore); const gchar *mmguicore_devices_get_identifier(mmguicore_t mmguicore); const gchar *mmguicore_devices_get_internal_identifier(mmguicore_t mmguicore); gpointer mmguicore_devices_get_sms_db(mmguicore_t mmguicore); gpointer mmguicore_devices_get_traffic_db(mmguicore_t mmguicore); gboolean mmguicore_devices_get_connection_status(mmguicore_t mmguicore); guint64 mmguicore_devices_get_connection_timestamp(mmguicore_t mmguicore); guint mmguicore_devices_get_current_operation(mmguicore_t mmguicore); /*Location*/ guint mmguicore_location_get_capabilities(mmguicore_t mmguicore); /*SMS*/ guint mmguicore_sms_get_capabilities(mmguicore_t mmguicore); void mmguicore_sms_message_free(mmgui_sms_message_t message); GSList *mmguicore_sms_enum(mmguicore_t mmguicore, gboolean concatenation); mmgui_sms_message_t mmguicore_sms_get(mmguicore_t mmguicore, guint index); gboolean mmguicore_sms_delete(mmguicore_t mmguicore, guint index); gboolean mmguicore_sms_validate_number(const gchar *number); gboolean mmguicore_sms_send(mmguicore_t mmguicore, gchar *number, gchar *text, gint validity, gboolean report); /*USSD*/ guint mmguicore_ussd_get_capabilities(mmguicore_t mmguicore); enum _mmgui_ussd_validation mmguicore_ussd_validate_request(gchar *request); gboolean mmguicore_ussd_cancel_session(mmguicore_t mmguicore); enum _mmgui_ussd_state mmguicore_ussd_get_state(mmguicore_t mmguicore); gboolean mmguicore_ussd_send(mmguicore_t mmguicore, gchar *request); gboolean mmguicore_ussd_set_encoding(mmguicore_t mmguicore, enum _mmgui_ussd_encoding encoding); enum _mmgui_ussd_encoding mmguicore_ussd_get_encoding(mmguicore_t mmguicore); /*Scan*/ guint mmguicore_newtworks_scan_get_capabilities(mmguicore_t mmguicore); void mmguicore_networks_scan_free(GSList *networks); gboolean mmguicore_networks_scan(mmguicore_t mmguicore); /*Contacts*/ guint mmguicore_contacts_get_capabilities(mmguicore_t mmguicore); void mmguicore_contacts_free_single(mmgui_contact_t contact, gboolean freestruct); GSList *mmguicore_contacts_list(mmguicore_t mmguicore); mmgui_contact_t mmguicore_contacts_get(mmguicore_t mmguicore, guint index); gboolean mmguicore_contacts_delete(mmguicore_t mmguicore, guint index); gboolean mmguicore_contacts_add(mmguicore_t mmguicore, mmgui_contact_t contact); /*Connections*/ GSList *mmguicore_open_connections_list(mmguicore_t mmguicore); void mmguicore_close_connections_list(mmguicore_t mmguicore); GSList *mmguicore_get_connections_changes(mmguicore_t mmguicore); /*MMGUI Core*/ gchar *mmguicore_get_last_error(mmguicore_t mmguicore); gchar *mmguicore_get_last_connection_error(mmguicore_t mmguicore); gboolean mmguicore_interrupt_operation(mmguicore_t mmguicore); mmguicore_t mmguicore_init(mmgui_event_ext_callback callback, mmgui_core_options_t options, gpointer userdata); gboolean mmguicore_start(mmguicore_t mmguicore); void mmguicore_close(mmguicore_t mmguicore); #endif /* __MMGUICORE_H__ */ modem-manager-gui-0.0.19.1/appdata/uz@Latn.po000664 001750 001750 00000007267 13261703575 020535 0ustar00alexalex000000 000000 # # Translators: # Umidjon Almasov , 2014 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Uzbek (Latin) (http://www.transifex.com/ethereal/modem-manager-gui/language/uz%40Latn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uz@Latn\n" "Plural-Forms: nplurals=1; plural=0;\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "Modem Manager GUI" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "EDGE/3G/4G keng tezlikdagi modem maxsus funksiyalarini boshqarish" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "EDGE/3G/4G keng tezlikdagi modem maxsus funksiyalarini boshqarish imkoniyatiga ega Modem manager, Wader va oFono tizim xizmatlariga mos keladigan oddiy grafik interfeysi." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "Modem Manager GUI dasturidan foydalanib siz SIM-kartaning balansini tekshirish, SMS xabarlarini qabul qilish va yuborish, mobil trafik xarajatlarini boshqarish va boshqa imkoniyatlarga ega bo'lasiz." #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "Joriy xossalar:" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "SMS xabarlarni yuborish va qabul qilish va xabarlarni ma'lumot bazasida saqlash" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "USSD so'rovlarni yuborish va javoblarni o'qish (o'zaro faol seanslardan foydalangan holda ham)" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Qurilma haqida ma'lumotni ko'rish: operator nomi, qurilma rejimi, IMEI, IMSI, signal darajasi" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Mavjud bo'lgan mobil tarmoqlarni tekshirish" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "Mobil trafik statistikasini ko'rish va cheklov qo'yish" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/appdata/its/appdata.its000664 001750 001750 00000000767 13261703575 021550 0ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/mmguicore.c000664 001750 001750 00000336523 13261704076 020125 0ustar00alexalex000000 000000 /* * mmguicore.c * * Copyright 2013-2018 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "mmguicore.h" #include "smsdb.h" #include "trafficdb.h" #include "netlink.h" #include "polkit.h" #include "svcmanager.h" #include "../resources.h" /*Module*/ #define MMGUI_MODULE_FILE_PREFIX '_' #define MMGUI_MODULE_FILE_EXTENSION ".so" /*Cache file*/ #define MMGUICORE_CACHE_DIR "modem-manager-gui" #define MMGUICORE_CACHE_FILE "modules.conf" #define MMGUICORE_CACHE_PERM 0755 #define MMGUICORE_CACHE_VER 4 /*Cache file sections*/ #define MMGUICORE_FILE_ROOT_SECTION "cache" #define MMGUICORE_FILE_TIMESTAMP "timestamp" #define MMGUICORE_FILE_VERSION "version" /*Module entry*/ #define MMGUICORE_FILE_IDENTIFIER "identifier" #define MMGUICORE_FILE_TYPE "type" #define MMGUICORE_FILE_REQUIREMENT "requirement" #define MMGUICORE_FILE_PRIORITY "priority" #define MMGUICORE_FILE_FUNCTIONS "functions" #define MMGUICORE_FILE_DESCRIPTION "description" #define MMGUICORE_FILE_SERVICENAME "servicename" #define MMGUICORE_FILE_SYSTEMDNAME "systemdname" #define MMGUICORE_FILE_COMPATIBILITY "compatibility" /*SMS parameters*/ #define MMGUI_MIN_SMS_NUMBER_LENGTH 3 #define MMGUI_MAX_SMS_NUMBER_LENGTH 20 /*USSD parameters*/ #define MMGUI_MIN_USSD_REQUEST_LENGTH 1 #define MMGUI_MAX_USSD_REQUEST_LENGTH 160 /*Commands*/ #define MMGUI_THREAD_STOP_CMD 0x00 #define MMGUI_THREAD_REFRESH_CMD 0x01 static void mmguicore_event_callback(enum _mmgui_event event, gpointer mmguicore, gpointer data); static void mmguicore_svcmanager_callback(gpointer svcmanager, gint event, gpointer subject, gpointer userdata); static gint mmguicore_modules_sort(gconstpointer a, gconstpointer b); static gchar *mmguicore_modules_extract_name(const gchar *filename, gchar *buffer, gsize *bufsize); static gboolean mmguicore_modules_are_compatible(mmguimodule_t module1, mmguimodule_t module2); static gboolean mmguicore_modules_cache_open(mmguicore_t mmguicore); static gboolean mmguicore_modules_cache_close(mmguicore_t mmguicore); static gboolean mmguicore_modules_cache_add_module(mmguicore_t mmguicore, mmguimodule_t module); static gint mmguicore_modules_cache_get_enumeration_value(GKeyFile *keyfile, gchar *group, gchar *parameter, gint firstvalue, ...); static gchar *mmguicore_modules_cache_get_string_value(GKeyFile *keyfile, gchar *group, gchar *parameter, gchar *target, gsize size); static GSList *mmguicore_modules_cache_form_list(mmguicore_t mmguicore); static GSList *mmguicore_modules_dir_form_list(mmguicore_t mmguicore, gboolean updatecache); static gboolean mmguicore_modules_enumerate(mmguicore_t mmguicore); static gboolean mmguicore_modules_prepare(mmguicore_t mmguicore); static gboolean mmguicore_modules_free(mmguicore_t mmguicore); static gboolean mmguicore_modules_mm_open(mmguicore_t mmguicore, mmguimodule_t mmguimodule); static gboolean mmguicore_modules_cm_open(mmguicore_t mmguicore, mmguimodule_t mmguimodule); static gboolean mmguicore_modules_close(mmguicore_t mmguicore); static gboolean mmguicore_modules_select(mmguicore_t mmguicore); static gint mmguicore_connections_compare(gconstpointer a, gconstpointer b); static gint mmguicore_connections_name_compare(gconstpointer a, gconstpointer b); static void mmguicore_connections_free_single(mmguiconn_t connection); static void mmguicore_connections_free_foreach(gpointer data, gpointer user_data); static void mmguicore_connections_free(mmguicore_t mmguicore); static void mmguicore_devices_free_single(mmguidevice_t device); static void mmguicore_devices_free_foreach(gpointer data, gpointer user_data); static void mmguicore_devices_free(mmguicore_t mmguicore); static gboolean mmguicore_devices_add(mmguicore_t mmguicore, mmguidevice_t device); static gint mmguicore_devices_remove_compare(gconstpointer a, gconstpointer b); static gboolean mmguicore_devices_remove(mmguicore_t mmguicore, guint deviceid); static gint mmguicore_devices_open_compare(gconstpointer a, gconstpointer b); static gboolean mmguicore_devices_close(mmguicore_t mmguicore); static gint mmguicore_sms_sort_index_compare(gconstpointer a, gconstpointer b); static gint mmguicore_sms_sort_timestamp_compare(gconstpointer a, gconstpointer b); static void mmguicore_sms_merge_foreach(gpointer data, gpointer user_data); static void mmguicore_networks_scan_free_foreach(gpointer data, gpointer user_data); static void mmguicore_contacts_free_foreach(gpointer data, gpointer user_data); static void mmguicore_contacts_free(GSList *contacts); static guint mmguicore_contacts_enum(mmguicore_t mmguicore); static gint mmguicore_contacts_get_compare(gconstpointer a, gconstpointer b); static gint mmguicore_contacts_delete_compare(gconstpointer a, gconstpointer b); static gboolean mmguicore_main(mmguicore_t mmguicore); static gpointer mmguicore_work_thread(gpointer data); static void mmguicore_traffic_count(mmguicore_t mmguicore, guint64 rxbytes, guint64 txbytes); static void mmguicore_traffic_zero(mmguicore_t mmguicore); static void mmguicore_traffic_limits(mmguicore_t mmguicore); static void mmguicore_update_connection_status(mmguicore_t mmguicore, gboolean sendresult, gboolean result); static void mmguicore_event_callback(enum _mmgui_event event, gpointer mmguicore, gpointer data) { mmguicore_t mmguicorelc; mmguicorelc = (mmguicore_t)mmguicore; if (mmguicorelc == NULL) return; switch (event) { case MMGUI_EVENT_DEVICE_ADDED: mmguicore_devices_add(mmguicore, (mmguidevice_t)data); if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_DEVICE_REMOVED: mmguicore_devices_remove(mmguicore, GPOINTER_TO_UINT(data)); if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_DEVICE_ENABLED_STATUS: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_DEVICE_BLOCKED_STATUS: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_DEVICE_PREPARED_STATUS: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_DEVICE_CONNECTION_STATUS: if (mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING) { mmguicore_update_connection_status(mmguicorelc, FALSE, FALSE); } else { if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } } break; case MMGUI_EVENT_SMS_LIST_READY: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_SMS_COMPLETED: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_SMS_SENT: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_USSD_RESULT: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_MODEM_CONNECTION_RESULT: if (mmguicorelc->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING) { mmguicore_update_connection_status(mmguicore, TRUE, GPOINTER_TO_UINT(data)); } else { if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } } break; case MMGUI_EVENT_SCAN_RESULT: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_SIGNAL_LEVEL_CHANGE: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_NETWORK_MODE_CHANGE: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_NETWORK_REGISTRATION_CHANGE: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_LOCATION_CHANGE: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_MODEM_ENABLE_RESULT: /*Update device information*/ if (mmguicorelc->devices_information_func != NULL) { (mmguicorelc->devices_information_func)(mmguicorelc); } if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_MODEM_UNLOCK_WITH_PIN_RESULT: if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; case MMGUI_EVENT_EXTEND_CAPABILITIES: if (GPOINTER_TO_INT(data) == MMGUI_CAPS_CONTACTS) { /*Export contacts*/ if (mmguicorelc->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT) { mmguicore_contacts_enum(mmguicore); } } /*Forward event*/ if (mmguicorelc->extcb != NULL) { (mmguicorelc->extcb)(event, mmguicorelc, data, mmguicorelc->userdata); } break; default: break; } } static void mmguicore_svcmanager_callback(gpointer svcmanager, gint event, gpointer subject, gpointer userdata) { mmguicore_t mmguicore; GSList *iterator; mmguimodule_t modparams; gchar *modname; mmguicore = (mmguicore_t)userdata; if (mmguicore == NULL) return; switch (event) { case MMGUI_SVCMANGER_EVENT_STARTED: /*Forward event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_STARTED, mmguicore, NULL, mmguicore->userdata); } break; case MMGUI_SVCMANGER_EVENT_ENTITY_ACTIVATED: modname = mmgui_svcmanager_get_transition_module_name(subject); if ((modname != NULL) && (mmguicore->modules != NULL)) { /*Mark module available*/ for (iterator=mmguicore->modules; iterator; iterator=iterator->next) { modparams = iterator->data; if (g_str_equal(modparams->shortname, modname)) { modparams->applicable = TRUE; /*Forward event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ACTIVATED, mmguicore, modparams->description, mmguicore->userdata); } break; } } } break; case MMGUI_SVCMANGER_EVENT_ENTITY_CHANGED: modname = mmgui_svcmanager_get_transition_module_name(subject); if ((modname != NULL) && (mmguicore->modules != NULL)) { /*Mark module available*/ for (iterator=mmguicore->modules; iterator; iterator=iterator->next) { modparams = iterator->data; if (g_str_equal(modparams->shortname, modname)) { /*Forward event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_CHANGED, mmguicore, modparams->description, mmguicore->userdata); } break; } } } break; case MMGUI_SVCMANGER_EVENT_ENTITY_ERROR: /*Forward service error event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_SERVICE_ERROR, mmguicore, mmgui_svcmanager_get_last_error(svcmanager), mmguicore->userdata); } break; case MMGUI_SVCMANGER_EVENT_FINISHED: if (mmguicore_main(mmguicore)) { /*Forward event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_FINISHED, mmguicore, NULL, mmguicore->userdata); } } else { /*Forward startup error event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_STARTUP_ERROR, mmguicore, NULL, mmguicore->userdata); } } break; case MMGUI_SVCMANGER_EVENT_AUTH_ERROR: /*Forward authentication error event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_AUTH_ERROR, mmguicore, NULL, mmguicore->userdata); } break; case MMGUI_SVCMANGER_EVENT_OTHER_ERROR: /*Forward unknown error event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SERVICE_ACTIVATION_OTHER_ERROR, mmguicore, mmgui_svcmanager_get_last_error(svcmanager), mmguicore->userdata); } break; default: break; } } static gint mmguicore_modules_sort(gconstpointer a, gconstpointer b) { mmguimodule_t mod1, mod2; mod1 = (mmguimodule_t)a; mod2 = (mmguimodule_t)b; if (mod1->priority == mod2->priority) { if (mod1->identifier == mod2->identifier) { return 0; } else if (mod1->identifier > mod2->identifier) { return -1; } else if (mod1->identifier < mod2->identifier) { return 1; } } else if (mod1->priority > mod2->priority) { return -1; } else if (mod1->priority < mod2->priority) { return 1; } return 0; } static gint mmguicore_module_pairs_sort(gconstpointer a, gconstpointer b) { mmguimodule_t *modpair1, *modpair2; modpair1 = (mmguimodule_t *)a; modpair2 = (mmguimodule_t *)b; if (modpair1[0]->priority + modpair1[1]->priority == modpair2[0]->priority + modpair2[1]->priority) { if (modpair1[0]->identifier + modpair1[1]->identifier == modpair2[0]->identifier + modpair2[1]->identifier) { return 0; } else if (modpair1[0]->identifier + modpair1[1]->identifier > modpair2[0]->identifier + modpair2[1]->identifier) { return -1; } else if (modpair1[0]->identifier + modpair1[1]->identifier < modpair2[0]->identifier + modpair2[1]->identifier) { return 1; } } else if (modpair1[0]->priority + modpair1[1]->priority > modpair2[0]->priority + modpair2[1]->priority) { return -1; } else if (modpair1[0]->priority + modpair1[1]->priority < modpair2[0]->priority + modpair2[1]->priority) { return 1; } return 0; } static gchar *mmguicore_modules_extract_name(const gchar *filename, gchar *buffer, gsize *bufsize) { gchar *segend, *segstart; gsize namelen; if ((filename == NULL) || (buffer == NULL) || (bufsize == NULL)) return NULL; segstart = strchr(filename, MMGUI_MODULE_FILE_PREFIX); if (segstart != NULL) { segend = strstr(segstart + 1, MMGUI_MODULE_FILE_EXTENSION); if (segend != NULL) { namelen = segend - segstart - 1; if (namelen != 0) { if (namelen >= *bufsize) { namelen = *bufsize - 1; } strncpy(buffer, segstart + 1, namelen); buffer[namelen] = '\0'; *bufsize = namelen; return buffer; } } } *bufsize = 0; return NULL; } static gboolean mmguicore_modules_are_compatible(mmguimodule_t module1, mmguimodule_t module2) { gchar **clist1, **clist2; gint cseq1, cseq2; gboolean found; if ((module1 == NULL) || (module2 == NULL)) return FALSE; if ((module1->servicename[0] == '\0') || (module2->servicename[0] == '\0')) return FALSE; if ((module1->compatibility[0] == '\0') || (module2->compatibility[0] == '\0')) return FALSE; found = FALSE; /*First find out if the first module compatible with second one*/ clist1 = g_strsplit(module1->compatibility, ";", -1); for (cseq1 = 0; (clist1[cseq1] != NULL) && (clist1[cseq1][0] != '\0') && (!found); cseq1++) { if (g_ascii_strcasecmp(clist1[cseq1], module2->servicename) == 0) { /*One-way compatibility found, test reverse compatibility*/ clist2 = g_strsplit(module2->compatibility, ";", -1); for (cseq2 = 0; (clist2[cseq2] != NULL) && (clist2[cseq2][0] != '\0'); cseq2++) { if (g_ascii_strcasecmp(clist2[cseq2], module1->servicename) == 0) { found = TRUE; break; } } g_strfreev(clist2); } } g_strfreev(clist1); return found; } static gboolean mmguicore_modules_cache_open(mmguicore_t mmguicore) { gchar *confpath; time_t cachetime; struct stat statbuf; gchar **groups; gsize numgroups; gint i, filever; GError *error; if (mmguicore == NULL) return FALSE; /*Do not update cache by default*/ mmguicore->updatecache = FALSE; /*Cache file directory*/ confpath = g_build_path(G_DIR_SEPARATOR_S, g_get_user_cache_dir(), MMGUICORE_CACHE_DIR, NULL); /*Recursive directory creation*/ if (g_mkdir_with_parents(confpath, MMGUICORE_CACHE_PERM) != 0) { g_debug("No write access to program cache directory"); g_free(confpath); return FALSE; } g_free(confpath); /*Parameters of modules directory*/ if (stat(RESOURCE_MODULES_DIR, &statbuf) != 0) { g_debug("No access to modules directory"); return FALSE; } /*Cache file name*/ mmguicore->cachefilename = g_build_filename(g_get_user_cache_dir(), MMGUICORE_CACHE_DIR, MMGUICORE_CACHE_FILE, NULL); /*Cache file object*/ mmguicore->cachekeyfile = g_key_file_new(); /*Modules directory modification time */ mmguicore->updcachetime = statbuf.st_mtime; error = NULL; if (!g_key_file_load_from_file(mmguicore->cachekeyfile, mmguicore->cachefilename, G_KEY_FILE_NONE, &error)) { mmguicore->updatecache = TRUE; g_debug("Local cache file loading error: %s", error->message); g_error_free(error); } else { error = NULL; if (g_key_file_has_key(mmguicore->cachekeyfile, MMGUICORE_FILE_ROOT_SECTION, MMGUICORE_FILE_TIMESTAMP, &error)) { error = NULL; cachetime = (time_t)g_key_file_get_uint64(mmguicore->cachekeyfile, MMGUICORE_FILE_ROOT_SECTION, MMGUICORE_FILE_TIMESTAMP, &error); if (error == NULL) { if (difftime(cachetime, mmguicore->updcachetime) != 0.0) { mmguicore->updatecache = TRUE; g_debug("Local cache is outdated"); } else { /*Timestamp is up to date - check version*/ filever = g_key_file_get_integer(mmguicore->cachekeyfile, MMGUICORE_FILE_ROOT_SECTION, MMGUICORE_FILE_VERSION, &error); if (error == NULL) { if (filever >= MMGUICORE_CACHE_VER) { /*Acceptable version of file*/ mmguicore->updatecache = FALSE; g_debug("Local cache file is up to date"); } else { /*Old version of file*/ mmguicore->updatecache = TRUE; g_debug("Old version of file: %u", filever); } } else { /*Unknown version of file*/ mmguicore->updatecache = TRUE; g_debug("Local cache contains unreadable version identifier: %s", error->message); g_error_free(error); } } } else { mmguicore->updatecache = TRUE; g_debug("Local cache contains unreadable timestamp: %s", error->message); g_error_free(error); } } else { mmguicore->updatecache = TRUE; g_debug("Local cache does not contain timestamp: %s", error->message); g_error_free(error); } } /*Cleanup file*/ if (mmguicore->updatecache) { groups = g_key_file_get_groups(mmguicore->cachekeyfile, &numgroups); if ((groups != NULL) && (numgroups > 0)) { for (i=0; icachekeyfile, groups[i], &error); if (error != NULL) { g_debug("Unable to remove cached module information: %s", error->message); g_error_free(error); } } g_strfreev(groups); } } return TRUE; } static gboolean mmguicore_modules_cache_close(mmguicore_t mmguicore) { gchar *filedata; gsize datasize; GError *error; if (mmguicore == NULL) return FALSE; if ((mmguicore->cachefilename == NULL) || (mmguicore->cachekeyfile == NULL)) return FALSE; if (mmguicore->updatecache) { /*Save timestamp*/ g_key_file_set_int64(mmguicore->cachekeyfile, MMGUICORE_FILE_ROOT_SECTION, MMGUICORE_FILE_TIMESTAMP, (gint64)mmguicore->updcachetime); /*Save version of file*/ g_key_file_set_integer(mmguicore->cachekeyfile, MMGUICORE_FILE_ROOT_SECTION, MMGUICORE_FILE_VERSION, MMGUICORE_CACHE_VER); /*Write to file*/ error = NULL; filedata = g_key_file_to_data(mmguicore->cachekeyfile, &datasize, &error); if (filedata != NULL) { if (!g_file_set_contents(mmguicore->cachefilename, filedata, datasize, &error)) { g_debug("No data saved to local cache file: %s", error->message); g_error_free(error); } g_free(filedata); } } /*Free resources*/ g_free(mmguicore->cachefilename); g_key_file_free(mmguicore->cachekeyfile); return TRUE; } static gboolean mmguicore_modules_cache_add_module(mmguicore_t mmguicore, mmguimodule_t module) { if ((mmguicore == NULL) || (module == NULL)) return FALSE; if ((!mmguicore->updatecache) || (strlen(module->filename) == 0)) return FALSE; /*Save main parameters*/ g_key_file_set_integer(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_IDENTIFIER, module->identifier); g_key_file_set_integer(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_TYPE, module->type); g_key_file_set_integer(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_REQUIREMENT, module->requirement); g_key_file_set_integer(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_PRIORITY, module->priority); g_key_file_set_integer(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_FUNCTIONS, module->functions); g_key_file_set_string(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_DESCRIPTION, module->description); g_key_file_set_string(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_SERVICENAME, module->servicename); g_key_file_set_string(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_SYSTEMDNAME, module->systemdname); g_key_file_set_string(mmguicore->cachekeyfile, module->filename, MMGUICORE_FILE_COMPATIBILITY, module->compatibility); return TRUE; } static gint mmguicore_modules_cache_get_enumeration_value(GKeyFile *keyfile, gchar *group, gchar *parameter, gint firstvalue, ...) { va_list args; gint cachedvalue, enumvalue, res; if ((keyfile == NULL) || (group == NULL) || (parameter == NULL)) return -1; if (!g_key_file_has_key(keyfile, group, parameter, NULL)) { g_debug("No parameter '%s' found in cache", parameter); return -1; } cachedvalue = g_key_file_get_integer(keyfile, group, parameter, NULL); if ((firstvalue == -1) || (cachedvalue == firstvalue)) { /*No range for output value or first value is used*/ return cachedvalue; } res = -1; va_start(args, firstvalue); enumvalue = va_arg(args, gint); while (enumvalue != -1) { if (enumvalue == cachedvalue) { res = enumvalue; break; } else { enumvalue = va_arg(args, gint); } } if (res == -1) { g_debug("Parameter '%s' value is out of range", parameter); } return res; } static gchar *mmguicore_modules_cache_get_string_value(GKeyFile *keyfile, gchar *group, gchar *parameter, gchar *target, gsize size) { gchar *cachedvalue, *res; if ((keyfile == NULL) || (group == NULL) || (parameter == NULL) || (target == NULL) || (size == 0)) return NULL; if (!g_key_file_has_key(keyfile, group, parameter, NULL)) { g_debug("No parameter '%s' found in cache", parameter); return NULL; } cachedvalue = g_key_file_get_string(keyfile, group, parameter, NULL); if (cachedvalue != NULL) { res = strncpy(target, cachedvalue, size); } else { res = NULL; g_debug("Parameter '%s' value can't be read", parameter); } return res; } static GSList *mmguicore_modules_cache_form_list(mmguicore_t mmguicore) { GSList *modules; gchar **groups; gsize numgroups; gint i; gsize length; mmguimodule_t modparams; modules = NULL; if (mmguicore == NULL) { return modules; } if ((mmguicore->cachekeyfile == NULL) || (mmguicore->updatecache)) { g_debug("Cache file doesn't contain modules parameters"); return modules; } /*Cached modules list*/ groups = g_key_file_get_groups(mmguicore->cachekeyfile, &numgroups); if ((groups == NULL) || (numgroups == 0)) { g_debug("Cache file doesn't contain groups"); return modules; } for (i=0; i 3) && (length < 256) && (groups[i][length-3] == '.') && (groups[i][length-2] == 's') && (groups[i][length-1] == 'o')) { modparams = g_new0(struct _mmguimodule, 1); /*Module identifier*/ modparams->identifier = (guint)mmguicore_modules_cache_get_enumeration_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_IDENTIFIER, -1); if ((gint)modparams->identifier == -1) { g_free(modparams); continue; } /*Module type*/ modparams->type = mmguicore_modules_cache_get_enumeration_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_TYPE, MMGUI_MODULE_TYPE_MODEM_MANAGER, MMGUI_MODULE_TYPE_CONNECTION_MANGER, -1); if (modparams->type == -1) { g_free(modparams); continue; } /*Module requirement*/ modparams->requirement = mmguicore_modules_cache_get_enumeration_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_REQUIREMENT, MMGUI_MODULE_REQUIREMENT_SERVICE, MMGUI_MODULE_REQUIREMENT_FILE, MMGUI_MODULE_REQUIREMENT_NONE, -1); if (modparams->requirement == -1) { g_free(modparams); continue; } /*Module priority*/ modparams->priority = mmguicore_modules_cache_get_enumeration_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_PRIORITY, MMGUI_MODULE_PRIORITY_LOW, MMGUI_MODULE_PRIORITY_NORMAL, MMGUI_MODULE_PRIORITY_RECOMMENDED, -1); if (modparams->priority == -1) { g_free(modparams); continue; } /*Module functions*/ modparams->functions = mmguicore_modules_cache_get_enumeration_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_FUNCTIONS, MMGUI_MODULE_FUNCTION_BASIC, MMGUI_MODULE_FUNCTION_POLKIT_PROTECTION, -1); if (modparams->functions == -1) { g_free(modparams); continue; } /*Module description*/ if (mmguicore_modules_cache_get_string_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_DESCRIPTION, modparams->description, sizeof(modparams->description)) == NULL) { g_free(modparams); continue; } /*Module service name*/ if (mmguicore_modules_cache_get_string_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_SERVICENAME, modparams->servicename, sizeof(modparams->servicename)) == NULL) { g_free(modparams); continue; } /*Module systemd name*/ if (mmguicore_modules_cache_get_string_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_SYSTEMDNAME, modparams->systemdname, sizeof(modparams->systemdname)) == NULL) { g_free(modparams); continue; } /*Module compatibility string*/ if (mmguicore_modules_cache_get_string_value(mmguicore->cachekeyfile, groups[i], MMGUICORE_FILE_COMPATIBILITY, modparams->compatibility, sizeof(modparams->compatibility)) == NULL) { g_free(modparams); continue; } /*Module filename*/ strncpy(modparams->filename, groups[i], sizeof(modparams->filename)); /*Add to list*/ modules = g_slist_prepend(modules, modparams); } } if (modules != NULL) { modules = g_slist_reverse(modules); } g_strfreev(groups); return modules; } static GSList *mmguicore_modules_dir_form_list(mmguicore_t mmguicore, gboolean updatecache) { GSList *modules; GDir *moddir; const gchar *modname; gsize length; gchar *modpath; GModule *module; mmgui_module_init_func module_init; mmguimodule_t modparams; modules = NULL; moddir = g_dir_open(RESOURCE_MODULES_DIR, 0, NULL); if (moddir == NULL) { g_debug("Unable to open modules directory"); return modules; } modname = g_dir_read_name(moddir); while (modname != NULL) { /*Test file extension and filename length*/ length = strlen(modname); if ((length > 3) && (length < 256) && (modname[length-3] == '.') && (modname[length-2] == 's') && (modname[length-1] == 'o')) { /*Full path to module*/ modpath = g_strconcat(RESOURCE_MODULES_DIR, G_DIR_SEPARATOR_S, modname, NULL); /*Test if module exists*/ if (g_file_test(modpath, G_FILE_TEST_EXISTS)) { /*Open module*/ module = g_module_open(modpath, G_MODULE_BIND_LAZY); if (module != NULL) { /*Call init function to get module parameters*/ if (g_module_symbol(module, "mmgui_module_init", (gpointer*)&module_init)) { modparams = g_new0(struct _mmguimodule, 1); if (module_init(modparams)) { /*Add module filename*/ strncpy(modparams->filename, modname, sizeof(modparams->filename)); /*Module successfully initialized and can be used*/ modules = g_slist_prepend(modules, modparams); /*Add module to cache if needed*/ if ((mmguicore != NULL) && (updatecache)) { mmguicore_modules_cache_add_module(mmguicore, modparams); } } else { /*Unable to initialize module - skip*/ g_free(modparams); } } /*Close module*/ g_module_close(module); } } /*Free full path*/ g_free(modpath); } /*Next file*/ modname = g_dir_read_name(moddir); } if (modules != NULL) { modules = g_slist_reverse(modules); } /*Close directory*/ g_dir_close(moddir); /*Save cache file*/ if ((mmguicore != NULL) && (updatecache)) { mmguicore_modules_cache_close(mmguicore); } return modules; } static gboolean mmguicore_modules_enumerate(mmguicore_t mmguicore) { mmguimodule_t mod1, mod2; GSList *iter1; gsize shortnamelen; GHashTable *mmmods, *cmmods; GHashTableIter iter2; gchar *sn1; gchar **comp; gint cid; mmguimodule_t *modpair; gboolean mmavailable, cmavailable, res; if (mmguicore == NULL) return FALSE; res = FALSE; mmguicore->modulepairs = NULL; /*Form full modules list*/ if (mmguicore->updatecache) { /*Got to get all available modules*/ mmguicore->modules = mmguicore_modules_dir_form_list(mmguicore, TRUE); } else { /*Can use cache*/ mmguicore->modules = mmguicore_modules_cache_form_list(mmguicore); /*Fallback if cache is broken*/ if (mmguicore->modules == NULL) { if ((mmguicore->cachefilename != NULL) && (mmguicore->cachekeyfile != NULL)) { /*Cache can be updated*/ mmguicore->updatecache = TRUE; mmguicore->modules = mmguicore_modules_dir_form_list(mmguicore, TRUE); } else { /*Unable to update cache*/ mmguicore->modules = mmguicore_modules_dir_form_list(mmguicore, FALSE); } } } /*We are going to check if at least one modem and connection management module is available*/ mmavailable = FALSE; cmavailable = FALSE; mmmods = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL); cmmods = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, NULL); /*Mark available modules*/ if (mmguicore->modules != NULL) { for (iter1 = mmguicore->modules; iter1 != NULL; iter1 = iter1->next) { mod1 = iter1->data; shortnamelen = sizeof(mod1->shortname); if (mmguicore_modules_extract_name(mod1->filename, mod1->shortname, &shortnamelen) != NULL) { /*Test service/file existence*/ mod1->applicable = FALSE; mod1->activationtech = MMGUI_SVCMANGER_ACTIVATION_TECH_NA; switch (mod1->requirement) { case MMGUI_MODULE_REQUIREMENT_SERVICE: mod1->applicable = mmgui_svcmanager_get_service_state(mmguicore->svcmanager, mod1->systemdname, mod1->servicename); if (!mod1->applicable) { mod1->activationtech = mmgui_svcmanager_get_service_activation_tech(mmguicore->svcmanager, mod1->systemdname, mod1->servicename); } break; case MMGUI_MODULE_REQUIREMENT_FILE: if (g_file_test(mod1->servicename, G_FILE_TEST_EXISTS)) { mod1->applicable = TRUE; } break; case MMGUI_MODULE_REQUIREMENT_NONE: mod1->applicable = TRUE; break; default: break; } /*Set module type available flag*/ if ((mod1->applicable) || (mod1->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA)) { switch (mod1->type) { case MMGUI_MODULE_TYPE_MODEM_MANAGER: g_hash_table_insert(mmmods, g_strdup(mod1->servicename), mod1); mmavailable = TRUE; break; case MMGUI_MODULE_TYPE_CONNECTION_MANGER: g_hash_table_insert(cmmods, g_strdup(mod1->servicename), mod1); cmavailable = TRUE; break; default: break; } } } } /*Sort modules*/ mmguicore->modules = g_slist_sort(mmguicore->modules, mmguicore_modules_sort); } /*Find at least one pair of compatible modules*/ if (mmavailable && cmavailable) { g_hash_table_iter_init(&iter2, mmmods); while (g_hash_table_iter_next(&iter2, (gpointer *)&sn1, (gpointer *)&mod1)) { comp = g_strsplit(mod1->compatibility, ";", -1); if (comp != NULL) { for (cid = 0; (comp[cid] != NULL) && (comp[cid][0] != '\0'); cid++) { mod2 = g_hash_table_lookup(cmmods, comp[cid]); if (mod2 != NULL) { if (mmguicore_modules_are_compatible(mod1, mod2)) { modpair = g_malloc0(sizeof(mmguimodule_t) * 2); modpair[0] = mod1; modpair[1] = mod2; mmguicore->modulepairs = g_slist_prepend(mmguicore->modulepairs, modpair); g_debug("Found pair of modules: %s <---> %s\n", mod1->servicename, mod2->servicename); res = TRUE; } } } g_strfreev(comp); } } } /*Sort module pairs*/ mmguicore->modulepairs = g_slist_sort(mmguicore->modulepairs, mmguicore_module_pairs_sort); /*Free resources*/ g_hash_table_destroy(mmmods); g_hash_table_destroy(cmmods); return res; } static gboolean mmguicore_modules_prepare(mmguicore_t mmguicore) { mmguimodule_t curmod, mmmod, cmmod; mmguimodule_t *modpair; GSList *iter; gboolean pairfound; if (mmguicore == NULL) return FALSE; if (mmguicore->modules == NULL) return FALSE; mmmod = NULL; cmmod = NULL; pairfound = TRUE; /*Search for modules selected by user*/ for (iter = mmguicore->modules; iter != NULL; iter = iter->next) { curmod = iter->data; switch (curmod->type) { case MMGUI_MODULE_TYPE_MODEM_MANAGER: if (mmguicore->options != NULL) { if (mmguicore->options->mmmodule != NULL) { if (g_str_equal(curmod->shortname, mmguicore->options->mmmodule)) { mmmod = curmod; } } } case MMGUI_MODULE_TYPE_CONNECTION_MANGER: if (mmguicore->options != NULL) { if (mmguicore->options->cmmodule != NULL) { if (g_str_equal(curmod->shortname, mmguicore->options->cmmodule)) { cmmod = curmod; } } } break; default: break; } } /*If modules are not compatible, use failsafe ones*/ if (!mmguicore_modules_are_compatible(mmmod, cmmod)) { pairfound = FALSE; for (iter = mmguicore->modulepairs; iter != NULL; iter = iter->next) { modpair = (mmguimodule_t *)iter->data; if ((mmmod != NULL) && (cmmod != NULL)) { /*Selected modules arent compatible - find connection manager*/ curmod = modpair[0]; if (g_ascii_strcasecmp(mmmod->servicename, curmod->servicename) == 0) { cmmod = modpair[1]; pairfound = TRUE; g_debug("Modules are not compatible, using safe combination: %s <---> %s\n", mmmod->servicename, cmmod->servicename); break; } } else if ((mmmod == NULL) && (cmmod != NULL)) { /*Connection manager not selected - select one*/ curmod = modpair[1]; if (g_ascii_strcasecmp(cmmod->servicename, curmod->servicename) == 0) { mmmod = modpair[0]; pairfound = TRUE; g_debug("Modem manager not available, using safe combination: %s <---> %s\n", mmmod->servicename, cmmod->servicename); break; } } else if ((mmmod != NULL) && (cmmod == NULL)) { /*Modem manager not selected - select one*/ curmod = modpair[0]; if (g_ascii_strcasecmp(mmmod->servicename, curmod->servicename) == 0) { cmmod = modpair[1]; pairfound = TRUE; g_debug("Connection manager not available, using safe combination: %s <---> %s\n", mmmod->servicename, cmmod->servicename); break; } } else { /*No module selected - take first pair*/ mmmod = modpair[0]; cmmod = modpair[1]; pairfound = TRUE; g_debug("Selected pair of modules is not available, using safe combination: %s <---> %s\n", mmmod->servicename, cmmod->servicename); break; } } } /*If pair is still not found, select first one*/ if (!pairfound) { modpair = (mmguimodule_t *)g_slist_nth_data(mmguicore->modulepairs, 0); mmmod = modpair[0]; cmmod = modpair[1]; g_debug("Selected pair of modules is not available, using safe combination: %s <---> %s\n", mmmod->servicename, cmmod->servicename); } /*Mark modules as recommended and schedule activation*/ mmmod->recommended = TRUE; if ((!mmmod->applicable) && (mmmod->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA) && (mmmod->requirement == MMGUI_MODULE_REQUIREMENT_SERVICE)) { mmgui_svcmanager_schedule_start_service(mmguicore->svcmanager, mmmod->systemdname, mmmod->servicename, mmmod->shortname, mmguicore->options->enableservices); } cmmod->recommended = TRUE; if ((!cmmod->applicable) && (cmmod->activationtech != MMGUI_SVCMANGER_ACTIVATION_TECH_NA) && (cmmod->requirement == MMGUI_MODULE_REQUIREMENT_SERVICE)) { mmgui_svcmanager_schedule_start_service(mmguicore->svcmanager, cmmod->systemdname, cmmod->servicename, cmmod->shortname, mmguicore->options->enableservices); } /*Initiate services activation*/ mmgui_svcmanager_start_services_activation(mmguicore->svcmanager); return TRUE; } GSList *mmguicore_modules_get_list(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; return mmguicore->modules; } static gboolean mmguicore_modules_free(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; /*Free pairs list*/ if (mmguicore->modulepairs != NULL) { g_slist_foreach(mmguicore->modulepairs,(GFunc)g_free, NULL); g_slist_free(mmguicore->modulepairs); } /*Free modules list*/ if (mmguicore->modules != NULL) { g_slist_free(mmguicore->modules); } return TRUE; } static gboolean mmguicore_modules_mm_open(mmguicore_t mmguicore, mmguimodule_t mmguimodule) { gboolean openstatus; gchar *modulepath; gchar *polkitaction; if ((mmguicore == NULL) || (mmguimodule == NULL)) return FALSE; /*Wrong module type*/ if (mmguimodule->type == MMGUI_MODULE_TYPE_CONNECTION_MANGER) return FALSE; /*Authentication process*/ if (mmguimodule->functions & MMGUI_MODULE_FUNCTION_POLKIT_PROTECTION) { openstatus = TRUE; /*Autheticate user if needed*/ polkitaction = g_strdup_printf("ru.linuxonly.modem-manager-gui.manage-modem-%s", mmguimodule->shortname); if (mmgui_polkit_action_needed(mmguicore->polkit, polkitaction, FALSE)) { openstatus = mmgui_polkit_request_password(mmguicore->polkit, polkitaction); } g_free(polkitaction); /*Show warning if not authenticated*/ if (!openstatus) { g_debug("User not authenticated for modem manager usage\n"); } } /*Dynamic loader*/ modulepath = g_strconcat(RESOURCE_MODULES_DIR, G_DIR_SEPARATOR_S, mmguimodule->filename, NULL); mmguicore->module = g_module_open(modulepath, G_MODULE_BIND_LAZY); if (mmguicore->module != NULL) { openstatus = TRUE; /*Module function pointers*/ openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_open", (gpointer *)&(mmguicore->open_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_close", (gpointer *)&(mmguicore->close_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_last_error", (gpointer *)&(mmguicore->last_error_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_interrupt_operation", (gpointer *)&(mmguicore->interrupt_operation_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_set_timeout", (gpointer *)&(mmguicore->set_timeout_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_enum", (gpointer *)&(mmguicore->devices_enum_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_open", (gpointer *)&(mmguicore->devices_open_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_close", (gpointer *)&(mmguicore->devices_close_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_state", (gpointer *)&(mmguicore->devices_state_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_update_state", (gpointer *)&(mmguicore->devices_update_state_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_information", (gpointer *)&(mmguicore->devices_information_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_enable", (gpointer *)&(mmguicore->devices_enable_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_devices_unlock_with_pin", (gpointer *)&(mmguicore->devices_unlock_with_pin_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_sms_enum", (gpointer *)&(mmguicore->sms_enum_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_sms_get", (gpointer *)&(mmguicore->sms_get_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_sms_delete", (gpointer *)&(mmguicore->sms_delete_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_sms_send", (gpointer *)&(mmguicore->sms_send_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_ussd_cancel_session", (gpointer *)&(mmguicore->ussd_cancel_session_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_ussd_get_state", (gpointer *)&(mmguicore->ussd_get_state_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_ussd_send", (gpointer *)&(mmguicore->ussd_send_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_networks_scan", (gpointer *)&(mmguicore->networks_scan_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_contacts_enum", (gpointer *)&(mmguicore->contacts_enum_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_contacts_delete", (gpointer *)&(mmguicore->contacts_delete_func)); openstatus = openstatus && g_module_symbol(mmguicore->module, "mmgui_module_contacts_add", (gpointer *)&(mmguicore->contacts_add_func)); if (!openstatus) { /*Module function pointers*/ mmguicore->open_func = NULL; mmguicore->close_func = NULL; mmguicore->last_error_func = NULL; mmguicore->interrupt_operation_func = NULL; mmguicore->set_timeout_func = NULL; mmguicore->devices_enum_func = NULL; mmguicore->devices_open_func = NULL; mmguicore->devices_close_func = NULL; mmguicore->devices_state_func = NULL; mmguicore->devices_update_state_func = NULL; mmguicore->devices_information_func = NULL; mmguicore->devices_enable_func = NULL; mmguicore->devices_unlock_with_pin_func = NULL; mmguicore->sms_enum_func = NULL; mmguicore->sms_get_func = NULL; mmguicore->sms_delete_func = NULL; mmguicore->sms_send_func = NULL; mmguicore->ussd_cancel_session_func = NULL; mmguicore->ussd_get_state_func = NULL; mmguicore->ussd_send_func = NULL; mmguicore->networks_scan_func = NULL; mmguicore->contacts_enum_func = NULL; mmguicore->contacts_delete_func = NULL; mmguicore->contacts_add_func = NULL; g_module_close(mmguicore->module); g_printf("Failed to load modem manager: %s\n", mmguimodule->description); } } else { openstatus = FALSE; } g_free(modulepath); /*Module preparation*/ if (openstatus) { mmguicore->moduleptr = mmguimodule; /*Open module*/ (mmguicore->open_func)(mmguicore); /*Set module timeouts*/ if (mmguicore->options != NULL) { mmguicore_modules_mm_set_timeouts(mmguicore, MMGUI_DEVICE_OPERATION_ENABLE, mmguicore->options->enabletimeout, MMGUI_DEVICE_OPERATION_SEND_SMS, mmguicore->options->sendsmstimeout, MMGUI_DEVICE_OPERATION_SEND_USSD, mmguicore->options->sendussdtimeout, MMGUI_DEVICE_OPERATION_SCAN, mmguicore->options->scannetworkstimeout, -1); } g_printf("Modem manager: %s\n", mmguimodule->description); } else { mmguicore->moduleptr = NULL; mmguicore->module = NULL; } return openstatus; } static gboolean mmguicore_modules_cm_open(mmguicore_t mmguicore, mmguimodule_t mmguimodule) { gboolean openstatus; gchar *modulepath; gchar *polkitaction; if ((mmguicore == NULL) || (mmguimodule == NULL)) return FALSE; /*Wrong module type*/ if (mmguimodule->type == MMGUI_MODULE_TYPE_MODEM_MANAGER) return FALSE; /*Authentication process*/ if (mmguimodule->functions & MMGUI_MODULE_FUNCTION_POLKIT_PROTECTION) { openstatus = TRUE; /*Autheticate user if needed*/ polkitaction = g_strdup_printf("ru.linuxonly.modem-manager-gui.manage-network-%s", mmguimodule->shortname); if (mmgui_polkit_action_needed(mmguicore->polkit, polkitaction, FALSE)) { openstatus = mmgui_polkit_request_password(mmguicore->polkit, polkitaction); } g_free(polkitaction); /*Show warning if not authenticated*/ if (!openstatus) { g_debug("User not authenticated for connection manager usage\n"); } } /*Dynamic loader*/ modulepath = g_strconcat(RESOURCE_MODULES_DIR, G_DIR_SEPARATOR_S, mmguimodule->filename, NULL); mmguicore->cmodule = g_module_open(modulepath, G_MODULE_BIND_LAZY); if (mmguicore->cmodule != NULL) { openstatus = TRUE; /*Module function pointers*/ openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_open", (gpointer *)&(mmguicore->connection_open_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_close", (gpointer *)&(mmguicore->connection_close_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_enum", (gpointer *)&(mmguicore->connection_enum_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_add", (gpointer *)&(mmguicore->connection_add_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_update", (gpointer *)&(mmguicore->connection_update_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_remove", (gpointer *)&(mmguicore->connection_remove_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_connection_last_error", (gpointer *)&(mmguicore->connection_last_error_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_open", (gpointer *)&(mmguicore->device_connection_open_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_close", (gpointer *)&(mmguicore->device_connection_close_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_status", (gpointer *)&(mmguicore->device_connection_status_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_timestamp", (gpointer *)&(mmguicore->device_connection_timestamp_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_get_active_uuid", (gpointer *)&(mmguicore->device_connection_get_active_uuid_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_connect", (gpointer *)&(mmguicore->device_connection_connect_func)); openstatus = openstatus && g_module_symbol(mmguicore->cmodule, "mmgui_module_device_connection_disconnect", (gpointer *)&(mmguicore->device_connection_disconnect_func)); if (!openstatus) { /*Module function pointers*/ mmguicore->connection_open_func = NULL; mmguicore->connection_close_func = NULL; mmguicore->connection_enum_func = NULL; mmguicore->connection_add_func = NULL; mmguicore->connection_update_func = NULL; mmguicore->connection_remove_func = NULL; mmguicore->connection_last_error_func = NULL; mmguicore->device_connection_open_func = NULL; mmguicore->device_connection_close_func = NULL; mmguicore->device_connection_status_func = NULL; mmguicore->device_connection_timestamp_func = NULL; mmguicore->device_connection_get_active_uuid_func = NULL; mmguicore->device_connection_connect_func = NULL; mmguicore->device_connection_disconnect_func = NULL; g_module_close(mmguicore->cmodule); } } else { openstatus = FALSE; } g_free(modulepath); if (openstatus) { mmguicore->cmoduleptr = mmguimodule; (mmguicore->connection_open_func)(mmguicore); g_printf("Connection manager: %s\n", mmguimodule->description); } else { mmguicore->cmoduleptr = NULL; mmguicore->cmodule = NULL; } return openstatus; } static gboolean mmguicore_modules_close(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; /*Modem manager module functions*/ if (mmguicore->module != NULL) { if (mmguicore->close_func != NULL) { mmguicore->close_func(mmguicore); } g_module_close(mmguicore->module); mmguicore->module = NULL; /*Module function pointers*/ mmguicore->open_func = NULL; mmguicore->close_func = NULL; mmguicore->last_error_func = NULL; mmguicore->devices_enum_func = NULL; mmguicore->devices_open_func = NULL; mmguicore->devices_close_func = NULL; mmguicore->devices_state_func = NULL; mmguicore->devices_update_state_func = NULL; mmguicore->devices_information_func = NULL; mmguicore->devices_enable_func = NULL; mmguicore->devices_unlock_with_pin_func = NULL; mmguicore->sms_enum_func = NULL; mmguicore->sms_get_func = NULL; mmguicore->sms_delete_func = NULL; mmguicore->sms_send_func = NULL; mmguicore->ussd_cancel_session_func = NULL; mmguicore->ussd_get_state_func = NULL; mmguicore->ussd_send_func = NULL; mmguicore->networks_scan_func = NULL; mmguicore->contacts_enum_func = NULL; mmguicore->contacts_delete_func = NULL; mmguicore->contacts_add_func = NULL; mmguicore->moduleptr = NULL; } /*Connection manager module functions*/ if (mmguicore->cmodule != NULL) { if (mmguicore->connection_close_func != NULL) { mmguicore->connection_close_func(mmguicore); } g_module_close(mmguicore->cmodule); mmguicore->cmodule = NULL; /*Module function pointers*/ mmguicore->connection_open_func = NULL; mmguicore->connection_close_func = NULL; mmguicore->connection_enum_func = NULL; mmguicore->connection_add_func = NULL; mmguicore->connection_update_func = NULL; mmguicore->connection_remove_func = NULL; mmguicore->connection_last_error_func = NULL; mmguicore->device_connection_open_func = NULL; mmguicore->device_connection_close_func = NULL; mmguicore->device_connection_status_func = NULL; mmguicore->device_connection_timestamp_func = NULL; mmguicore->device_connection_get_active_uuid_func = NULL; mmguicore->device_connection_connect_func = NULL; mmguicore->device_connection_disconnect_func = NULL; mmguicore->cmoduleptr = NULL; } return TRUE; } static gboolean mmguicore_modules_select(mmguicore_t mmguicore) { GSList *iterator; mmguimodule_t module, mmmod, cmmod; mmguimodule_t *modpair; gboolean mmfound, cmfound; if (mmguicore == NULL) return FALSE; if (mmguicore->modules == NULL) return FALSE; if ((mmguicore->module != NULL) || (mmguicore->cmodule != NULL)) { mmguicore_modules_close(mmguicore); } mmfound = FALSE; cmfound = FALSE; /*Try to open recommended modules first*/ for (iterator=mmguicore->modules; iterator; iterator=iterator->next) { module = iterator->data; if ((module->applicable) && (module->recommended)) { if ((module->type == MMGUI_MODULE_TYPE_MODEM_MANAGER) && (!mmfound)) { mmfound = mmguicore_modules_mm_open(mmguicore, module); } else if ((module->type == MMGUI_MODULE_TYPE_CONNECTION_MANGER) && (!cmfound)) { cmfound = mmguicore_modules_cm_open(mmguicore, module); } } if ((mmfound) && (cmfound)) { break; } } /*If modules not opened use full list*/ if (!((mmfound) && (cmfound))) { if ((!mmfound) && (cmfound)) { /*Find compatible modem manager module and open it*/ for (iterator=mmguicore->modulepairs; iterator; iterator=iterator->next) { modpair = (mmguimodule_t *)iterator->data; mmmod = modpair[0]; cmmod = modpair[1]; module = mmguicore->cmoduleptr; if ((g_ascii_strcasecmp(module->servicename, cmmod->servicename) == 0) && (mmmod->applicable)) { mmfound = mmguicore_modules_mm_open(mmguicore, mmmod); if (mmfound) { break; } } } } else if ((mmfound) && (!cmfound)) { /*Find compatible connection manager module and open it*/ for (iterator=mmguicore->modulepairs; iterator; iterator=iterator->next) { modpair = (mmguimodule_t *)iterator->data; mmmod = modpair[0]; cmmod = modpair[1]; module = mmguicore->moduleptr; if ((g_ascii_strcasecmp(module->servicename, mmmod->servicename) == 0) && (cmmod->applicable)) { cmfound = mmguicore_modules_cm_open(mmguicore, cmmod); if (cmfound) { break; } } } } else if ((!mmfound) && (!cmfound)) { /*Find compatible pair of modules and open it*/ for (iterator=mmguicore->modulepairs; iterator; iterator=iterator->next) { modpair = (mmguimodule_t *)iterator->data; mmfound = mmguicore_modules_mm_open(mmguicore, modpair[0]); cmfound = mmguicore_modules_cm_open(mmguicore, modpair[1]); if ((mmfound) && (cmfound)) { break; } } } } return ((mmfound) && (cmfound)); } void mmguicore_modules_mm_set_timeouts(mmguicore_t mmguicore, gint operation1, gint timeout1, ...) { va_list args; gint operation, timeout; if (mmguicore == NULL) return; if ((operation1 == -1) || (timeout1 == -1)) return; if ((mmguicore->moduleptr == NULL) || (mmguicore->set_timeout_func == NULL)) return; va_start(args, timeout1); operation = operation1; timeout = timeout1; while (TRUE) { /*Set timeout value*/ switch (operation) { case MMGUI_DEVICE_OPERATION_ENABLE: case MMGUI_DEVICE_OPERATION_SEND_SMS: case MMGUI_DEVICE_OPERATION_SEND_USSD: case MMGUI_DEVICE_OPERATION_SCAN: (mmguicore->set_timeout_func)(mmguicore, operation, timeout); break; default: break; } /*Get new values*/ operation = va_arg(args, gint); if (operation == -1) { break; } timeout = va_arg(args, gint); if (timeout == -1) { break; } } va_end(args); } static gint mmguicore_connections_compare(gconstpointer a, gconstpointer b) { mmguiconn_t connection; const gchar *uuid; connection = (mmguiconn_t)a; uuid = (const gchar *)b; return g_strcmp0(connection->uuid, uuid); } static gint mmguicore_connections_name_compare(gconstpointer a, gconstpointer b) { mmguiconn_t connection1, connection2; connection1 = (mmguiconn_t)a; connection2 = (mmguiconn_t)b; return g_strcmp0(connection1->name, connection2->name); } static void mmguicore_connections_free_single(mmguiconn_t connection) { if (connection != NULL) return; if (connection->uuid != NULL) { g_free(connection->uuid); } if (connection->name != NULL) { g_free(connection->name); } if (connection->number != NULL) { g_free(connection->number); } if (connection->username != NULL) { g_free(connection->username); } if (connection->password != NULL) { g_free(connection->password); } if (connection->apn != NULL) { g_free(connection->apn); } if (connection->dns1 != NULL) { g_free(connection->dns1); } if (connection->dns2 != NULL) { g_free(connection->dns2); } } static void mmguicore_connections_free_foreach(gpointer data, gpointer user_data) { mmguiconn_t connection; if (data != NULL) return; connection = (mmguiconn_t)data; mmguicore_connections_free_single(connection); } static void mmguicore_connections_free(mmguicore_t mmguicore) { if (mmguicore == NULL) return; g_slist_foreach(mmguicore->connections, mmguicore_connections_free_foreach, NULL); g_slist_free(mmguicore->connections); mmguicore->connections = NULL; } gboolean mmguicore_connections_enum(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->connection_enum_func == NULL)) return FALSE; if (mmguicore->connections != NULL) { mmguicore_connections_free(mmguicore); } (mmguicore->connection_enum_func)(mmguicore, &(mmguicore->connections)); if (mmguicore->connections != NULL) { mmguicore->connections = g_slist_sort(mmguicore->connections, mmguicore_connections_name_compare); } return TRUE; } GSList *mmguicore_connections_get_list(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; return mmguicore->connections; } mmguiconn_t mmguicore_connections_add(mmguicore_t mmguicore, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, guint type, gboolean homeonly, const gchar *dns1, const gchar *dns2) { mmguiconn_t connection; if ((mmguicore == NULL) || (name == NULL) || (mmguicore->connection_add_func == NULL)) return NULL; connection = (mmguicore->connection_add_func)(mmguicore, name, number, username, password, apn, networkid, type, homeonly, dns1, dns2); if (connection != NULL) { mmguicore->connections = g_slist_append(mmguicore->connections, connection); } return connection; } gboolean mmguicore_connections_update(mmguicore_t mmguicore, const gchar *uuid, const gchar *name, const gchar *number, const gchar *username, const gchar *password, const gchar *apn, guint networkid, gboolean homeonly, const gchar *dns1, const gchar *dns2) { GSList *connptr; mmguiconn_t connection; if ((mmguicore == NULL) || (uuid == NULL) || (name == NULL) || (mmguicore->connection_update_func == NULL)) return FALSE; connptr = g_slist_find_custom(mmguicore->connections, uuid, mmguicore_connections_compare); if (connptr != NULL) { connection = connptr->data; if ((mmguicore->connection_update_func)(mmguicore, connection, name, number, username, password, apn, networkid, homeonly, dns1, dns2)) { return TRUE; } } return FALSE; } gboolean mmguicore_connections_remove(mmguicore_t mmguicore, const gchar *uuid) { GSList *connptr; mmguiconn_t connection; if ((mmguicore == NULL) || (uuid == NULL) || (mmguicore->connection_remove_func == NULL)) return FALSE; connptr = g_slist_find_custom(mmguicore->connections, uuid, mmguicore_connections_compare); if (connptr != NULL) { connection = connptr->data; if ((mmguicore->connection_remove_func)(mmguicore, connection)) { mmguicore_connections_free_single(connection); mmguicore->connections = g_slist_remove(mmguicore->connections, connection); return TRUE; } } return TRUE; } gchar *mmguicore_connections_get_active_uuid(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->device_connection_get_active_uuid_func == NULL)) return NULL; return (mmguicore->device_connection_get_active_uuid_func)(mmguicore); } gboolean mmguicore_connections_connect(mmguicore_t mmguicore, const gchar *uuid) { GSList *connptr; mmguiconn_t connection; if ((mmguicore == NULL) || (uuid == NULL) || (mmguicore->device_connection_connect_func == NULL)) return FALSE; connptr = g_slist_find_custom(mmguicore->connections, uuid, mmguicore_connections_compare); if (connptr != NULL) { connection = connptr->data; if ((mmguicore->device_connection_connect_func)(mmguicore, connection)) { return TRUE; } } return FALSE; } gboolean mmguicore_connections_disconnect(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->device_connection_disconnect_func == NULL)) return FALSE; if ((mmguicore->device != NULL) && (mmguicore->device->connected)) { if ((mmguicore->device_connection_disconnect_func)(mmguicore)) { return TRUE; } } return FALSE; } guint mmguicore_connections_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_CONNECTION_MANAGER_CAPS_MANAGEMENT; return mmguicore->cmcaps; } gboolean mmguicore_connections_get_transition_flag(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if (mmguicore->device != NULL) { return mmguicore->device->conntransition; } return FALSE; } static void mmguicore_devices_free_single(mmguidevice_t device) { if (device != NULL) return; if (device->manufacturer != NULL) { g_free(device->manufacturer); } if (device->model != NULL) { g_free(device->model); } if (device->version != NULL) { g_free(device->version); } if (device->port != NULL) { g_free(device->port); } if (device->objectpath != NULL) { g_free(device->objectpath); } if (device->sysfspath != NULL) { g_free(device->sysfspath); } if (device->internalid != NULL) { g_free(device->internalid); } if (device->persistentid != NULL) { g_free(device->persistentid); } if (device->imei != NULL) { g_free(device->imei); } if (device->imsi != NULL) { g_free(device->imsi); } } static void mmguicore_devices_free_foreach(gpointer data, gpointer user_data) { mmguidevice_t device; if (data != NULL) return; device = (mmguidevice_t)data; mmguicore_devices_free_single(device); } static void mmguicore_devices_free(mmguicore_t mmguicore) { if (mmguicore == NULL) return; g_slist_foreach(mmguicore->devices, mmguicore_devices_free_foreach, NULL); g_slist_free(mmguicore->devices); mmguicore->devices = NULL; } gboolean mmguicore_devices_enum(mmguicore_t mmguicore) { GSList *iterator; mmguidevice_t device; if ((mmguicore == NULL) || (mmguicore->devices_enum_func == NULL)) return FALSE; if (mmguicore->devices != NULL) { mmguicore_devices_free(mmguicore); } (mmguicore->devices_enum_func)(mmguicore, &(mmguicore->devices)); for (iterator=mmguicore->devices; iterator; iterator=iterator->next) { device = iterator->data; g_debug("Device: %s, %s, %s [%u] [%s]\n", device->manufacturer, device->model, device->version, device->id, device->persistentid); } return TRUE; } static gboolean mmguicore_devices_add(mmguicore_t mmguicore, mmguidevice_t device) { if ((mmguicore == NULL) || (device == NULL)) return FALSE; mmguicore->devices = g_slist_append(mmguicore->devices, device); g_debug("Device successfully added\n"); return TRUE; } static gint mmguicore_devices_remove_compare(gconstpointer a, gconstpointer b) { mmguidevice_t device; guint id; device = (mmguidevice_t)a; id = GPOINTER_TO_UINT(b); if (device->id < id) { return 1; } else if (device->id > id) { return -1; } else { return 0; } } static gboolean mmguicore_devices_remove(mmguicore_t mmguicore, guint deviceid) { GSList *deviceptr; if (mmguicore == NULL) return FALSE; if (mmguicore->devices == NULL) return FALSE; deviceptr = g_slist_find_custom(mmguicore->devices, GUINT_TO_POINTER(deviceid), mmguicore_devices_remove_compare); if (deviceptr == NULL) return FALSE; if (mmguicore->device != NULL) { if (mmguicore->device->id == deviceid) { /*Close currently opened device*/ mmguicore_devices_close(mmguicore); } } /*Remove device structure from list*/ mmguicore->devices = g_slist_remove(mmguicore->devices, deviceptr->data); /*Free device structure*/ mmguicore_devices_free_single(deviceptr->data); g_debug("Device successfully removed\n"); return TRUE; } static gint mmguicore_devices_open_compare(gconstpointer a, gconstpointer b) { mmguidevice_t device; guint id; device = (mmguidevice_t)a; id = GPOINTER_TO_UINT(b); if (device->id < id) { return 1; } else if (device->id > id) { return -1; } else { return 0; } } gboolean mmguicore_devices_open(mmguicore_t mmguicore, guint deviceid, gboolean openfirst) { GSList *deviceptr; guint workthreadcmd; if (mmguicore == NULL) return FALSE; if ((mmguicore->devices == NULL) || (mmguicore->devices_open_func == NULL)) return FALSE; deviceptr = g_slist_find_custom(mmguicore->devices, GUINT_TO_POINTER(deviceid), mmguicore_devices_open_compare); if (deviceptr != NULL) { /*Test currently opened device*/ if (mmguicore->device != NULL) { if (mmguicore->device->id == deviceid) { /*Already opened*/ return TRUE; } else { /*Close currently opened device*/ mmguicore_devices_close(mmguicore); } } if ((mmguicore->devices_open_func)(mmguicore, deviceptr->data)) { mmguicore->device = deviceptr->data; /*Update device information*/ if (mmguicore->devices_information_func != NULL) { (mmguicore->devices_information_func)(mmguicore); /*Open SMS database*/ mmguicore->device->smsdb = mmgui_smsdb_open(mmguicore->device->persistentid, mmguicore->device->internalid); /*Open traffic database*/ mmguicore->device->trafficdb = mmgui_trafficdb_open(mmguicore->device->persistentid, mmguicore->device->internalid); /*Open contacts*/ mmguicore_contacts_enum(mmguicore); /*For Huawei modem USSD answers must be converted*/ if (g_ascii_strcasecmp(mmguicore->device->manufacturer, "huawei") == 0) { mmguicore->device->ussdencoding = MMGUI_USSD_ENCODING_UCS2; } else { mmguicore->device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; } } /*Open connection statistics source*/ if (mmguicore->device_connection_open_func != NULL) { (mmguicore->device_connection_open_func)(mmguicore, deviceptr->data); } /*Update connection parameters*/ if (mmguicore->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING) { /*Update connection parameters in main thread*/ mmguicore_update_connection_status(mmguicore, FALSE, FALSE); } else { /*Send command to refresh connection state in work thread*/ workthreadcmd = MMGUI_THREAD_REFRESH_CMD; if (write(mmguicore->workthreadctl[1], &workthreadcmd, sizeof(workthreadcmd)) != sizeof(workthreadcmd)) { g_debug("Unable to send refresh command\n"); } } /*Generate event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_OPENED, mmguicore, mmguicore->device, mmguicore->userdata); } g_debug("Device successfully opened\n"); return TRUE; } } else if ((openfirst) && (deviceptr == NULL) && (mmguicore->devices != NULL)) { /*Open first available device if specified is not found*/ if (mmguicore->devices->data != NULL) { if (mmguicore->device != NULL) { /*Close currently opened device*/ mmguicore_devices_close(mmguicore); } if ((mmguicore->devices_open_func)(mmguicore, mmguicore->devices->data)) { mmguicore->device = mmguicore->devices->data; /*Update device information*/ if (mmguicore->devices_information_func != NULL) { (mmguicore->devices_information_func)(mmguicore); /*Open SMS database*/ mmguicore->device->smsdb = mmgui_smsdb_open(mmguicore->device->persistentid, mmguicore->device->internalid); /*Open traffic database*/ mmguicore->device->trafficdb = mmgui_trafficdb_open(mmguicore->device->persistentid, mmguicore->device->internalid); /*Open contacts*/ mmguicore_contacts_enum(mmguicore); /*For Huawei modem USSD answers must be converted*/ if (g_ascii_strcasecmp(mmguicore->device->manufacturer, "huawei") == 0) { mmguicore->device->ussdencoding = MMGUI_USSD_ENCODING_UCS2; } else { mmguicore->device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; } } /*Open connection statistics source*/ if (mmguicore->device_connection_open_func != NULL) { (mmguicore->device_connection_open_func)(mmguicore, mmguicore->devices->data); } /*Update connection parameters*/ if (mmguicore->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING) { /*Update connection parameters in main thread*/ mmguicore_update_connection_status(mmguicore, FALSE, FALSE); } else { /*Send command to refresh connection state in work thread*/ workthreadcmd = MMGUI_THREAD_REFRESH_CMD; if (write(mmguicore->workthreadctl[1], &workthreadcmd, sizeof(workthreadcmd)) != sizeof(workthreadcmd)) { g_debug("Unable to send refresh command\n"); } } /*Generate event*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_OPENED, mmguicore, mmguicore->device, mmguicore->userdata); } g_debug("First available device successfully opened\n"); return TRUE; } } } return FALSE; } static gboolean mmguicore_devices_close(mmguicore_t mmguicore) { gboolean result; result = FALSE; if (mmguicore->device != NULL) { /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_CLOSING, mmguicore, mmguicore->device, mmguicore->userdata); } #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->workthreadmutex); #else g_mutex_lock(mmguicore->workthreadmutex); #endif if ((mmguicore->devices_close_func)(mmguicore)) { /*Close SMS database*/ mmguicore->device->smscaps = MMGUI_SMS_CAPS_NONE; mmgui_smsdb_close(mmguicore->device->smsdb); mmguicore->device->smsdb = NULL; /*Close contacts*/ mmguicore->device->contactscaps = MMGUI_CONTACTS_CAPS_NONE; mmguicore_contacts_free(mmguicore->device->contactslist); mmguicore->device->contactslist = NULL; /*Info*/ if (mmguicore->device->operatorname != NULL) { g_free(mmguicore->device->operatorname); mmguicore->device->operatorname = NULL; } mmguicore->device->operatorcode = 0; if (mmguicore->device->imei != NULL) { g_free(mmguicore->device->imei); mmguicore->device->imei = NULL; } if (mmguicore->device->imsi != NULL) { g_free(mmguicore->device->imsi); mmguicore->device->imsi = NULL; } /*USSD*/ mmguicore->device->ussdcaps = MMGUI_USSD_CAPS_NONE; mmguicore->device->ussdencoding = MMGUI_USSD_ENCODING_GSM7; /*Location*/ mmguicore->device->locationcaps = MMGUI_LOCATION_CAPS_NONE; memset(mmguicore->device->loc3gppdata, 0, sizeof(mmguicore->device->loc3gppdata)); memset(mmguicore->device->locgpsdata, 0, sizeof(mmguicore->device->locgpsdata)); /*Scan*/ mmguicore->device->scancaps = MMGUI_SCAN_CAPS_NONE; /*Close traffic database session*/ mmgui_trafficdb_session_close(mmguicore->device->trafficdb); /*Close traffic database*/ mmgui_trafficdb_close(mmguicore->device->trafficdb); mmguicore->device->trafficdb = NULL; /*Traffic*/ mmguicore->device->rxbytes = 0; mmguicore->device->txbytes = 0; mmguicore->device->sessiontime = 0; mmguicore->device->speedchecktime = 0; mmguicore->device->smschecktime = 0; mmguicore->device->speedindex = 0; mmguicore->device->connected = FALSE; memset(mmguicore->device->speedvalues, 0, sizeof(mmguicore->device->speedvalues)); memset(mmguicore->device->interface, 0, sizeof(mmguicore->device->interface)); /*Zero traffic values in UI*/ mmguicore_traffic_zero(mmguicore); /*Close connection state source*/ if (mmguicore->device_connection_close_func != NULL) { (mmguicore->device_connection_close_func)(mmguicore); } /*Device*/ mmguicore->device = NULL; /*Successfully closed*/ g_debug("Device successfully closed\n"); result = TRUE; } #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->workthreadmutex); #else g_mutex_unlock(mmguicore->workthreadmutex); #endif } return result; } gboolean mmguicore_devices_enable(mmguicore_t mmguicore, gboolean enabled) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_enable_func == NULL)) return FALSE; return (mmguicore->devices_enable_func)(mmguicore, enabled); } gboolean mmguicore_devices_unlock_with_pin(mmguicore_t mmguicore, gchar *pin) { if ((mmguicore == NULL) || (pin == NULL)) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_unlock_with_pin_func == NULL)) return FALSE; return (mmguicore->devices_unlock_with_pin_func)(mmguicore, pin); } GSList *mmguicore_devices_get_list(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; return mmguicore->devices; } mmguidevice_t mmguicore_devices_get_current(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; return mmguicore->device; } gboolean mmguicore_devices_get_enabled(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_state_func == NULL)) return FALSE; return (mmguicore->devices_state_func)(mmguicore, MMGUI_DEVICE_STATE_REQUEST_ENABLED); } gboolean mmguicore_devices_get_locked(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_state_func == NULL)) return FALSE; return (mmguicore->devices_state_func)(mmguicore, MMGUI_DEVICE_STATE_REQUEST_LOCKED); } gboolean mmguicore_devices_get_registered(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_state_func == NULL)) return FALSE; return (mmguicore->devices_state_func)(mmguicore, MMGUI_DEVICE_STATE_REQUEST_REGISTERED); } gboolean mmguicore_devices_get_prepared(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->devices_state_func == NULL)) return FALSE; return (mmguicore->devices_state_func)(mmguicore, MMGUI_DEVICE_STATE_REQUEST_PREPARED); } gboolean mmguicore_devices_get_connected(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if (mmguicore->device == NULL) return FALSE; return mmguicore->device->connected; } gint mmguicore_devices_get_lock_type(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_LOCK_TYPE_NONE; if (mmguicore->device == NULL) return MMGUI_LOCK_TYPE_NONE; return mmguicore->device->locktype; } gboolean mmguicore_devices_update_state(mmguicore_t mmguicore) { gboolean updated; if (mmguicore == NULL) return FALSE; if (mmguicore->devices_update_state_func == NULL) return FALSE; updated = FALSE; updated = (mmguicore->devices_update_state_func)(mmguicore); return updated; } const gchar *mmguicore_devices_get_identifier(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; return (const gchar *)mmguicore->device->persistentid; } const gchar *mmguicore_devices_get_internal_identifier(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; return (const gchar *)mmguicore->device->internalid; } gpointer mmguicore_devices_get_sms_db(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; return (gpointer)mmguicore->device->smsdb; } gpointer mmguicore_devices_get_traffic_db(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; return (gpointer)mmguicore->device->trafficdb; } gboolean mmguicore_devices_get_connection_status(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; if ((mmguicore->device == NULL) || (mmguicore->device_connection_status_func == NULL)) return FALSE; return (mmguicore->device_connection_status_func)(mmguicore); } guint64 mmguicore_devices_get_connection_timestamp(mmguicore_t mmguicore) { guint64 timestamp; timestamp = (guint64)time(NULL); if (mmguicore == NULL) return timestamp; if ((mmguicore->device == NULL) || (mmguicore->device_connection_timestamp_func == NULL)) return timestamp; timestamp = (mmguicore->device_connection_timestamp_func)(mmguicore); return timestamp; } guint mmguicore_devices_get_current_operation(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_DEVICE_OPERATION_IDLE; if (mmguicore->device == NULL) return MMGUI_DEVICE_OPERATION_IDLE; return mmguicore->device->operation; } guint mmguicore_location_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_LOCATION_CAPS_NONE; if (mmguicore->device == NULL) return MMGUI_LOCATION_CAPS_NONE; return mmguicore->device->locationcaps; } guint mmguicore_sms_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_SMS_CAPS_NONE; if (mmguicore->device == NULL) return MMGUI_SMS_CAPS_NONE; return mmguicore->device->smscaps; } static gint mmguicore_sms_sort_index_compare(gconstpointer a, gconstpointer b) { mmgui_sms_message_t message1, message2; guint id1, id2; message1 = (mmgui_sms_message_t)a; message2 = (mmgui_sms_message_t)b; id1 = mmgui_smsdb_message_get_identifier(message1); id2 = mmgui_smsdb_message_get_identifier(message2); if (id1 < id2) { return -1; } else if (id1 > id2) { return 1; } else { return 0; } } static gint mmguicore_sms_sort_timestamp_compare(gconstpointer a, gconstpointer b) { mmgui_sms_message_t message1, message2; time_t ts1, ts2; message1 = (mmgui_sms_message_t)a; message2 = (mmgui_sms_message_t)b; ts1 = mmgui_smsdb_message_get_timestamp(message1); ts2 = mmgui_smsdb_message_get_timestamp(message2); if (difftime(ts1, ts2) < 0.0) { return -1; } else if (difftime(ts1, ts2) > 0.0) { return 1; } else { return 0; } } static void mmguicore_sms_merge_foreach(gpointer data, gpointer user_data) { mmgui_sms_message_t curmessage, srcmessage; const gchar *srcnumber, *curnumber; time_t srcts, curts; gboolean srcbinary, curbinary; guint ident; const gchar *text; curmessage = (mmgui_sms_message_t)data; srcmessage = (mmgui_sms_message_t)user_data; if ((srcmessage == NULL) || (srcmessage == curmessage) || (mmgui_smsdb_message_get_read(curmessage))) return; /*Number*/ srcnumber = mmgui_smsdb_message_get_number(srcmessage); curnumber = mmgui_smsdb_message_get_number(curmessage); /*Timestamp*/ srcts = mmgui_smsdb_message_get_timestamp(srcmessage); curts = mmgui_smsdb_message_get_timestamp(curmessage); /*Binary format*/ srcbinary = mmgui_smsdb_message_get_binary(srcmessage); curbinary = mmgui_smsdb_message_get_binary(curmessage); if ((g_str_equal(srcnumber, curnumber)) && (srcbinary == curbinary)) { if (abs((gint)difftime(srcts, curts)) <= 5) { /*Copy identifier*/ ident = mmgui_smsdb_message_get_identifier(curmessage); mmgui_smsdb_message_set_identifier(srcmessage, ident, TRUE); /*Copy decoded text*/ text = mmgui_smsdb_message_get_text(curmessage); if (!srcbinary) { mmgui_smsdb_message_set_text(srcmessage, text, TRUE); } else { mmgui_smsdb_message_set_binary(srcmessage, FALSE); mmgui_smsdb_message_set_text(srcmessage, text, TRUE); mmgui_smsdb_message_set_binary(srcmessage, TRUE); } /*Mark message obsolete*/ mmgui_smsdb_message_set_read(curmessage, TRUE); } } } GSList *mmguicore_sms_enum(mmguicore_t mmguicore, gboolean concatenation) { GSList *messages; guint nummessages; GSList *iterator; mmgui_sms_message_t message; if ((mmguicore == NULL) || (mmguicore->sms_enum_func == NULL)) return NULL; messages = NULL; nummessages = (mmguicore->sms_enum_func)(mmguicore, &messages); if (nummessages > 1) { if (concatenation) { /*Sort messages by index*/ messages = g_slist_sort(messages, mmguicore_sms_sort_index_compare); /*Try to concatenate every message and mark already concatenated with 'read' flag*/ for (iterator=messages; iterator; iterator=iterator->next) { message = iterator->data; if (!mmgui_smsdb_message_get_read(message)) { g_slist_foreach(messages, mmguicore_sms_merge_foreach, message); } } } /*After all, sort messages by timestamp*/ messages = g_slist_sort(messages, mmguicore_sms_sort_timestamp_compare); } return messages; } mmgui_sms_message_t mmguicore_sms_get(mmguicore_t mmguicore, guint index) { mmgui_sms_message_t message; if ((mmguicore == NULL) || (mmguicore->sms_get_func == NULL)) return NULL; message = (mmguicore->sms_get_func)(mmguicore, index); return message; } gboolean mmguicore_sms_delete(mmguicore_t mmguicore, guint index) { if ((mmguicore == NULL) || (mmguicore->sms_delete_func == NULL)) return FALSE; return (mmguicore->sms_delete_func)(mmguicore, index); } gboolean mmguicore_sms_validate_number(const gchar *number) { gboolean validated; gsize length, digitlength, i; validated = TRUE; if ((number != NULL) && (number[0] != '\0')) { length = strlen(number); if (number[0] == '+') { digitlength = length-1; } else { digitlength = length; } if ((digitlength < MMGUI_MIN_SMS_NUMBER_LENGTH) || (digitlength > MMGUI_MAX_SMS_NUMBER_LENGTH)) { validated = FALSE; } else { for (i=0; isms_send_func == NULL)) return FALSE; if ((number == NULL) || (text == NULL)) return FALSE; if ((!mmguicore_sms_validate_number(number)) || (text[0] == '\0') || (validity < -1) || (validity > 255)) return FALSE; return (mmguicore->sms_send_func)(mmguicore, number, text, validity, report); } guint mmguicore_ussd_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_USSD_CAPS_NONE; if (mmguicore->device == NULL) return MMGUI_USSD_CAPS_NONE; return mmguicore->device->ussdcaps; } enum _mmgui_ussd_validation mmguicore_ussd_validate_request(gchar *request) { enum _mmgui_ussd_validation statusid; gsize length, i; gboolean wrongsym; statusid = MMGUI_USSD_VALIDATION_INVALID; if ((request == NULL) && (request[0] == '\0')) return statusid; length = strlen(request); if (length > MMGUI_MAX_USSD_REQUEST_LENGTH) return statusid; if (((request[0] == '*') || (request[0] == '#')) && (request[length-1] == '#') && (length > 2)) { wrongsym = FALSE; for (i=0; iussd_cancel_session_func == NULL)) return FALSE; return (mmguicore->ussd_cancel_session_func)(mmguicore); } enum _mmgui_ussd_state mmguicore_ussd_get_state(mmguicore_t mmguicore) { enum _mmgui_ussd_state stateid; stateid = MMGUI_USSD_STATE_UNKNOWN; if ((mmguicore == NULL) || (mmguicore->ussd_get_state_func == NULL)) return stateid; stateid = (mmguicore->ussd_get_state_func)(mmguicore); return stateid; } gboolean mmguicore_ussd_send(mmguicore_t mmguicore, gchar *request) { enum _mmgui_ussd_validation validationid; gboolean reencode; if ((mmguicore == NULL) || (mmguicore->ussd_send_func == NULL)) return FALSE; if (request == NULL) return FALSE; validationid = mmguicore_ussd_validate_request(request); /*Try to reencode answer if nedded*/ if (mmguicore->device->ussdencoding == MMGUI_USSD_ENCODING_UCS2) { reencode = TRUE; } else { reencode = FALSE; } return (mmguicore->ussd_send_func)(mmguicore, request, validationid, reencode); } gboolean mmguicore_ussd_set_encoding(mmguicore_t mmguicore, enum _mmgui_ussd_encoding encoding) { if ((mmguicore == NULL) || (mmguicore->device == NULL)) return FALSE; mmguicore->device->ussdencoding = encoding; return TRUE; } enum _mmgui_ussd_encoding mmguicore_ussd_get_encoding(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->device == NULL)) return MMGUI_USSD_ENCODING_GSM7; return mmguicore->device->ussdencoding; } guint mmguicore_newtworks_scan_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_SCAN_CAPS_NONE; if (mmguicore->device == NULL) return MMGUI_SCAN_CAPS_NONE; return mmguicore->device->scancaps; } static void mmguicore_networks_scan_free_foreach(gpointer data, gpointer user_data) { mmgui_scanned_network_t network; if (data == NULL) return; network = (mmgui_scanned_network_t)data; if (network->operator_long != NULL) { g_free(network->operator_long); } if (network->operator_short != NULL) { g_free(network->operator_short); } } void mmguicore_networks_scan_free(GSList *networks) { if (networks == NULL) return; g_slist_foreach(networks, mmguicore_networks_scan_free_foreach, NULL); g_slist_free(networks); } gboolean mmguicore_networks_scan(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->networks_scan_func == NULL)) return FALSE; return (mmguicore->networks_scan_func)(mmguicore); } guint mmguicore_contacts_get_capabilities(mmguicore_t mmguicore) { if (mmguicore == NULL) return MMGUI_CONTACTS_CAPS_NONE; if (mmguicore->device == NULL) return MMGUI_CONTACTS_CAPS_NONE; return mmguicore->device->contactscaps; } void mmguicore_contacts_free_single(mmgui_contact_t contact, gboolean freestruct) { if (contact == NULL) return; if (contact->name != NULL) { g_free(contact->name); } if (contact->number != NULL) { g_free(contact->number); } if (contact->email != NULL) { g_free(contact->email); } if (contact->group != NULL) { g_free(contact->group); } if (contact->name2 != NULL) { g_free(contact->name2); } if (contact->number2 != NULL) { g_free(contact->number2); } /*Free contact structure*/ if (freestruct) { g_free(contact); } } static void mmguicore_contacts_free_foreach(gpointer data, gpointer user_data) { mmgui_contact_t contact; if (data == NULL) return; contact = (mmgui_contact_t)data; mmguicore_contacts_free_single(contact, FALSE); } static void mmguicore_contacts_free(GSList *contacts) { if (contacts == NULL) return; g_slist_foreach(contacts, mmguicore_contacts_free_foreach, NULL); g_slist_free(contacts); } static guint mmguicore_contacts_enum(mmguicore_t mmguicore) { guint numcontacts; if ((mmguicore == NULL) || (mmguicore->contacts_enum_func == NULL)) return 0; if (mmguicore->device == NULL) return 0; if (mmguicore->device->contactslist != NULL) { mmguicore_contacts_free(mmguicore->device->contactslist); mmguicore->device->contactslist = NULL; } numcontacts = (mmguicore->contacts_enum_func)(mmguicore, &(mmguicore->device->contactslist)); return numcontacts; } GSList *mmguicore_contacts_list(mmguicore_t mmguicore) { if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; if (!(mmguicore->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT)) return NULL; return mmguicore->device->contactslist; } static gint mmguicore_contacts_get_compare(gconstpointer a, gconstpointer b) { mmgui_contact_t contact; guint id; contact = (mmgui_contact_t)a; id = GPOINTER_TO_UINT(b); if (contact->id < id) { return 1; } else if (contact->id > id) { return -1; } else { return 0; } } mmgui_contact_t mmguicore_contacts_get(mmguicore_t mmguicore, guint index) { GSList *contactptr; mmgui_contact_t contact; if (mmguicore == NULL) return NULL; if (mmguicore->device == NULL) return NULL; if (!(mmguicore->device->contactscaps & MMGUI_CONTACTS_CAPS_EXPORT)) return NULL; contactptr = g_slist_find_custom(mmguicore->device->contactslist, GUINT_TO_POINTER(index), mmguicore_contacts_get_compare); if (contactptr != NULL) { contact = (mmgui_contact_t)contactptr->data; return contact; } else { return NULL; } } static gint mmguicore_contacts_delete_compare(gconstpointer a, gconstpointer b) { mmgui_contact_t contact; guint id; contact = (mmgui_contact_t)a; id = GPOINTER_TO_UINT(b); if (contact->id < id) { return 1; } else if (contact->id > id) { return -1; } else { return 0; } } gboolean mmguicore_contacts_delete(mmguicore_t mmguicore, guint index) { gboolean result; GSList *contactptr; if ((mmguicore == NULL) || (mmguicore->contacts_delete_func == NULL)) return FALSE; if (mmguicore->device == NULL) return FALSE; if (!(mmguicore->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return FALSE; result = (mmguicore->contacts_delete_func)(mmguicore, index); if (result) { contactptr = g_slist_find_custom(mmguicore->device->contactslist, GUINT_TO_POINTER(index), mmguicore_contacts_delete_compare); if (contactptr != NULL) { /*Remove contact from list*/ mmguicore_contacts_free_single(contactptr->data, FALSE); mmguicore->device->contactslist = g_slist_remove(mmguicore->device->contactslist, contactptr->data); } return TRUE; } else { return FALSE; } } gboolean mmguicore_contacts_add(mmguicore_t mmguicore, mmgui_contact_t contact) { gint index; if ((mmguicore == NULL) || (contact == NULL) || (mmguicore->contacts_add_func == NULL)) return FALSE; if ((contact->name == NULL) || (contact->number == NULL)) return FALSE; if ((!mmguicore_sms_validate_number(contact->number)) || (contact->name[0] == '\0')) return FALSE; if (!(mmguicore->device->contactscaps & MMGUI_CONTACTS_CAPS_EDIT)) return FALSE; index = (mmguicore->contacts_add_func)(mmguicore, contact); if (index > -1) { mmguicore->device->contactslist = g_slist_append(mmguicore->device->contactslist, contact); return TRUE; } else { return FALSE; } } GSList *mmguicore_open_connections_list(mmguicore_t mmguicore) { GSList *connections; if (mmguicore == NULL) return NULL; #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->connsyncmutex); #else g_mutex_lock(mmguicore->connsyncmutex); #endif connections = mmgui_netlink_open_interactive_connections_list(mmguicore->netlink); #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->connsyncmutex); #else g_mutex_unlock(mmguicore->connsyncmutex); #endif return connections; } void mmguicore_close_connections_list(mmguicore_t mmguicore) { if (mmguicore == NULL) return; #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->connsyncmutex); #else g_mutex_lock(mmguicore->connsyncmutex); #endif mmgui_netlink_close_interactive_connections_list(mmguicore->netlink); #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->connsyncmutex); #else g_mutex_unlock(mmguicore->connsyncmutex); #endif } GSList *mmguicore_get_connections_changes(mmguicore_t mmguicore) { GSList *changes; if (mmguicore == NULL) return NULL; #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->connsyncmutex); #else g_mutex_lock(mmguicore->connsyncmutex); #endif changes = mmgui_netlink_get_connections_changes(mmguicore->netlink); #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->connsyncmutex); #else g_mutex_unlock(mmguicore->connsyncmutex); #endif return changes; } gchar *mmguicore_get_last_error(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->last_error_func == NULL)) return NULL; return (mmguicore->last_error_func)(mmguicore); } gchar *mmguicore_get_last_connection_error(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->connection_last_error_func == NULL)) return NULL; return (mmguicore->connection_last_error_func)(mmguicore); } gboolean mmguicore_interrupt_operation(mmguicore_t mmguicore) { if ((mmguicore == NULL) || (mmguicore->interrupt_operation_func == NULL)) return FALSE; return (mmguicore->interrupt_operation_func)(mmguicore); } mmguicore_t mmguicore_init(mmgui_event_ext_callback callback, mmgui_core_options_t options, gpointer userdata) { mmguicore_t mmguicore; mmguicore = g_new0(struct _mmguicore, 1); /*Modules*/ mmguicore->modules = NULL; mmguicore->modulepairs = NULL; /*Modem manager module*/ mmguicore->module = NULL; mmguicore->moduleptr = NULL; mmguicore->module = NULL; /*Connection manager module*/ mmguicore->cmodule = NULL; mmguicore->cmoduleptr = NULL; mmguicore->cmodule = NULL; /*Modem manager module functions*/ mmguicore->open_func = NULL; mmguicore->close_func = NULL; mmguicore->last_error_func = NULL; mmguicore->interrupt_operation_func = NULL; mmguicore->set_timeout_func = NULL; mmguicore->devices_enum_func = NULL; mmguicore->devices_open_func = NULL; mmguicore->devices_close_func = NULL; mmguicore->devices_state_func = NULL; mmguicore->devices_update_state_func = NULL; mmguicore->devices_information_func = NULL; mmguicore->devices_enable_func = NULL; mmguicore->devices_unlock_with_pin_func = NULL; mmguicore->sms_enum_func = NULL; mmguicore->sms_get_func = NULL; mmguicore->sms_delete_func = NULL; mmguicore->sms_send_func = NULL; mmguicore->ussd_cancel_session_func = NULL; mmguicore->ussd_get_state_func = NULL; mmguicore->ussd_send_func = NULL; mmguicore->networks_scan_func = NULL; mmguicore->contacts_enum_func = NULL; mmguicore->contacts_delete_func = NULL; mmguicore->contacts_add_func = NULL; /*Connection manager module functions*/ mmguicore->connection_open_func = NULL; mmguicore->connection_close_func = NULL; mmguicore->connection_enum_func = NULL; mmguicore->connection_add_func = NULL; mmguicore->connection_update_func = NULL; mmguicore->connection_remove_func = NULL; mmguicore->connection_last_error_func = NULL; mmguicore->device_connection_open_func = NULL; mmguicore->device_connection_close_func = NULL; mmguicore->device_connection_status_func = NULL; mmguicore->device_connection_timestamp_func = NULL; mmguicore->device_connection_get_active_uuid_func = NULL; mmguicore->device_connection_connect_func = NULL; mmguicore->device_connection_disconnect_func = NULL; /*Work thread*/ mmguicore->workthread = NULL; /*Devices*/ mmguicore->devices = NULL; mmguicore->device = NULL; /*External callback*/ mmguicore->extcb = callback; /*Core options*/ mmguicore->options = options; /*User data pointer*/ mmguicore->userdata = userdata; /*Open polkit interface*/ mmguicore->polkit = mmgui_polkit_open(); /*Open service manager interface*/ mmguicore->svcmanager = mmgui_svcmanager_open(mmguicore->polkit, mmguicore_svcmanager_callback, mmguicore); /*Open modules cache*/ mmguicore_modules_cache_open(mmguicore); /*Prepare recommended modules*/ if (!mmguicore_modules_enumerate(mmguicore)) { /*Close service manager interface*/ mmgui_svcmanager_close(mmguicore->svcmanager); /*Close polkit interface*/ mmgui_polkit_close(mmguicore->polkit); /*Free resources*/ g_free(mmguicore); return NULL; } return mmguicore; } gboolean mmguicore_start(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; return mmguicore_modules_prepare(mmguicore); } static gboolean mmguicore_main(mmguicore_t mmguicore) { if (mmguicore == NULL) return FALSE; /*Internal callback*/ mmguicore->eventcb = mmguicore_event_callback; /*Select module*/ if (!mmguicore_modules_select(mmguicore)) { return FALSE; } /*Open netlink interface*/ mmguicore->netlink = mmgui_netlink_open(); /*New day time*/ mmguicore->newdaytime = mmgui_trafficdb_get_new_day_timesatmp(time(NULL), NULL, NULL); /*Work thread*/ if (pipe(mmguicore->workthreadctl) == 0) { #if GLIB_CHECK_VERSION(2,32,0) g_mutex_init(&mmguicore->workthreadmutex); g_mutex_init(&mmguicore->connsyncmutex); #else mmguicore->workthreadmutex = g_mutex_new(); mmguicore->connsyncmutex = g_mutex_new(); #endif #if GLIB_CHECK_VERSION(2,32,0) mmguicore->workthread = g_thread_new("Modem Manager GUI work thread", mmguicore_work_thread, mmguicore); #else mmguicore->workthread = g_thread_create(mmguicore_work_thread, mmguicore, TRUE, NULL); #endif } else { mmguicore->workthread = NULL; } return TRUE; } void mmguicore_close(mmguicore_t mmguicore) { guint workthreadcmd; if (mmguicore == NULL) return; /*Close opened device*/ mmguicore_devices_close(mmguicore); if (mmguicore->workthread != NULL) { /*Stop work thread*/ workthreadcmd = MMGUI_THREAD_STOP_CMD; /*Send command for thread termination*/ if (write(mmguicore->workthreadctl[1], &workthreadcmd, sizeof(workthreadcmd)) > 0) { /*Wait for thread termination*/ g_thread_join(mmguicore->workthread); /*Close thread control pipe*/ close(mmguicore->workthreadctl[1]); /*Free mutexes*/ #if GLIB_CHECK_VERSION(2,32,0) g_mutex_clear(&mmguicore->workthreadmutex); g_mutex_clear(&mmguicore->connsyncmutex); #else g_mutex_free(mmguicore->workthreadmutex); g_mutex_free(mmguicore->connsyncmutex); #endif } } /*Close netlink interface*/ if (mmguicore->netlink != NULL) { mmgui_netlink_close(mmguicore->netlink); } /*Close service manager interface*/ mmgui_svcmanager_close(mmguicore->svcmanager); /*Close polkit interface*/ mmgui_polkit_close(mmguicore->polkit); /*Close opened modules*/ mmguicore_modules_close(mmguicore); /*Free modules list*/ mmguicore_modules_free(mmguicore); g_free(mmguicore); } static gpointer mmguicore_work_thread(gpointer data) { mmguicore_t mmguicore; /*Shared buffer*/ gchar *databuf, *radatabuf; gsize databufsize; /*Polling variables*/ guint activesockets; gint pollstatus; gint recvbytes; struct pollfd pollfds[3]; /*Work thread control*/ gint ctlfd, ctlfdnum; gint workthreadcmd; /*Interface monitoring*/ gint intfd, intfdnum; struct iovec intiov; struct msghdr intmsg; /*Connections monitoring*/ gint connfd, connfdnum; struct iovec conniov; struct msghdr connmsg; /*Events*/ struct _mmgui_netlink_interface_event event; time_t ifstatetime, currenttime; gboolean oldstate; gchar oldinterface[IFNAMSIZ]; mmguicore = (mmguicore_t)data; if (mmguicore == NULL) return NULL; /*Initialize shared buffer*/ databufsize = 4096; databuf = g_malloc0(databufsize); intiov.iov_len = databufsize; intiov.iov_base = databuf; conniov.iov_len = databufsize; conniov.iov_base = databuf; /*Initialize active sockets*/ activesockets = 0; ctlfdnum = 0; intfdnum = 0; connfdnum = 0; ctlfd = mmguicore->workthreadctl[0]; if (ctlfd != -1) { ctlfdnum = activesockets; pollfds[ctlfdnum].fd = ctlfd; pollfds[ctlfdnum].events = POLLIN; activesockets++; } intfd = mmgui_netlink_get_interfaces_monitoring_socket_fd(mmguicore->netlink); if (intfd != -1) { intfdnum = activesockets; pollfds[intfdnum].fd = intfd; pollfds[intfdnum].events = POLLIN; intmsg.msg_name = (void *)mmgui_netlink_get_interfaces_monitoring_socket_address(mmguicore->netlink); intmsg.msg_namelen = sizeof(struct sockaddr_nl); intmsg.msg_iov = &intiov; intmsg.msg_iovlen = 1; intmsg.msg_control = NULL; intmsg.msg_controllen = 0; intmsg.msg_flags = 0; activesockets++; } connfd = mmgui_netlink_get_connections_monitoring_socket_fd(mmguicore->netlink); if (connfd != -1) { connfdnum = activesockets; pollfds[connfdnum].fd = connfd; pollfds[connfdnum].events = POLLIN; connmsg.msg_name = (void *)mmgui_netlink_get_connections_monitoring_socket_address(mmguicore->netlink); connmsg.msg_namelen = sizeof(struct sockaddr_nl); connmsg.msg_iov = &conniov; connmsg.msg_iovlen = 1; connmsg.msg_control = NULL; connmsg.msg_controllen = 0; connmsg.msg_flags = 0; activesockets++; } /*First we have to get device state*/ ifstatetime = time(NULL); while (TRUE) { pollstatus = poll(pollfds, activesockets, 1000); if (pollstatus > 0) { /*Work thread control*/ if (pollfds[ctlfdnum].revents & POLLIN) { /*Extend buffer if needed*/ recvbytes = recv(ctlfd, NULL, 0, MSG_PEEK | MSG_TRUNC); if (recvbytes > databufsize) { radatabuf = g_try_realloc(databuf, recvbytes); if (radatabuf != NULL) { databufsize = recvbytes; databuf = radatabuf; intiov.iov_len = databufsize; intiov.iov_base = databuf; conniov.iov_len = databufsize; conniov.iov_base = databuf; } } /*Receive data*/ recvbytes = read(ctlfd, &workthreadcmd, sizeof(workthreadcmd)); if (recvbytes > 0) { if (workthreadcmd == MMGUI_THREAD_STOP_CMD) { /*Terminate thread*/ break; } else if (workthreadcmd == MMGUI_THREAD_REFRESH_CMD) { /*Refresh connection state*/ ifstatetime = time(NULL); } } else { g_debug("Work thread: Control command not received\n"); } } } /*Lock mutex and work with device in safe mode*/ #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->workthreadmutex); #else g_mutex_lock(mmguicore->workthreadmutex); #endif currenttime = time(NULL); /*Connections monitoring*/ if ((mmguicore->device != NULL) && (!(mmguicore->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING))) { if (abs((gint)difftime(ifstatetime, currenttime)) <= 15) { /*Save old values*/ g_debug("Requesting network interface state information\n"); oldstate = mmguicore->device->connected; strncpy(oldinterface, mmguicore->device->interface, sizeof(oldinterface)); /*Request new information*/ if (mmguicore_devices_get_connection_status(mmguicore)) { g_debug("Got new interface state\n"); if ((oldstate != mmguicore->device->connected) || (!g_str_equal(oldinterface, mmguicore->device->interface))) { /*State changed, no need to request information more*/ ifstatetime = 0; /*Zero values on disconnect*/ if (!mmguicore->device->connected) { /*Close traffic database session*/ mmgui_trafficdb_session_close(mmguicore->device->trafficdb); /*Zero traffic values in UI*/ mmguicore_traffic_zero(mmguicore); /*Device disconnect signal*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(FALSE), mmguicore->userdata); } } else { /*Get session start timestamp*/ mmguicore->device->sessionstarttime = (time_t)mmguicore_devices_get_connection_timestamp(mmguicore); mmguicore->device->sessiontime = llabs((gint64)difftime(currenttime, mmguicore->device->sessionstarttime)); g_debug("Session start time: %" G_GUINT64_FORMAT ", duration: %" G_GUINT64_FORMAT "\n", (guint64)mmguicore->device->sessionstarttime, mmguicore->device->sessiontime); /*Open traffic database session*/ mmgui_trafficdb_session_new(mmguicore->device->trafficdb, mmguicore->device->sessionstarttime); /*Device connect signal*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(TRUE), mmguicore->userdata); } } g_debug("Interface state changed\n"); } } } } if (pollstatus == 0) { /*Timeout - request data*/ if (mmguicore->device != NULL) { if (mmguicore->device->connected) { /*Interface statistics*/ mmgui_netlink_request_interface_statistics(mmguicore->netlink, mmguicore->device->interface); /*TCP connections - IPv4*/ mmgui_netlink_request_connections_list(mmguicore->netlink, AF_INET); /*TCP connections - IPv6*/ mmgui_netlink_request_connections_list(mmguicore->netlink, AF_INET6); } } } else if (pollstatus > 0) { /*New data available*/ /*Interface monitoring*/ if (pollfds[intfdnum].revents & POLLIN) { /*Extend buffer if needed*/ recvbytes = recv(intfd, NULL, 0, MSG_PEEK | MSG_TRUNC); if (recvbytes > databufsize) { radatabuf = g_try_realloc(databuf, recvbytes); if (radatabuf != NULL) { databufsize = recvbytes; databuf = radatabuf; intiov.iov_len = databufsize; intiov.iov_base = databuf; conniov.iov_len = databufsize; conniov.iov_base = databuf; } } /*Receive data*/ recvbytes = recvmsg(intfd, &intmsg, 0); if (recvbytes) { if (mmgui_netlink_read_interface_event(mmguicore->netlink, databuf, recvbytes, &event)) { /*Traffic statisctics available*/ if (event.type & MMGUI_NETLINK_INTERFACE_EVENT_TYPE_STATS) { if (mmguicore->device != NULL) { if ((mmguicore->device->connected) && (g_str_equal(mmguicore->device->interface, event.ifname))) { /*Count traffic*/ mmguicore_traffic_count(mmguicore, event.rxbytes, event.txbytes); } } } /*Interface created*/ if (event.type & MMGUI_NETLINK_INTERFACE_EVENT_TYPE_ADD) { g_debug("Created network interface event\n"); if ((mmguicore->device != NULL) && (!(mmguicore->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING))) { if ((!mmguicore->device->connected) && (event.up) && (event.running)) { /*PPP or Ethernet interface*/ g_debug("Created network interface event signal\n"); ifstatetime = time(NULL); } else if ((mmguicore->device->connected) && (!event.up) && (!event.running)) { /*Ethernet interface*/ if (g_str_equal(mmguicore->device->interface, event.ifname)) { g_debug("Brought down network interface event signal\n"); ifstatetime = time(NULL); } } } } /*Interface removed*/ if (event.type & MMGUI_NETLINK_INTERFACE_EVENT_TYPE_REMOVE) { g_debug("Removed network interface event\n"); if ((mmguicore->device != NULL) && (!(mmguicore->cmcaps & MMGUI_CONNECTION_MANAGER_CAPS_MONITORING))) { if ((mmguicore->device->connected) && (g_str_equal(mmguicore->device->interface, event.ifname))) { g_debug("Removed network interface event signal\n"); ifstatetime = time(NULL); } } } } } else { g_debug("Work thread: interface event not received\n"); } } /*Connections monitoring*/ if (pollfds[connfdnum].revents & POLLIN) { /*Extend buffer if needed*/ recvbytes = recv(connfd, NULL, 0, MSG_PEEK | MSG_TRUNC); if (recvbytes > databufsize) { radatabuf = g_try_realloc(databuf, recvbytes); if (radatabuf != NULL) { databufsize = recvbytes; databuf = radatabuf; intiov.iov_len = databufsize; intiov.iov_base = databuf; conniov.iov_len = databufsize; conniov.iov_base = databuf; } } /*Receive data*/ recvbytes = recvmsg(connfd, &connmsg, 0); if (recvbytes) { #if GLIB_CHECK_VERSION(2,32,0) g_mutex_lock(&mmguicore->connsyncmutex); #else g_mutex_lock(mmguicore->connsyncmutex); #endif if (mmgui_netlink_read_connections_list(mmguicore->netlink, databuf, recvbytes)) { if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_UPDATE_CONNECTIONS_LIST, mmguicore, mmguicore, mmguicore->userdata); } } #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->connsyncmutex); #else g_mutex_unlock(mmguicore->connsyncmutex); #endif } else { g_debug("Work thread: connections data not received\n"); } } } /*Update internal module state*/ mmguicore_devices_update_state(mmguicore); if (mmguicore->device != NULL) { /*Handle traffic limits*/ mmguicore_traffic_limits(mmguicore); } /*New day time*/ if (difftime(mmguicore->newdaytime, currenttime) <= 0) { /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_SMS_NEW_DAY, mmguicore, NULL, mmguicore->userdata); } mmguicore->newdaytime = mmgui_trafficdb_get_new_day_timesatmp(currenttime, NULL, NULL); } /*Unlock mutex after work finished*/ #if GLIB_CHECK_VERSION(2,32,0) g_mutex_unlock(&mmguicore->workthreadmutex); #else g_mutex_unlock(mmguicore->workthreadmutex); #endif } /*Close thread control pipe descriptor*/ close(mmguicore->workthreadctl[0]); return NULL; } static void mmguicore_traffic_count(mmguicore_t mmguicore, guint64 rxbytes, guint64 txbytes) { mmguidevice_t device; time_t currenttime; guint timeframe; struct _mmgui_traffic_update trafficupd; if (mmguicore == NULL) return; device = mmguicore->device; if (device == NULL) return; currenttime = time(NULL); if ((device->connected) && (device->rxbytes <= rxbytes) && (device->txbytes <= txbytes)) { if (device->speedchecktime != 0) { /*Time period for speed calculation*/ timeframe = (guint)difftime(currenttime, device->speedchecktime); device->sessiontime += timeframe; if (device->speedindex < MMGUI_SPEED_VALUES_NUMBER) { /*Add new speed value*/ device->speedvalues[0][device->speedindex] = (gfloat)((rxbytes - device->rxbytes)*8)/(gfloat)(timeframe*1024); device->speedvalues[1][device->speedindex] = (gfloat)((txbytes - device->txbytes)*8)/(gfloat)(timeframe*1024); device->speedindex++; } else { /*Move speed values and add new one*/ memmove(&device->speedvalues[0][0], &device->speedvalues[0][1], sizeof(device->speedvalues[0]) - sizeof(device->speedvalues[0][0])); memmove(&device->speedvalues[1][0], &device->speedvalues[1][1], sizeof(device->speedvalues[1]) - sizeof(device->speedvalues[1][0])); device->speedvalues[0][MMGUI_SPEED_VALUES_NUMBER-1] = (gfloat)((rxbytes - device->rxbytes)*8)/(gfloat)(timeframe*1024); device->speedvalues[1][MMGUI_SPEED_VALUES_NUMBER-1] = (gfloat)((txbytes - device->txbytes)*8)/(gfloat)(timeframe*1024); } /*Update database*/ trafficupd.fullrxbytes = device->rxbytes; trafficupd.fulltxbytes = device->txbytes; trafficupd.fulltime = device->sessiontime; trafficupd.deltarxbytes = rxbytes - device->rxbytes; trafficupd.deltatxbytes = txbytes - device->txbytes; trafficupd.deltaduration = timeframe; mmgui_trafficdb_traffic_update(mmguicore->device->trafficdb, &trafficupd); } /*Update traffic count*/ device->rxbytes = rxbytes; device->txbytes = txbytes; } /*Set last update time*/ device->speedchecktime = currenttime; /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_NET_STATUS, mmguicore, device, mmguicore->userdata); } } static void mmguicore_traffic_zero(mmguicore_t mmguicore) { mmguidevice_t device; if (mmguicore == NULL) return; device = mmguicore->device; if (device == NULL) return; /*Zero speed values if device is not connected anymore*/ mmguicore->device->speedindex = 0; mmguicore->device->speedvalues[0][0] = 0.0; mmguicore->device->speedvalues[1][0] = 0.0; mmguicore->device->rxbytes = 0; mmguicore->device->txbytes = 0; /*Set last update time*/ mmguicore->device->speedchecktime = time(NULL); /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_NET_STATUS, mmguicore, NULL, mmguicore->userdata); } } static void mmguicore_traffic_limits(mmguicore_t mmguicore) { if (mmguicore == NULL) return; if ((mmguicore->options != NULL) && (mmguicore->device != NULL)) { /*Traffic limit*/ if (mmguicore->options->trafficenabled) { if ((!mmguicore->options->trafficexecuted) && (mmguicore->options->trafficfull < (mmguicore->device->rxbytes + mmguicore->device->txbytes))) { mmguicore->options->trafficexecuted = TRUE; if (mmguicore->options->trafficaction == MMGUI_EVENT_ACTION_DISCONNECT) { if (mmguicore->device_connection_disconnect_func != NULL) { (mmguicore->device_connection_disconnect_func)(mmguicore); } } /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_TRAFFIC_LIMIT, mmguicore, NULL, mmguicore->userdata); } } } /*Time limit*/ if (mmguicore->options->timeenabled) { if ((!mmguicore->options->timeexecuted) && (mmguicore->options->timefull < mmguicore->device->sessiontime)) { mmguicore->options->timeexecuted = TRUE; if (mmguicore->options->timeaction == MMGUI_EVENT_ACTION_DISCONNECT) { if (mmguicore->device_connection_disconnect_func != NULL) { (mmguicore->device_connection_disconnect_func)(mmguicore); } } /*Callback*/ if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_TIME_LIMIT, mmguicore, NULL, mmguicore->userdata); } } } } } static void mmguicore_update_connection_status(mmguicore_t mmguicore, gboolean sendresult, gboolean result) { if (mmguicore == NULL) return; if (!mmguicore->device->connected) { /*Close traffic database session*/ mmgui_trafficdb_session_close(mmguicore->device->trafficdb); /*Zero traffic values in UI*/ mmguicore_traffic_zero(mmguicore); if (sendresult) { if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(result), mmguicore->userdata); } } else { if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(FALSE), mmguicore->userdata); } } } else { /*Get session start timestamp*/ mmguicore->device->sessionstarttime = (time_t)mmguicore_devices_get_connection_timestamp(mmguicore); mmguicore->device->sessiontime = llabs((gint64)difftime(time(NULL), mmguicore->device->sessionstarttime)); /*Open traffic database session*/ mmgui_trafficdb_session_new(mmguicore->device->trafficdb, mmguicore->device->sessionstarttime); if (sendresult) { if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_MODEM_CONNECTION_RESULT, mmguicore, GUINT_TO_POINTER(result), mmguicore->userdata); } } else { if (mmguicore->extcb != NULL) { (mmguicore->extcb)(MMGUI_EVENT_DEVICE_CONNECTION_STATUS, mmguicore, GUINT_TO_POINTER(TRUE), mmguicore->userdata); } } } } modem-manager-gui-0.0.19.1/man/tr/meson.build000664 001750 001750 00000000344 13261703575 020535 0ustar00alexalex000000 000000 custom_target('man-tr', input: 'tr.po', output: 'modem-manager-gui.1.gz', install: true, install_dir: join_paths(get_option('prefix'), get_option('mandir'), 'tr', 'man1'), command: [helper, '@INPUT@', '@OUTPUT@' ] ) modem-manager-gui-0.0.19.1/src/scripts/Makefile000664 001750 001750 00000000454 13261703575 021113 0ustar00alexalex000000 000000 include ../../Makefile_h NMDISPDIR = /etc/NetworkManager/dispatcher.d install: mkdir -p $(INSTALLPREFIX)$(DESTDIR)$(NMDISPDIR) install 95-mmgui-timestamp-notifier $(INSTALLPREFIX)$(DESTDIR)$(NMDISPDIR) uninstall: rm -f $(INSTALLPREFIX)$(DESTDIR)$(NMDISPDIR)/95-mmgui-timestamp-notifier modem-manager-gui-0.0.19.1/resources/000775 001750 001750 00000000000 13261703575 017204 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/modem-manager-gui.1000664 001750 001750 00000002072 13261703575 021323 0ustar00alexalex000000 000000 .TH modem-manager-gui "1" "Nov 2017" "Modem Manager GUI v0.0.19" "User Commands" .SH NAME modem-manager-gui \- simple graphical interface for Modem Manager daemon. .SH SYNOPSIS .B modem-manager-gui [ \-i ] [ \-m module ] [ \-c module ] [ \-l ]... .SH DESCRIPTION .PP This program is simple graphical interface for Modem Manager 0.6/0.7, Wader and oFono daemons using dbus interface. .TP \fB\-i, \-\-invisible\fR Do not show window on start .TP \fB\-m, \-\-mmmodule\fR Use specified modem management module .TP \fB\-c, \-\-cmmodule\fR Use specified connection management module .TP \fB\-l, \-\-listmodules\fR List all available modules and exit .SH AUTHOR Written by Alex. See the about dialog for all contributors. .SH "REPORTING BUGS" Report bugs to , or to the support forum section at . .SH COPYRIGHT Copyright \(co 2012-2017 Alex .br This is free software. You may redistribute copies of it under the terms of the GNU General Public License . .SH "SEE ALSO" \fBmmcli\fR(1) modem-manager-gui-0.0.19.1/src/scan-page.h000664 001750 001750 00000002740 13261703575 017773 0ustar00alexalex000000 000000 /* * scan-page.h * * Copyright 2012-2014 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __SCAN_PAGE_H__ #define __SCAN_PAGE_H__ #include #include "main.h" enum _mmgui_main_scanlist_columns { MMGUI_MAIN_SCANLIST_OPERATOR = 0, MMGUI_MAIN_SCANLIST_NAME, MMGUI_MAIN_SCANLIST_IDENIFIER, MMGUI_MAIN_SCANLIST_AVAILABILITY, MMGUI_MAIN_SCANLIST_COLUMNS }; /*SCAN*/ void mmgui_main_scan_start(mmgui_application_t mmguiapp); void mmgui_main_scan_start_button_clicked_signal(GObject *object, gpointer data); void mmgui_main_scan_list_fill(mmgui_application_t mmguiapp, mmguicore_t mmguicore, GSList *netlist); void mmgui_main_scan_list_init(mmgui_application_t mmguiapp); void mmgui_main_scan_state_clear(mmgui_application_t mmguiapp); #endif /* __SCAN_PAGE_H__ */ modem-manager-gui-0.0.19.1/src/addressbooks.h000664 001750 001750 00000032245 13261703575 020623 0ustar00alexalex000000 000000 /* * addressbooks.h * * Copyright 2013 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __ADDRESSBOOKS_H__ #define __ADDRESSBOOKS_H__ #include #include #include #include #include "mmguicore.h" /*For contact structure definition*/ #include "libpaths.h" /*GNOME addressbook contact fields*/ typedef enum { E_CONTACT_UID = 1, /* string field */ E_CONTACT_FILE_AS, /* string field */ E_CONTACT_BOOK_UID, /* string field */ /* Name fields */ E_CONTACT_FULL_NAME, /* string field */ E_CONTACT_GIVEN_NAME, /* synthetic string field */ E_CONTACT_FAMILY_NAME, /* synthetic string field */ E_CONTACT_NICKNAME, /* string field */ /* Email fields */ E_CONTACT_EMAIL_1, /* synthetic string field */ E_CONTACT_EMAIL_2, /* synthetic string field */ E_CONTACT_EMAIL_3, /* synthetic string field */ E_CONTACT_EMAIL_4, /* synthetic string field */ E_CONTACT_MAILER, /* string field */ /* Address Labels */ E_CONTACT_ADDRESS_LABEL_HOME, /* synthetic string field */ E_CONTACT_ADDRESS_LABEL_WORK, /* synthetic string field */ E_CONTACT_ADDRESS_LABEL_OTHER, /* synthetic string field */ /* Phone fields */ E_CONTACT_PHONE_ASSISTANT, E_CONTACT_PHONE_BUSINESS, E_CONTACT_PHONE_BUSINESS_2, E_CONTACT_PHONE_BUSINESS_FAX, E_CONTACT_PHONE_CALLBACK, E_CONTACT_PHONE_CAR, E_CONTACT_PHONE_COMPANY, E_CONTACT_PHONE_HOME, E_CONTACT_PHONE_HOME_2, E_CONTACT_PHONE_HOME_FAX, E_CONTACT_PHONE_ISDN, E_CONTACT_PHONE_MOBILE, E_CONTACT_PHONE_OTHER, E_CONTACT_PHONE_OTHER_FAX, E_CONTACT_PHONE_PAGER, E_CONTACT_PHONE_PRIMARY, E_CONTACT_PHONE_RADIO, E_CONTACT_PHONE_TELEX, E_CONTACT_PHONE_TTYTDD, /* Organizational fields */ E_CONTACT_ORG, /* string field */ E_CONTACT_ORG_UNIT, /* string field */ E_CONTACT_OFFICE, /* string field */ E_CONTACT_TITLE, /* string field */ E_CONTACT_ROLE, /* string field */ E_CONTACT_MANAGER, /* string field */ E_CONTACT_ASSISTANT, /* string field */ /* Web fields */ E_CONTACT_HOMEPAGE_URL, /* string field */ E_CONTACT_BLOG_URL, /* string field */ /* Contact categories */ E_CONTACT_CATEGORIES, /* string field */ /* Collaboration fields */ E_CONTACT_CALENDAR_URI, /* string field */ E_CONTACT_FREEBUSY_URL, /* string field */ E_CONTACT_ICS_CALENDAR, /* string field */ E_CONTACT_VIDEO_URL, /* string field */ /* misc fields */ E_CONTACT_SPOUSE, /* string field */ E_CONTACT_NOTE, /* string field */ E_CONTACT_IM_AIM_HOME_1, /* Synthetic string field */ E_CONTACT_IM_AIM_HOME_2, /* Synthetic string field */ E_CONTACT_IM_AIM_HOME_3, /* Synthetic string field */ E_CONTACT_IM_AIM_WORK_1, /* Synthetic string field */ E_CONTACT_IM_AIM_WORK_2, /* Synthetic string field */ E_CONTACT_IM_AIM_WORK_3, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_HOME_1, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_HOME_2, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_HOME_3, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_WORK_1, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_WORK_2, /* Synthetic string field */ E_CONTACT_IM_GROUPWISE_WORK_3, /* Synthetic string field */ E_CONTACT_IM_JABBER_HOME_1, /* Synthetic string field */ E_CONTACT_IM_JABBER_HOME_2, /* Synthetic string field */ E_CONTACT_IM_JABBER_HOME_3, /* Synthetic string field */ E_CONTACT_IM_JABBER_WORK_1, /* Synthetic string field */ E_CONTACT_IM_JABBER_WORK_2, /* Synthetic string field */ E_CONTACT_IM_JABBER_WORK_3, /* Synthetic string field */ E_CONTACT_IM_YAHOO_HOME_1, /* Synthetic string field */ E_CONTACT_IM_YAHOO_HOME_2, /* Synthetic string field */ E_CONTACT_IM_YAHOO_HOME_3, /* Synthetic string field */ E_CONTACT_IM_YAHOO_WORK_1, /* Synthetic string field */ E_CONTACT_IM_YAHOO_WORK_2, /* Synthetic string field */ E_CONTACT_IM_YAHOO_WORK_3, /* Synthetic string field */ E_CONTACT_IM_MSN_HOME_1, /* Synthetic string field */ E_CONTACT_IM_MSN_HOME_2, /* Synthetic string field */ E_CONTACT_IM_MSN_HOME_3, /* Synthetic string field */ E_CONTACT_IM_MSN_WORK_1, /* Synthetic string field */ E_CONTACT_IM_MSN_WORK_2, /* Synthetic string field */ E_CONTACT_IM_MSN_WORK_3, /* Synthetic string field */ E_CONTACT_IM_ICQ_HOME_1, /* Synthetic string field */ E_CONTACT_IM_ICQ_HOME_2, /* Synthetic string field */ E_CONTACT_IM_ICQ_HOME_3, /* Synthetic string field */ E_CONTACT_IM_ICQ_WORK_1, /* Synthetic string field */ E_CONTACT_IM_ICQ_WORK_2, /* Synthetic string field */ E_CONTACT_IM_ICQ_WORK_3, /* Synthetic string field */ /* Convenience field for getting a name from the contact. * Returns the first one of[File-As, Full Name, Org, Email1] * to be set */ E_CONTACT_REV, /* string field to hold time of last update to this vcard */ E_CONTACT_NAME_OR_ORG, /* Address fields */ E_CONTACT_ADDRESS, /* Multi-valued structured (EContactAddress) */ E_CONTACT_ADDRESS_HOME, /* synthetic structured field (EContactAddress) */ E_CONTACT_ADDRESS_WORK, /* synthetic structured field (EContactAddress) */ E_CONTACT_ADDRESS_OTHER, /* synthetic structured field (EContactAddress) */ E_CONTACT_CATEGORY_LIST, /* multi-valued */ /* Photo/Logo */ E_CONTACT_PHOTO, /* structured field (EContactPhoto) */ E_CONTACT_LOGO, /* structured field (EContactPhoto) */ E_CONTACT_NAME, /* structured field (EContactName) */ E_CONTACT_EMAIL, /* Multi-valued */ /* Instant Messaging fields */ E_CONTACT_IM_AIM, /* Multi-valued */ E_CONTACT_IM_GROUPWISE, /* Multi-valued */ E_CONTACT_IM_JABBER, /* Multi-valued */ E_CONTACT_IM_YAHOO, /* Multi-valued */ E_CONTACT_IM_MSN, /* Multi-valued */ E_CONTACT_IM_ICQ, /* Multi-valued */ E_CONTACT_WANTS_HTML, /* boolean field */ /* fields used for describing contact lists. a contact list * is just a contact with _IS_LIST set to true. the members * are listed in the _EMAIL field. */ E_CONTACT_IS_LIST, /* boolean field */ E_CONTACT_LIST_SHOW_ADDRESSES, /* boolean field */ E_CONTACT_BIRTH_DATE, /* structured field (EContactDate) */ E_CONTACT_ANNIVERSARY, /* structured field (EContactDate) */ /* Security Fields */ E_CONTACT_X509_CERT, /* structured field (EContactCert) */ E_CONTACT_IM_GADUGADU_HOME_1, /* Synthetic string field */ E_CONTACT_IM_GADUGADU_HOME_2, /* Synthetic string field */ E_CONTACT_IM_GADUGADU_HOME_3, /* Synthetic string field */ E_CONTACT_IM_GADUGADU_WORK_1, /* Synthetic string field */ E_CONTACT_IM_GADUGADU_WORK_2, /* Synthetic string field */ E_CONTACT_IM_GADUGADU_WORK_3, /* Synthetic string field */ E_CONTACT_IM_GADUGADU, /* Multi-valued */ E_CONTACT_GEO, /* structured field (EContactGeo) */ E_CONTACT_TEL, /* list of strings */ E_CONTACT_IM_SKYPE_HOME_1, /* Synthetic string field */ E_CONTACT_IM_SKYPE_HOME_2, /* Synthetic string field */ E_CONTACT_IM_SKYPE_HOME_3, /* Synthetic string field */ E_CONTACT_IM_SKYPE_WORK_1, /* Synthetic string field */ E_CONTACT_IM_SKYPE_WORK_2, /* Synthetic string field */ E_CONTACT_IM_SKYPE_WORK_3, /* Synthetic string field */ E_CONTACT_IM_SKYPE, /* Multi-valued */ E_CONTACT_SIP, E_CONTACT_IM_GOOGLE_TALK_HOME_1, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK_HOME_2, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK_HOME_3, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK_WORK_1, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK_WORK_2, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK_WORK_3, /* Synthetic string field */ E_CONTACT_IM_GOOGLE_TALK, /* Multi-valued */ E_CONTACT_IM_TWITTER, /* Multi-valued */ E_CONTACT_FIELD_LAST, E_CONTACT_FIELD_FIRST = E_CONTACT_UID, /* useful constants */ E_CONTACT_LAST_SIMPLE_STRING = E_CONTACT_NAME_OR_ORG, E_CONTACT_FIRST_PHONE_ID = E_CONTACT_PHONE_ASSISTANT, E_CONTACT_LAST_PHONE_ID = E_CONTACT_PHONE_TTYTDD, E_CONTACT_FIRST_EMAIL_ID = E_CONTACT_EMAIL_1, E_CONTACT_LAST_EMAIL_ID = E_CONTACT_EMAIL_4, E_CONTACT_FIRST_ADDRESS_ID = E_CONTACT_ADDRESS_HOME, E_CONTACT_LAST_ADDRESS_ID = E_CONTACT_ADDRESS_OTHER, E_CONTACT_FIRST_LABEL_ID = E_CONTACT_ADDRESS_LABEL_HOME, E_CONTACT_LAST_LABEL_ID = E_CONTACT_ADDRESS_LABEL_OTHER } EContactField; /*GNOME addressbook structures*/ typedef struct _ESource ESource; typedef struct _ESourceRegistry ESourceRegistry; typedef struct _EBook EBook; typedef struct _EBookClient EBookClient; typedef struct _EClient EClient; typedef struct _EBookQuery EBookQuery; typedef struct _EContact EContact; /*GNOME addressbook function prototypes*/ typedef EBookQuery *(*e_book_query_field_exists_func)(EContactField field); typedef EBookQuery *(*e_book_query_or_func)(gint nqs, EBookQuery **qs, gboolean unref); typedef ESourceRegistry *(*e_source_registry_new_sync_func)(gpointer cancellable, GError **error); typedef ESource *(*e_source_registry_ref_builtin_address_book_func)(ESourceRegistry *registry); typedef const gchar *(*e_source_get_display_name_func)(ESource *source); typedef EBookClient *(*e_book_client_new_func)(ESource *source, GError **error); typedef gboolean (*e_client_open_sync_func)(EClient *client, gboolean only_if_exists, gpointer cancellable, GError **error); typedef EClient *(*e_book_client_connect_sync_func)(ESource *source, gpointer cancellable, GError **error); typedef EClient *(*e_book_client_connect_sync316_func)(ESource *source, guint32 wait_for_connected_seconds, gpointer cancellable, GError **error); typedef gchar *(*e_book_query_to_string_func)(EBookQuery *q); typedef gboolean (*e_book_client_get_contacts_sync_func)(EBookClient *client, const gchar *sexp, GSList **out_contacts, gpointer cancellable, GError **error); typedef EBook *(*e_book_new_system_addressbook_func)(GError **error); typedef ESource *(*e_book_get_source_func)(EBook *book); typedef gboolean (*e_book_open_func)(EBook *book, gboolean only_if_exists, GError **error); typedef gboolean (*e_book_get_contacts_func)(EBook *book, EBookQuery *query, GList **contacts, GError **error); typedef void (*e_book_query_unref_func)(EBookQuery *q); typedef gconstpointer (*e_contact_get_const_func)(EContact *contact, EContactField field_id); typedef gpointer (*e_contact_get_func)(EContact *contact, EContactField field_id); struct _mmgui_addressbooks { //Modules GModule *ebookmodule; //GNOME addressbook functions e_book_query_field_exists_func e_book_query_field_exists; e_book_query_or_func e_book_query_or; e_source_registry_new_sync_func e_source_registry_new_sync; e_source_registry_ref_builtin_address_book_func e_source_registry_ref_builtin_address_book; e_source_get_display_name_func e_source_get_display_name; e_book_client_new_func e_book_client_new; e_client_open_sync_func e_client_open_sync; e_book_client_connect_sync_func e_book_client_connect_sync; e_book_client_connect_sync316_func e_book_client_connect_sync316; e_book_query_to_string_func e_book_query_to_string; e_book_client_get_contacts_sync_func e_book_client_get_contacts_sync; e_book_new_system_addressbook_func e_book_new_system_addressbook; e_book_get_source_func e_book_get_source; e_book_open_func e_book_open; e_book_get_contacts_func e_book_get_contacts; e_book_query_unref_func e_book_query_unref; e_contact_get_const_func e_contact_get_const; e_contact_get_func e_contact_get; //GNOME stuff gboolean gnomesupported; GSList *gnomecontacts; const gchar *gnomesourcename; //Akonadi access data gint aksocket; //KDE stuff gboolean kdesupported; GSList *kdecontacts; //Counter for internal contacts identification guint counter; /*Callback*/ mmgui_event_ext_callback callback; /*Library cache*/ mmgui_libpaths_cache_t libcache; /*User data pointer*/ gpointer userdata; /*Work thread*/ GThread *workthread; }; typedef struct _mmgui_addressbooks *mmgui_addressbooks_t; mmgui_addressbooks_t mmgui_addressbooks_new(mmgui_event_ext_callback callback, mmgui_libpaths_cache_t libcache, gpointer userdata); gboolean mmgui_addressbooks_get_gnome_contacts_available(mmgui_addressbooks_t addressbooks); gboolean mmgui_addressbooks_get_kde_contacts_available(mmgui_addressbooks_t addressbooks); GSList *mmgui_addressbooks_get_gnome_contacts_list(mmgui_addressbooks_t addressbooks); GSList *mmgui_addressbooks_get_kde_contacts_list(mmgui_addressbooks_t addressbooks); mmgui_contact_t mmgui_addressbooks_get_gnome_contact(mmgui_addressbooks_t addressbooks, guint index); mmgui_contact_t mmgui_addressbooks_get_kde_contact(mmgui_addressbooks_t addressbooks, guint index); void mmgui_addressbooks_close(mmgui_addressbooks_t addressbooks); #endif /* __ADDRESSBOOKS_H__ */ modem-manager-gui-0.0.19.1/src/addressbooks.c000664 001750 001750 00000123034 13261703575 020613 0ustar00alexalex000000 000000 /* * addressbooks.c * * Copyright 2013-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mmguicore.h" #include "dbus-utils.h" #include "vcard.h" #include "addressbooks.h" #define MMGUI_ADDRESSBOOKS_GNOME_CONNECT_TIMEOUT 15 #define MMGUI_ADDRESSBOOKS_AKONADI_LINK_PATH "%s/.local/share/akonadi/socket-%s" #define MMGUI_ADDRESSBOOKS_AKONADI_SOCKET_PATH "%s/akonadiserver.socket" #define MMGUI_ADDRESSBOOKS_AKONADI_DBUS_INTERFACE "org.freedesktop.Akonadi.Control" #define MMGUI_ADDRESSBOOKS_AKONADI_NULL_COMMAND "\r\n" #define MMGUI_ADDRESSBOOKS_AKONADI_LOGIN_COMMAND "LOGIN mmgui mmgui\r\n" #define MMGUI_ADDRESSBOOKS_AKONADI_INFO_COMMAND "X-AKLSUB 0 INF ()\r\n" #define MMGUI_ADDRESSBOOKS_AKONADI_SELECT_COMMAND "SELECT SILENT %u\r\n" #define MMGUI_ADDRESSBOOKS_AKONADI_FETCH_COMMAND "FETCH 1:* FULLPAYLOAD\r\n" enum _mmgui_addressbooks_akonadi_command_status_id { MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK = 0, MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_NO, MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_BAD }; enum _mmgui_addressbooks_akonadi_status { MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ALREADY_RUNNING = 2, MMGUI_ADDRESSBOOKS_AKONADI_STATUS_SUCCESS = 1 }; struct _mmgui_addressbooks_akonadi_command { /*Request*/ gchar *request; guint requestid; gsize requestlen; gchar requestprefix[16]; gsize requestprefixlen; /*Answer*/ gint statusid; gchar *statusmessage; gchar *answer; }; typedef struct _mmgui_addressbooks_akonadi_command *mmgui_addressbooks_akonadi_command_t; struct _mmgui_addressbooks_akonadi_collection { gint id; gchar *name; }; typedef struct _mmgui_addressbooks_akonadi_collection *mmgui_addressbooks_akonadi_collection_t; //KDE (Akonadi) static gint mmgui_addressbooks_open_kde_socket(void); static void mmgui_addressbooks_fill_akonadi_command_struct(mmgui_addressbooks_akonadi_command_t command, const gchar *format, ...); static void mmgui_addressbooks_free_akonadi_command_struct(mmgui_addressbooks_akonadi_command_t command); static gboolean mmgui_addressbooks_get_akonadi_command_status(gchar *status, mmgui_addressbooks_akonadi_command_t command); static gboolean mmgui_addressbooks_execute_akonadi_command(mmgui_addressbooks_t addressbooks, mmgui_addressbooks_akonadi_command_t command); static guint mmgui_addressbooks_akonadi_get_integer(gchar *text, gchar *prefix, gchar *suffix); static gchar *mmgui_addressbooks_akonadi_get_substring(gchar *text, gchar *prefix, gchar *suffix); static gboolean mmgui_addressbooks_akonadi_find_substring(gchar *text, gchar *prefix, gchar *suffix, gchar *substring); static GSList *mmgui_addressbooks_akonadi_get_collections(const gchar *list); static void mmgui_addressbooks_akonadi_free_collections_foreach(gpointer data, gpointer user_data); static guint mmgui_addressbooks_akonadi_collection_get_contacts(mmgui_addressbooks_t addressbooks, mmgui_addressbooks_akonadi_collection_t collection, const gchar *vcardlist); static gboolean mmgui_addressbooks_get_kde_contacts(mmgui_addressbooks_t addressbooks); //GNOME (Evolution data server) static void mmgui_addressbooks_get_gnome_contacts_foreach(gpointer data, gpointer user_data); static gboolean mmgui_addressbooks_get_gnome_contacts(mmgui_addressbooks_t addressbooks, mmgui_libpaths_cache_t libcache); //Other static gpointer mmguicore_addressbooks_work_thread(gpointer data); static void mmgui_addressbooks_free_contacts_list_foreach(gpointer data, gpointer user_data); //KDE (Akonadi) static gint mmgui_addressbooks_open_kde_socket(void) { const gchar *homedir; struct utsname unamebuf; gchar *linkpath, *linkvalue; gchar *socketpath; struct stat statbuf; GError *error; gint socketfd; struct sockaddr_un address; homedir = g_get_home_dir(); if (uname(&unamebuf) == -1) { g_debug("Failed to get hostname\n"); return -1; } linkpath = g_strdup_printf(MMGUI_ADDRESSBOOKS_AKONADI_LINK_PATH, homedir, unamebuf.nodename); error = NULL; linkvalue = g_file_read_link((const gchar *)linkpath, &error); g_free(linkpath); if ((linkvalue == NULL) && (error != NULL)) { g_debug("Failed to read symlink: %s\n", error->message); g_error_free(error); return -1; } socketpath = g_strdup_printf(MMGUI_ADDRESSBOOKS_AKONADI_SOCKET_PATH, linkvalue); g_free(linkvalue); if (stat(socketpath, &statbuf) != 0) { g_debug("Failed to locate Akonadi server socket\n"); g_free(socketpath); return -1; } if (!S_ISSOCK(statbuf.st_mode)) { g_debug("Wrong type of Akonadi IPC\n"); g_free(socketpath); return -1; } socketfd = socket(AF_UNIX, SOCK_STREAM, 0); if(socketfd < 0) { g_debug("Failed to open socket\n"); g_free(socketpath); return -1; } memset(&address, 0, sizeof(struct sockaddr_un)); address.sun_family = AF_UNIX; strncpy(address.sun_path, socketpath, sizeof(address.sun_path)); g_free(socketpath); if(connect(socketfd, (struct sockaddr *)&address, sizeof(struct sockaddr_un)) != 0) { g_debug("Failed to connect socket\n"); return -1; } return socketfd; } static void mmgui_addressbooks_fill_akonadi_command_struct(mmgui_addressbooks_akonadi_command_t command, const gchar *format, ...) { gssize reqsegmsize, reqlen; gchar *reqsegm, *newreqsegm; va_list args; if ((command == NULL) || (format == NULL)) return; /*Request prefix*/ memset(command->requestprefix, 0, sizeof(command->requestprefix)); if (command->requestid > 0) { /*Regular request*/ command->requestprefixlen = snprintf(command->requestprefix, sizeof(command->requestprefix), "A%u ", command->requestid); } else { /*Server greeting*/ command->requestprefixlen = snprintf(command->requestprefix, sizeof(command->requestprefix), "* "); } /*Clear request*/ if (command->request != NULL) { g_free(command->request); command->request = NULL; } if (command->requestid > 0) { /*Form request*/ reqsegmsize = 100 - command->requestprefixlen; reqsegm = g_malloc0(reqsegmsize); while (TRUE) { /*Try to use allocated segment*/ va_start(args, format); reqlen = vsnprintf(reqsegm + command->requestprefixlen, reqsegmsize, format, args); va_end(args); /*Test returned value*/ if (reqlen < 0) { command->request = NULL; command->requestlen = 0; break; } /*Test if request is ready and return*/ if (reqlen < reqsegmsize) { /*Add prefix*/ memcpy(reqsegm, command->requestprefix, command->requestprefixlen); /*Return request*/ command->request = reqsegm; command->requestlen = (gsize)reqlen + command->requestprefixlen; break; } /*Increase segment size*/ reqsegmsize = reqlen + 50; /*Reallocate segment*/ newreqsegm = g_realloc(reqsegm, reqsegmsize); if (newreqsegm != NULL) { /*Zero reallocated memory before use*/ memset(newreqsegm, 0, sizeof(reqsegmsize)); reqsegm = newreqsegm; } else { /*No chance to reallocate*/ command->request = NULL; command->requestlen = 0; break; } } } else { /*No request must be sent*/ command->request = NULL; command->requestlen = 0; } /*Next request ID*/ command->requestid++; /*Set default command status id*/ command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK; /*Clear server status message*/ if (command->statusmessage != NULL) { g_free(command->statusmessage); command->statusmessage = NULL; } /*Clear answer*/ if (command->answer != NULL) { g_free(command->answer); command->answer = NULL; } } static void mmgui_addressbooks_free_akonadi_command_struct(mmgui_addressbooks_akonadi_command_t command) { if (command == NULL) return; /*Clear request prefix*/ memset(command->requestprefix, 0, sizeof(command->requestprefix)); command->requestprefixlen = 0; /*Reset request ID*/ command->requestid = 0; /*Clear request*/ if (command->request != NULL) { g_free(command->request); command->request = NULL; } command->requestlen = 0; /*Set default command status id*/ command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK; /*Clear server status message*/ if (command->statusmessage != NULL) { g_free(command->statusmessage); command->statusmessage = NULL; } /*Clear answer*/ if (command->answer != NULL) { g_free(command->answer); command->answer = NULL; } } static gboolean mmgui_addressbooks_get_akonadi_command_status(gchar *status, mmgui_addressbooks_akonadi_command_t command) { if ((status == NULL) || (command == NULL)) return FALSE; /*Get status identifier*/ if ((status[0] == 'O') && (status[1] == 'K')) { command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK; } else if ((status[0] == 'N') && (status[1] == 'O')) { command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_NO; } else if ((status[0] == 'B') && (status[1] == 'A') && (status[2] == 'D')) { command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_BAD; } else { command->statusid = MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_NO; } /*Get status message*/ command->statusmessage = strchr(status, ' '); if (command->statusmessage != NULL) { command->statusmessage = g_strdup(command->statusmessage + 1); } return TRUE; } static gboolean mmgui_addressbooks_execute_akonadi_command(mmgui_addressbooks_t addressbooks, mmgui_addressbooks_akonadi_command_t command) { GString *fullanswer; gchar buffer[1024]; gint res, bytes, i; gboolean completed; if ((addressbooks == NULL) || (command == NULL)) return FALSE; if (command->request != NULL) { bytes = send(addressbooks->aksocket, command->request, command->requestlen, 0); if (bytes <= 0) { return FALSE; } } fullanswer = g_string_new(NULL); completed = FALSE; bytes = 0; memset(buffer, 0, sizeof(buffer)); do { res = recv(addressbooks->aksocket, buffer, sizeof(buffer)-1, 0); if (res > 0) { bytes += res; buffer[res] = '\0'; fullanswer = g_string_append(fullanswer, buffer); if ((fullanswer->len > command->requestprefixlen+2) && (fullanswer->str[fullanswer->len-2] == '\r') && (fullanswer->str[fullanswer->len-1] == '\n')) { for (i=fullanswer->len-4; i>=0; i--) { /*Multiline answer*/ if ((fullanswer->str[i] == '\r') && (fullanswer->str[i+1] == '\n')) { if (strncmp(fullanswer->str+i+2, command->requestprefix, command->requestprefixlen) == 0) { completed = mmgui_addressbooks_get_akonadi_command_status(fullanswer->str+i+2+command->requestprefixlen, command); fullanswer = g_string_truncate(fullanswer, i); command->answer = g_string_free(fullanswer, FALSE); break; } } else if (i == 0) { /*Single line answer*/ if (strncmp(fullanswer->str, command->requestprefix, command->requestprefixlen) == 0) { completed = mmgui_addressbooks_get_akonadi_command_status(fullanswer->str+command->requestprefixlen, command); command->answer = g_string_free(fullanswer, TRUE); break; } } } } } else { break; } } while ((res != 0) && (!completed)); return completed; } static guint mmgui_addressbooks_akonadi_get_integer(gchar *text, gchar *prefix, gchar *suffix) { gchar *start, *end; gsize fragmentlen; gint i, d; guint mult, res; gchar curdigit; gchar digits[2][10] = {{'0','1','2','3','4','5','6','7','8','9'}, {0,1,2,3,4,5,6,7,8,9}}; if (text == NULL) return 0; start = text; mult = 1; res = 0; /*Number start*/ if (prefix != NULL) { start = strstr(text, prefix); if (start != NULL) { start += strlen(prefix); } } /*Number end*/ end = strstr(start + 1, suffix); if (end != NULL) { fragmentlen = end - start; if (fragmentlen > 0) { for (i=fragmentlen-1; i>=0; i--) { /*Seqrch for digit*/ curdigit = -1; for (d=0; d<10; d++) { if (digits[0][d] == start[i]) { curdigit = digits[1][d]; break; } } /*Add digit*/ if (curdigit != -1) { res += mult * curdigit; mult *= 10; } else { res = 0; break; } } } } return res; } static gchar *mmgui_addressbooks_akonadi_get_substring(gchar *text, gchar *prefix, gchar *suffix) { gchar *start, *end; gsize fragmentlen; gchar *res; if (text == NULL) return NULL; start = text; res = NULL; /*Substring start*/ if (prefix != NULL) { start = strstr(text, prefix); if (start != NULL) { start += strlen(prefix); } } /*Substring end*/ end = strstr(start + 1, suffix); if (end != NULL) { fragmentlen = end - start; if (fragmentlen > 0) { res = g_malloc0(fragmentlen+1); strncpy(res, start, fragmentlen); } } return res; } static gboolean mmgui_addressbooks_akonadi_find_substring(gchar *text, gchar *prefix, gchar *suffix, gchar *substring) { gchar *start, *end; gsize fragmentlen; gboolean res; if ((text == NULL) || (substring == NULL)) return FALSE; start = text; res = FALSE; /*Substring start*/ if (prefix != NULL) { start = strstr(text, prefix); if (start != NULL) { start += strlen(prefix); } } /*Substring end*/ end = strstr(start + 1, suffix); if (end != NULL) { fragmentlen = end - start; if (fragmentlen > 0) { if (strncmp(start, substring, fragmentlen) == 0) { res = TRUE; } } } return res; } static GSList *mmgui_addressbooks_akonadi_get_collections(const gchar *list) { GSList *collections; gchar **listrows; gint i; mmgui_addressbooks_akonadi_collection_t collection; if (list == NULL) return NULL; listrows = g_strsplit(list, "\r\n", 0); if (listrows == NULL) return NULL; i = 0; collections = NULL; while (listrows[i] != NULL) { if ((strstr(listrows[i], "application/x-vnd.kde.contactgroup") != NULL) && (strstr(listrows[i], "text/directory") != NULL)) { collection = g_new0(struct _mmgui_addressbooks_akonadi_collection, 1); collection->id = mmgui_addressbooks_akonadi_get_integer(listrows[i], "* ", " "); collection->name = mmgui_addressbooks_akonadi_get_substring(listrows[i], " (NAME \"", "\" MIMETYPE "); collections = g_slist_prepend(collections, collection); } i++; } g_strfreev(listrows); return collections; } static void mmgui_addressbooks_akonadi_free_collections_foreach(gpointer data, gpointer user_data) { mmgui_addressbooks_akonadi_collection_t collection; collection = (mmgui_addressbooks_akonadi_collection_t)data; if (collection->name != NULL) { g_free(collection->name); } } static guint mmgui_addressbooks_akonadi_collection_get_contacts(mmgui_addressbooks_t addressbooks, mmgui_addressbooks_akonadi_collection_t collection, const gchar *vcardlist) { gchar **vcardlistrows; GSList *vcardrows; gboolean validrow; gint i, vcardnum; if ((addressbooks == NULL) || (collection == NULL) || (vcardlist == NULL)) return 0; vcardlistrows = g_strsplit(vcardlist, "\r\n", 0); if (vcardlistrows == NULL) return 0; i = 0; validrow = FALSE; vcardrows = NULL; while (vcardlistrows[i] != NULL) { if ((vcardlistrows[i][0] == '*') && (mmgui_addressbooks_akonadi_find_substring(vcardlistrows[i], "MIMETYPE \"", "\" COLLECTIONID", "text/directory"))) { /*VCard start*/ validrow = TRUE; } else if (vcardlistrows[i][0] == ')') { /*VCard end*/ validrow = FALSE; } else { if (validrow) { vcardrows = g_slist_prepend(vcardrows, vcardlistrows[i]); } } i++; } if (vcardrows != NULL) { vcardrows = g_slist_reverse(vcardrows); /*Parse vcards*/ vcardnum = vcard_parse_list(vcardrows, &(addressbooks->kdecontacts), collection->name); /*Free linked list*/ g_slist_free(vcardrows); } /*Free strings list*/ g_strfreev(vcardlistrows); return vcardnum; } static gboolean mmgui_addressbooks_get_kde_contacts(mmgui_addressbooks_t addressbooks) { struct _mmgui_addressbooks_akonadi_command command; guint protocol; GSList *collections, *iterator; mmgui_addressbooks_akonadi_collection_t collection; memset(&command, 0, sizeof(command)); mmgui_addressbooks_fill_akonadi_command_struct(&command, MMGUI_ADDRESSBOOKS_AKONADI_NULL_COMMAND); /*Greeting*/ if (mmgui_addressbooks_execute_akonadi_command(addressbooks, &command)) { if (command.statusid == MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK) { protocol = mmgui_addressbooks_akonadi_get_integer(command.statusmessage, "[PROTOCOL ", "]"); if (protocol < 33) { g_debug("Protocol isn't supported: %u\n", protocol); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } } else { g_debug("Unable to get protocol number: %s\n", command.statusmessage); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } } else { g_debug("Failed to receive protocol number"); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } /*Login*/ mmgui_addressbooks_fill_akonadi_command_struct(&command, MMGUI_ADDRESSBOOKS_AKONADI_LOGIN_COMMAND); if (mmgui_addressbooks_execute_akonadi_command(addressbooks, &command)) { if (command.statusid != MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK) { g_debug("Unable to login: %s\n", command.statusmessage); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } } else { g_debug("Failed to send login request"); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } /*Info*/ mmgui_addressbooks_fill_akonadi_command_struct(&command, MMGUI_ADDRESSBOOKS_AKONADI_INFO_COMMAND); if (mmgui_addressbooks_execute_akonadi_command(addressbooks, &command)) { if (command.statusid == MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK) { collections = mmgui_addressbooks_akonadi_get_collections((const gchar *)command.answer); if (collections == NULL) { g_debug("Unable to get collections identifiers\n"); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } } else { g_debug("Unable to get server info: %s\n", command.statusmessage); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } } else { g_debug("Failed to receive Akonadi information"); mmgui_addressbooks_free_akonadi_command_struct(&command); return FALSE; } /*Select+Fetch*/ if (collections != NULL) { collections = g_slist_reverse(collections); for (iterator = collections; iterator != NULL; iterator = iterator->next) { collection = (mmgui_addressbooks_akonadi_collection_t)iterator->data; if (collection != NULL) { /*Select*/ mmgui_addressbooks_fill_akonadi_command_struct(&command, MMGUI_ADDRESSBOOKS_AKONADI_SELECT_COMMAND, collection->id); if (mmgui_addressbooks_execute_akonadi_command(addressbooks, &command)) { if (command.statusid != MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK) { g_debug("Unable to select collection: %s\n", command.statusmessage); continue; } } else { g_debug("Failed to send select request"); continue; } /*Fetch*/ mmgui_addressbooks_fill_akonadi_command_struct(&command, MMGUI_ADDRESSBOOKS_AKONADI_FETCH_COMMAND); if (mmgui_addressbooks_execute_akonadi_command(addressbooks, &command)) { if (command.statusid == MMGUI_ADDRESSBOOKS_AKONADI_STATUS_ID_OK) { mmgui_addressbooks_akonadi_collection_get_contacts(addressbooks, collection, (const gchar *)command.answer); } else { g_debug("Unable to fecth collection data: %s\n", command.statusmessage); continue; } } else { g_debug("Failed to send fetch request"); continue; } } } /*Free resources allocated for collections*/ g_slist_foreach(collections, mmgui_addressbooks_akonadi_free_collections_foreach, NULL); g_slist_free(collections); } /*Free command struct*/ mmgui_addressbooks_free_akonadi_command_struct(&command); return TRUE; } //GNOME (Evolution data server) static void mmgui_addressbooks_get_gnome_contacts_foreach(gpointer data, gpointer user_data) { mmgui_addressbooks_t addressbooks; EContact *econtact; mmgui_contact_t contact; const gchar *fullname, *nickname, *primaryphone, *mobilephone, *email; GList *emails; addressbooks = (mmgui_addressbooks_t)user_data; econtact = (EContact *)data; if ((addressbooks == NULL) || (econtact == NULL)) return; fullname = (addressbooks->e_contact_get_const)(econtact, E_CONTACT_FULL_NAME); nickname = (addressbooks->e_contact_get_const)(econtact, E_CONTACT_NICKNAME); primaryphone = (addressbooks->e_contact_get_const)(econtact, E_CONTACT_PHONE_HOME); mobilephone = (addressbooks->e_contact_get_const)(econtact, E_CONTACT_PHONE_MOBILE); emails = (addressbooks->e_contact_get)(econtact, E_CONTACT_EMAIL); email = g_list_nth_data(emails, 0); contact = g_new0(struct _mmgui_contact, 1); contact->name = g_strdup(fullname); contact->number = g_strdup(primaryphone); contact->email = g_strdup(email); contact->group = g_strdup(addressbooks->gnomesourcename); contact->name2 = g_strdup(nickname); contact->number2 = g_strdup(mobilephone); contact->id = addressbooks->counter; contact->hidden = FALSE; contact->storage = MMGUI_CONTACTS_STORAGE_UNKNOWN; addressbooks->gnomecontacts = g_slist_prepend(addressbooks->gnomecontacts, contact); addressbooks->counter++; g_list_foreach(emails, (GFunc)g_free, NULL); g_list_free(emails); } static gboolean mmgui_addressbooks_get_gnome_contacts(mmgui_addressbooks_t addressbooks, mmgui_libpaths_cache_t libcache) { EBookQuery *queryelements[2]; EBookQuery *query; GError *error; gchar *s; /*New API*/ ESourceRegistry *registry; ESource *source; EBookClient *client; GSList *scontacts; /*Old API*/ EBook *book; GList *dcontacts; if ((addressbooks == NULL) || (libcache == NULL)) return FALSE; if (!addressbooks->gnomesupported) return FALSE; if (addressbooks->ebookmodule == NULL) return FALSE; error = NULL; if (!mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 12, 3, 0)) { g_debug("GNOME contacts API isn't supported\n"); return FALSE; } queryelements[0] = (addressbooks->e_book_query_field_exists)(E_CONTACT_PHONE_HOME); queryelements[1] = (addressbooks->e_book_query_field_exists)(E_CONTACT_PHONE_MOBILE); query = (addressbooks->e_book_query_or)(2, queryelements, TRUE); if (query == NULL) { g_debug("Failed to form GNOME contacts query\n"); return FALSE; } if (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 14, 3, 0)) { g_debug("Using GNOME contacts API version 3.6 ... ?\n"); registry = (addressbooks->e_source_registry_new_sync)(NULL, &error); if (registry == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get ESourceRegistry: %s\n", error->message); g_error_free(error); return FALSE; } source = (addressbooks->e_source_registry_ref_builtin_address_book)(registry); if (source == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get ESource\n"); return FALSE; } addressbooks->gnomesourcename = (addressbooks->e_source_get_display_name)(source); if (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 16, 3, 0)) { /*Version 3.16 ... ?*/ client = (EBookClient *)(addressbooks->e_book_client_connect_sync316)(source, MMGUI_ADDRESSBOOKS_GNOME_CONNECT_TIMEOUT, NULL, &error); if (client == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get EBookClient: %s\n", error->message); g_error_free(error); return FALSE; } } else { /*Version 3.8 ... 3.16*/ client = (EBookClient *)(addressbooks->e_book_client_connect_sync)(source, NULL, &error); if (client == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get EBookClient: %s\n", error->message); g_error_free(error); return FALSE; } } s = (addressbooks->e_book_query_to_string)(query); if (s == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get GNOME addressbook request in string format\n"); return FALSE; } g_debug("GNOME addressbook request: %s\n", s); if (!(addressbooks->e_book_client_get_contacts_sync)(client, s, &scontacts, NULL, &error)) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get GNOME addressbook query results: %s\n", error->message); g_error_free(error); return FALSE; } } else if (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 13, 3, 0)) { /*Versions 3.4 ... 3.8*/ g_debug("Using GNOME contacts API version 3.4 .. 3.6\n"); registry = (addressbooks->e_source_registry_new_sync)(NULL, &error); if (registry == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get ESourceRegistry: %s\n", error->message); g_error_free(error); return FALSE; } source = (addressbooks->e_source_registry_ref_builtin_address_book)(registry); if (source == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get ESource\n"); return FALSE; } addressbooks->gnomesourcename = (addressbooks->e_source_get_display_name)(source); client = (addressbooks->e_book_client_new)(source, &error); if (client == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get EBookClient: %s\n", error->message); g_error_free(error); return FALSE; } if (!(addressbooks->e_client_open_sync)((EClient *)client, TRUE, NULL, &error)) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to open EBookClient: %s\n", error->message); g_error_free(error); return FALSE; } s = (addressbooks->e_book_query_to_string)(query); if (s == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get GNOME addressbook request in string format\n"); return FALSE; } g_debug("GNOME addressbook request: %s\n", s); if (!(addressbooks->e_book_client_get_contacts_sync)(client, s, &scontacts, NULL, &error)) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get GNOME addressbook query results: %s\n", error->message); g_error_free(error); return FALSE; } } else { /*Versions 3.0 ... 3.4*/ g_debug("Using GNOME contacts API version 3.0 .. 3.4\n"); book = (addressbooks->e_book_new_system_addressbook)(&error); if (book == NULL) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to load GNOME system addressbook: %s\n", error->message); g_error_free(error); return FALSE; } if (!(addressbooks->e_book_open)(book, TRUE, &error)) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to load GNOME system addressbook: %s\n", error->message); g_error_free(error); return FALSE; } source = (addressbooks->e_book_get_source)(book); addressbooks->gnomesourcename = (addressbooks->e_source_get_display_name)(source); if (!(addressbooks->e_book_get_contacts)(book, query, &dcontacts, &error)) { (addressbooks->e_book_query_unref)(query); g_debug("Failed to get query GNOME addressbook results: %s\n", error->message); g_error_free(error); return FALSE; } } (addressbooks->e_book_query_unref)(query); if (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 13, 3, 0)) { if (scontacts != NULL) { addressbooks->counter = 0; g_slist_foreach(scontacts, (GFunc)mmgui_addressbooks_get_gnome_contacts_foreach, addressbooks); } else { g_debug("No suitable contacts found\n"); } } else { if (dcontacts != NULL) { addressbooks->counter = 0; g_list_foreach(dcontacts, (GFunc)mmgui_addressbooks_get_gnome_contacts_foreach, addressbooks); } else { g_debug("No suitable contacts found\n"); } } addressbooks->counter = 0; return TRUE; } static gpointer mmguicore_addressbooks_work_thread(gpointer data) { mmgui_addressbooks_t addressbooks; gboolean result; addressbooks = (mmgui_addressbooks_t)data; if (addressbooks == NULL) return NULL; result = TRUE; if (addressbooks->gnomesupported) { result = result && mmgui_addressbooks_get_gnome_contacts(addressbooks, addressbooks->libcache); } if (addressbooks->kdesupported) { result = result && mmgui_addressbooks_get_kde_contacts(addressbooks); } if (result) { if (addressbooks->callback != NULL) { (addressbooks->callback)(MMGUI_EVENT_ADDRESS_BOOKS_EXPORT_FINISHED, NULL, NULL, addressbooks->userdata); } } addressbooks->workthread = NULL; return NULL; } mmgui_addressbooks_t mmgui_addressbooks_new(mmgui_event_ext_callback callback, mmgui_libpaths_cache_t libcache, gpointer userdata) { mmgui_addressbooks_t addressbooks; gboolean libopened; guint akonadistatus; const gchar *desktop; const gchar *version; if (callback == NULL) return NULL; addressbooks = g_new0(struct _mmgui_addressbooks, 1); addressbooks->callback = callback; addressbooks->libcache = libcache; addressbooks->userdata = userdata; addressbooks->workthread = NULL; /*Get name of current desktop enviroment*/ desktop = getenv("XDG_CURRENT_DESKTOP"); /*libebook*/ addressbooks->ebookmodule = NULL; addressbooks->gnomesupported = FALSE; addressbooks->gnomecontacts = NULL; /*GNOME code path*/ if (g_strrstr(desktop, "GNOME") != NULL) { if (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 12, 3, 0)) { /*Open module*/ addressbooks->ebookmodule = g_module_open(mmgui_libpaths_cache_get_library_full_path(libcache, "libebook-1.2"), G_MODULE_BIND_LAZY); if (addressbooks->ebookmodule != NULL) { libopened = TRUE; libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_field_exists", (gpointer *)&(addressbooks->e_book_query_field_exists)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_or", (gpointer *)&(addressbooks->e_book_query_or)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_unref", (gpointer *)&(addressbooks->e_book_query_unref)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_contact_get_const", (gpointer *)&(addressbooks->e_contact_get_const)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_contact_get", (gpointer *)&(addressbooks->e_contact_get)); if ((libopened) && (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 16, 3, 0))) { /*Version 3.16 ... ?*/ libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_connect_sync", (gpointer *)&(addressbooks->e_book_client_connect_sync316)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_new_sync", (gpointer *)&(addressbooks->e_source_registry_new_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_ref_builtin_address_book", (gpointer *)&(addressbooks->e_source_registry_ref_builtin_address_book)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_to_string", (gpointer *)&(addressbooks->e_book_query_to_string)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_get_contacts_sync", (gpointer *)&(addressbooks->e_book_client_get_contacts_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_get_display_name", (gpointer *)&(addressbooks->e_source_get_display_name)); addressbooks->e_book_client_connect_sync = NULL; addressbooks->e_book_new_system_addressbook = NULL; addressbooks->e_book_open = NULL; addressbooks->e_book_get_contacts = NULL; addressbooks->e_book_get_source = NULL; } else if ((libopened) && (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 14, 3, 0))) { /*Version 3.8 ... 3.16*/ libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_connect_sync", (gpointer *)&(addressbooks->e_book_client_connect_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_new_sync", (gpointer *)&(addressbooks->e_source_registry_new_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_ref_builtin_address_book", (gpointer *)&(addressbooks->e_source_registry_ref_builtin_address_book)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_to_string", (gpointer *)&(addressbooks->e_book_query_to_string)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_get_contacts_sync", (gpointer *)&(addressbooks->e_book_client_get_contacts_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_get_display_name", (gpointer *)&(addressbooks->e_source_get_display_name)); addressbooks->e_book_client_connect_sync316 = NULL; addressbooks->e_book_new_system_addressbook = NULL; addressbooks->e_book_open = NULL; addressbooks->e_book_get_contacts = NULL; addressbooks->e_book_get_source = NULL; } else if ((libopened) && (mmgui_libpaths_cache_check_library_version(libcache, "libebook-1.2", 13, 3, 0))) { /*Versions 3.4 ... 3.8*/ libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_new", (gpointer *)&(addressbooks->e_book_client_new)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_client_open_sync", (gpointer *)&(addressbooks->e_client_open_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_new_sync", (gpointer *)&(addressbooks->e_source_registry_new_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_registry_ref_builtin_address_book", (gpointer *)&(addressbooks->e_source_registry_ref_builtin_address_book)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_query_to_string", (gpointer *)&(addressbooks->e_book_query_to_string)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_client_get_contacts_sync", (gpointer *)&(addressbooks->e_book_client_get_contacts_sync)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_peek_name", (gpointer *)&(addressbooks->e_source_get_display_name)); addressbooks->e_book_client_connect_sync = NULL; addressbooks->e_book_client_connect_sync316 = NULL; addressbooks->e_book_new_system_addressbook = NULL; addressbooks->e_book_open = NULL; addressbooks->e_book_get_contacts = NULL; addressbooks->e_book_get_source = NULL; } else if (libopened) { /*Versions 3.0 ... 3.4*/ libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_new_system_addressbook", (gpointer *)&(addressbooks->e_book_new_system_addressbook)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_open", (gpointer *)&(addressbooks->e_book_open)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_get_contacts", (gpointer *)&(addressbooks->e_book_get_contacts)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_book_get_source", (gpointer *)&(addressbooks->e_book_get_source)); libopened = libopened && g_module_symbol(addressbooks->ebookmodule, "e_source_peek_name", (gpointer *)&(addressbooks->e_source_get_display_name)); addressbooks->e_book_client_connect_sync = NULL; addressbooks->e_book_client_connect_sync316 = NULL; addressbooks->e_source_registry_new_sync = NULL; addressbooks->e_source_registry_ref_builtin_address_book = NULL; addressbooks->e_book_client_new = NULL; addressbooks->e_client_open_sync = NULL; addressbooks->e_book_query_to_string = NULL; addressbooks->e_book_client_get_contacts_sync = NULL; } /*If some functions not exported, close library*/ if (!libopened) { addressbooks->e_book_query_field_exists = NULL; addressbooks->e_book_query_or = NULL; addressbooks->e_source_registry_new_sync = NULL; addressbooks->e_source_registry_ref_builtin_address_book = NULL; addressbooks->e_source_get_display_name = NULL; addressbooks->e_book_client_new = NULL; addressbooks->e_client_open_sync = NULL; addressbooks->e_book_query_to_string = NULL; addressbooks->e_book_client_get_contacts_sync = NULL; addressbooks->e_book_new_system_addressbook = NULL; addressbooks->e_book_open = NULL; addressbooks->e_book_get_contacts = NULL; addressbooks->e_book_query_unref = NULL; addressbooks->e_contact_get_const = NULL; addressbooks->e_contact_get = NULL; /*Close module*/ g_module_close(addressbooks->ebookmodule); addressbooks->ebookmodule = NULL; addressbooks->gnomesupported = FALSE; } else { /*Get contacts*/ addressbooks->gnomesupported = TRUE; //mmgui_addressbooks_get_gnome_contacts(addressbooks, libcache); } } } } /*KDE addressbook*/ addressbooks->kdecontacts = NULL; addressbooks->kdesupported = FALSE; /*KDE code path*/ if (g_strcmp0(desktop, "KDE") == 0) { /*Get KDE version information*/ version = getenv("KDE_SESSION_VERSION"); /*For now only KDE 4 version supported*/ if (g_strcmp0(version, "4") == 0) { if (mmgui_dbus_utils_session_service_activate(MMGUI_ADDRESSBOOKS_AKONADI_DBUS_INTERFACE, &akonadistatus)) { /*Open socket*/ addressbooks->aksocket = mmgui_addressbooks_open_kde_socket(); if (addressbooks->aksocket != -1) { /*Akonadi server started*/ addressbooks->kdesupported = TRUE; //mmgui_addressbooks_get_kde_contacts(addressbooks); } else { /*Akonadi server not available*/ addressbooks->kdesupported = FALSE; } } } } if ((addressbooks->gnomesupported) || (addressbooks->kdesupported)) { #if GLIB_CHECK_VERSION(2,32,0) addressbooks->workthread = g_thread_new("Modem Manager GUI contacts export thread", mmguicore_addressbooks_work_thread, addressbooks); #else addressbooks->workthread = g_thread_create(mmguicore_addressbooks_work_thread, addressbooks, TRUE, NULL); #endif } return addressbooks; } gboolean mmgui_addressbooks_get_gnome_contacts_available(mmgui_addressbooks_t addressbooks) { if (addressbooks == NULL) return FALSE; return addressbooks->gnomesupported; } gboolean mmgui_addressbooks_get_kde_contacts_available(mmgui_addressbooks_t addressbooks) { if (addressbooks == NULL) return FALSE; return addressbooks->kdesupported; } GSList *mmgui_addressbooks_get_gnome_contacts_list(mmgui_addressbooks_t addressbooks) { if (addressbooks == NULL) return NULL; if (!addressbooks->gnomesupported) return NULL; return addressbooks->gnomecontacts; } GSList *mmgui_addressbooks_get_kde_contacts_list(mmgui_addressbooks_t addressbooks) { if (addressbooks == NULL) return NULL; if (!addressbooks->kdesupported) return NULL; return addressbooks->kdecontacts; } static gint mmgui_addressbooks_get_contact_compare(gconstpointer a, gconstpointer b) { mmgui_contact_t contact; guint id; contact = (mmgui_contact_t)a; id = GPOINTER_TO_UINT(b); if (contact->id < id) { return 1; } else if (contact->id > id) { return -1; } else { return 0; } } mmgui_contact_t mmgui_addressbooks_get_gnome_contact(mmgui_addressbooks_t addressbooks, guint index) { GSList *contactptr; mmgui_contact_t contact; if (addressbooks == NULL) return NULL; if (!addressbooks->gnomesupported) return NULL; if (addressbooks->gnomecontacts == NULL) return NULL; contactptr = g_slist_find_custom(addressbooks->gnomecontacts, GUINT_TO_POINTER(index), mmgui_addressbooks_get_contact_compare); if (contactptr != NULL) { contact = (mmgui_contact_t)contactptr->data; return contact; } else { return NULL; } } mmgui_contact_t mmgui_addressbooks_get_kde_contact(mmgui_addressbooks_t addressbooks, guint index) { GSList *contactptr; mmgui_contact_t contact; if (addressbooks == NULL) return NULL; if (!addressbooks->kdesupported) return NULL; if (addressbooks->kdecontacts == NULL) return NULL; contactptr = g_slist_find_custom(addressbooks->kdecontacts, GUINT_TO_POINTER(index), mmgui_addressbooks_get_contact_compare); if (contactptr != NULL) { contact = (mmgui_contact_t)contactptr->data; return contact; } else { return NULL; } } static void mmgui_addressbooks_free_contacts_list_foreach(gpointer data, gpointer user_data) { mmgui_contact_t contact; if (data == NULL) return; contact = (mmgui_contact_t)data; if (contact->name != NULL) { g_free(contact->name); } if (contact->number != NULL) { g_free(contact->number); } if (contact->email != NULL) { g_free(contact->email); } if (contact->group != NULL) { g_free(contact->group); } if (contact->name2 != NULL) { g_free(contact->name2); } if (contact->number2 != NULL) { g_free(contact->number2); } } void mmgui_addressbooks_close(mmgui_addressbooks_t addressbooks) { if (addressbooks == NULL) return; /*Wait for thread*/ if (addressbooks->workthread != NULL) { g_thread_join(addressbooks->workthread); } /*GNOME addressbook*/ addressbooks->gnomesupported = FALSE; if (addressbooks->ebookmodule != NULL) { /*First free contacts list*/ if (addressbooks->gnomecontacts != NULL) { g_slist_foreach(addressbooks->gnomecontacts, mmgui_addressbooks_free_contacts_list_foreach, NULL); g_slist_free(addressbooks->gnomecontacts); addressbooks->gnomecontacts = NULL; } /*Then unload module*/ g_module_close(addressbooks->ebookmodule); addressbooks->ebookmodule = NULL; } /*KDE addressbook*/ addressbooks->kdesupported = FALSE; if (addressbooks->kdecontacts != NULL) { /*Only free contacts list*/ g_slist_foreach(addressbooks->kdecontacts, mmgui_addressbooks_free_contacts_list_foreach, NULL); g_slist_free(addressbooks->kdecontacts); addressbooks->kdecontacts = NULL; } g_free(addressbooks); } modem-manager-gui-0.0.19.1/src/scan-page.c000664 001750 001750 00000013312 13261703575 017763 0ustar00alexalex000000 000000 /* * scan-page.c * * Copyright 2012-2017 Alex * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "strformat.h" #include "../resources.h" #include "scan-page.h" #include "main.h" static void mmgui_main_scan_list_fill_foreach(gpointer data, gpointer user_data); /*SCAN*/ void mmgui_main_scan_start(mmgui_application_t mmguiapp) { if (mmguiapp == NULL) return; if (mmguicore_networks_scan(mmguiapp->core)) { mmgui_ui_infobar_show(mmguiapp, _("Scanning networks..."), MMGUI_MAIN_INFOBAR_TYPE_PROGRESS, NULL, NULL); } else { mmgui_ui_infobar_show_result(mmguiapp, MMGUI_MAIN_INFOBAR_RESULT_FAIL, _("Device error")); } } void mmgui_main_scan_create_connection_button_clicked_signal(GObject *object, gpointer data) { } void mmgui_main_scan_start_button_clicked_signal(GObject *object, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; mmgui_main_scan_start(mmguiapp); } static void mmgui_main_scan_list_cursor_changed_signal(GtkTreeView *tree_view, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; } static void mmgui_main_scan_list_row_activated_signal(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { mmgui_application_t mmguiapp; mmguiapp = (mmgui_application_t)data; if (mmguiapp == NULL) return; } static void mmgui_main_scan_list_fill_foreach(gpointer data, gpointer user_data) { mmgui_scanned_network_t network; GtkTreeModel *model; GtkTreeIter iter; gchar *markup; gboolean netavailability; network = (mmgui_scanned_network_t)data; model = (GtkTreeModel *)user_data; if ((network == NULL) || (model == NULL)) return; markup = g_strdup_printf(_("%s\n%s ID: %u Availability: %s Access tech: %s"), network->operator_long, network->operator_short, network->operator_num, mmgui_str_format_na_status_string(network->status), mmgui_str_format_access_tech_string(network->access_tech)); netavailability = ((network->status == MMGUI_NA_AVAILABLE) || (network->status == MMGUI_NA_CURRENT)); gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, MMGUI_MAIN_SCANLIST_OPERATOR, markup, MMGUI_MAIN_SCANLIST_NAME, network->operator_long, MMGUI_MAIN_SCANLIST_IDENIFIER, network->operator_num, MMGUI_MAIN_SCANLIST_AVAILABILITY, netavailability, -1); g_free(markup); } void mmgui_main_scan_list_fill(mmgui_application_t mmguiapp, mmguicore_t mmguicore, GSList *netlist) { GtkTreeModel *model; if ((mmguiapp == NULL) || (mmguicore == NULL)) return; if (netlist != NULL) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->scanlist)); if (model != NULL) { //Detach model g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->scanlist), NULL); //Clear model gtk_list_store_clear(GTK_LIST_STORE(model)); //Fill model g_slist_foreach(netlist, mmgui_main_scan_list_fill_foreach, model); //Attach model gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->scanlist), model); g_object_unref(model); } //Free networks list mmguicore_networks_scan_free(netlist); } else { mmgui_main_ui_error_dialog_open(mmguiapp, _("Error scanning networks"), mmguicore_get_last_error(mmguiapp->core)); } } void mmgui_main_scan_list_init(mmgui_application_t mmguiapp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; if (mmguiapp == NULL) return; renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); column = gtk_tree_view_column_new_with_attributes(_("Operator"), renderer, "markup", MMGUI_MAIN_SCANLIST_OPERATOR, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(mmguiapp->window->scanlist), column); store = gtk_list_store_new(MMGUI_MAIN_SCANLIST_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN); gtk_tree_view_set_model(GTK_TREE_VIEW(mmguiapp->window->scanlist), GTK_TREE_MODEL(store)); g_object_unref(store); /*Select network signal*/ g_signal_connect(G_OBJECT(mmguiapp->window->scanlist), "cursor-changed", G_CALLBACK(mmgui_main_scan_list_cursor_changed_signal), mmguiapp); /*Create connection signal*/ g_signal_connect(G_OBJECT(mmguiapp->window->scanlist), "row-activated", G_CALLBACK(mmgui_main_scan_list_row_activated_signal), mmguiapp); } void mmgui_main_scan_state_clear(mmgui_application_t mmguiapp) { GtkTreeModel *model; if (mmguiapp == NULL) return; /*Clear scanned networks list*/ model = gtk_tree_view_get_model(GTK_TREE_VIEW(mmguiapp->window->scanlist)); if (model != NULL) { gtk_list_store_clear(GTK_LIST_STORE(model)); } /*Disable 'Create connection' button*/ gtk_widget_set_sensitive(GTK_WIDGET(mmguiapp->window->scancreateconnectionbutton), FALSE); } modem-manager-gui-0.0.19.1/resources/modem-manager-gui.svg000664 001750 001750 00000027507 13261703575 023233 0ustar00alexalex000000 000000 image/svg+xml Openclipart 2008-02-06T04:32:31 https://openclipart.org/detail/12947/lotus-by-anonymous-12947 Anonymous flower icon kamal lotus nature plant tree modem-manager-gui-0.0.19.1/appdata/pl.po000664 001750 001750 00000006322 13261703575 017562 0ustar00alexalex000000 000000 # # Translators: # Swift Geek , 2016 msgid "" msgstr "" "Project-Id-Version: Modem Manager GUI\n" "POT-Creation-Date: 2017-11-04 22:42+0300\n" "PO-Revision-Date: 2018-01-24 18:45+0000\n" "Last-Translator: Alex \n" "Language-Team: Polish (http://www.transifex.com/ethereal/modem-manager-gui/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. (itstool) path: component/name #: modem-manager-gui.appdata.xml.in:7 msgid "Modem Manager GUI" msgstr "" #. (itstool) path: component/developer_name #: modem-manager-gui.appdata.xml.in:8 msgid "Alex" msgstr "" #. (itstool) path: component/summary #: modem-manager-gui.appdata.xml.in:11 msgid "Control EDGE/3G/4G broadband modem specific functions" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:13 msgid "" "Simple graphical interface compatible with Modem manager, Wader and oFono " "system services able to control EDGE/3G/4G broadband modem specific " "functions." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:17 msgid "" "You can check balance of your SIM card, send or receive SMS messages, " "control mobile traffic consuption and more using Modem Manager GUI." msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:21 msgid "Current features:" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:23 msgid "Create and control mobile broadband connections" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:24 msgid "Send and receive SMS messages and store messages in database" msgstr "Wysyłaj i odbieraj wiadomości SMS, oraz przechowuj wiadomości w bazie danych" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:25 msgid "" "Initiate USSD requests and read answers (also using interactive sessions)" msgstr "" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:26 msgid "" "View device information: operator name, device mode, IMEI, IMSI, signal " "level" msgstr "Zobacz informacje urządzenia: nazwa operatora, tryb urządzenia, IMEI, IMSI, poziom sygnału" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:27 msgid "Scan available mobile networks" msgstr "Wyszukaj dostępne sieci komórkowe" #. (itstool) path: ul/li #: modem-manager-gui.appdata.xml.in:28 msgid "View mobile traffic statistics and set limits" msgstr "" #. (itstool) path: description/p #: modem-manager-gui.appdata.xml.in:30 msgid "" "Please note that some features may be not available due to limitations of " "different system services or even different versions of system service in " "use." msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:38 msgid "Broadband devices overview" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:42 msgid "SMS messages list" msgstr "" #. (itstool) path: screenshot/caption #: modem-manager-gui.appdata.xml.in:46 msgid "Traffic control" msgstr "" modem-manager-gui-0.0.19.1/man/fr/000775 001750 001750 00000000000 13261703575 016354 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/man/uz@Latn/000775 001750 001750 00000000000 13261703575 017322 5ustar00alexalex000000 000000 modem-manager-gui-0.0.19.1/src/000775 001750 001750 00000000000 13261704634 015756 5ustar00alexalex000000 000000