def search(self, *a): self.add_all_list() text = self.entry_search.get_text() if text == u'': asm_customs.erro(self.parent, 'أدخل النص المراد البحث عنه') if self.stack.get_visible_child_name() == "n1": asm_config.setv('search', 0) if self.selected_books == []: asm_customs.erro(self.parent, 'أنت لم تحدد أين ستبحث') else: try: if len(self.list_terms) == 50: self.list_terms.pop(0) if text in self.list_terms: self.list_terms.remove(text) self.list_terms.append(text) output = open(join(asm_path.HOME_DIR, u'last-terms.pkl'), 'wb') pickle.dump(self.list_terms, output) output.close() except: pass self.hide() self.parent.notebook.set_current_page(1) sr = ShowResult(self.parent) self.parent.viewerbook.append_page( sr, TabLabel(sr, u'بحث عن :' + text)) self.parent.viewerbook.set_current_page(-1) sr.search(text, self.dict_perf, self.dict_field, self.selected_books) else: asm_config.setv('search', 1)
def replace_cb(widget): n_page = int(ent_page.get_text()) n_part = int(ent_part.get_text()) id_page = self.db.go_to_page(n_part, n_page) if id_page == None: for n in range(20): id_page = self.db.go_to_nearer_page(n_part, n_page, n + 1) if id_page != None: break if id_page == None: asm_customs.erro(self.parent, "لا يمكن الذهاب إلى الصفحة المحددة") return if self.current_id < id_page[0]: self.stack.set_transition_type(self.style_browse_next) elif self.current_id > id_page[0]: self.stack.set_transition_type(self.style_browse_prev) elif self.current_id == id_page[0]: return self.show_page(id_page[0]) ch = self.stack.get_visible_child_name() if ch == "n1": self.stack.set_visible_child_name("n2") else: self.stack.set_visible_child_name("n1") dlg.destroy()
def save_fields(self, *a): if len(self.selected_books) == 0: asm_customs.erro(self.parent, "لا يوجد أي كتاب محدد!") return nm = self.ent_field.get_text() output = open( join(asm_path.LIBRARY_DIR, u'fields-search', nm + u'.pkl'), 'wb') pickle.dump(self.selected_books, output) output.close() self.ent_field.set_text('') self.load_fields()
def sav_result_cb(self, *a): nm = self.sav_result_entry.get_text() if nm == u"": asm_customs.erro(self.parent, "أدخل الاسم أولا.") elif nm in os.listdir(join(asm_path.HOME_DIR, 'searchs')): asm_customs.erro(self.parent, "يوجد بحث محفوظ بنفس الاسم !!") else: output = open(join(asm_path.HOME_DIR, 'searchs', nm + u'.pkl'), 'wb') pickle.dump((self.text, self.results_books), output) output.close() self.sav_result_entry.set_text("")
def search_on_active(self, text): if text == u'': return elif len(text) < 3: asm_customs.erro(self.parent, 'أدخل كلمة بها أكثر من حرفين للبحث عنها') return all_root, all_term = asm_stemming.get_root(u''+text) self.tree_dict.collapse_all() self.store_dict.clear() self.view_dict_bfr.set_text('') if len(all_root) == 0: asm_customs.erro(self.parent, 'لا يوجد نتيجة'); return for text in all_root: self.store_dict.append(None, [text]) self.all_term = all_term
def import_book(self, *a): if len(self.store_add) == 0: return id_group = asm_customs.value_active(self.groups) nm_group = asm_customs.value_active(self.groups, 1) self.progress.set_fraction(0.0) self.btn_clear.set_sensitive(False) self.btn_convert.set_sensitive(False) self.btn_remove.set_sensitive(False) self.btn_add.set_sensitive(False) n_books = len(self.store_add) f = 0 self.no_add = '' while len(self.store_add) > 0: if self.stop_n == 1: break while (Gtk.events_pending()): Gtk.main_iteration() book = self.store_add[0][0] nm_file = self.store_add[0][1] if nm_file[-4:] == '.asm': try: con = sqlite3.connect(book) cur = con.cursor() cur.execute("SELECT * FROM main") info = cur.fetchone() is_tafsir = info[8] nm_book = info[0] new_book = join(asm_path.BOOK_DIR, nm_group, nm_file) copyfile(book, new_book) self.db.add_book(nm_book, id_group, is_tafsir) except: self.no_add += '\n- ' + nm_file[:-4] print('not add {}'.format(book, )) else: nm_book = nm_file[:-4] #try: DB_from_BOK(book, nm_group, id_group) self.progress.set_fraction(float(f) / float(n_books)) # except OSError: asm_customs.erro(self, "حزمة mdbtools \nيرجى تثبيتها لأجل استيراد الكتب غير مثبتة"); raise # except: self.no_add += '\n- '+nm_book; print ('not add {}'.format(book,)) i = self.store_add.get_iter_first() self.store_add.remove(i) f += 1 self.progress.set_text('انتهى !!') self.progress.set_fraction(1.0) self.btn_clear.set_sensitive(True) self.btn_convert.set_sensitive(True) self.btn_remove.set_sensitive(True) self.btn_add.set_sensitive(True) if self.no_add != '': asm_customs.erro( self, 'الكتب التي لم يتم إضافتها {}'.format(self.no_add, ))
def search_on_quran(self, *a): text = self.search_entry.get_text() if len(text) >= 3: all_ayat = Othman().search('"' + text + '"') self.store_search.clear() if len(all_ayat) == 0: asm_customs.erro(self.parent, 'لا يوجد نتيجة') return else: for ayat in all_ayat: i_sura = ayat[0] i_ayat = ayat[1] suras_names = Othman().get_suras_names() sura = suras_names[i_sura - 1] self.store_search.append(None, [i_sura, i_ayat, sura[1]])
def start_convert(self, *a): if self.stack.get_visible_child_name() == 'n3': if len(self.store_books) == 0: asm_customs.erro(self, 'يجب إظهار قائمة الكتب أولا!') return self.btn_convert.set_sensitive(False) self.btn_stop.set_sensitive(True) self.stop_n = 0 self.no_book = 1 self.no_add = u'' self.btn_convert.set_sensitive(False) self.store_books.foreach(self.import_shamela, True) if self.no_add != u'': asm_customs.erro( self, u'الكتب التي لم يتم إضافتها {}'.format(self.no_add, )) self.lab_status.set_text(' لقد انتهت عملية التحويل ') self.btn_convert.set_sensitive(True) elif self.stack.get_visible_child_name() == 'n1': id_group = asm_customs.value_active(self.groups) if id_group == None: if len(self.db.all_parts()) > 0: asm_customs.info(self, "اختر القسم المراد ضم الكتب إليه") else: asm_customs.info( self, "اذهب إلى صفحة تنظيم المكتبة وأضف قسما لاستيراد الملفات إليه" ) else: self.btn_convert.set_sensitive(False) self.btn_stop.set_sensitive(True) self.stop_n = 0 self.import_book() elif self.stack.get_visible_child_name() == 'n2': id_group = asm_customs.value_active(self.groups_doc) if id_group == None: if len(self.db.all_parts()) > 0: asm_customs.info(self, "اختر القسم المراد ضم الكتب إليه") else: asm_customs.info( self, "اذهب إلى صفحة تنظيم المكتبة وأضف قسما لاستيراد الملفات إليه" ) else: self.btn_convert.set_sensitive(False) self.btn_stop.set_sensitive(True) self.stop_n = 0 self.import_docs()
def new_waraka(self, *a): if asm_path.can_modify(self.parent): new_waraka = self.ent_new.get_text() if new_waraka == u'': return myfile = join(asm_path.LIBRARY_DIR, u'waraka-search', new_waraka) if not exists(myfile): try: f = open(myfile,'w+') f.write(new_w) f.close() except: raise else: asm_customs.erro(self.parent, "يوجد ورقة بنفس الاسم يرجى تغيير الاسم.") return self.store_waraka.append([new_waraka]) self.ent_new.set_text('')
def empty_book_cb(self, *a): model, i = self.sel_group.get_selected() if i: nm_group = model.get_value(i, 1) id_part = model.get_value(i, 0) new_bk = self.entry_group.get_text() if new_bk == '': asm_customs.erro(self.parent, 'أدخل اسم الكتاب أولا') return db = join(asm_path.BOOK_DIR, nm_group, new_bk + '.asm') if exists(db): asm_customs.erro(self.parent, 'يوجد كتاب بنفس الاسم في هذا القسم') return self.db.empty_book(db) self.db.add_book(new_bk, id_part) asm_customs.info(self.parent, 'تم إضافة كتاب فارغ')
def tarjama_rawi(widget, buff, parent): if buff.get_has_selection(): sel = buff.get_selection_bounds() text = buff.get_text(sel[0], sel[1],True) if len(text) >= 3: all_rewat = TarajimDB().tardjma('"'+text+'"') parent.winspage.tarjamapage.store_tarjama.clear() if len(all_rewat) == 0: asm_customs.erro(parent, 'لا يوجد نتيجة'); return else: for id_rawi in all_rewat: name = id_rawi[1].split(u'،')[0] parent.winspage.tarjamapage.store_tarjama.append(None, [id_rawi[0], name]) parent.winspage.tarjamapage.tree_tarjama.collapse_all() parent.winspage.tarjamapage.view_tarjama_bfr.set_text('') parent.winspage.tarjamapage.tree_tarjama.expand_all() parent.winspage.tarjamapage.sel_tarjama.select_path((0,)) parent.notebook.set_current_page(3) parent.winspage.set_current_page(1)
def tafsir_ayat(self, *a): all_ayat = self.db.ayat_in_page(self.page_id) self.parent.tafsirpage.store_search.clear() if len(all_ayat[0]) == 0: asm_customs.erro(self.parent, 'لا يوجد نتيجة') return else: for ayat in all_ayat: i_sura = ayat[0] i_ayat = ayat[1] suras_names = Othman().get_suras_names() sura = suras_names[i_sura - 1] self.parent.tafsirpage.store_search.append( None, [i_sura, i_ayat, sura[1]]) self.parent.tafsirpage.notebook.set_current_page(1) self.parent.tafsirpage.view_tafsir_bfr.set_text('') self.parent.tafsirpage.sel_search.select_path((0, )) self.parent.notebook.set_current_page(4) self.parent.tafsirpage.ok_result()
def import_shamela(self, model, path, i, fixed): # model = 0=bool, 1='BkId', 2='Bk', 3='cat', 4='Betaka', 5='Inf', 6='Auth', 7='TafseerNam', 8='IslamShort', 9='Archive' bool0 = model.get_value(i, 0) if self.stop_n == 1: return True if bool0 == fixed: nm_book = model.get_value(i, 2) id_book = model.get_value(i, 1) archive = model.get_value(i, 9) ####### i0 = model.iter_parent(i) if i0 != None: info_list = model.get(i, 1, 2, 4, 5, 6, 7, 8) nm_group = model.get_value(i0, 2) id_group = model.get_value(i0, 1) dr = str(id_book)[-1] if archive == 0: book = join(self.path_shamila, 'Books', dr, str(id_book) + '.mdb') else: book = join(self.path_shamila, 'Books', 'Archive', str(archive) + '.mdb') try: while (Gtk.events_pending()): Gtk.main_iteration() self.no_book += 1 self.progress.set_fraction( float(self.no_book) / float(self.no_all_book)) DB_from_MDB(book, nm_group, info_list, self.comments, self.shorts, archive) model.set_value(i, 0, False) self.lab_status.set_text( '({} \ {}) يجري تحويل كتاب {} '.format( self.no_book, self.no_all_book, nm_book)) except OSError: asm_customs.erro( self, "حزمة mdbtools \nيرجى تثبيتها لأجل استيراد الكتب غير مثبتة" ) raise except: self.no_add += '\n- ' + info_list[1] print('not add {}'.format(str(info_list[0]) + '.mdb', )) return False
def search_on_active(self, text): if text == '': return self.store_search.clear() self.scroll_index.hide() self.scroll_search.show_all() phrase = '''fuzzy(nass) LIKE ? ESCAPE "|"''' text = asm_araby.fuzzy(text) self.search_tokens = asm_araby.tokenize_search(text) phrase2 = list( map( lambda phrase: '%' + phrase.replace('|', '||').replace( '%', '|%') + '%', self.search_tokens)) if len(phrase2) < 1: return [] condition = ' AND '.join([phrase] * len(phrase2)) self.db.search(text, self.store_search, condition, phrase2) if len(self.store_search) == 0: self.hide_search() asm_customs.erro(self.parent, 'لا يوجد نتائج') return self.hp.set_position(200)
def search_on_active(self, text): if len(text) >= 3: all_ayat = Othman().search(text) self.store_index.clear() if len(all_ayat) == 0: asm_customs.erro(self.parent, 'لا يوجد نتيجة') return else: for ayat in all_ayat: sura = ayat[0] aya = ayat[1] suras_names = Othman().get_suras_names() suranm = suras_names[sura - 1] id_page = self.db.aya_page(aya, sura) if id_page != self.id_page_last: self.my_aya[id_page] = [ayat[5]] self.id_page_last = id_page self.store_index.append(None, [id_page, suranm[1]]) else: self.my_aya[id_page].append(ayat[5])
def tafsir_ayat(widget, buff, parent): if buff.get_has_selection(): sel = buff.get_selection_bounds() text = buff.get_text(sel[0], sel[1],True) if len(text) >= 3: all_ayat = Othman().search('"'+text+'"') parent.tafsirpage.store_search.clear() if len(all_ayat) == 0: asm_customs.erro(parent, 'لا يوجد نتيجة'); return else: for ayat in all_ayat: i_sura = ayat[0] i_ayat = ayat[1] suras_names = Othman().get_suras_names() sura = suras_names[i_sura-1] parent.tafsirpage.store_search.append(None, [i_sura, i_ayat, sura[1]]) parent.tafsirpage.notebook.set_current_page(1) parent.tafsirpage.view_tafsir_bfr.set_text('') parent.tafsirpage.sel_search.select_path((0,)) parent.notebook.set_current_page(4) parent.tafsirpage.ok_result()
def show_books(self, *a): self.comments = {} self.shorts = {} self.path_shamila = self.entry_shamila.get_text() if self.path_shamila == u'': asm_customs.erro(self, "لم تحدد موقع المكتبة الشاملة") return else: if not exists(join(self.path_shamila, u'Files')) or not exists( join(self.path_shamila, u'Books')): asm_customs.erro(self, "موقع الشاملة المحدد غير صحيح") return elif not exists(join(self.path_shamila, u'Files', u'main.mdb')) or \ not exists(join(self.path_shamila, u'Files', u'special.mdb')): asm_customs.erro( self, "بعض الملفات الضرورية غير موجودة في هذا الدليل") return self.btn_convert.set_sensitive(False) load_list_books = load_list_books_from_shamela( join(self.path_shamila, u'Files', u'main.mdb'), join(self.path_shamila, u'Files', u'special.mdb'), self.store_books, self.comments, self.shorts) self.no_all_book = load_list_books.no_all_book self.all_books.set_active(True) self.btn_convert.set_sensitive(True)
def search_in_result(self, *a): text = self.sav_result_entry.get_text() if text == u"": asm_customs.erro(self.parent, "أدخل كلمة للبحث أولا.") return sr = ShowResult(self.parent) self.parent.viewerbook.append_page(sr, TabLabel(sr, u'بحث عن :' + text)) self.parent.viewerbook.set_current_page(-1) n = 0 s = 0 for a in self.store_results: while (Gtk.events_pending()): Gtk.main_iteration() n += 1 if self.stop_n == 0: break book = self.db_list.file_book(a[6]) con = sqlite3.connect(book) con.create_function('fuzzy', 1, asm_araby.fuzzy_plus) cur = con.cursor() cur.execute( 'SELECT id FROM pages WHERE id=? AND fuzzy(nass) LIKE ?', (a[0], '%' + text + '%')) if len(cur.fetchall()) > 0: s += 1 sr.store_results.append( [a[0], s, a[2], a[3], a[4], a[5], a[6]]) sr.progress.set_fraction( float(n) / (float(len(self.store_results)))) sr.lab_n_result.set_text('عدد النتائج : {}'.format(s, )) sr.progress.set_fraction(0.0) sr.hb_stop.hide() if len(sr.store_results) > 0: for a in sr.store_results: sr.results_books.append( [a[0], a[1], a[2], a[3], a[4], a[5], a[6]]) output = open(join(asm_path.HOME_DIR, 'searchs', u'آخر بحث.pkl'), 'wb') pickle.dump((text, sr.results_books), output) output.close()
def new_db(self,*a): save_dlg = Gtk.FileChooserDialog('مسار قاعدة البيانات الجديدة', self.parent, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) res = save_dlg.run() if res == Gtk.ResponseType.OK: new_dir = join(save_dlg.get_filename(), 'مكتبة أسماء') if os.path.exists(join(new_dir, 'data', 'Listbooks.db')): asm_customs.erro(self.parent, 'يوجد مكتبة في هذا الدليل بالفعل') else: if not os.path.exists(new_dir): os.mkdir(new_dir) if not os.path.exists(join(new_dir, 'data')): os.mkdir(join(new_dir, 'data')) if not os.path.exists(join(new_dir, 'books')): os.mkdir(join(new_dir, 'books')) if not os.path.exists(join(new_dir, 'index')): os.mkdir(join(new_dir, 'index')) self.db.new_db(join(new_dir, 'data', 'Listbooks.db')) asm_customs.info(self.parent, 'تم إضافة مكتبة مفرغة جديدة') save_dlg.destroy()
def explain_term(widget, buff, parent): if buff.get_has_selection(): sel = buff.get_selection_bounds() text = buff.get_text(sel[0], sel[1],True) text = asm_customs.first_term(text) if len(text) >= 3: all_root, all_term = asm_stemming.get_root(u''+text) if len(all_root) == 0: asm_customs.erro(parent, 'لا يوجد نتيجة'); return parent.winspage.dictpage.tree_dict.collapse_all() parent.winspage.dictpage.store_dict.clear() parent.winspage.dictpage.view_dict_bfr.set_text('') if len(all_root) != 0: for text in all_root: parent.winspage.dictpage.store_dict.append(None, [text]) parent.winspage.dictpage.all_term = all_term i = parent.winspage.dictpage.store_dict.get_iter_first() p = parent.winspage.dictpage.store_dict.get_path(i) parent.winspage.dictpage.sel_dict.select_path(p) parent.notebook.set_current_page(3) parent.winspage.set_current_page(0) parent.winspage.dictpage.search_on_page(u"")
def show_books(self, *a): self.comments = {} self.shorts = {} self.path_books = self.entry_books_dir.get_text() if self.path_books == '': asm_customs.erro(self, "لم تحدد موقع الكتب") return self.path_main_mdb = self.entry_main_mdb.get_text() if self.path_main_mdb == '': asm_customs.erro(self, "لم تحدد موقع main.mdb") return self.path_special_mdb = self.entry_special_mdb.get_text() if self.path_special_mdb == '': asm_customs.erro(self, "لم تحدد موقع special.mdb") return self.btn_convert.set_sensitive(False) load_list_books = load_list_books_from_shamela(self.path_main_mdb, self.path_special_mdb, self.store_books, self.comments, self.shorts) self.no_all_book = load_list_books.no_all_book self.all_books.set_active(True) self.btn_convert.set_sensitive(True)
elif res == 1: my_return = 0 quit() # a مكتبة مفرغة-------------------------- elif res == 3: save_dlg = Gtk.FileChooserDialog( 'مسار قاعدة البيانات الجديدة', None, Gtk.FileChooserAction.SELECT_FOLDER, (Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) res = save_dlg.run() if res == Gtk.ResponseType.OK: new_dir = join(save_dlg.get_filename(), 'مكتبة أسماء') if exists(join(new_dir, 'data', 'Listbooks.db')): asm_customs.erro(None, 'يوجد مكتبة في هذا الدليل بالفعل') else: if not exists(new_dir): mkdir(new_dir) if not exists(join(new_dir, 'data')): mkdir(join(new_dir, 'data')) if not exists(join(new_dir, 'books')): mkdir(join(new_dir, 'books')) if not exists(join(new_dir, 'index')): mkdir(join(new_dir, 'index')) con = sqlite3.connect(join(new_dir, 'data', 'Listbooks.db')) cur = con.cursor() cur.execute( 'CREATE TABLE groups (id_group integer primary key, \ tit varchar(255), sub INTEGER, cat INTEGER)') cur.execute(
def import_docs(self, *a): self.no_add = '' if len(self.store_add_doc) == 0: return id_group = asm_customs.value_active(self.groups_doc) nm_group = asm_customs.value_active(self.groups_doc, 1) self.progress.set_fraction(0.0) self.btn_clear_doc.set_sensitive(False) self.btn_convert.set_sensitive(False) self.btn_remove_doc.set_sensitive(False) self.btn_add_doc.set_sensitive(False) if not self.is_book_radio.get_active(): new_book = self.name_book_entry.get_text() if new_book == '': asm_customs.info(self, "ضع اسما للكتاب المراد استيراده") return list_page = [] list_title = [] id_page = 1 n_docs = len(self.store_add_doc) f = 0 self.no_add = '' while len(self.store_add_doc) > 0: f += 1 self.progress.set_fraction(float(f) / float(n_docs)) while (Gtk.events_pending()): Gtk.main_iteration() if self.is_book_radio.get_active(): new_book = re.sub('\....?.?$', '', self.store_add_doc[0][1]) text_book = self.get_text_from_file(self.store_add_doc[0][0], self.store_add_doc[0][1]) if text_book != None and len(text_book) != 0: pages = self.split_text_to_pages(text_book) list_page = [] for a in range(len(pages)): list_page.append([a + 1, pages[a], 1, a + 1]) list_title = [[1, new_book, 1, 0]] self.make_book(new_book, id_group, nm_group, list_page, list_title) elif self.is_part_radio.get_active(): text_book = self.get_text_from_file(self.store_add_doc[0][0], self.store_add_doc[0][1]) if text_book != None and len(text_book) != 0: pages = self.split_text_to_pages(text_book) for a in range(len(pages)): list_page.append([id_page, pages[a], f, a + 1]) id_page += 1 list_title.append( [id_page - len(pages), 'الجزء {}'.format(f), 1, 0]) else: text_book = self.get_text_from_file(self.store_add_doc[0][0], self.store_add_doc[0][1]) if text_book != None and len(text_book) != 0: list_page.append([f, text_book, 1, f]) i = self.store_add_doc.get_iter_first() self.store_add_doc.remove(i) if not self.is_book_radio.get_active(): if list_title == []: list_title = [[1, new_book, 1, 0]] if self.no_add != '': msg = asm_customs.sure( self, ''' عدد الملفات التي لم يتمكن من إضافتها هو {} هل تريد الاستمرار في تكوين الكتاب ؟ '''.format(len(self.no_add.split('\n')), )) if msg == Gtk.ResponseType.YES: self.make_book(new_book, id_group, nm_group, list_page, list_title) self.progress.set_text('انتهى !!') self.progress.set_fraction(1.0) self.btn_clear_doc.set_sensitive(True) self.btn_convert.set_sensitive(True) self.btn_remove_doc.set_sensitive(True) self.btn_add_doc.set_sensitive(True) if self.no_add != '': asm_customs.erro( self, 'الملفات التي لم يتم إضافتها {}'.format(self.no_add, ))