Changeset 659

Show
Ignore:
Timestamp:
12/13/05 23:10:54 (3 years ago)
Author:
smoku
Message:

big statuses update
- removed invisible status description
- femoved status_offline description
- descriptions are copied from jabber status
- or can be fixed permanently
- invisible and offline status with description implemented

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/gg_versions.c

    r650 r659  
    4646        "6.0 (build 133)",                      /* 0x21 */ 
    4747        "6.0 (build 136,142)",                  /* 0x22 */ 
    48         NULL,                                   /* 0x23 */ 
     48       NULL,                                   /* 0x23 */ 
    4949        "6.0 (build 155)",                      /* 0x24 */ 
    5050        "7.0 (build 1)",                        /* 0x25 */ 
  • trunk/src/message.c

    r653 r659  
    5959void message_status(struct stream_s *s,const char *from, const char *to, 
    6060                                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); 
    6361 
    6462MsgCommand msg_commands[]={ 
    6563        {"get roster","gr",N_("Download user list from server"),message_get_roster,0}, 
    6664        {"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}, 
    7066        {"locale","loc",N_("Set user locale (language)"),message_locale,0}, 
    7167        {"ignore_unknown","iu",N_("Ignore messages from unknown users"),message_ignore_unknown,0}, 
     
    7369        {"unignore","ui",N_("Remove a user from, or view the ignore list"),message_unignore,0}, 
    7470        {"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}, 
    7671        {NULL,NULL,NULL,0}, 
    7772}; 
     
    336331Session *session; 
    337332User *user; 
    338 char *m
     333Resource *r
    339334gboolean on; 
    340335 
     
    344339        else 
    345340                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; 
    364343        else on=!user->invisible; 
    365344 
     345        if (user->invisible==on){ 
     346                message_send(stream,to,from,1,_("No change."),0); 
     347                return; 
     348        } 
    366349        user->invisible=on; 
    367350 
    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); 
    375355 
    376356        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); 
    377360 
    378361        user_save(user); 
     
    394377        if (args) { 
    395378                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); 
    397380        } 
    398381        else user->status=NULL; 
     
    400383        m=g_strdup_printf(_("status: %s%s%s"), 
    401384                        (user->status?"`":""), 
    402                         (user->status?user->status:_("not set")), 
     385                        (user->status?to_utf8(user->status):_("not set")), 
    403386                        (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         else 
    421                 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?"'":"")); 
    434387        message_send(stream,to,from,1,m,0); 
    435388        g_free(m); 
     
    619572        t=g_strdup_printf(_("%s\n\nCurrent settings:"),msg); 
    620573        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; 
    621579        t=g_strdup_printf(_("%s\n  friends only: %s"),msg,user->friends_only?_("on"):_("off")); 
    622580        g_free(msg); msg=t; 
  • trunk/src/presence.c

    r643 r659  
    178178        xmlnode_put_attrib(pres,"to",to); 
    179179 
    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 
    184183        if (show){ 
    185184                n=xmlnode_insert_tag(pres,"show"); 
    186185                xmlnode_insert_cdata(n,show,-1); 
    187186        } 
    188         if (status || available==-1){ 
     187        if (status){ 
    189188                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); 
    194190        } 
    195191        if (timestamp){ 
     
    409405                        else{ 
    410406                                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, 
    412408                                                        r->show,r->status,0); 
    413409                        } 
  • trunk/src/sessions.c

    r657 r659  
    486486                        session_send_status(s); 
    487487                        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); 
    489489 
    490490                        if (s->timeout_func) g_source_remove(s->timeout_func); 
     
    631631        } 
    632632        if (s->connected && s->s && s->jid){ 
    633                 presence_send(s->s,NULL,s->user->jid,0,NULL,"Offline",0); 
    634633                for(it=s->user->contacts;it;it=it->next){ 
    635634                        Contact *c=(Contact *)it->data; 
     
    678677                return -1; 
    679678        } 
    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); 
    684681        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                } 
    687687        } 
    688688        else if (s->user->friends_only) status|=GG_STATUS_FRIENDS_MASK; 
     
    697697        s->gg_status=status; 
    698698        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); 
    700700        } 
    701701        return 1; 
     
    857857        if (s->ggs==NULL) return -1; 
    858858        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        } 
    859867        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         else 
    865                 gg_change_status(s->ggs,s->gg_status); 
    866868        return 0; 
    867869} 
     
    871873 
    872874        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        } 
    873886        if (r->name) g_free(r->name); 
    874887        if (r->show) g_free(r->show); 
    875888        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         } 
    881889        g_free(r); 
     890        session_send_status(s); 
    882891        if (!s->resources && kill_session){ 
    883892                session_remove(s); 
    884893                return; 
    885894        } 
    886         session_send_status(s); 
    887895} 
    888896 
     
    914922        } 
    915923 
     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 
    916935        if (!available){ 
    917936                if (!r){ 
     
    921940                if (disconnect_delay>0 && r->available && num_resources==1){ 
    922941                        r->available=0; 
     942                        if (status) r->status=g_strndup(status,GG_STATUS_DESCR_MAXSIZE); 
     943                        r->priority=-1; 
    923944                        debug(L_("Delaying removal of resource %s of %s"),resource?resource:"NULL",s->jid); 
    924945                        r->disconnect_delay_func=g_timeout_add(disconnect_delay*1000,delayed_disconnect,r); 
     
    930951                if ( r ){ 
    931952                        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                         } 
    940953                } 
    941954                else{ 
     
    948961                r->available=available; 
    949962                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); 
    951964                if (priority>=0) r->priority=priority; 
    952965                session_send_status(s); 
  • trunk/src/status.c

    r630 r659  
    2525 
    2626        if (status){ 
     27                if (available==-1) return GG_STATUS_INVISIBLE_DESCR; 
    2728                if (!available) return GG_STATUS_NOT_AVAIL_DESCR; 
    2829                else if (!show) return GG_STATUS_AVAIL_DESCR; 
     
    3334        } 
    3435        else{ 
     36                if (available==-1) return GG_STATUS_INVISIBLE; 
    3537                if (!available) return GG_STATUS_NOT_AVAIL; 
    3638                else if (!show) return GG_STATUS_AVAIL; 
  • trunk/src/users.c

    r658 r659  
    260260xmlnode xml,tag,t; 
    261261char *uin,*ujid,*name,*password,*email,*locale; 
    262 char *status,*offline_status,*invisible_status
     262char *status
    263263int last_sys_msg=0,invisible=0,friends_only=0,ignore_unknown=0; 
    264264unsigned int file_format_version=0; 
     
    319319        if (tag!=NULL) friends_only=1; 
    320320        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; 
    327322        tag=xmlnode_get_tag(xml,"ignore_unknown"); 
    328323        if (tag!=NULL) ignore_unknown=1; 
     
    336331        } 
    337332        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; 
    344333        tag=xmlnode_get_tag(xml,"userlist"); 
    345334        contacts=NULL; 
     
    427416        u->ignore_unknown=ignore_unknown; 
    428417        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)); 
    432419        u->contacts=contacts; 
    433420        xmlnode_free(xml); 
     
    471458        g_free(u->locale); 
    472459        g_free(u->status); 
    473         g_free(u->offline_status); 
    474         g_free(u->invisible_status); 
    475460        g_free(u); 
    476461        return 0; 
  • trunk/src/users.h

    r644 r659  
    6262        char *locale; 
    6363        char * status; 
    64         char * offline_status; 
    65         char * invisible_status; 
    6664 
    6765        int confirmed;