Add public IDs for fnetnodes.
[doldaconnect.git] / lib / uimisc.c
index 6c799df..407e400 100644 (file)
@@ -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;