[Telepathy-commits] [telepathy-doc/master] 2008-12-15 Murray Cumming <murrayc at murrayc.com>
Murray Cumming
murrayc at murrayc.com
Mon Dec 15 08:11:16 PST 2008
* docs/examples/set_presence/main.c:
* docs/examples/list_contacts/main.c: Use the *_call_when_ready()
functions instead of *_run_until_ready().
---
ChangeLog | 6 ++
docs/examples/list_contacts/main.c | 152 +++++++++++++++++++-----------------
docs/examples/set_presence/example | Bin 14650 -> 14686 bytes
docs/examples/set_presence/main.c | 55 ++++++-------
4 files changed, 112 insertions(+), 101 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 9013d7e..98d526a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-12-15 Murray Cumming <murrayc at murrayc.com>
+ * docs/examples/set_presence/main.c:
+ * docs/examples/list_contacts/main.c: Use the *_call_when_ready()
+ functions instead of *_run_until_ready().
+
+2008-12-15 Murray Cumming <murrayc at murrayc.com>
+
* docs/examples/set_presence/main.c: Wait until the connection is
ready, so that setting of the presence can succeed.
diff --git a/docs/examples/list_contacts/main.c b/docs/examples/list_contacts/main.c
index ddc9e6a..81d1d36 100644
--- a/docs/examples/list_contacts/main.c
+++ b/docs/examples/list_contacts/main.c
@@ -27,6 +27,7 @@ GMainLoop *mainloop = NULL;
TpDBusDaemon *bus_daemon = NULL;
TpConnection *connection = NULL;
guint contact_list_handle = 0;
+const TpIntSet* channel_members_set = NULL;
void disconnect ()
{
@@ -77,94 +78,33 @@ void on_connection_get_contacts_by_handle (TpConnection *connection,
disconnect();
}
-void on_connection_request_channel (TpConnection *proxy,
- const gchar *channel_dbus_path,
+
+void on_connection_ready (TpConnection *connection,
const GError *error,
- gpointer user_data,
- GObject *weak_object)
+ gpointer user_data)
{
if (error)
- {
- g_printf ("tp_cli_connection_run_request_channel() failed: %s\n", error->message);
- return;
- }
-
- g_printf("DEBUG: channel D-Bus path received: %s\n", channel_dbus_path);
-
-
- /* Create the channel proxy for the ContactList's Group interface: */
- GError *error_inner = NULL;
- TpChannel *channel = tp_channel_new (connection,
- channel_dbus_path, /* object_path */
- TP_IFACE_CHANNEL_TYPE_CONTACT_LIST, /* optional_channel_type */
- TP_HANDLE_TYPE_LIST, /* optional_handle_type */
- contact_list_handle, /* optional_handle */
- &error_inner);
-
- if (error_inner)
- {
- g_printf ("tp_channel_new() failed: %s\n", error_inner->message);
- g_clear_error (&error_inner);
- return;
- }
+ {
+ g_printf ("tp_connection_call_when_ready() failed: %s\n", error->message);
+ return;
+ }
- /* Wait until the channel is ready for use: */
- tp_channel_run_until_ready (channel, &error_inner, NULL);
- if (error_inner)
- {
- g_printf ("tp_channel_run_until_ready() failed: %s\n", error_inner->message);
- g_clear_error (&error_inner);
- return;
- }
-
- if (!tp_channel_is_ready (channel))
- g_printf ("tp_channel_is_ready() returned FALSE.\n");
+ /* Actually get the information now that the connection is ready: */
- /* List the channel members: */
- const TpIntSet* set = tp_channel_group_get_members (channel);
- if (!set)
- {
- g_printf ("tp_channel_group_get_members() returned NULL.\n");
- return;
- }
-
- g_printf("DEBUG: Number of members: %u\n", tp_intset_size (set));
/* Get a GArray instead of a TpIntSet,
* so we can easily create a normal array: */
GArray *members_array = g_array_new (TRUE, TRUE, sizeof(guint));
- TpIntSetIter iter = TP_INTSET_ITER_INIT (set);
+ TpIntSetIter iter = TP_INTSET_ITER_INIT (channel_members_set );
while (tp_intset_iter_next (&iter))
{
g_array_append_val (members_array, iter.element);
}
- set = NULL;
+ channel_members_set = NULL; /* We don't need this anymore. */
g_printf("DEBUG: members_array size=%u\n", members_array->len);
-
- /* tp_connection_get_contacts_by_handle() requires the connection to be
- * ready: */
- gboolean ready = tp_connection_run_until_ready (connection,
- TRUE /* connect */,
- &error_inner,
- NULL /* loop */);
-
- if (error_inner)
- {
- g_printf ("tp_connection_run_until_ready() failed: %s\n", error_inner->message);
- g_clear_error (&error_inner);
- return;
- }
-
- if (!ready)
- {
- g_printf ("Aborting because the connection could not be made ready.\n");
- }
-
- g_printf ("DEBUG: Calling tp_connection_get_contacts_by_handle()\n");
-
/* Get information about each contact: */
guint n_handles = members_array->len;
TpHandle* handles = (TpHandle*)g_array_free (members_array, FALSE);
@@ -174,6 +114,8 @@ void on_connection_request_channel (TpConnection *proxy,
TpContactFeature features[] = {TP_CONTACT_FEATURE_ALIAS,
TP_CONTACT_FEATURE_AVATAR_TOKEN, TP_CONTACT_FEATURE_PRESENCE};
+ g_printf ("DEBUG: Calling tp_connection_get_contacts_by_handle()\n");
+
tp_connection_get_contacts_by_handle (connection,
n_handles, handles,
sizeof (features) / sizeof(TpContactFeature), features,
@@ -183,6 +125,72 @@ void on_connection_request_channel (TpConnection *proxy,
NULL /* weak_object */);
}
+void on_channel_ready (TpChannel *channel,
+ const GError *error,
+ gpointer user_data)
+{
+ if (error)
+ {
+ g_printf ("tp_channel_call_when_ready() failed: %s\n", error->message);
+ return;
+ }
+
+
+ /* List the channel members: */
+ channel_members_set = tp_channel_group_get_members (channel);
+ if (!channel_members_set )
+ {
+ g_printf ("tp_channel_group_get_members() returned NULL.\n");
+ return;
+ }
+
+ g_printf("DEBUG: Number of members: %u\n", tp_intset_size (channel_members_set ));
+
+
+ /* tp_connection_get_contacts_by_handle() requires the connection to be
+ * ready: */
+ tp_connection_call_when_ready (connection,
+ &on_connection_ready,
+ NULL);
+}
+
+void on_connection_request_channel (TpConnection *proxy,
+ const gchar *channel_dbus_path,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ if (error)
+ {
+ g_printf ("tp_cli_connection_call_request_channel() failed: %s\n", error->message);
+ return;
+ }
+
+ g_printf("DEBUG: channel D-Bus path received: %s\n", channel_dbus_path);
+
+
+ /* Create the channel proxy for the ContactList's Group interface: */
+ GError *error_inner = NULL;
+ TpChannel *channel = tp_channel_new (connection,
+ channel_dbus_path, /* object_path */
+ TP_IFACE_CHANNEL_TYPE_CONTACT_LIST, /* optional_channel_type */
+ TP_HANDLE_TYPE_LIST, /* optional_handle_type */
+ contact_list_handle, /* optional_handle */
+ &error_inner);
+
+ if (error_inner)
+ {
+ g_printf ("tp_channel_new() failed: %s\n", error_inner->message);
+ g_clear_error (&error_inner);
+ return;
+ }
+
+ /* Wait until the channel is ready for use: */
+ tp_channel_call_when_ready (channel,
+ &on_channel_ready,
+ NULL);
+}
+
void on_connection_request_handles (TpConnection *proxy,
const GArray *handles_array,
const GError *error,
@@ -395,7 +403,7 @@ main (int argc, char **argv)
g_hash_table_insert (parameters, "account", value);
value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_static_string (value, "passwordTODO");
+ g_value_set_static_string (value, "luftjabb");
g_hash_table_insert (parameters, "password", value);
/* This jabber-specific parameter can avoid clashes with
diff --git a/docs/examples/set_presence/example b/docs/examples/set_presence/example
index 17e1350f2b3eeb22702b637dc1d2dd983554f08d..723291330dcd2cb9eedc9b00d20f9ca6b091eb55 100755
GIT binary patch
delta 3308
zcmZ`*eQZ<L6~FKKIXtIMV>=%XIN;bZkchT{l7!Jh8``)`Wi+ACk5Opw5|?BRPH?;d
zRj8+i3|u=S$;n!#GKtV?o7zwU?z*m`8qi9iQ->ha{@6+ at +I5my(#kNTQb_9l&hyJh
zE$vFbchB#fd(J)gzWd%i?*=~&_7+JseRH2R4%>wo?u-0ynOO*71#SoC0T!STC;@H*
zoB%fmpaQvcOmfgii&c6 at Dk{%{W)5HgOh696O#)n+Bt$-XnXIxSCmT|pt`)RWZlodk
zvh*?SH8|<8Y at s2;Yu3Z0s0zkdMXp$jFfsBePV1Hz6`ow!kkjvEAv)uI%D*IvWLf66
z1p at xYP)l2&q0!gc+OVtHA7}{reNB5PQ00!loi!%OD+Kjb7tpJ!T}CGFsZJ at 2K2}|l
zpj&EbSkbcOb#vQzst=3E5|^+f){Qv+i7brbn$FK?+#u#4Nw%NXxGah}X|&{VMa|;v
z7*^Cd at Km@*#wz#Fo4Gf_mwRkqKJ}R1cElD65v7S#D%Cw2GA8bWe_}nn66e(T)7kGz
z3zmKPbmX(HFOv0}9&Ntduc*yQJT^Sue5zMb6K~Lc<~PHa1{5`QdBi($1Y0=P3E?;k
z9T5J^!cQTLu;7F62 at 6j`_=<%(2sc at H2tpp>jID-H&O#-G)hsN5 at B|BP2)kLB3*k2`
zSRkA<u`~zLUn!L1x-0+JNGvd!N)7JDN+XIV at fnsk_QZ(d*~X at gFhOo(dF><}vMjG0
z#efmxFEE at p^27HZi~Of+ysT at lS%iwBUURfYjnsM+I2~Z8FF4$Tw82&!KHQ_IBefp$
zThOCd&!l?=+nI`bwaIfaogR^6MZ6PTdncsOI(`Ok!&44zxiW}pqh1RqyW-naN}uf<
z&(?t1201m3&*`C87X3<FSvb+pxpe5RlbA|(z0R%++4#6_ygXwpc?m{!DsK1bkX at UA
zXYao?dncxM at F}Rr%-Dc>cKsWewj|n<J3l|fs-sX%k1n`Hujek3*3-q@;-v#@UI%lJ
z_Xf|9yg6%R9OTL=UX<c_iwC-I(R|C2x`VvFd{1IN{IFwD?+s+R6y40LxS(YMe?4w+
zcHAnEu{8+#HIMo|y=<wx->qfc^CORf)12BlftS3YYrHb?9LDmVYJ01AxJy(+_bMNs
z#Lzd$0BMIP+gfI_y`0Xgi|)0~a~Fdp{*3{83I`yLcoX>c#FZ92--*#Kt26v34&hBA
zn;MQ?hS(ABI8RxN08#Ha$A1A at 7V(nV@}y=-vgHRHRrej<SF+W_%y|zVD71--#Qk
z)XFL6;Th-MGtSxHcYbBY`7}LZbB28fImaXtGb1teHP|`9^a;Pt2|j|jJOW||=ju&j
znPU1hgf+7^(t~uS^(&ws?9 at NeY*?^$>=^YXx<07<@zx&S#QVLyhTh&@`me3j^i8o4
zUE}7&Mk>tf&T0iqT#66ot&^&3_y`?<2e=cc2JQ!b2y6g01C2l{@H60fU_ZGE>eTw6
zzr!DB^wV<%3)Tn`YHw)#zd!Y|@{(tKEv^2hdrB5|WQ(<J0e{IeEgj7*f$hS#%eO}e
zy0_3l-G#RJs=`*u-0th>*wq$n+EiCt7az7?%IYtwrPzWaCcaVlw(6uR=VECYZFN>u
z#v+Q!ci}$tHuU_V^L at oV{s(RO&|}Bj at M9K9^yd#KDqXc#hL60N{%1iijw0|$;4Cl-
zd=6X#<S2pyZs2a<0pL;KCqNK*0q6&g0w;m9z$oxJa1D at S@CV$$-2l&}wY3kD(Y1<>
zmt52q<%Y78A}*)t0A}UyX at E|+)*GAP(?kZhUpgFbaj%w(c?S%)ORfsn>dmh0+bb$$
zqmU#;7Dl;~&U(Cg>~C;NE|*J|V1a&s<}EybCp$h5bmGQ12&B^xf)69h>=y$DU^^5q
zShP;Y{`$(CM&7UU)Lm9;;+ at P#!O%`8py&PGNB<}*HS!yX(IiIjBwJ80ETuDx^JrDM
z*~lSdw7$I5RD-3|pm145d&-?gPNS243;iLU5HBo`K7 at V<-^ft>%ksa=QZJpk1HqRI
zF-lkN*dOLZI8$8X+zC#HdxQ3>(+42Uxu`)AGHvG)MhH%hdxKUY!9LBooDzZ)<ldkc
zM4V!pbD4!IhBHkoa=8;jap|r$NouE^6&2D28pLymE><|Ddb(P1&~+X0{(xaN#H+_I
zjVl1u5E|bGUPFUR9pT-OrdkPv{Tcj~S)7me>)@OSpAjy%PGs2slEJ?QpIV6x1>+<*
zUx{h|qOef;!_XT~P at KV6g7aPdB5b^rP2l`{*8_;H8RK_k at Sn5)tc1J4o8iw>T140`
z`k~-UxkaCVOU0?i37yK|=Q4OU7jAmv at yj##cJLU!MIOR-0&mq5u!d#3I0D5X{byj6
zZQ>X>S8AIzhaB-9_*CNnHeR~km_LxgcVzHCg7a1I6t<ps at B{F6J%O-ATuoiba4_;Q
z(Hl=-2j4fnWmi+h;QaSzH>)TTi!;XG13onY$6u3SZvp2rVN{5RwTyn5G2kWehxOBL
zlXJwe4EqQ;7qN5kDtJX7fp3ZLTppC-_NpaP9 at q6Vw?VqFUsK(eKTA1X_tVWvhqNMo
IzPeTZ4lN$8mjD0&
delta 3299
zcmZ`*3v5%@89w*=I at lq>kC29t6x&Hi6Ceae5(WxtJK{!yGUz(k78nq48i$31=Ftt5
z%IyLjj?GGT+KqNaB^sJ2iwejUVl3LAObb-oD)!K{jJ526<TODtkB%%&@xJf+Cblf?
zNZ&pGcmC%&_uPBVM;#YCj?Pou{rTTA-_H}`et+;@b+!<~0oZ`~Kql}A;0Ce)7r<5k
zSOGhbFVE!_C}uv(Gr(s77C-~$0Bj22(Ip|~qBlv0T97>(QjRgI%2n!a`IgBp-%@YN
zu*t4`ERUNajzOte7|DT}>Ji2#8#R}ss!wAI;S{sQPgNnpk$!DNv2}E}?dWdnYH8ik
z(bVYMFORRBFV|HUMb2l8De}A}-=re*b&E^hwYcS6Yf+s^uZ*)`dv>TF3t$#EOo^FY
zF8C`ln#5g$U(&fMX0af&*cr`|p~*h0OVQ+M>*a#?777uPQ}KBG&>y<Y(J#X$x*6p~
zg*Ea@=0&Accf(`(?d`#T^!_`x>8oGy$9|w$`~uT_W{dy&QOy#K$n9D02F730Eb*Je
z-l?-tjrBnI6@^X+*C_0P at D~b=5N=cWI)sN5HbTgR``A+uiYcstu!=$zgbfrHLujT@
z1mQ4+d<gGQutRv?N@*6P5&2rSr=sL_6!yaB@%X at Z&T5vRRuUb>G{?R+td;DeYAaNb
zU#7fK{xiEOFarIs`6XC$($}tR4&Le=|6<6S74(kxzBsPf4&K5zr4AdOs_o!i at X?i6
z at sQWf496bE<H5QT4RMb#?o~$gPBC04mw|`tO1LS-5$_c2NHuti;M|gE);bsmy%Qnt
z)S*jVrRYLWSd3u5X0RUU>4!WXh at -!SWABR-qB{%eVzg+$@Bq`uT4!OP=SU*oq95wL
zWo4q*@UG(w(hcjePNVXxSPdgtE$pHbpFz3BQ2s2b^i%maDD^xjG*1^8uL+~c<r~PG
zUiPI7#Tt*%_k`SLTR3-!VmHG~TSX`3>$XzGE{AM|%WhD;0O}*&35LEhnPT}0$mkFz
zkC0O|{B%-U?29uqzK_?8g^W$gHTL|9c|T${*cvgssWB`dV^1Q$<Fq<3DgTwd;_+J;
zymsZt(<K`AdHne)y#Hr<$E%_nFwQrHl+4L4YQ at -3SbMbnzlr6nm!I0p0u6}ABA$Xi
z=)E8EPGF5H&?R4{k15Z?%P4Fs#9?og`(U&M&kMc~Vql{nr at j-@bN4Z$H-=K4U at 2od
z9j8?|fY>4LIM<BxrD$xk6S^iw&1 at z#oX;ekPbGahyA<DZN#74AlD?fu-yy?y0mA<d
z!zs=mC!M8S<#hR9c$GEAre_$1p0#sZhP?M#phJ(K*IEN{*c-z<#mrXulCIV*A3R9e
z7?Y at Npa<`SG5-EQUUC-5o6bkAqlNfT#<QXYG9%|u#x}6%V5C21y;6NQtXVz-G<+)A
zz$1VQC<B%QtAVw^)4*n6JJ2j0xf?Urwzsu4?e1!6Z<GGq1 at da{lDw{cJ9f{E?wI+p
z%eQlL*FU+dy`!t8t=YY+X?J6HXOp|j-{ekOL+oz#x!c;iVBp@{=xcK8$HCG}QQzLy
z<bJND(+_Xa`0d91k$bs&6-#UPb6tBHckPO_=H1AU;RPqGJYaYjhGn(uF{My`(^XmJ
z3u+b~j@!^X(Q`ZT_+pP=Rr}Oo{ISvFhc9C2FM#7ztO}fXH}Mn1xHy2oeZZT*Y2YI8
z0Wbo50!#v#*s}A1MZjuc9nb*m0S*9tz?;Bn;3Dt=Famr6OahsB3CyLp`nA&Rsg-Bk
z*Y!yiVK6L%9+!0|GVv=sDbIN}nCswECrw37%3!3WXpLIP6)??FJe8g`4W8!a%1YHN
z6h%{oSq;ngOT0PsH at Os#$D=CHVEm+<zwq}Jbld`jaTL7`B+3wiTaq&Ue85TQPDOG{
z*Q;3H#xj?g>vcgMDl4{fC8yxHQ=Y>(*L$1%b6K&OZ@?!%hXs>V;dZi2UVbb`)|O|P
z8PX>=lowmwn2H+*L#y0h?lQBCusn|OQ%r~#Rxht%JcchN7P(#iM^$-AUS3jc?pYzk
zFXiZx?*&*0D>dnN86j9sf+r@!f)bo}Alyl2IPXhBusHT6+)mh78hev|hr(^jct0k=
zEynjTt=I2MPQgm4FzFXD?52pav|Uj)$>%F8m9ugH&zQVk=~8yeJC(0`{)Bj^VD3b`
zP59^WMqxJiPH?vzSXL1DG5?81<Mtg);coC>r11|^IPE_IXJOnkyp7#T)89+ui+L|I
zCgK!x0%AD^c%CK#%oDZzP>jX|o6`7Ra2~sT&~a*q!Ffnb`}e2W52W$a;Da*-2W;Z!
z81N$ibJ|6o_)VI_jWixj<BM<)oNg at mS#TaN93u~aw;J&sYMuy#A2YsvM?iIoHy8jF
zHRul6;vI6MF~Gw#zLZln8ui~u;{)J40JdW3xk6{b_svZ3PJAfEKEMEXQU=IP*d_;4
z9Jp=x&!?F~%o91>Mn<E3DR^pviZuOZaNZpD83lDD^{e$I`Yr|<rZ<I}E#62P==uma
uFTwd(dd}zqcva-(6&=c>|K~(7uKIzRJo%osR at PKU<riv>M*dUdSN{j9n7iKq
diff --git a/docs/examples/set_presence/main.c b/docs/examples/set_presence/main.c
index d53f318..6fddef0 100644
--- a/docs/examples/set_presence/main.c
+++ b/docs/examples/set_presence/main.c
@@ -85,6 +85,29 @@ void on_connection_set_presence(TpConnection *proxy,
}
+void on_connection_ready (TpConnection *connection,
+ const GError *error,
+ gpointer user_data)
+{
+ if (error)
+ {
+ g_printf ("tp_connection_call_when_ready() failed: %s\n", error->message);
+ return;
+ }
+
+ /* Actually set the presence: */
+ /* See https://bugs.freedesktop.org/show_bug.cgi?id=19097 about the
+ * difficulty of discovering valid status strings.
+ */
+ tp_cli_connection_interface_simple_presence_call_set_presence (
+ connection,
+ -1, /* timeout */
+ "away",
+ "Gone fishing",
+ &on_connection_set_presence,
+ NULL, NULL, NULL);
+}
+
void on_connection_status_changed(TpConnection *proxy,
guint arg_Status,
guint arg_Reason,
@@ -100,35 +123,9 @@ void on_connection_status_changed(TpConnection *proxy,
/* tp_cli_connection_interface_simple_presence_call_set_presence() requires the connection to be
* ready: */
- GError *error = NULL;
- gboolean ready = tp_connection_run_until_ready (connection,
- TRUE /* connect */,
- &error,
- NULL /* loop */);
-
- if (error)
- {
- g_printf ("tp_connection_run_until_ready() failed: %s\n", error->message);
- g_clear_error (&error);
- return;
- }
-
- if (!ready)
- {
- g_printf ("Aborting because the connection could not be made ready.\n");
- }
-
- /* Actually set the presence: */
- /* See https://bugs.freedesktop.org/show_bug.cgi?id=19097 about the
- * difficulty of discovering valid status strings.
- */
- tp_cli_connection_interface_simple_presence_call_set_presence (
- connection,
- -1, /* timeout */
- "away",
- "Gone fishing",
- &on_connection_set_presence,
- NULL, NULL, NULL);
+ tp_connection_call_when_ready (connection,
+ &on_connection_ready,
+ NULL);
break;
--
1.5.6.5
More information about the Telepathy-commits
mailing list