added cmd_search onchan criteria
authorpk910 <philipp@zoelle1.de>
Sun, 18 Dec 2011 16:34:26 +0000 (17:34 +0100)
committerpk910 <philipp@zoelle1.de>
Sun, 18 Dec 2011 16:36:42 +0000 (17:36 +0100)
src/cmd_neonserv_search.c

index 2101cd2b46443d264c59c17046004cec500fa94b..0585c8a4cbc0a0a25ca18f4952b54ad4ee2ddddc 100644 (file)
@@ -32,6 +32,7 @@
 struct neonserv_cmd_search_criteria {
     char *name;
     char *registrar;
+    char *onchan;
     unsigned int flags : 16;
     unsigned int unvisited;
     unsigned int registered;
@@ -58,6 +59,7 @@ CMD_BIND(neonserv_cmd_search) {
         }
         if(!stricmp(argv[i], "name")) criteria->name = argv[i+1];
         else if(!stricmp(argv[i], "registrar")) criteria->registrar = argv[i+1];
+        else if(!stricmp(argv[i], "onchan")) criteria->onchan = argv[i+1];
         else if(!stricmp(argv[i], "unvisited")) criteria->unvisited = strToTime(user, argv[i+1]);
         else if(!stricmp(argv[i], "registered")) criteria->registered = strToTime(user, argv[i+1]);
         else if(!stricmp(argv[i], "flags")) {
@@ -137,8 +139,16 @@ CMD_BIND(neonserv_cmd_search) {
         if((criteria->flags & CMD_SEARCH_FLAG_NOT_NODELETE) && strcmp(row[3], "0")) continue;
         if((criteria->flags & CMD_SEARCH_FLAG_HAS_SUSPENDED) && strcmp(row[4], "1")) continue;
         if((criteria->flags & CMD_SEARCH_FLAG_NOT_SUSPENDED) && strcmp(row[4], "0")) continue;
-        if(criteria->flags & CMD_SEARCH_FLAG_STATES) {
+        if((criteria->flags & CMD_SEARCH_FLAG_STATES) || criteria->onchan) {
             struct ChanNode *channel = getChanByName(row[0]);
+            if(criteria->onchan) {
+                if(!channel) continue;
+                struct ChanUser *chanuser = NULL;
+                for(chanuser = getChannelUsers(channel, NULL); chanuser; chanuser = getChannelUsers(channel, chanuser)) {
+                    if(!match(criteria->onchan, chanuser->user->nick)) break;
+                }
+                if(!chanuser) continue;
+            }
             if((criteria->flags & CMD_SEARCH_FLAG_IS_JOINED) && !channel) continue;
             if((criteria->flags & CMD_SEARCH_FLAG_NOT_JOINED) && channel) continue;
             if(channel && (criteria->flags & (CMD_SEARCH_FLAG_IS_OPPED | CMD_SEARCH_FLAG_NOT_OPPED | CMD_SEARCH_FLAG_IS_VOICED | CMD_SEARCH_FLAG_NOT_VOICED))) {