Changeset 17
- Timestamp:
- Jan 12, 2006, 6:55:27 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/beos/TRWindow.cpp
r14 r17 118 118 /** 119 119 * Rescans the active Torrents folder, and will add all the torrents there to the 120 * engine. 120 * engine. Called during initial Application Start & Stop. 121 121 */ 122 122 void TRWindow::RescanTorrents() { … … 160 160 transfers->AddItem(new TRTransfer(path.Path(), node)); 161 161 162 // Start the newly added torrent. 163 worker_info *startData = (worker_info*)calloc(1, sizeof(worker_info)); 164 startData->window = this; 165 startData->index = tr_torrentCount(engine) - 1; 166 thread_id start_thread = spawn_thread(TRWindow::AsynchStartTorrent, "BirthCanal", 167 B_NORMAL_PRIORITY, (void *)startData); 168 if (!((start_thread) < B_OK)) { 169 resume_thread(start_thread); 170 } else { // Fallback and start the old way. 171 StartTorrent(startData->index); 172 free(startData); 162 bool autoStart = true; 163 164 // Decide if we should auto-start this torrent or not. 165 BString prefName("download."); 166 prefName << path.Path() << ".running"; 167 168 Prefs *prefs = new Prefs(TRANSMISSION_SETTINGS); 169 if (prefs->FindBool(prefName.String(), &autoStart) != B_OK) { 170 autoStart = true; 171 } 172 delete prefs; 173 174 if (autoStart) { 175 // Start the newly added torrent. 176 worker_info *startData = (worker_info*)calloc(1, sizeof(worker_info)); 177 startData->window = this; 178 startData->index = tr_torrentCount(engine) - 1; 179 thread_id start_thread = spawn_thread(TRWindow::AsynchStartTorrent, "BirthCanal", 180 B_NORMAL_PRIORITY, (void *)startData); 181 if (!((start_thread) < B_OK)) { 182 resume_thread(start_thread); 183 } else { // Fallback and start the old way. 184 StartTorrent(startData->index); 185 free(startData); 186 } 173 187 } 174 188 Unlock(); … … 247 261 // path name. 248 262 tr_stat_t *stats; 249 tr_torrentStat(engine, &stats);263 int max = tr_torrentStat(engine, &stats); 250 264 int index; 251 for (index = 0; index < tr_torrentCount(engine); index++) {265 for (index = 0; index < max; index++) { 252 266 if (strcmp(stats[index].info.torrent, path) == 0) { 253 267 tr_torrentClose(engine, index); … … 308 322 delete item; 309 323 324 325 310 326 UpdateList(transfers->CurrentSelection(), true); 311 327 } else if (msg->what == B_SIMPLE_DATA) { … … 316 332 } 317 333 318 334 /** 335 * Handles QuitRequests. 336 * Displays a BAlert asking if the user really wants to quit if torrents are running. 337 * If affimative, then we'll stop all the running torrents. 338 */ 319 339 bool TRWindow::QuitRequested() { 320 340 bool quit = false; … … 349 369 Prefs *prefs = new Prefs(TRANSMISSION_SETTINGS); 350 370 prefs->SetRect("window.frame", Frame()); 371 372 BString strItem(""); 373 for (int i = 0; i < tr_torrentStat(engine, &s); i++) { 374 strItem = "download."; 375 strItem << s[i].info.torrent << ".running"; 376 if (s[i].status & (TR_STATUS_CHECK | TR_STATUS_DOWNLOAD | TR_STATUS_SEED)) { 377 prefs->SetBool(strItem.String(), true); 378 tr_torrentStop(engine, i); 379 } else { 380 prefs->SetBool(strItem.String(), false); 381 } 382 } 383 free(s); 351 384 delete prefs; 352 353 for (int i = 0; i < tr_torrentCount(engine); i++) {354 tr_torrentStop(engine, i);355 }356 385 357 386 be_app->PostMessage(new BMessage(B_QUIT_REQUESTED)); -
trunk/gtk/main.c
r12 r17 101 101 actionclick(GtkWidget *widget, gpointer gdata); 102 102 103 void104 makeaddwind(struct cbdata *data);105 103 gboolean 106 104 addtorrent(tr_handle_t *tr, GtkWindow *parentwind, const char *torrent, 107 105 const char *dir, gboolean paused); 108 106 void 109 fileclick(GtkWidget *widget, gpointer gdata);107 addedtorrents(void *vdata); 110 108 const char * 111 109 statusstr(int status); … … 697 695 switch(act) { 698 696 case ACT_OPEN: 699 makeaddwind( data);697 makeaddwind(addtorrent, data->wind, data->tr, addedtorrents, data); 700 698 return; 701 699 case ACT_PREF: … … 756 754 } 757 755 758 void759 makeaddwind(struct cbdata *data) {760 GtkWidget *wind = gtk_file_selection_new("Add a Torrent");761 762 g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(wind)->ok_button),763 CBDATA_PTR, data);764 g_signal_connect(GTK_FILE_SELECTION(wind)->ok_button, "clicked",765 G_CALLBACK(fileclick), wind);766 g_signal_connect_swapped(GTK_FILE_SELECTION(wind)->cancel_button, "clicked",767 G_CALLBACK(gtk_widget_destroy), wind);768 gtk_window_set_transient_for(GTK_WINDOW(wind), data->wind);769 gtk_window_set_destroy_with_parent(GTK_WINDOW(wind), TRUE);770 gtk_window_set_modal(GTK_WINDOW(wind), TRUE);771 gtk_widget_show_all(wind);772 }773 774 756 gboolean 775 757 addtorrent(tr_handle_t *tr, GtkWindow *parentwind, const char *torrent, … … 777 759 char *wd; 778 760 779 if(NULL == dir) { 780 dir = cf_getpref(PREF_DIR); 761 if(NULL == dir && NULL != (dir = cf_getpref(PREF_DIR))) { 781 762 if(!mkdir_p(dir, 0777)) { 782 763 errmsg(parentwind, "Failed to create download directory %s:\n%s", … … 810 791 811 792 void 812 fileclick(GtkWidget *widget, gpointer gdata) { 813 struct cbdata *data = g_object_get_data(G_OBJECT(widget), CBDATA_PTR); 814 GtkWidget *wind = gdata; 815 const char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wind)); 816 817 if(addtorrent(data->tr, data->wind, file, NULL, FALSE)) { 818 updatemodel(data); 819 savetorrents(data->tr, data->wind, -1, NULL); 820 } 821 822 gtk_widget_destroy(wind); 793 addedtorrents(void *vdata) { 794 struct cbdata *data = vdata; 795 796 updatemodel(data); 797 savetorrents(data->tr, data->wind, -1, NULL); 823 798 } 824 799 -
trunk/gtk/prefs.c
r7 r17 45 45 }; 46 46 47 struct addcb { 48 add_torrent_func_t addfunc; 49 GtkWindow *parent; 50 tr_handle_t *tr; 51 torrents_added_func_t donefunc; 52 void *donedata; 53 gboolean autostart; 54 gboolean usingaltdir; 55 GtkFileChooser *altdir; 56 GtkButtonBox *altbox; 57 }; 58 47 59 static void 48 60 clicklimitbox(GtkWidget *widget, gpointer gdata); 49 61 static void 50 62 clickdialog(GtkWidget *widget, int resp, gpointer gdata); 63 static void 64 autoclick(GtkWidget *widget, gpointer gdata); 65 static void 66 dirclick(GtkWidget *widget, gpointer gdata); 67 static void 68 addresp(GtkWidget *widget, gint resp, gpointer gdata); 51 69 52 70 void … … 83 101 pref = cf_getpref(PREF_USELIMIT); 84 102 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(limitbox), 85 (NULL == pref ? FALSE : strbool(pref)));103 (NULL == pref ? TRUE : strbool(pref))); 86 104 gtk_widget_set_sensitive(limitnum, 87 105 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(limitbox))); … … 92 110 /* limit label and entry */ 93 111 label = gtk_label_new("Maximum upload speed"); 94 if(NULL != (pref = cf_getpref(PREF_LIMIT))) 95 gtk_spin_button_set_value(GTK_SPIN_BUTTON(limitnum), strtol(pref,NULL,10)); 112 pref = cf_getpref(PREF_LIMIT); 113 gtk_spin_button_set_value(GTK_SPIN_BUTTON(limitnum), 114 (NULL == pref ? DEFAULT_UPLIMIT : strtol(pref,NULL,10))); 96 115 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); 97 116 gtk_table_attach_defaults(GTK_TABLE(table), limitnum, 1, 2, 2, 3); … … 173 192 const char *pref; 174 193 175 if(NULL == (pref = cf_getpref(PREF_USELIMIT)) ||!strbool(pref))194 if(NULL != (pref = cf_getpref(PREF_USELIMIT)) && !strbool(pref)) 176 195 tr_setUploadLimit(tr, -1); 177 196 else if(NULL != (pref = cf_getpref(PREF_LIMIT))) 178 197 tr_setUploadLimit(tr, strtol(pref, NULL, 10)); 179 198 else 180 tr_setUploadLimit(tr, -1); 181 } 199 tr_setUploadLimit(tr, DEFAULT_UPLIMIT); 200 } 201 202 void 203 makeaddwind(add_torrent_func_t addfunc, GtkWindow *parent, tr_handle_t *tr, 204 torrents_added_func_t donefunc, void *donedata) { 205 GtkWidget *wind = gtk_file_chooser_dialog_new("Add a Torrent", parent, 206 GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 207 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); 208 struct addcb *data = g_new(struct addcb, 1); 209 GtkWidget *vbox = gtk_vbox_new(FALSE, 5); 210 GtkWidget *bbox = gtk_hbutton_box_new(); 211 GtkWidget *autocheck = gtk_check_button_new_with_label( 212 "Automatically start torrent"); 213 GtkWidget *dircheck = gtk_check_button_new_with_label( 214 "Use alternate download directory"); 215 GtkFileFilter *filter = gtk_file_filter_new(); 216 GtkFileFilter *unfilter = gtk_file_filter_new(); 217 GtkWidget *getdir = gtk_file_chooser_button_new( 218 "Choose a download directory", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); 219 const char *pref; 220 221 data->addfunc = addfunc; 222 data->parent = parent; 223 data->tr = tr; 224 data->donefunc = donefunc; 225 data->donedata = donedata; 226 data->autostart = TRUE; 227 data->usingaltdir = FALSE; 228 data->altdir = GTK_FILE_CHOOSER(getdir); 229 data->altbox = GTK_BUTTON_BOX(bbox); 230 231 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START); 232 gtk_box_pack_start_defaults(GTK_BOX(bbox), dircheck); 233 gtk_box_pack_start_defaults(GTK_BOX(bbox), getdir); 234 235 gtk_box_pack_start_defaults(GTK_BOX(vbox), autocheck); 236 gtk_box_pack_start_defaults(GTK_BOX(vbox), bbox); 237 238 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(autocheck), TRUE); 239 if(NULL != (pref = cf_getpref(PREF_DIR))) 240 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getdir), pref); 241 else { 242 pref = g_get_current_dir(); 243 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(getdir), pref); 244 g_free((char*)pref); 245 } 246 247 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dircheck), FALSE); 248 249 gtk_file_filter_set_name(filter, "Torrent files"); 250 gtk_file_filter_add_pattern(filter, "*.torrent"); 251 gtk_file_filter_set_name(unfilter, "All files"); 252 gtk_file_filter_add_pattern(unfilter, "*"); 253 254 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(wind), filter); 255 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(wind), unfilter); 256 gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(wind), TRUE); 257 gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(wind), vbox); 258 259 g_signal_connect(G_OBJECT(autocheck), "clicked", G_CALLBACK(autoclick),data); 260 g_signal_connect(G_OBJECT(dircheck), "clicked", G_CALLBACK(dirclick), data); 261 g_signal_connect(G_OBJECT(wind), "response", G_CALLBACK(addresp), data); 262 263 gtk_widget_show_all(wind); 264 gtk_widget_hide(getdir); 265 } 266 267 static void 268 autoclick(GtkWidget *widget, gpointer gdata) { 269 struct addcb *data = gdata; 270 271 data->autostart = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); 272 } 273 274 static void 275 dirclick(GtkWidget *widget, gpointer gdata) { 276 struct addcb *data = gdata; 277 278 data->usingaltdir = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); 279 gtk_button_box_set_layout(data->altbox, 280 (data->usingaltdir ? GTK_BUTTONBOX_EDGE : GTK_BUTTONBOX_START)); 281 if(data->usingaltdir) 282 gtk_widget_show(GTK_WIDGET(data->altdir)); 283 else 284 gtk_widget_hide(GTK_WIDGET(data->altdir)); 285 } 286 287 static void 288 addresp(GtkWidget *widget, gint resp, gpointer gdata) { 289 struct addcb *data = gdata; 290 GSList *files, *ii; 291 gboolean added = FALSE; 292 char *dir = NULL; 293 294 if(GTK_RESPONSE_ACCEPT == resp) { 295 if(data->usingaltdir) 296 dir = gtk_file_chooser_get_filename(data->altdir); 297 files = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(widget)); 298 for(ii = files; NULL != ii; ii = ii->next) 299 if(data->addfunc(data->tr, data->parent, ii->data, dir, 300 !data->autostart)) 301 added = TRUE; 302 if(added) 303 data->donefunc(data->donedata); 304 if(NULL != dir) 305 g_free(dir); 306 } 307 308 gtk_widget_destroy(widget); 309 } -
trunk/gtk/prefs.h
r7 r17 36 36 #define PREF_DIR "download-directory" 37 37 38 #define DEFAULT_UPLIMIT 20 39 40 typedef gboolean (*add_torrent_func_t)(tr_handle_t*, GtkWindow*, const char*, const char *, gboolean); 41 typedef void (*torrents_added_func_t)(void *); 42 38 43 void 39 44 makeprefwindow(GtkWindow *parent, tr_handle_t *tr); … … 43 48 setlimit(tr_handle_t *tr); 44 49 50 /* show the "add a torrent" dialog */ 51 void 52 makeaddwind(add_torrent_func_t addfunc, GtkWindow *parent, tr_handle_t *tr, 53 torrents_added_func_t donefunc, void *donedata); 54 45 55 #endif /* TG_PREFS_H */
Note: See TracChangeset
for help on using the changeset viewer.