📄 passface.cc
字号:
int tFacePass::limit_check(tDownload *what){ if (what->regex_match){ tLimitDownload *dwn=(tLimitDownload *)(what->regex_match->papa); return(dwn->cur_limit>=dwn->config->con_limit); }; return(0);};int tFacePass::match_and_check(tDownload *what,int move){ tLimitDownload *dwn=find_match(what); if (dwn && dwn->config->con_limit>0 && what->regex_match==NULL){ if (!move){ d4xDownloadQueue *dq=what->myowner->PAPA; dq->del(what); dq->add(what,DL_LIMIT); }; what->regex_match=new d4xDwnLink(what,dwn); what->regex_match->q=&(dwn->limited); dwn->limited.insert(what->regex_match); }; return(limit_check(what));};void tFacePass::addlist_add(tLimitDownload *dwn){ if (dwn->editor->apply_changes()) return; addlist.del(dwn); dwn->Name2Save.set(dwn->editor->get_url()); dwn->delete_editor(); dlist.insert(dwn); if (dwn->config->con_limit>0) calc_matched_run(dwn); show_url(dwn);};void tFacePass::open_dialog() { tLimitDownload *dwn=new tLimitDownload; dwn->config=new tCfg; dwn->config->isdefault=0; dwn->set_default_cfg(); addlist.insert(dwn); dwn->info=new tAddr("ftp://somesite.org"); dwn->editor=new tDEdit; dwn->editor->add_or_edit=1; dwn->editor->limit=1; dwn->editor->not_url_history=1; dwn->editor->init(dwn); gtk_window_set_title(GTK_WINDOW(dwn->editor->window),_("Add new URL to URL-manager")); g_signal_connect(G_OBJECT(dwn->editor->cancel_button),"clicked",G_CALLBACK(add_url_cancel), dwn); g_signal_connect(G_OBJECT(dwn->editor->ok_button),"clicked",G_CALLBACK(add_url_ok),dwn); g_signal_connect(G_OBJECT(dwn->editor->window),"delete_event",G_CALLBACK(add_url_delete), dwn); d4x_eschandler_init(dwn->editor->window,dwn); gtk_widget_set_sensitive(dwn->editor->isdefault_check,FALSE); dwn->editor->clear_save_name(); dwn->editor->disable_time(); dwn->editor->disable_save_name(); dwn->editor->clear_url();};static void _foreach_delete_prepare_(GtkTreeModel *model,GtkTreePath *path, GtkTreeIter *iter,gpointer p){ tQueue *q=(tQueue*)p; tmpIterNode *i=new tmpIterNode(iter); q->insert(i);};void tFacePass::delete_rows() { tQueue q; GtkTreeSelection *sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); gtk_tree_selection_selected_foreach(sel, _foreach_delete_prepare_, &q); tNode *t=q.last(); while(t){ GValue val={0,}; gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), ((tmpIterNode*)t)->iter, UM_COL_DATA,&val); tDownload *dwn=(tDownload *)g_value_get_pointer(&val); g_value_unset(&val); dlist.del(dwn); free_matched((tLimitDownload*)dwn); gtk_list_store_remove(list_store,dwn->list_iter); delete(dwn); t=t->next; };};void tFacePass::edit_row(GtkTreeIter *iter) { GValue val={0,}; gtk_tree_model_get_value(GTK_TREE_MODEL(list_store), iter, UM_COL_DATA,&val); tDownload *dwn=(tDownload *)g_value_get_pointer(&val); g_value_unset(&val); if (!dwn) return; if (dwn->editor) return; dwn->editor=new tDEdit; dwn->editor->add_or_edit=1; dwn->editor->limit=1; dwn->editor->init(dwn); gtk_window_set_title(GTK_WINDOW(dwn->editor->window),_("Edit default preferences")); g_signal_connect(G_OBJECT(dwn->editor->cancel_button),"clicked",G_CALLBACK(edit_url_cancel), dwn); g_signal_connect(G_OBJECT(dwn->editor->ok_button),"clicked",G_CALLBACK(edit_url_ok),dwn); g_signal_connect(G_OBJECT(dwn->editor->window),"delete_event",G_CALLBACK(edit_url_delete), dwn); d4x_eschandler_init(dwn->editor->window,dwn); gtk_widget_set_sensitive(dwn->editor->isdefault_check,FALSE); dwn->editor->clear_save_name(); dwn->editor->disable_time(); dwn->editor->disable_save_name(); dwn->editor->set_url(dwn->Name2Save.get());};void tFacePass::apply_dialog() {};void tFacePass::init(){ if (window) { gdk_window_show(window->window); return; }; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_wmclass(GTK_WINDOW(window), "D4X_Passwords","D4X"); gtk_window_set_title(GTK_WINDOW (window),_("URL-manager")); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_widget_set_size_request(window,-1,400); gtk_container_set_border_width(GTK_CONTAINER(window),5); gchar *titles[]={"URL regexp",_("limit"),_("con.")}; list_store = gtk_list_store_new(UM_COL_LAST, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_POINTER); view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store))); gtk_tree_view_set_headers_visible(view,TRUE); GtkCellRenderer *renderer; GtkTreeViewColumn *col; for (int i=0;i<3;i++){ renderer = gtk_cell_renderer_text_new(); col=gtk_tree_view_column_new_with_attributes(_(titles[i]), renderer, "text",i, NULL); gtk_tree_view_column_set_visible(col,TRUE); gtk_tree_view_append_column(view,col); }; g_signal_connect(G_OBJECT(view),"event",G_CALLBACK(face_pass_clist_handler),this);// gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_EXTENDED); GtkWidget *scroll_window=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_window), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scroll_window),GTK_WIDGET(view)); button=gtk_button_new_with_label(_("Ok")); add_button=gtk_button_new_with_label(_("Add new")); del_button=gtk_button_new_with_label(_("Delete")); GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(add_button,GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(del_button,GTK_CAN_DEFAULT); GtkWidget *vbox=gtk_vbox_new(FALSE,0); GtkWidget *hbox=gtk_hbutton_box_new(); gtk_box_set_spacing(GTK_BOX(vbox),5); gtk_box_set_spacing(GTK_BOX(hbox),5); gtk_box_pack_start(GTK_BOX(vbox),scroll_window,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(hbox),add_button,FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(hbox),del_button,FALSE,FALSE,0); gtk_box_pack_end(GTK_BOX(hbox),button,FALSE,FALSE,0); gtk_container_add(GTK_CONTAINER(window),vbox); gtk_window_set_default(GTK_WINDOW(window),button); gtk_widget_show_all(window); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(face_pass_ok),this); g_signal_connect(G_OBJECT(del_button),"clicked",G_CALLBACK(face_pass_del),this); g_signal_connect(G_OBJECT(add_button),"clicked",G_CALLBACK(face_pass_add),this); g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(face_pass_delete), this); tDownload *dwn=dlist.first(); while(dwn){ show_url((tLimitDownload*)dwn); dwn=dlist.prev(); }; d4x_eschandler_init(window,this);};void tFacePass::close() { if (window) { gtk_widget_destroy(window); window=NULL; }; tDownload *dwn=addlist.first(); while(dwn){ addlist_del(dwn); dwn=addlist.first(); };};static char *CFG_URLMANAGER="urlmanager";void tFacePass::save(){ if (!HOME_VARIABLE) return; char *cfgpath=sum_strings(HOME_VARIABLE,"/",CFG_DIR,"/",CFG_URLMANAGER,NULL); int fd=open(cfgpath,O_TRUNC | O_CREAT |O_RDWR,S_IRUSR | S_IWUSR); delete[] cfgpath; if (fd<0) return; tDownload *dwn=dlist.first(); while(dwn){ dwn->save_to_config(fd); dwn=dlist.prev(); }; ::close(fd);};void tFacePass::load(){ if (!HOME_VARIABLE) return; char *cfgpath=sum_strings(HOME_VARIABLE,"/",CFG_DIR,"/",CFG_URLMANAGER,NULL); int fd=open(cfgpath,O_RDONLY); delete[] cfgpath; if (fd<0) return; char buf[MAX_LEN]; while(f_rstr(fd,buf,MAX_LEN)>0){ if (equal_uncase(buf,"Download:")){ tLimitDownload *tmp=new tLimitDownload; if (tmp->load_from_config(fd)) delete(tmp); else dlist.insert(tmp); }; }; ::close(fd);};tLimitDownload *tFacePass::find_match(tDownload *what){ char *url=what->info->url(); tDownload *dwn=dlist.first(); while(dwn){ regex_t reg; if (regcomp(®,dwn->Name2Save.get(),REG_NOSUB)==0){ if (regexec(®,url,0,NULL,0)==0){ regfree(®); break; }; regfree(®); }; dwn=dlist.prev(); }; delete[] url; return((tLimitDownload *)(dwn));};void tFacePass::set_cfg(tDownload *what){ tLimitDownload *dwn=find_match(what); if (dwn){ if (dwn->config){ if (what->config==NULL) what->config=new tCfg; what->config->copy(dwn->config); what->restart_from_begin=dwn->restart_from_begin; what->config->referer.set(dwn->config->referer.get()); what->config->save_path.set(dwn->config->save_path.get()); what->config->log_save_path.set(dwn->config->log_save_path.get()); what->config->isdefault=0; }; what->info->pass.set(dwn->info->pass.get()); what->info->username.set(dwn->info->username.get()); if (dwn->split==NULL && what->split) delete(what->split); if (dwn->split){ if (what->split==NULL) what->split=new tSplitInfo; what->split->NumOfParts=dwn->split->NumOfParts; }; };};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -