aboutsummaryrefslogtreecommitdiffstats
path: root/find-contact-by-chat.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2021-04-12 13:37:59 +0200
committerMattias Andrée <maandree@kth.se>2021-04-12 13:37:59 +0200
commitfa88a28e46b7ac2d3dcd1938e5e4708157d08b22 (patch)
treec3ca4f98374328f37d71d1079f9e1f7406ed84d8 /find-contact-by-chat.c
parentMinor fix to set-contact-photos (diff)
downloadcontacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.gz
contacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.bz2
contacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.xz
Deduplicate code and make some small improvements
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-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")