X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fuimisc.c;h=407e4003925560846efdaa9da3c967041464d25d;hb=c0fe4f459e4c542293aeb1433da2461440a15e36;hp=6c799df39d56f55f3ed8f823cb48680240123f53;hpb=8be1b1e3aca9bb9cb78a7e14e0760ac7e0881592;p=doldaconnect.git diff --git a/lib/uimisc.c b/lib/uimisc.c index 6c799df..407e400 100644 --- a/lib/uimisc.c +++ b/lib/uimisc.c @@ -869,6 +869,9 @@ static int getfnlistcallback(struct dc_response *resp) fn->name = swcsdup(ires->argv[2].val.str); fn->numusers = ires->argv[3].val.num; fn->state = ires->argv[4].val.num; + if(fn->pubid != NULL) + free(fn->pubid); + fn->pubid = swcsdup(ires->argv[5].val.str); } else { fn = newfn(); fn->id = ires->argv[0].val.num; @@ -876,6 +879,7 @@ static int getfnlistcallback(struct dc_response *resp) fn->name = swcsdup(ires->argv[2].val.str); fn->numusers = ires->argv[3].val.num; fn->state = ires->argv[4].val.num; + fn->pubid = swcsdup(ires->argv[5].val.str); fn->found = 1; } dc_freeires(ires); @@ -1034,11 +1038,9 @@ static int getpeerlistcallback(struct dc_response *resp) if(!peer->found) delpeer(peer); } - fn->trackpeers = 1; } else if(resp->code == 201) { while(fn->peers != NULL) delpeer(fn->peers); - fn->trackpeers = 1; } data->callback(fn, resp->code, data->data); free(data); @@ -1217,21 +1219,29 @@ void dc_uimisc_handlenotify(struct dc_response *resp) } break; case 630: - if(((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) && fn->trackpeers) + if((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) { if((peer = dc_fnetfindpeer(fn, ires->argv[1].val.str)) == NULL) - addpeer(fn, ires->argv[1].val.str, ires->argv[2].val.str); + { + peer = addpeer(fn, ires->argv[1].val.str, ires->argv[2].val.str); + if(fn->newpeercb != NULL) + fn->newpeercb(peer); + } } break; case 631: - if(((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) && fn->trackpeers) + if((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) { if((peer = dc_fnetfindpeer(fn, ires->argv[1].val.str)) != NULL) + { + if(fn->delpeercb != NULL) + fn->delpeercb(peer); delpeer(peer); + } } break; case 632: - if(((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) && fn->trackpeers) + if((fn = dc_findfnetnode(ires->argv[0].val.num)) != NULL) { if((peer = dc_fnetfindpeer(fn, ires->argv[1].val.str)) != NULL) { @@ -1240,7 +1250,7 @@ void dc_uimisc_handlenotify(struct dc_response *resp) free(peer->nick); peer->nick = swcsdup(ires->argv[2].val.str); } - for(i = 3; i < resp->rlines[0].argc; i += 3) + for(i = 4; i < resp->rlines[0].argc; i += 3) { switch(wcstol(resp->rlines[0].argv[i + 1], NULL, 10)) { @@ -1255,6 +1265,8 @@ void dc_uimisc_handlenotify(struct dc_response *resp) break; } } + if(fn->chpeercb != NULL) + fn->chpeercb(peer); } } break;