aboutsummaryrefslogtreecommitdiffstats
path: root/find-contact-by-chat.c
diff options
context:
space:
mode:
Diffstat (limited to 'find-contact-by-chat.c')
-rw-r--r--find-contact-by-chat.c80
1 files changed, 7 insertions, 73 deletions
diff --git a/find-contact-by-chat.c b/find-contact-by-chat.c
index 1a060aa..67ebfd1 100644
--- a/find-contact-by-chat.c
+++ b/find-contact-by-chat.c
@@ -1,76 +1,10 @@
/* See LICENSE file for copyright and license details. */
-#include "common.h"
-
-USAGE("[-c context] [-s service] (-L | address)");
-
-
-int
-main(int argc, char *argv[])
-{
- int list = 0;
- struct passwd *user;
- struct libcontacts_contact **contacts;
- struct libcontacts_chat **chats, *chat;
- char *context = NULL, *service = NULL;
- size_t i;
-
- ARGBEGIN {
- case 'c':
- if (context)
- usage();
- context = ARG();
- break;
- case 's':
- if (service)
- usage();
- service = ARG();
- break;
- case 'L':
- list = 1;
- break;
- default:
- usage();
- } ARGEND;
+#define CATEGORY chats
+#define SUBCATEGORY service
- if (argc != 1 - list)
- usage();
+#define LIST_PARAMS(X)\
+ X('c', "c", context, "context")\
+ X('s', "s", service, "service")
- errno = 0;
- user = getpwuid(getuid());
- if (!user)
- eprintf("getpwuid: %s\n", errno ? strerror(errno) : "user does not exist");
-
- if (libcontacts_load_contacts(&contacts, user, 1))
- eprintf("libcontacts_load_contacts:");
- for (i = 0; contacts[i]; i++) {
- if ((chats = contacts[i]->chats)) {
- for (; (chat = *chats); chats++) {
- if (!chat->address)
- continue;
- if (context && strcmpnul(chat->context, context))
- continue;
- if (service && strcmpnul(chat->service, service))
- continue;
- if (list) {
- if (chat->service && !service)
- printf("%s (%s: %s)\n", contacts[i]->id, chat->service, chat->address);
- else
- printf("%s (%s)\n", contacts[i]->id, chat->address);
- } else if (!strcmp(chat->address, argv[0])) {
- if (chat->service && !service)
- printf("%s (%s)\n", contacts[i]->id, chat->service);
- else
- printf("%s\n", contacts[i]->id);
- }
- }
- }
- libcontacts_contact_destroy(contacts[i]);
- free(contacts[i]);
- }
- free(contacts);
-
- if (fflush(stdout) || ferror(stdout) || fclose(stdout))
- eprintf("printf:");
-
- return 0;
-}
+#include "common.h"
+IMPLEMENT_FIND_ON_LIST(chat, address, "address")