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;
  }


Copyright © 2008-2020 Mitzyuki IMAIZUMI. All rights reserved.