2010/03/18
GtkTwitter
FreeBSD 上で動作する twitter クライアントの GtkTwitter は 起動するたびにアカウント情報を入力する必要があり面倒だったので、 アカウント情報をファイルに保存して再利用するためのパッチを作成してみた。
自分が使う事だけを考えて適当に作ったので、
パスワードの暗号化すらしておらず、
シンタックスもセマンティックスもチェックしていない。
ただ単にアカウント情報を保存して再利用するだけの機能のみ。
ホームディレクトリに .gtktwitter があれば
保存されたアカウント情報を利用する。
$HOME/.gtktwitter がなければ
従来通りアカウント情報の入力ダイアログを表示し、
入力されたアカウント情報は $HOME/.gtktwitter に保存される。
$HOME/.gtktwitter は以下の書式なので、
アカウント情報は vi (1) を利用して入力する事も可能である。
勿論 cat (1) や echo (1) でも可。
ファイル中のスペースは文字そのものとして解釈されるので注意する事。
mail=ID pass=パスワード
diff -rc gtktwitter-0.0.4.orig/gtktwitter.c gtktwitter-0.0.4/gtktwitter.c
*** gtktwitter-0.0.4.orig/gtktwitter.c 2007-05-10 00:50:02.000000000 +0900
--- gtktwitter-0.0.4/gtktwitter.c 2010-03-18 20:15:01.000000000 +0900
***************
*** 724,729 ****
--- 724,783 ----
return FALSE;
}
+ #define CONFIG_FILE ".gtktwitter"
+
+ static gboolean getconfig(GtkWidget *window)
+ {
+
+ gchar *config;
+ char buff[1024],
+ *m = NULL,
+ *p = NULL;
+ FILE *fp;
+ gboolean ret = FALSE;
+
+ if((config = g_strdup_printf("%s/%s", getenv("HOME"), CONFIG_FILE))){
+ if((fp = fopen(config, "r"))){
+ while(fgets(buff, sizeof(buff), fp))
+ if(!strncmp(buff, "mail=", 5))
+ m = strdup(buff+5);
+ else if(!strncmp(buff, "pass=", 5))
+ p = strdup(buff+5);
+ fclose(fp);
+ }
+ g_free(config);
+
+ if(m && p){
+ g_object_set_data(G_OBJECT(window), "mail", m);
+ g_object_set_data(G_OBJECT(window), "pass", p);
+ ret = TRUE;
+ }
+ }
+
+ return (ret);
+
+ }
+
+ static void putconfig(const char *m, const char *p)
+ {
+
+ gchar *config;
+ FILE *fp;
+
+ if((config = g_strdup_printf("%s/%s", getenv("HOME"), CONFIG_FILE))){
+ if((fp = fopen(config, "w"))){
+ fprintf(fp, "mail=%s\n", m);
+ fprintf(fp, "pass=%s\n", p);
+ fclose(fp);
+ }
+ g_free(config);
+
+ }
+
+ return;
+
+ }
+
/**
* login dialog func
*/
***************
*** 735,740 ****
--- 789,798 ----
GtkWidget* pass = NULL;
gboolean ret = FALSE;
+ if(getconfig(window)){
+ ret = TRUE;
+ }
+ else{
/* login dialog */
dialog = gtk_dialog_new();
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
***************
*** 804,812 ****
--- 862,873 ----
char* pass_text = (char*)gtk_entry_get_text(GTK_ENTRY(pass));
g_object_set_data(G_OBJECT(window), "mail", strdup(mail_text));
g_object_set_data(G_OBJECT(window), "pass", strdup(pass_text));
+ putconfig(mail_text, pass_text);
ret = TRUE;
}
+ }
+ if(dialog)
gtk_widget_destroy(dialog);
return ret;
}

