Changeset 659
- Timestamp:
- 12/13/05 23:10:54 (3 years ago)
- Files:
-
- trunk/src/gg_versions.c (modified) (1 diff)
- trunk/src/message.c (modified) (7 diffs)
- trunk/src/presence.c (modified) (2 diffs)
- trunk/src/sessions.c (modified) (10 diffs)
- trunk/src/status.c (modified) (2 diffs)
- trunk/src/users.c (modified) (5 diffs)
- trunk/src/users.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/gg_versions.c
r650 r659 46 46 "6.0 (build 133)", /* 0x21 */ 47 47 "6.0 (build 136,142)", /* 0x22 */ 48 NULL, /* 0x23 */48 NULL, /* 0x23 */ 49 49 "6.0 (build 155)", /* 0x24 */ 50 50 "7.0 (build 1)", /* 0x25 */ trunk/src/message.c
r653 r659 59 59 void message_status(struct stream_s *s,const char *from, const char *to, 60 60 const char *args, xmlnode msg); 61 void message_offline_status(struct stream_s *s,const char *from, const char *to,62 const char *args, xmlnode msg);63 61 64 62 MsgCommand msg_commands[]={ 65 63 {"get roster","gr",N_("Download user list from server"),message_get_roster,0}, 66 64 {"friends only","fo",N_("\"Only for friends\" mode"),message_friends_only,0}, 67 {"invisible","iv",N_("\"Invisible\" mode. As an argument" 68 " you should pass 'on', 'off' or a status message to be shown" 69 " when invisible."),message_invisible,0}, 65 {"invisible","iv",N_("\"Invisible\" mode"),message_invisible,0}, 70 66 {"locale","loc",N_("Set user locale (language)"),message_locale,0}, 71 67 {"ignore_unknown","iu",N_("Ignore messages from unknown users"),message_ignore_unknown,0}, … … 73 69 {"unignore","ui",N_("Remove a user from, or view the ignore list"),message_unignore,0}, 74 70 {"status","st",N_("Status message to show to GG users. Use 'off' to use Jabber status."),message_status,0}, 75 {"offline_status","os",N_("Status message to show to GG users when not available. Use 'off' to use the one set with the command described above."),message_offline_status,0},76 71 {NULL,NULL,NULL,0}, 77 72 }; … … 336 331 Session *session; 337 332 User *user; 338 char *m;333 Resource *r; 339 334 gboolean on; 340 335 … … 344 339 else 345 340 user=user_get_by_jid(from); 346 347 if (args) { 348 if (g_strcasecmp(args,"on")==0) { 349 on=TRUE; 350 g_free(user->invisible_status); 351 user->invisible_status=NULL; 352 } 353 else if (g_strcasecmp(args,"off")==0) { 354 on=FALSE; 355 g_free(user->invisible_status); 356 user->invisible_status=NULL; 357 } 358 else { 359 on=TRUE; 360 g_free(user->invisible_status); 361 user->invisible_status=g_strndup(args,GG_STATUS_DESCR_MAXSIZE); 362 } 363 } 341 if (args && g_strcasecmp(args,"on")==0) on=TRUE; 342 else if (args && g_strcasecmp(args,"off")==0) on=FALSE; 364 343 else on=!user->invisible; 365 344 345 if (user->invisible==on){ 346 message_send(stream,to,from,1,_("No change."),0); 347 return; 348 } 366 349 user->invisible=on; 367 350 368 m=g_strdup_printf(_("invisible: %s status: %s%s%s"), 369 (on?_("on"):_("off")), 370 (user->invisible_status?"`":""), 371 (user->invisible_status?user->invisible_status:_("not set")), 372 (user->invisible_status?"'":"")); 373 message_send(stream,to,from,1,m,0); 374 g_free(m); 351 if (on) 352 message_send(stream,to,from,1,_("invisible: on"),0); 353 else 354 message_send(stream,to,from,1,_("invisible: off"),0); 375 355 376 356 if (session!=NULL) session_send_status(session); 357 r=session_get_cur_resource(session); 358 if ( r ) 359 presence_send(stream,NULL,user->jid,user->invisible?-1:r->available,r->show,session->gg_status_descr,0); 377 360 378 361 user_save(user); … … 394 377 if (args) { 395 378 if (!g_strcasecmp(args,"off")) user->status=NULL; 396 else user->status=g_strndup( args,GG_STATUS_DESCR_MAXSIZE);379 else user->status=g_strndup(from_utf8(args),GG_STATUS_DESCR_MAXSIZE); 397 380 } 398 381 else user->status=NULL; … … 400 383 m=g_strdup_printf(_("status: %s%s%s"), 401 384 (user->status?"`":""), 402 (user->status? user->status:_("not set")),385 (user->status?to_utf8(user->status):_("not set")), 403 386 (user->status?"'":"")); 404 message_send(stream,to,from,1,m,0);405 g_free(m);406 407 if (session!=NULL) session_send_status(session);408 user_save(user);409 }410 411 void message_offline_status(struct stream_s *stream,const char *from, const char *to,412 const char *args, xmlnode msg){413 Session *session;414 User *user;415 char *m;416 417 session=session_get_by_jid(from,stream,0);418 if (session!=NULL)419 user=session->user;420 else421 user=user_get_by_jid(from);422 423 g_free(user->offline_status);424 if (args) {425 if (!g_strcasecmp(args,"off")) user->offline_status=NULL;426 else user->offline_status=g_strndup(args,GG_STATUS_DESCR_MAXSIZE);427 }428 else user->offline_status=NULL;429 430 m=g_strdup_printf(_("offline status: %s%s%s"),431 (user->offline_status?"`":""),432 (user->offline_status?user->offline_status:_("not set")),433 (user->offline_status?"'":""));434 387 message_send(stream,to,from,1,m,0); 435 388 g_free(m); … … 619 572 t=g_strdup_printf(_("%s\n\nCurrent settings:"),msg); 620 573 g_free(msg); msg=t; 574 t=g_strdup_printf(_("%s\n status: %s%s%s"),msg, 575 (user->status?"`":""), 576 (user->status?user->status:_("not set")), 577 (user->status?"'":"")); 578 g_free(msg); msg=t; 621 579 t=g_strdup_printf(_("%s\n friends only: %s"),msg,user->friends_only?_("on"):_("off")); 622 580 g_free(msg); msg=t; trunk/src/presence.c
r643 r659 178 178 xmlnode_put_attrib(pres,"to",to); 179 179 180 /* if (available==-1) xmlnode_put_attrib(pres,"type","invisible"); 181 else*/ if (!available) xmlnode_put_attrib(pres,"type","unavailable"); 182 183 if (available==-1) show="away"; 180 if (available==-1) xmlnode_put_attrib(pres,"type","invisible"); 181 else if (!available) xmlnode_put_attrib(pres,"type","unavailable"); 182 184 183 if (show){ 185 184 n=xmlnode_insert_tag(pres,"show"); 186 185 xmlnode_insert_cdata(n,show,-1); 187 186 } 188 if (status || available==-1){187 if (status){ 189 188 n=xmlnode_insert_tag(pres,"status"); 190 if (available==-1) 191 xmlnode_insert_cdata(n,_("(invisible)"),-1); 192 if (status) 193 xmlnode_insert_cdata(n,to_utf8(status),-1); 189 xmlnode_insert_cdata(n,to_utf8(status),-1); 194 190 } 195 191 if (timestamp){ … … 409 405 else{ 410 406 Resource *r=session_get_cur_resource(s); 411 if (r) presence_send(stream,NULL,s->user->jid, r->available,407 if (r) presence_send(stream,NULL,s->user->jid,s->user->invisible?-1:r->available, 412 408 r->show,r->status,0); 413 409 } trunk/src/sessions.c
r657 r659 486 486 session_send_status(s); 487 487 if (s->user->contacts) session_send_notify(s); 488 presence_send(s->s,NULL,s->user->jid, 1,NULL,s->gg_status_descr,0);488 presence_send(s->s,NULL,s->user->jid,s->user->invisible?-1:1,NULL,s->gg_status_descr,0); 489 489 490 490 if (s->timeout_func) g_source_remove(s->timeout_func); … … 631 631 } 632 632 if (s->connected && s->s && s->jid){ 633 presence_send(s->s,NULL,s->user->jid,0,NULL,"Offline",0);634 633 for(it=s->user->contacts;it;it=it->next){ 635 634 Contact *c=(Contact *)it->data; … … 678 677 return -1; 679 678 } 680 status=status_jabber_to_gg(r->available,r->show,r->status); 681 status_descr=r->status; 682 if (!r->available && s->user->offline_status) status_descr=s->user->offline_status; 683 else if (s->user->status) status_descr=s->user->status; 679 status_descr=s->user->status?s->user->status:r->status; 680 status=status_jabber_to_gg(r->available,r->show,status_descr); 684 681 if (s->user->invisible || r->available==-1){ 685 status=GG_STATUS_INVISIBLE; 686 if (s->user->invisible_status) status_descr=s->user->invisible_status; 682 if(status_descr){ 683 status=GG_STATUS_INVISIBLE_DESCR; 684 }else{ 685 status=GG_STATUS_INVISIBLE; 686 } 687 687 } 688 688 else if (s->user->friends_only) status|=GG_STATUS_FRIENDS_MASK; … … 697 697 s->gg_status=status; 698 698 if (send_presence) { 699 presence_send(s->s,NULL,s->user->jid, r->available,r->show,s->gg_status_descr,0);699 presence_send(s->s,NULL,s->user->jid,s->user->invisible?-1:r->available,r->show,s->gg_status_descr,0); 700 700 } 701 701 return 1; … … 857 857 if (s->ggs==NULL) return -1; 858 858 r=session_make_status(s, s->connected); 859 if (r==0) return 0; 860 if (s->gg_status_descr!=NULL){ 861 debug(L_("Changing gg status to %i (%s)"),s->gg_status,s->gg_status_descr); 862 gg_change_status_descr(s->ggs,s->gg_status,s->gg_status_descr); 863 }else{ 864 debug(L_("Changing gg status to %i"),s->gg_status); 865 gg_change_status(s->ggs,s->gg_status); 866 } 859 867 if (r==-1) return -1; 860 if (r==0) return 0;861 debug(L_("Changing gg status to %i"),s->gg_status);862 if (s->gg_status_descr!=NULL)863 gg_change_status_descr(s->ggs,s->gg_status,s->gg_status_descr);864 else865 gg_change_status(s->ggs,s->gg_status);866 868 return 0; 867 869 } … … 871 873 872 874 debug(L_("Removing resource %s of %s"),r->name,s->jid); 875 s->resources=g_list_remove(s->resources,r); 876 /* HACK! when last resource is removed set session description to it's status */ 877 if (!s->resources && !s->user->status){ 878 g_free(s->gg_status_descr); 879 if(r->status) s->gg_status_descr=g_strdup(r->status); 880 else s->gg_status_descr=NULL; 881 } 882 if (r->disconnect_delay_func){ 883 g_source_remove(r->disconnect_delay_func); 884 r->disconnect_delay_func=0; 885 } 873 886 if (r->name) g_free(r->name); 874 887 if (r->show) g_free(r->show); 875 888 if (r->status) g_free(r->status); 876 s->resources=g_list_remove(s->resources,r);877 if (r->disconnect_delay_func){878 g_source_remove(r->disconnect_delay_func);879 r->disconnect_delay_func=0;880 }881 889 g_free(r); 890 session_send_status(s); 882 891 if (!s->resources && kill_session){ 883 892 session_remove(s); 884 893 return; 885 894 } 886 session_send_status(s);887 895 } 888 896 … … 914 922 } 915 923 924 if ( r ){ 925 if (r->show){ 926 g_free(r->show); 927 r->show=NULL; 928 } 929 if (r->status){ 930 g_free(r->status); 931 r->status=NULL; 932 } 933 } 934 916 935 if (!available){ 917 936 if (!r){ … … 921 940 if (disconnect_delay>0 && r->available && num_resources==1){ 922 941 r->available=0; 942 if (status) r->status=g_strndup(status,GG_STATUS_DESCR_MAXSIZE); 943 r->priority=-1; 923 944 debug(L_("Delaying removal of resource %s of %s"),resource?resource:"NULL",s->jid); 924 945 r->disconnect_delay_func=g_timeout_add(disconnect_delay*1000,delayed_disconnect,r); … … 930 951 if ( r ){ 931 952 if (r->disconnect_delay_func) g_source_remove(r->disconnect_delay_func); 932 if (r->show){933 g_free(r->show);934 r->show=NULL;935 }936 if (r->status){937 g_free(r->status);938 r->status=NULL;939 }940 953 } 941 954 else{ … … 948 961 r->available=available; 949 962 if (show) r->show=g_strdup(show); 950 if (status) r->status=g_strndup(status, GG_STATUS_DESCR_MAXSIZE);963 if (status) r->status=g_strndup(status,GG_STATUS_DESCR_MAXSIZE); 951 964 if (priority>=0) r->priority=priority; 952 965 session_send_status(s); trunk/src/status.c
r630 r659 25 25 26 26 if (status){ 27 if (available==-1) return GG_STATUS_INVISIBLE_DESCR; 27 28 if (!available) return GG_STATUS_NOT_AVAIL_DESCR; 28 29 else if (!show) return GG_STATUS_AVAIL_DESCR; … … 33 34 } 34 35 else{ 36 if (available==-1) return GG_STATUS_INVISIBLE; 35 37 if (!available) return GG_STATUS_NOT_AVAIL; 36 38 else if (!show) return GG_STATUS_AVAIL; trunk/src/users.c
r658 r659 260 260 xmlnode xml,tag,t; 261 261 char *uin,*ujid,*name,*password,*email,*locale; 262 char *status ,*offline_status,*invisible_status;262 char *status; 263 263 int last_sys_msg=0,invisible=0,friends_only=0,ignore_unknown=0; 264 264 unsigned int file_format_version=0; … … 319 319 if (tag!=NULL) friends_only=1; 320 320 tag=xmlnode_get_tag(xml,"invisible"); 321 if (tag!=NULL) { 322 invisible=1; 323 invisible_status=xmlnode_get_data(tag); 324 if (invisible_status==NULL) invisible_status=""; 325 } 326 else invisible_status=NULL; 321 if (tag!=NULL) invisible=1; 327 322 tag=xmlnode_get_tag(xml,"ignore_unknown"); 328 323 if (tag!=NULL) ignore_unknown=1; … … 336 331 } 337 332 else status=NULL; 338 tag=xmlnode_get_tag(xml,"offline_status");339 if (tag!=NULL){340 offline_status=xmlnode_get_data(tag);341 if (offline_status==NULL) offline_status="";342 }343 else offline_status=NULL;344 333 tag=xmlnode_get_tag(xml,"userlist"); 345 334 contacts=NULL; … … 427 416 u->ignore_unknown=ignore_unknown; 428 417 u->locale=g_strdup(locale); 429 u->status=g_strdup(status); 430 u->offline_status=g_strdup(offline_status); 431 u->invisible_status=g_strdup(invisible_status); 418 u->status=g_strdup(from_utf8(status)); 432 419 u->contacts=contacts; 433 420 xmlnode_free(xml); … … 471 458 g_free(u->locale); 472 459 g_free(u->status); 473 g_free(u->offline_status);474 g_free(u->invisible_status);475 460 g_free(u); 476 461 return 0; trunk/src/users.h
r644 r659 62 62 char *locale; 63 63 char * status; 64 char * offline_status;65 char * invisible_status;66 64 67 65 int confirmed;
