#include <termios.h>
#include <dlfcn.h>
#include <oauth.h>
-
+#include "bti.h"
#define zalloc(size) calloc(size, 1)
static int debug;
-static int verbose;
-
-enum host {
- HOST_TWITTER = 0,
- HOST_IDENTICA = 1,
- HOST_CUSTOM = 2
-};
-
-enum action {
- ACTION_UPDATE = 0,
- ACTION_FRIENDS = 1,
- ACTION_USER = 2,
- ACTION_REPLIES = 4,
- ACTION_PUBLIC = 8,
- ACTION_GROUP = 16,
- ACTION_RETWEET = 32,
- ACTION_UNKNOWN = 64
-};
-
-struct session {
- char *password;
- char *account;
- char *consumer_key;
- char *consumer_secret;
- char *access_token_key;
- char *access_token_secret;
- char *tweet;
- char *proxy;
- char *time;
- char *homedir;
- char *logfile;
- char *user;
- char *group;
- char *hosturl;
- char *hostname;
- char *configfile;
- char *replyto;
- char *retweet;
- int bash;
- int background;
- int interactive;
- int shrink_urls;
- int dry_run;
- int page;
- int no_oauth;
- int guest;
- enum host host;
- enum action action;
- void *readline_handle;
- char *(*readline)(const char *);
-};
-
-struct bti_curl_buffer {
- char *data;
- enum action action;
- int length;
-};
static void display_help(void)
{
return curl;
}
-static void parse_statuses(xmlDocPtr doc, xmlNodePtr current)
+static void parse_statuses(struct session *session,
+ xmlDocPtr doc, xmlNodePtr current)
{
xmlChar *text = NULL;
xmlChar *user = NULL;
}
if (user && text && created && id) {
- if (verbose)
+ if (session->verbose)
printf("[%s] {%s} (%.16s) %s\n",
user, id, created, text);
else
return;
}
-static void parse_timeline(char *document)
+static void parse_timeline(char *document, struct session *session)
{
xmlDocPtr doc;
xmlNodePtr current;
current = current->xmlChildrenNode;
while (current != NULL) {
if ((!xmlStrcmp(current->name, (const xmlChar *)"status")))
- parse_statuses(doc, current);
+ parse_statuses(session, doc, current);
current = current->next;
}
xmlFreeDoc(doc);
memcpy(&curl_buf->data[curl_buf->length], (char *)buffer, buffer_size);
curl_buf->length += buffer_size;
if (curl_buf->action)
- parse_timeline(curl_buf->data);
+ parse_timeline(curl_buf->data, curl_buf->session);
dbg("%s\n", curl_buf->data);
curl_buf = bti_curl_buffer_alloc(session->action);
if (!curl_buf)
return -ENOMEM;
+ curl_buf->session = session;
curl = curl_init();
if (!curl)
if ((session->action != ACTION_UPDATE) &&
(session->action != ACTION_RETWEET))
- parse_timeline(reply);
+ parse_timeline(reply, session);
}
return 0;
}
c += 8;
if (!strncasecmp(c, "true", 4) ||
!strncasecmp(c, "yes", 3))
- verbose = 1;
+ session->verbose = 1;
} else if (!strncasecmp(c,"retweet", 7) &&
(c[7] == '=')) {
c += 8;
int page_nr;
debug = 0;
- verbose = 0;
session = session_alloc();
if (!session) {
debug = 1;
break;
case 'V':
- verbose = 1;
+ session->verbose = 1;
break;
case 'a':
if (session->account)