11 #include "playerstatus.h"
13 #include "nicolive_comment.h"
14 #include "rtmpstream.h"
16 GtkWidget *comment_view;
36 int comment_callback(CHAT_COMMENT* cmt, void *data)
38 // printf("[%d-%s] %s\n",(*cmt).no,(*cmt).user_id,(*cmt).contents);
44 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(comment_view)));
46 gtk_list_store_append(store, &iter);
47 gtk_list_store_set(store, &iter,
48 COMMENT_NO, (*cmt).no,
51 COMMENT, (*cmt).contents,
56 send (GtkWidget *widget,
59 nicolive_comment_send( info, (char*) gtk_entry_get_text(GTK_ENTRY(data)));
60 //printf("[SEND] %s\n", );
64 connect (GtkWidget *widget,
67 const char* host = "watch.live.nicovideo.jp";
68 /*const*/ char path[64] = "/api/getplayerstatus?v="; //34文字かな?余裕を持って64。
70 strcat(path, (char*) gtk_entry_get_text(GTK_ENTRY(data)));
73 char * user_session = get_user_session(0);
74 char usr_s_cookie[128] = "user_session=";
75 strcat(usr_s_cookie, user_session);
77 HTTP *session = http_open(host, path, 80);
79 http_request(session, HTTP_GET, usr_s_cookie, "Mozilla/5.0", 0);
81 //http_retrieve(session);
86 header = (char *)malloc(sizeof(char) * 1024);
87 contents = (char *)malloc(sizeof(char) * 8192);
89 http_retrieve_text(session, header, contents);
93 // printf("HTTP done\n");
95 NICO_LIVE *broadcast = new_nico_live(contents);
99 printf("放送タイトル:%s\n説明:%s\n放送主:%s\n",(*broadcast).title,(*broadcast).description,(*broadcast).owner_name);
100 //printf("コメ鯖:%s\nポート:%d\nスレッド:%d\n",(*broadcast).msg_addr,(*broadcast).msg_port,(*broadcast).thread);
104 RtmpStream* stream = n_RtmpStream(broadcast->url, broadcast->contents, broadcast->ticket);
108 memset(path, 0, sizeof(char)*64);
109 memset(header, 0, malloc_size(header));
110 memset(contents, 0, malloc_size(contents));
113 info = nicolive_comment_open((*broadcast).msg_addr, (*broadcast).msg_port, (*broadcast).thread, comment_callback, broadcast);
116 sprintf(path, "/api/getpostkey?thread=%d&block_no=%d", (*broadcast).thread, 1);
118 session = http_open("live.nicovideo.jp", path, 80);
119 http_request(session, HTTP_GET, usr_s_cookie, "Mozilla/5.0", 0);
120 http_retrieve_text(session, header, contents);
122 printf("%s\n", contents + 8);
123 (*info).postkey = contents + 8;
127 // d_RtmpStream(stream);
131 nicolive_comment_close(info);
134 nico_live_close(broadcast);
140 gtk_widget_set_sensitive(widget, FALSE);
145 static GtkTreeViewColumn*
146 create_column(gint column_id, gchar *title, gboolean is_checkbox)
148 GtkCellRenderer *renderer;
149 GtkTreeViewColumn *column;
150 gchar *data_attrname;
153 renderer = gtk_cell_renderer_toggle_new();
154 data_attrname = "active";
157 renderer = gtk_cell_renderer_text_new();
158 data_attrname = "text";
160 column = gtk_tree_view_column_new_with_attributes(title, renderer,
161 data_attrname, column_id, NULL);
162 gtk_tree_view_column_set_sort_indicator(column, TRUE);
163 gtk_tree_view_column_set_sort_column_id(column, column_id);
169 create_comment_list_view(GtkListStore *store)
171 GtkWidget *list_view;
172 GtkTreeViewColumn *column;
174 list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
176 column = create_column(COMMENT_NO, "コメ番", FALSE);
177 gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
178 column = create_column(USER, "ユーザ", FALSE);
179 gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
180 column = create_column(PREMIUM, "P", TRUE);
181 gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
182 column = create_column(COMMENT, "コメント", FALSE);
183 gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
189 main(int argc, char *argv[])
191 GtkWidget *window, *scrolled_win;
194 GtkWidget *hbox_initial_connect;
195 GtkWidget *button_connect;
196 GtkWidget *textbox_live_id;
198 GtkWidget *hbox_comment;
199 GtkWidget *button_send;
200 GtkWidget *textbox_comment;
202 gtk_init(&argc, &argv);
205 signal(SIGABRT, SIG_IGN);
206 signal(SIGSEGV, SIG_IGN);
208 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
209 gtk_window_set_title(GTK_WINDOW(window), "ぱぁりっぢ+遞信機 α1");
210 // ウィンドウのx押されたらプログラム終了
211 g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
214 vbox = gtk_vbox_new(FALSE, 3);
215 gtk_container_add(GTK_CONTAINER(window), vbox);
219 hbox_initial_connect = gtk_hbox_new(FALSE, 2);
220 gtk_box_pack_start(GTK_BOX(vbox), hbox_initial_connect, TRUE, TRUE, 0);
222 textbox_live_id = gtk_entry_new ();
223 gtk_box_pack_start(GTK_BOX(hbox_initial_connect), textbox_live_id, TRUE, TRUE, 0);
226 button_connect = gtk_button_new_with_label ("接続");
227 g_signal_connect (button_connect, "clicked", G_CALLBACK (connect), textbox_live_id);
228 gtk_box_pack_start(GTK_BOX(hbox_initial_connect), button_connect, TRUE, FALSE, 0);
232 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
233 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
234 GTK_POLICY_AUTOMATIC,
235 GTK_POLICY_AUTOMATIC);
236 gtk_widget_set_usize (scrolled_win, 512, 384);
237 gtk_box_pack_start(GTK_BOX(vbox), scrolled_win, TRUE, TRUE, 0);
240 store = gtk_list_store_new(N_COLUMNS, G_TYPE_INT, G_TYPE_STRING,
241 G_TYPE_BOOLEAN, G_TYPE_STRING);
242 comment_view = create_comment_list_view(store);
244 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win),
250 hbox_comment = gtk_hbox_new(FALSE, 2);
251 gtk_box_pack_start(GTK_BOX(vbox), hbox_comment, TRUE, TRUE, 0);
253 textbox_comment = gtk_entry_new ();
254 gtk_box_pack_start(GTK_BOX(hbox_comment), textbox_comment, TRUE, TRUE, 0);
257 button_send = gtk_button_new_with_label ("送信");
258 g_signal_connect (button_send, "clicked", G_CALLBACK (send), textbox_comment);
259 gtk_box_pack_start(GTK_BOX(hbox_comment), button_send, TRUE, FALSE, 0);
263 gtk_widget_show_all(window);