]> ToastFreeware Gitweb - gregoa/bti.git/blobdiff - bti.c
add make install target
[gregoa/bti.git] / bti.c
diff --git a/bti.c b/bti.c
index bd311cd97d6bfdffb8017d7d32f97b38526e1af9..8f09356f65e8d7d533b6aa7b54e693db8b8d7e13 100644 (file)
--- a/bti.c
+++ b/bti.c
@@ -55,7 +55,8 @@ enum action {
        ACTION_FRIENDS = 1,
        ACTION_USER = 2,
        ACTION_REPLIES = 4,
-       ACTION_PUBLIC = 8
+       ACTION_PUBLIC = 8,
+       ACTION_UNKNOWN = 16
 };
 
 struct session {
@@ -80,19 +81,20 @@ struct bti_curl_buffer {
 
 static void display_help(void)
 {
-       fprintf(stdout, "bti - send tweet to twitter\n");
+       fprintf(stdout, "bti - send tweet to twitter or identi.ca\n");
        fprintf(stdout, "Version: " BTI_VERSION "\n");
        fprintf(stdout, "Usage:\n");
        fprintf(stdout, "  bti [options]\n");
        fprintf(stdout, "options are:\n");
        fprintf(stdout, "  --account accountname\n");
        fprintf(stdout, "  --password password\n");
+       fprintf(stdout, "  --action action\n");
+       fprintf(stdout, "    ('update', 'friends', 'public', 'replies' or 'user')\n");
+       fprintf(stdout, "  --user screenname\n");
        fprintf(stdout, "  --proxy PROXY:PORT\n");
        fprintf(stdout, "  --host HOST\n");
        fprintf(stdout, "  --logfile logfile\n");
        fprintf(stdout, "  --bash\n");
-       fprintf(stdout, "  --action action\n");
-       fprintf(stdout, "  --user screenname\n");
        fprintf(stdout, "  --debug\n");
        fprintf(stdout, "  --version\n");
        fprintf(stdout, "  --help\n");
@@ -382,6 +384,8 @@ static int send_request(struct session *session)
                        break;
                }
 
+               break;
+       default:
                break;
        }
 
@@ -512,14 +516,16 @@ static void parse_configfile(struct session *session)
        if (action) {
                if (strcasecmp(action, "update") == 0)
                        session->action = ACTION_UPDATE;
-               if (strcasecmp(action, "friends") == 0)
+               else if (strcasecmp(action, "friends") == 0)
                        session->action = ACTION_FRIENDS;
-               if (strcasecmp(action, "user") == 0)
+               else if (strcasecmp(action, "user") == 0)
                        session->action = ACTION_USER;
-               if (strcasecmp(action, "replies") == 0)
+               else if (strcasecmp(action, "replies") == 0)
                        session->action = ACTION_REPLIES;
-               if (strcasecmp(action, "public") == 0)
+               else if (strcasecmp(action, "public") == 0)
                        session->action = ACTION_PUBLIC;
+               else
+                       session->action = ACTION_UNKNOWN;
                free(action);
        }
        if (user) {
@@ -561,24 +567,54 @@ static void log_session(struct session *session, int retval)
                break;
        }
 
-       if (session->action == ACTION_UPDATE) {
+       switch (session->action) {
+       case ACTION_UPDATE:
                if (retval)
                        fprintf(log_file, "%s: host=%s tweet failed\n",
                                session->time, host);
                else
                        fprintf(log_file, "%s: host=%s tweet=%s\n",
                                session->time, host, session->tweet);
-       } else if (session->action == ACTION_FRIENDS) {
+               break;
+       case ACTION_FRIENDS:
                fprintf(log_file, "%s: host=%s retrieving friends timeline\n",
                        session->time, host);
-       } else if (session->action == ACTION_PUBLIC) {
+               break;
+       case ACTION_USER:
+               fprintf(log_file, "%s: host=%s retrieving %s's timeline\n",
+                       session->time, host, session->user);
+               break;
+       case ACTION_REPLIES:
+               fprintf(log_file, "%s: host=%s retrieving replies\n",
+                       session->time, host);
+               break;
+       case ACTION_PUBLIC:
                fprintf(log_file, "%s: host=%s retrieving public timeline\n",
                        session->time, host);
+               break;
+       default:
+               break;
        }
 
        fclose(log_file);
 }
 
+static char *get_string_from_stdin(void)
+{
+       char *temp;
+       char *string;
+
+       string = zalloc(1000);
+       if (!string)
+               return NULL;
+
+       if (!fgets(string, 999, stdin))
+               return NULL;
+       temp = strchr(string, '\n');
+       *temp = '\0';
+       return string;
+}
+
 int main(int argc, char *argv[], char *envp[])
 {
        static const struct option options[] = {
@@ -663,14 +699,16 @@ int main(int argc, char *argv[], char *envp[])
                case 'A':
                        if (strcasecmp(optarg, "update") == 0)
                                session->action = ACTION_UPDATE;
-                       if (strcasecmp(optarg, "friends") == 0)
+                       else if (strcasecmp(optarg, "friends") == 0)
                                session->action = ACTION_FRIENDS;
-                       if (strcasecmp(optarg, "user") == 0)
+                       else if (strcasecmp(optarg, "user") == 0)
                                session->action = ACTION_USER;
-                       if (strcasecmp(optarg, "replies") == 0)
+                       else if (strcasecmp(optarg, "replies") == 0)
                                session->action = ACTION_REPLIES;
-                       if (strcasecmp(optarg, "public") == 0)
+                       else if (strcasecmp(optarg, "public") == 0)
                                session->action = ACTION_PUBLIC;
+                       else
+                               session->action = ACTION_UNKNOWN;
                        dbg("action = %d\n", session->action);
                        break;
                case 'u':
@@ -707,6 +745,12 @@ int main(int argc, char *argv[], char *envp[])
                }
        }
 
+       if (session->action == ACTION_UNKNOWN) {
+               fprintf(stderr, "Unknown action, valid actions are:\n");
+               fprintf(stderr, "'update', 'friends', 'public', 'replies' or 'user'.\n");
+               goto exit;
+       }
+
        if (!session->account) {
                fprintf(stdout, "Enter twitter account: ");
                session->account = readline(NULL);
@@ -719,7 +763,7 @@ int main(int argc, char *argv[], char *envp[])
 
        if (session->action == ACTION_UPDATE) {
                if (session->bash)
-                       tweet = readline(NULL);
+                       tweet = get_string_from_stdin();
                else
                        tweet = readline("tweet: ");
                if (!tweet || strlen(tweet) == 0) {
@@ -738,7 +782,7 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        if (!session->user)
-               session->user = session->account;
+               session->user = strdup(session->account);
 
        dbg("account = %s\n", session->account);
        dbg("password = %s\n", session->password);