def createMemberarea(self, member_id): """ create a member area """ parent = self.aq_inner.aq_parent members = getattr(parent, 'Members', None) if members is not None and not hasattr(members, member_id): f_title = "%s's Home" % member_id members.manage_addPortalFolder(id=member_id, title=f_title) f = getattr(members, member_id) # Grant ownership to Member acl_users = self.__getPUS() user = acl_users.getUser(member_id).__of__(acl_users) f.changeOwnership(user) f.manage_setLocalRoles(member_id, ['Owner']) # Create Member's home page. # default_member_content ought to be configurable per # instance of MembershipTool. Document.addDocument(f, 'index_html', member_id + "'s Home", member_id + "'s front page", "structured-text", (default_member_content % member_id)) f.index_html._setPortalTypeName('Document') # Overcome an apparent catalog bug. f.index_html.reindexObject()
def lockFile(self, filename): """currently can lock the file OU owned TODO: lock other OU files """ Document.changeLock(self.email, filename) return Document.isFileLocked(self.email, filename)
def add_dataset(self, folder_path): ds = Dataset(folder_path) for doc in ds.get_contents(): document = Document(text=doc, features=self.features) document.analysis = self.analyze_source(source=document) self.documents.append(document)
def get_link_list_objects(self, parent, link_list_type, link_list): """ Return list of objects based on passed link list """ if link_list == None: return None else: list_objects = [] if link_list_type == 'documents': for link in link_list: doc = Document() doc.load_document(link) list_objects.append(doc) elif link_list_type == 'stakeholder': for link in link_list: sth = Stakeholder() sth.load_config_from_file(link) list_objects.append(sth) elif link_list_type == 'requirement': for link in link_list: if link.endswith('.req'): req = Requirement() req.load_config_from_file(link) list_objects.append(req) elif link.endswith('attributes.pkg'): pkg = RequirementPackage() pkg.load_config_from_file(link) list_objects.append(pkg) return list_objects
def createMemberarea(self, member_id): """ create a member area """ parent = self.aq_inner.aq_parent members = getattr(parent, 'Members', None) if members is not None and not hasattr(members, member_id): f_title = "%s's Home" % member_id members.manage_addPortalFolder( id=member_id, title=f_title ) f=getattr(members, member_id) # Grant ownership to Member acl_users = self.__getPUS() user = acl_users.getUser(member_id).__of__(acl_users) f.changeOwnership(user) f.manage_setLocalRoles(member_id, ['Owner']) # Create Member's home page. # default_member_content ought to be configurable per # instance of MembershipTool. Document.addDocument( f , 'index_html' , member_id+"'s Home" , member_id+"'s front page" , "structured-text" , (default_member_content % member_id) ) f.index_html._setPortalTypeName( 'Document' ) # Overcome an apparent catalog bug. f.index_html.reindexObject() wftool = getToolByName( f, 'portal_workflow' ) wftool.notifyCreated( f.index_html )
def applyfilters(self, variables, filterscs): ''' This method applies the filters to the files by taking in the two list, one of which contains the files checked to apply, the other one contains the filters checked to apply, and this method will change the state string accordingly ''' if GUI.fileObj == []: for thefile in GUI.fileName: GUI.fileObj.append(Document(thefile)) for D in GUI.fileObj: D.generateWhole() elif len(GUI.fileObj) != len(GUI.fileName): lengthD = len(GUI.fileName) - len(GUI.fileObj) for i in range(lengthD)[::-1]: GUI.fileObj.append(Document(GUI.fileName[-(1 + i)])) GUI.fileObj[-1].generateWhole() empty = True for i in range(len(variables)): if variables[i].get() == 1: dofil = TextFilter(GUI.fileObj[i]) dofil.apply([ self.filters[j] for j in range(len(filterscs)) if filterscs[j].get() == 1 ], GUI.fileObj[i]) empty = False if empty == True: self.sti = 'Nothing applied' else: self.sti = 'Successfully applied' self.sti_text.set(self.sti)
def import_file(file_content): doc = Document(file_content.readline()) all = file_content.readline() for line in file_content: temp = line.rsplit(" ") if len(temp)==2: doc.dictionary[temp[0]] = int(temp[1].strip()) return doc
def openfile(self, item): selectedTarget = item.text() Document.openfile(self.email, self.email, self.filename, selectedTarget) em = QtWidgets.QMessageBox() em.setIcon(QtWidgets.QMessageBox.Information) em.setText("Load history file finished") em.setStandardButtons(QtWidgets.QMessageBox.Ok) em.exec_()
def read_newdata(self,dfile,wordmapfile): word2id = {} id2_id = {} self.read_wordmap1(wordmapfile,word2id) # 从wordmapfile中读入word2id if len(word2id) <= 0 : print("No word map available!\n") return 1 fin = open(dfile) if fin == None : print("Cannot open file ",dfile," to read!\n") return 1 line = fin.readline() # get the number of new documents self.M = int(line) if self.M <= 0 : print("No document available!\n") return 1 self.V = 0 for i in range(self.M) : line = fin.readline() strtok = Strtokenizer(line,' \t\r\n') length = strtok.count_tokens() doc = [] _doc = [] for j in range(length) : found = False for key in word2id.keys(): if strtok.token(j) == key: found = True break if found: # 找到 key found2 = False for value in id2_id.values() : if value == word2id[strtok.token(j)] : found2 = True break if not found2 : # 没找到 value _id = len(id2_id) id2_id[word2id[strtok.token(j)]] = _id self._id2id[_id] = word2id[strtok.token(j)] else : # 找到 _id = word2id[strtok.token(j)] doc.append(word2id[strtok.token(j)]) _doc.append(_id) else: # 没找到 tmp = '' # 没决定要做什么 pdoc = Document(doc) _pdoc = Document(_doc) self.add_doc(pdoc,i) self._add_doc(_pdoc,i) fin.close() self.V = len(id2_id) return 0
def find_coreferences(input_file, output_dir): doc = Document.Document(input_file, output_dir) tags = doc.tags for anaphor_idx in range(len(tags)): # Finding string matches if tags[anaphor_idx].content.lower() not in references.pronouns: for antecedent_idx in range(anaphor_idx - 1, -1, -1): if (head_word_match(tags[anaphor_idx].content, tags[antecedent_idx].content) or overlap_similarity(tags[anaphor_idx].content, tags[antecedent_idx].content) >= .5 or tags[anaphor_idx].content.lower() in find_acronyms( tags[antecedent_idx].content) or tags[antecedent_idx].content.lower() in find_acronyms(tags[anaphor_idx].content)): tags[anaphor_idx].ref = tags[antecedent_idx].id if not tags[antecedent_idx].ref: tags[antecedent_idx].ref = tags[anaphor_idx].id break # Look for pronouns else: for antecedent_idx in range(anaphor_idx - 1, max(-1, anaphor_idx - 10), -1): if tags[anaphor_idx].content.lower( ) == tags[antecedent_idx].content.lower(): tags[anaphor_idx].ref = tags[antecedent_idx].id if not tags[antecedent_idx].ref: tags[antecedent_idx].ref = tags[anaphor_idx].id elif pronoun_attribute_match( tags[anaphor_idx].content.lower(), tags[antecedent_idx].content.lower()): tags[anaphor_idx].ref = tags[antecedent_idx].id if not tags[antecedent_idx].ref: tags[antecedent_idx].ref = tags[anaphor_idx].id unmatched_tags = [t for t in doc.tags if not t.ref] counter = 0 for tag in unmatched_tags: TAG_RE = re.compile('(?:^|[\s])(' + re.escape(tag.content.lower().split()[-1]) + ')(?:$|[\.\s\,\!\?])') matches = re.findall(TAG_RE, doc.content) if matches: for match in matches: new_id = 'A' + str(counter) doc.tags.append(Document.Tag(new_id, tag.id, match)) tag.ref = new_id counter += 1 doc.save()
def run(self): for text in self.documents_list: document = Document(text) summary = document.get_summary(5) filename = text.split('\\')[-1] filename = filename[:filename.index(".")] with codecs.open(filename + ".txt", "w", "utf-8-sig") as summary_file: summary_file.write(summary) summary_file.close()
def add_source(self, data, kind): if SourceType.query == kind: query = Query(text=data, features=self.features) query.analysis = self.analyze_source(source=query) self.queries.append(query) elif SourceType.document == kind: document = Document(text=data, features=self.features) document.analysis = self.analyze_source(source=document) document.document_id = len(self.documents) self.documents.append(document)
def saveDoc(self, docLocation, filename): """ if file is locked, save rejected :param docLocation: :param filename: :return: """ if not Document.isFileLocked(self.email, filename): Document.saveDoc(self.email, docLocation, filename) else: return "File is locked, save unsuccessful"
def clickShare(self): if self.lineEdit.text(): if not Document.listallhistory(self.email, self.lineEdit.text()): Document.saveDoc(self.email, '../cacheModified', self.lineEdit.text(), 'private') self.shareOption = QtWidgets.QDialog() self.ui = shareOption.Ui_shareOption() filename = self.lineEdit.text() self.ui.setupUi(self.shareOption, self.email, filename) self.shareOption.exec_() if self.ui.getNgrokTunnel() is not None: self.ngrok = self.ui.getNgrokTunnel()
def read_file(self, file): #read in a single file from corpus #parse to sentence class and word class but fully document class doc_to_return = Document() lines = file.readlines() pre_sent = [] sent_index = 0 is_offset = 1 doc_list = [] for line in lines: if not line.startswith('#'): if line.isspace(): doc_to_return.sentences.append( Sentence(pre_sent.copy(), sent_index)) pre_sent.clear() sent_index += 1 else: entries = line.split() # Set Doc Id if not doc_to_return.docID: doc_to_return.get_doc_id(entries[0]) # Construct word word = Word() word.set_entries(entries) pre_sent.append(word) # Create mapping for resolving difference in ISNotes offset and OntoNotes #doc_to_return.coref_to_ISoffset[is_offset] = (doc_to_return.header, sent_index, int(entries[2])) #is_offset += 1 elif line.startswith('#begin'): doc_to_return = Document() doc_to_return.header = line else: doc_to_return.end = line doc_list.append(doc_to_return) sent_index = 0 doc_to_return = Document() # for sent in doc_to_return.sentences: # sent.get_names() # May no longer be needed. since exists in make_mentions in sentence_init # Construct gold coreference clusters # for doc in doc_list: # for sent in doc.sentences: # for m in sent.mentions: # if m.gold_cluster_id is not None: # doc.gold_clusters[m.gold_cluster_id].append(m) return doc_list
def calculate_MRR(document_directory_location, gold_label_directory_location, stopwords, k, alpha, num_iterations, window): Reciprocal_ranks = [] for root, dirs, files in os.walk(document_directory_location): for file in files: if p.exists(gold_label_directory_location + file): doc = Document(document_directory_location + file, gold_label_directory_location + file, stopwords) doc.Preprocess() doc.Create_word_graph(window) rec = doc.get_reciprocal_rank(k, alpha, num_iterations) #print(file,rec) Reciprocal_ranks.append(rec) mrr = sum(Reciprocal_ranks) / len(Reciprocal_ranks) print('Window =', window, "K =", k, 'MRR =', mrr)
def load_dataset(): documents = [] with open(references_path) as reference_file: reference_dict = json.load(reference_file) with open(cases_path) as json_file: cases_json = json.load(json_file) for index, case in enumerate(cases_json): application_number = case['appno'] document_name = case['docname'] document_id = case['itemid'] multiple_appnos = False # Alle keys hvor application number indgår matching_key = [ key for key in reference_dict.keys() if application_number in key.split(';') ] multi_refs = [] temp_internal_appnos = [] for k in matching_key: multi_refs.extend(reference_dict[k].keys()) split = k.split(';') temp_internal_appnos.extend(split) # alle outgoing refs fra "matching keys" multi_refs = remove_dups(multi_refs) # alle appnos i hver "matching key" temp_internal_appnos = remove_dups(temp_internal_appnos) document = Document.Document(application_id=application_number, document_id=document_id, title=document_name, references_appno=multi_refs, internal_appnos=temp_internal_appnos, multiple_appnos=multiple_appnos ) # related_appnos=remaining_appnos documents.append(document) print(f'Loaded document: {index}') for count, doc in enumerate(documents): print(f'reffing doc {count}') # tjekker alle refs (internal og outgoing) for outgoing in doc.all_refs: for other_doc in documents: # hvis appno er i andet docs internal appno --> ref fra doc til doc if outgoing in other_doc.internal_appnos: doc.outgoing_refs[other_doc.document_id] = 1 break documents = add_articles_and_conclusion_to_documents(documents) adjacency_matrix = create_adjacency_matrix_from_references(documents) assign_pagerank_to_documents(documents, adjacency_matrix) return documents
def run(self): # Find links on first run self.get_links(self.parse_webpage(self.base_url)) # Calculate and save the word count in the document while self.links_to_search: url = heapq.heappop(self.links_to_search) # get next url in line heapq.heappush(self.links_searched, url) # save url as already searched soup = self.parse_webpage(self.base_url + url) # get webpage self.get_links(soup) # harvest urls to search clean = self.clean_text(soup) # clean webpage content doc = Document(url) doc.count_words(clean) # count number of words on webpage doc.save_word_count(self.base_url) # save document if len(self.links_searched) == 10000: # Caps the result at X pages, for test purposes break
def getPermissionFile(self, permissionType): """ :param permissionType: private, public, restricted, shared :return: return all docs with the same permission type in dict{username:[list of filename]} """ return Document.getPermissionFiles(permissionType)
def buildDocumentCollectionRegex(fichier): """ Construit l'index a partir d'une base de documents contenus dans fichier, On lit le fichier en entier et on utilise des expressions régulières pour récupère le contenu des balises :type fichier: String :param fichier: Le fichier qui contient les documents que l'on veut indexé :return: Un dictionnaire de d'object Document, dont les clef sont les id des Document. {"id1": Document1, "id2": Document2, ...} """ resultat = dict() f = open(fichier, 'r') doc = f.read() docs = doc.split(".I") for di in range(1, len(docs)): d = Document.Document() id_doc = re.search(r'(\d*|$)', docs[di][1:]).group(0) d.setID(int(id_doc)) m = re.search(r'\.T(.*?)\.', docs[di], re.DOTALL) if m is not None: d.setTexte(m.group(1).replace('\n', ' ')) else: d.setTexte("") resultat[id_doc] = d f.close() return resultat
def import_txt(self, txt_file): temp_txt = [] for line in txt_file: if len(line.rstrip().split("\t")) > 1: label = line.rstrip().split("\t")[0] if label != '__label__neu': sentence = line.rstrip().split("\t")[1] doc = Document.Document(sentence, label) self.docs.append(doc) temp_txt.append(doc) label_num = 0 if doc.label == '__label__pos': label_num = 0 # positive label elif doc.label == '__label__neg': label_num = 1 # negative label self.label_counts[label_num] += 1 for word in doc.words: if word != '': if word not in self.words: value = WordValue() self.words.append(word) self.values.append(value) self.values[int(word)].appear[label_num] += 1 pass
def finditer(self, doc): """ doc can be a Document object or a plain text to convert into one each iteration is an array of words HINT: if you would rather have a (start,end) doc range, do (result[0].location[0],result[-1].location[-1]) """ if type(doc) == str or type(doc) == unicode: doc = Document.Document(doc) words = doc.words() endi = len(words) - len(self.matchers) + 1 for i in range(endi): matched = [] for j in range(i, endi): for m in self.matchers: if not m.match(words[j]): matched = None break matched.append(words[j]) if matched == None: break if matched != None: yield matched
def showHistory(self): allHistory = Document.listallhistory(self.email,self.filename) self.historyWindow = QtWidgets.QDialog() self.history = fileHistory.Ui_fileHistory() self.history.setupUi(self.historyWindow, allHistory, self.email, self.filename) self.historyWindow.exec_() self.readFile()
def buildDocumentCollectionRegex(self, chemin_doc): collection = {} file = open(chemin_doc) doc = file.read() file.close() docs = doc.split(".I") for d in range(1, len(docs)): doc = Document.Document() id = re.search(r'(\d*|$)', docs[d][1:]) value = re.search(r'\.W(.*?)\.', docs[d], re.DOTALL) doc.setId(id.group(0)) if value is not None: doc.setTexte(value.group(1).replace("\n", ' ')) else: doc.setTexte("") collection[id.group(0)] = doc return collection
def lockfile(self): if self.lockFile.text() == 'Save': if self.lineEdit.text(): if Path("../cacheModified").is_file(): self.uploadDoc(True) self.lockFile.setText("Lock") else: if self.lockFile.text() == 'Lock': print('lock here') Document.changeLock(self.email, self.lineEdit.text(), True) self.lockFile.setText("Unlock") else: print('unlock here') Document.changeLock(self.email, self.lineEdit.text(), False) self.lockFile.setText("Lock")
def extractWithTemplate(self, template, xOffset=0, yOffset=0): if not template: return None document = Document() for templateBox in template.boxes: rect = QRectF(templateBox.rect) rect.translate(xOffset, yOffset) text = self.textInRegion(rect, templateBox.recognizer) text = self.filter(text, templateBox.filter) documentBox = DocumentBox() documentBox.name = templateBox.name documentBox.text = text documentBox.templateBox = templateBox document.addBox(documentBox) return document
def createDocument(self, namespaceURI, qualifiedName, doctype): import Document doc = Document.Document(doctype) if qualifiedName: el = doc.createElementNS(namespaceURI, qualifiedName) doc.appendChild(el) return doc
def buildDocCollectionSimple2(self, chemin_doc): file = open(chemin_doc, "r") lignes = file.readlines() length = len(lignes) collection = {} i = 0 while i < length: key = "" value = "" if ".I" in lignes[i]: key = lignes[i][3:-1] doc = Document.Document() doc.setId(key) i += 1 while ".T" not in lignes[i]: i += 1 i += 1 while i < length and "." not in lignes[i]: value += lignes[i] i += 1 doc.setTexte(value[:-1]) collection[key] = doc else: i += 1 file.close() return collection
def extractWithTemplate(self, template, xOffset = 0, yOffset = 0): if not template: return None document = Document() for templateBox in template.boxes: rect = QRectF( templateBox.rect ) rect.translate( xOffset, yOffset ) text = self.textInRegion( rect, templateBox.recognizer ) text = self.filter( text, templateBox.filter ) documentBox = DocumentBox() documentBox.name = templateBox.name documentBox.text = text documentBox.templateBox = templateBox document.addBox( documentBox ) return document
def readDocuments(self): i = 0 while i < self.numFiles: self.docDictionary[i] = Document(self.fileDictionary[i]) self.docDictionary[i].generateWhole() self.wordListDictionary[i] = self.docDictionary[i].getWordList() i += 1 print("Read Documents.")
def getDocument(self, text): docId = re.search("\.I\s(.*)", text).group(1) docTitle = re.search("\.T\s(.*)", text).group(1) docText = re.search("\.W\s(.*)", text).group(1) docDate = re.search("\.B\s(.*)", text).group(1) doc = Doc.Document(docId, docTitle+"\n"+docText+"\n"+docDate, others=dict()) return doc
def addMember(self, id, password, roles, domains, properties=None): '''Adds a new member to the user folder. Security checks will have already been performed. Called by portal_registration. ''' Products.CMFCore.MembershipTool.MembershipTool.addMember( self , id , password , roles , domains , properties ) member = self.getMemberById(id) if hasattr(getattr(member, 'aq_base', member), 'getUser'): user = member.getUser() else: user = member if hasattr(self, 'Members'): # Create Member's home folder manage_addPortalFolder(self.Members, id) f=getattr(self.Members, id) f.manage_permission('View', ['Owner','Manager','Reviewer'], 0) f.manage_permission('Access contents information', ['Owner','Manager','Reviewer'], 0) # Grant ownership to Member try: f.changeOwnership(user) except AttributeError: pass # Zope 2.1.x compatibility f.manage_setLocalRoles(id, ['Owner']) # Create Member's home page. # default_member_content ought to be configurable per # instance of MembershipTool. Document.addDocument( f, 'index_html', id+"'s Home", id+"'s front page", "structured-text", (default_member_content % id) ) # Overcome an apparent catalog bug. f.index_html.reindexObject()
def setPermission(self, filename, permissionINT): """each document default permission is private""" """ permission: 1: public 2: restrict 3: shared 4: private """ if permissionINT == 1: permission = "public" elif permissionINT == 2: permission = "restrict" elif permissionINT == 3: permission = "shared" elif permissionINT == 4: permission = "private" else: return False Document.setPermission(self.email, filename, permission)
def displayHistory(self): if self.lineEdit.text(): allHistory = Document.listallhistory(self.email, self.filename) self.historyWindow = QtWidgets.QDialog() self.history = fileHistory.Ui_fileHistory() self.history.setupUi(self.historyWindow, allHistory, self.email, self.filename) self.historyWindow.exec_() self.webView.reload()
def getAllDocuments(): files = os.listdir("./Docs") for i in range(len(files)): files[i] = "./Docs/" + files[i] docs = [] for single_file in files: docs.append(Document(single_file)) docs = sorted(docs) return docs
def getTechDocuments(): files = os.listdir("./Docs3/Technology") for i in range(len(files)): files[i] = "./Docs3/Technology/" + files[i] docs: List[Document.Document] = [] for single_file in files: x = Document.Document(single_file, 0) docs.append(x) docs = sorted(docs) return docs
def __init__(self, parent=None): super(ScriptBook, self).__init__(parent) self.setWidgetIndexSignal.connect(self.set_widget_index) self.setPreviousIndexSignal.connect(self.set_previous_index) self.document = Document() self.handler = DocumentXmlHandler.DocumentXmlHandler() ## Set values for the store/restore settings system QtCore.QCoreApplication.setOrganizationName("EMR") QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no") QtCore.QCoreApplication.setApplicationName("ScriptBook") ## The button controller self.buttonController = NavigationController() self.buttonController.buttonClicked.connect(self.buttonClicked) ## The tools controller self.toolsController = ToolsController() self.toolsController.toolsClicked.connect(self.toolsClicked) ## The ftp login controller self.ftpController = FtpController() self.ftpController.connectSignal.connect(self.ftpConnect) self.ftpController.cancelSignal.connect(self.ftpCancel) ## The ftp entry list controller self.ftpEntryListController = FtpEntryListController() self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone) self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone) self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone) self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading) self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead) ## Set up UI components self.setupUI()
from Dictionary import * from Document import * teste = Dictionary("asdf") #print("eh assim msm"+teste.dicionario[0]) teste.structureDictionary() print(teste.dictionaryMatrix) print(teste.dictionaryList) #print("teste") testeDocument = Document("asdf") testeDocument.openDocument() print(testeDocument.document)
class ScriptBook(QtGui.QStackedWidget): ## The set widget index signal setWidgetIndexSignal = QtCore.Signal(int) ## The set previous index signal setPreviousIndexSignal = QtCore.Signal() ## current index _widget_index = int(-1) ## previous index _previous_index = int(-1) ## set index slot @QtCore.Slot(QtCore.QObject, QtCore.QObject) def set_widget_index(self, index): print 'DEBUG set_widget_index', index self._previous_index = self._widget_index self.setCurrentIndex(index) self._widget_index = index ## set previous index slot @QtCore.Slot(QtCore.QObject) def set_previous_index(self): print 'DEBUG set_previous_index' self.setCurrentIndex(self._previous_index) previous = self._previous_index self._previous_index = self._widget_index self._widget_index = previous def __init__(self, parent=None): super(ScriptBook, self).__init__(parent) self.setWidgetIndexSignal.connect(self.set_widget_index) self.setPreviousIndexSignal.connect(self.set_previous_index) self.document = Document() self.handler = DocumentXmlHandler.DocumentXmlHandler() ## Set values for the store/restore settings system QtCore.QCoreApplication.setOrganizationName("EMR") QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no") QtCore.QCoreApplication.setApplicationName("ScriptBook") ## The button controller self.buttonController = NavigationController() self.buttonController.buttonClicked.connect(self.buttonClicked) ## The tools controller self.toolsController = ToolsController() self.toolsController.toolsClicked.connect(self.toolsClicked) ## The ftp login controller self.ftpController = FtpController() self.ftpController.connectSignal.connect(self.ftpConnect) self.ftpController.cancelSignal.connect(self.ftpCancel) ## The ftp entry list controller self.ftpEntryListController = FtpEntryListController() self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone) self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone) self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone) self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading) self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead) ## Set up UI components self.setupUI() def setupUI(self): ## The document view, controller and model self.documentView = QtDeclarative.QDeclarativeView() self.documentView.setWindowTitle('Documents') self.documentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.documentController = DocumentController() self.documentController.documentClicked.connect(self.documentClicked) self.documentView.rootContext().setContextProperty('controller', self.documentController) self.documentView.rootContext().setContextProperty('buttonController', self.buttonController) self.documentList = DocumentModel([]) self.documentView.rootContext().setContextProperty('documentListModel', self.documentList) self.documentView.setSource(QtCore.QUrl('qml/DocumentListModel.qml')) ## The book view, controller and model self.bookView = QtDeclarative.QDeclarativeView() self.bookView.setWindowTitle('Books') self.bookView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.bookController = BookController() self.bookController.bookClicked.connect(self.bookClicked) self.bookView.rootContext().setContextProperty('controller', self.bookController) self.bookView.rootContext().setContextProperty('buttonController', self.buttonController) self.bookList = BookModel([]) self.bookView.rootContext().setContextProperty('bookListModel', self.bookList) self.bookView.setSource(QtCore.QUrl('qml/BookListModel.qml')) ## The chapter view, controller and model self.chapterView = QtDeclarative.QDeclarativeView() self.chapterView.setWindowTitle('Chapter') self.chapterView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.chapterController = ChapterController() self.chapterController.chapterClicked.connect(self.chapterClicked) self.chapterView.rootContext().setContextProperty('controller', self.chapterController) self.chapterView.rootContext().setContextProperty('buttonController', self.buttonController) self.chapterList = ChapterModel([]) self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList) self.chapterView.setSource(QtCore.QUrl('qml/ChapterListModel.qml')) ## The chapter view, controller and model self.verseView = QtDeclarative.QDeclarativeView() self.verseView.setWindowTitle('Verse') self.verseView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.verseController = VerseController() self.verseController.verseClicked.connect(self.verseClicked) self.verseView.rootContext().setContextProperty('controller', self.verseController) self.verseView.rootContext().setContextProperty('buttonController', self.buttonController) self.verseList = VerseModel([]) self.verseView.rootContext().setContextProperty('verseListModel', self.verseList) self.verseView.setSource(QtCore.QUrl('qml/VerseListModel.qml')) ## The tools view self.toolsView = QtDeclarative.QDeclarativeView() self.toolsView.setWindowTitle('Tools') self.toolsView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.toolsView.rootContext().setContextProperty('buttonController', self.buttonController) self.toolsView.rootContext().setContextProperty('toolsController', self.toolsController) self.toolsView.setSource(QtCore.QUrl('qml/Tools.qml')) ## The ftp login view self.ftpLoginView = QtDeclarative.QDeclarativeView() self.ftpLoginView.setWindowTitle('Ftp login') self.ftpLoginView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.ftpLoginView.rootContext().setContextProperty('buttonController', self.buttonController) self.ftpLoginView.rootContext().setContextProperty('ftpController', self.ftpController) self.ftpLoginView.setSource(QtCore.QUrl('qml/FtpLogin.qml')) ## The ftp directory view self.directoryView = QtDeclarative.QDeclarativeView() self.directoryView.setWindowTitle('Ftp directories') self.directoryView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.directoryController = DirectoryController() self.directoryController.directoryClicked.connect(self.directoryClicked) self.directoryView.rootContext().setContextProperty('controller', self.directoryController) self.directoryList = DirectoryModel([]) self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList) self.directoryView.rootContext().setContextProperty('ftpController', self.ftpController) self.directoryView.setSource(QtCore.QUrl('qml/FtpDirectoryListModel.qml')) self.directoryView.rootContext().setContextProperty('buttonController', self.buttonController) ## The ftp file view self.fileView = QtDeclarative.QDeclarativeView() self.fileView.setWindowTitle('Ftp xml files') self.fileView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.fileController = FileList.FileController() self.fileController.fileClicked.connect(self.fileClicked) self.fileView.rootContext().setContextProperty('controller', self.fileController) self.fileList = FileList.FileModel([]) self.fileView.rootContext().setContextProperty('fileListModel', self.fileList) self.fileView.rootContext().setContextProperty('ftpController', self.ftpController) self.fileView.setSource(QtCore.QUrl('qml/FtpFileListModel.qml')) self.fileView.rootContext().setContextProperty('buttonController', self.buttonController) ## The downloading view self.downloadingView = QtDeclarative.QDeclarativeView() self.downloadingView.setWindowTitle('Download Done') self.downloadingView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.downloadingView.setSource(QtCore.QUrl('qml/Downloading.qml')) self.downloadingView.rootContext().setContextProperty('buttonController', self.buttonController) ## The download done view self.downloadDoneView = QtDeclarative.QDeclarativeView() self.downloadDoneView.setWindowTitle('Download Done') self.downloadDoneView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.downloadDoneView.setSource(QtCore.QUrl('qml/DownloadDone.qml')) self.downloadDoneView.rootContext().setContextProperty('buttonController', self.buttonController) ## The loading document view self.loadingDocumentView = QtDeclarative.QDeclarativeView() self.loadingDocumentView.setWindowTitle('Loading Document') self.loadingDocumentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.loadingDocumentView.setSource(QtCore.QUrl('qml/LoadingDocument.qml')) self.loadingDocumentView.rootContext().setContextProperty('buttonController', self.buttonController) ## Add the book, chapter and verse view's self.addWidget(self.documentView) self.addWidget(self.bookView) self.addWidget(self.chapterView) self.addWidget(self.verseView) self.addWidget(self.ftpLoginView) self.addWidget(self.directoryView) self.addWidget(self.fileView) self.addWidget(self.toolsView) self.addWidget(self.downloadingView) self.addWidget(self.downloadDoneView) self.addWidget(self.loadingDocumentView) ## Set window title, set geometry and show self.setWindowTitle('ScriptBook') self.setGeometry(400, 200, 280, 430) self.show() ## Load settings self.loadSettings() ## Load documents self.displayDocuments() print 'DEBUG emiting set widget index signal' self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView) def ftpReadyRead(self, bytes): print 'readyRead bytes:', bytes ## Reackt on Tool Button Click def toolsClicked(self, entry): if int(entry) == 0: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) elif int(entry) == 1: print 'toolsClicked: Font settings - not implemented' elif int(entry) == 2: print 'toolsClicked: Bookmars - not implemented' else: print 'toolsClicked: unknonw' def ftpConnect(self, host, port): self.ftpEntryListController.setHostPort(host, port) self.ftpEntryListController.setDirectory(".") self.ftpEntryListController.directoryList() def ftpCancel(self): if self.currentWidget() == self.fileView: self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView) #self.setCurrentWidget(self.directoryView) elif self.currentWidget() == self.directoryView: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) elif self.currentWidget() == self.ftpLoginView: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) else: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) def ftpDirectoryListDone(self): print 'ftpDirectoryListDone' directoryListItems = [] directories = self.ftpEntryListController.list() #print 'directories', directories if len(directories) > int(0): for d in directories: directoryListItems.append(DirectoryListWrapper(str(d))) print d self.directoryList = DirectoryModel(directoryListItems) self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList) self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView) #self.setCurrentWidget(self.directoryView) def directoryClicked(self, name): print 'directoryClicked', name self.ftpEntryListController.setDirectory(name) self.ftpEntryListController.fileList() def ftpFileListDone(self): print 'ftpFileListDone' fileListItems = [] files = self.ftpEntryListController.list() if len(files) > int(0): print 'Directory contains', len(files), "entries" for f in files: fileListItems.append(FileList.FileListWrapper(str(f))) print f self.fileList = FileList.FileModel(fileListItems) self.fileView.rootContext().setContextProperty('fileListModel', self.fileList) self.setWidgetIndexSignal.emit(WidgetIndex().FileView) #self.setCurrentWidget(self.fileView) def ftpDownloading(self): print 'ftpDownloading' self.setWidgetIndexSignal.emit(WidgetIndex().DownloadingView) #self.setCurrentWidget(self.downloadingView) def ftpDownloadDone(self): ## Get content to local variable self._downloadedFile = self.ftpEntryListController.getFile() print 'ftpDownloadDone', len(self._downloadedFile) ## Write content to file f = open(self._filename, "w") f.write(self._downloadedFile) f.close() ## Set Download done Widget self.setWidgetIndexSignal.emit(WidgetIndex().DownloadDoneView) def fileClicked(self, name): print 'fileClicked', name if name != str(""): self._filename = name self.ftpEntryListController.downloadFile(self._filename) def findXmlFiles(self): xmlFiles = [] directory = QtCore.QDir() ## Go through directory content and look for xml files for e in directory.entryList(): if e == '.' or e == '..': continue ## Split filename string on '.' and check if last part is 'xml' f = e.split('.') if len(f) == 2: if f[1] == 'xml': ## XML file - append xmlFiles.append(e) return xmlFiles def loadSettings(self): ## Read the settings settings = QtCore.QSettings() ## The ftp host and port self.ftpHost = settings.value("ScriptBook/ftpHost", "localhost") self.ftpPort = settings.value("ScriptBook/ftpPort", "21") ## Update the view through the controller self.ftpController.setHost(self.ftpHost) self.ftpController.onHostChanged.emit(str(self.ftpHost)) self.ftpController.setPort(self.ftpPort) self.ftpController.onPortChanged.emit(str(self.ftpPort)) document = settings.value("ScriptBook/document") book = settings.value("ScriptBook/book") chapter = settings.value("ScriptBook/chapter") vers = settings.value("ScriptBook/vers") ## Look for xml files in directory xmlFiles = self.findXmlFiles() ## If we don't have any xml files, load ftp login view if len(xmlFiles) == 0: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) return ## If there are no document give we cannot preload anything if document == None: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If we don't have the requested document we cannot preload it if xmlFiles.__contains__(str(document)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If we fail to open the file, set document view as page if self.openFile(document) == False: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If book is not give, load the book view if book == None: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) return ## SHOULD GIVE PROPER ERROR PAGE HERE if self.loadBook(int(book)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) return ## If chapter is not give, show chapter view if chapter == None: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) return ## SHOULD GIVE PROPER ERROR PAGE HERE if self.loadChapter(int(chapter)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) return self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) def displayDocuments(self): documentListItems = [] dirFilter = [] dirFilter.append('*.xml') directory = QtCore.QDir() dirList = directory.entryList(dirFilter) if len(dirList) > 0: count = int(1) for entry in directory.entryInfoList(dirFilter): documentListItems.append(DocumentListWrapper(str(count), str(entry.size()), str(entry.fileName()))) count += 1 self.documentList = DocumentModel(documentListItems) self.documentView.rootContext().setContextProperty('documentListModel', self.documentList) else: print 'No XML files in directory' # TBD Inform user def documentClicked(self, document): #print 'documentClicked', document if self.openFile(document) == True: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) def loadBook(self, book): chapterListItems = [] try: ## TBD inform user - rewrite this books = self.document.books() for b in books: if int(b.document_entry) == int(book): ## Book requested found self.book = b ## Append chapters in book into chapterListItems chapters = self.book.chap() for c in chapters: chapterListItems.append(ChapterListWrapper(c.no, c.verses, c.vers()[0].text)) break self.chapterList = ChapterModel(chapterListItems) self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList) return True except: return False def bookClicked(self, book): if self.loadBook(book) == True: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) self.setWindowTitle(str("ScriptBook %s" % self.book.name)) def loadChapter(self, chapter): try: verseListItems = [] chapters = self.book.chap() for c in chapters: if int(c.no) == int(chapter): v = c.vers() for i in v: textstring = str("%s %s" % (str(i.number), i.text)) verseListItems.append(VerseListWrapper(int(i.number), textstring)) #verseListItems.append(VerseListWrapper(int(i.number), str(i.text))) break self.verseList = VerseModel(verseListItems) self.verseView.rootContext().setContextProperty('verseListModel', self.verseList) return True except: print 'loadChapter failed' return False def chapterClicked(self, chapter): if self.loadChapter(chapter) == True: self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) ## Write bookmark to settings settings = QtCore.QSettings() settings.setValue("ScriptBook/verse", "1") ## Reset verse to first vers settings.setValue("ScriptBook/chapter", chapter) ## Write chapter settings.setValue("ScriptBook/book", self.book.document_entry) ## Book is not stored before a chapter is choosen def verseClicked(self, verse): ## Write the verse to settings (needed ?) ## Note what verse was clicked (we wind to this place at restore) - do this more dynamic (onContenYChanged ?) settings = QtCore.QSettings() settings.setValue("ScriptBook/verse", verse) ## Shoud give pop up options here ## 1. Save bookmark ## 2. Save note ## 3. Higlight (set different font and background color) def buttonClicked(self, button): print 'buttonClicked: button', button if button == 0: self.displayDocuments() self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) elif button == 1: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) elif button == 2: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) elif button == 3: self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) elif button == 4: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) ## Back button on Donwload done elif button == 10: print 'button == 10' self.setWidgetIndexSignal.emit(WidgetIndex().FileView) #self.setCurrentWidget(self.fileView) ## Cancel download elif button == 11: print 'button == 11 Cancel button' self.setPreviousIndexSignal.emit() elif button == 12: print'button == 12 Load document (self._filename)' if self.openFile(self._filename) == True: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) def loadDocument(self): self.bookListItems = [] books = self.document.books() for b in books: self.bookListItems.append(BookListWrapper(b.document_entry, b.name, b.chapters)) return True def openFile(self, filename): ## Open xml file file = QtCore.QFile(filename) if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot read file \n%s:\n." % filename) self.setPreviousIndexSignal.emit() return False ## Initialize xml reader reader = QtXml.QXmlSimpleReader() ## Set values for the store/restore settings system QtCore.QCoreApplication.setOrganizationName("EMR") QtCore.QCoreApplication.setOrganizationDomain("code.rutger.no") QtCore.QCoreApplication.setApplicationName("ScriptBook") ## The button controller self.buttonController = NavigationController() self.buttonController.buttonClicked.connect(self.buttonClicked) ## The tools controller self.toolsController = ToolsController() self.toolsController.toolsClicked.connect(self.toolsClicked) ## The ftp login controller self.ftpController = FtpController() self.ftpController.connectSignal.connect(self.ftpConnect) self.ftpController.cancelSignal.connect(self.ftpCancel) ## The ftp entry list controller self.ftpEntryListController = FtpEntryListController() self.ftpEntryListController.ftpDirectoryListDone.connect(self.ftpDirectoryListDone) self.ftpEntryListController.ftpFileListDone.connect(self.ftpFileListDone) self.ftpEntryListController.ftpDownloadDone.connect(self.ftpDownloadDone) self.ftpEntryListController.ftpDownloading.connect(self.ftpDownloading) self.ftpEntryListController.ftpReadyRead.connect(self.ftpReadyRead) ## Set up UI components self.setupUI() def setupUI(self): ## The document view, controller and model self.documentView = QtDeclarative.QDeclarativeView() self.documentView.setWindowTitle('Documents') self.documentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.documentController = DocumentController() self.documentController.documentClicked.connect(self.documentClicked) self.documentView.rootContext().setContextProperty('controller', self.documentController) self.documentView.rootContext().setContextProperty('buttonController', self.buttonController) self.documentList = DocumentModel([]) self.documentView.rootContext().setContextProperty('documentListModel', self.documentList) self.documentView.setSource(QtCore.QUrl('qml/DocumentListModel.qml')) ## The book view, controller and model self.bookView = QtDeclarative.QDeclarativeView() self.bookView.setWindowTitle('Books') self.bookView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.bookController = BookController() self.bookController.bookClicked.connect(self.bookClicked) self.bookView.rootContext().setContextProperty('controller', self.bookController) self.bookView.rootContext().setContextProperty('buttonController', self.buttonController) self.bookList = BookModel([]) self.bookView.rootContext().setContextProperty('bookListModel', self.bookList) self.bookView.setSource(QtCore.QUrl('qml/BookListModel.qml')) ## The chapter view, controller and model self.chapterView = QtDeclarative.QDeclarativeView() self.chapterView.setWindowTitle('Chapter') self.chapterView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.chapterController = ChapterController() self.chapterController.chapterClicked.connect(self.chapterClicked) self.chapterView.rootContext().setContextProperty('controller', self.chapterController) self.chapterView.rootContext().setContextProperty('buttonController', self.buttonController) self.chapterList = ChapterModel([]) self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList) self.chapterView.setSource(QtCore.QUrl('qml/ChapterListModel.qml')) ## The chapter view, controller and model self.verseView = QtDeclarative.QDeclarativeView() self.verseView.setWindowTitle('Verse') self.verseView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.verseController = VerseController() self.verseController.verseClicked.connect(self.verseClicked) self.verseView.rootContext().setContextProperty('controller', self.verseController) self.verseView.rootContext().setContextProperty('buttonController', self.buttonController) self.verseList = VerseModel([]) self.verseView.rootContext().setContextProperty('verseListModel', self.verseList) self.verseView.setSource(QtCore.QUrl('qml/VerseListModel.qml')) ## The tools view self.toolsView = QtDeclarative.QDeclarativeView() self.toolsView.setWindowTitle('Tools') self.toolsView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.toolsView.rootContext().setContextProperty('buttonController', self.buttonController) self.toolsView.rootContext().setContextProperty('toolsController', self.toolsController) self.toolsView.setSource(QtCore.QUrl('qml/Tools.qml')) ## The ftp login view self.ftpLoginView = QtDeclarative.QDeclarativeView() self.ftpLoginView.setWindowTitle('Ftp login') self.ftpLoginView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.ftpLoginView.rootContext().setContextProperty('buttonController', self.buttonController) self.ftpLoginView.rootContext().setContextProperty('ftpController', self.ftpController) self.ftpLoginView.setSource(QtCore.QUrl('qml/FtpLogin.qml')) ## The ftp directory view self.directoryView = QtDeclarative.QDeclarativeView() self.directoryView.setWindowTitle('Ftp directories') self.directoryView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.directoryController = DirectoryController() self.directoryController.directoryClicked.connect(self.directoryClicked) self.directoryView.rootContext().setContextProperty('controller', self.directoryController) self.directoryList = DirectoryModel([]) self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList) self.directoryView.rootContext().setContextProperty('ftpController', self.ftpController) self.directoryView.setSource(QtCore.QUrl('qml/FtpDirectoryListModel.qml')) self.directoryView.rootContext().setContextProperty('buttonController', self.buttonController) ## The ftp file view self.fileView = QtDeclarative.QDeclarativeView() self.fileView.setWindowTitle('Ftp xml files') self.fileView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.fileController = FileList.FileController() self.fileController.fileClicked.connect(self.fileClicked) self.fileView.rootContext().setContextProperty('controller', self.fileController) self.fileList = FileList.FileModel([]) self.fileView.rootContext().setContextProperty('fileListModel', self.fileList) self.fileView.rootContext().setContextProperty('ftpController', self.ftpController) self.fileView.setSource(QtCore.QUrl('qml/FtpFileListModel.qml')) self.fileView.rootContext().setContextProperty('buttonController', self.buttonController) ## The downloading view self.downloadingView = QtDeclarative.QDeclarativeView() self.downloadingView.setWindowTitle('Download Done') self.downloadingView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.downloadingView.setSource(QtCore.QUrl('qml/Downloading.qml')) self.downloadingView.rootContext().setContextProperty('buttonController', self.buttonController) ## The download done view self.downloadDoneView = QtDeclarative.QDeclarativeView() self.downloadDoneView.setWindowTitle('Download Done') self.downloadDoneView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.downloadDoneView.setSource(QtCore.QUrl('qml/DownloadDone.qml')) self.downloadDoneView.rootContext().setContextProperty('buttonController', self.buttonController) ## The loading document view self.loadingDocumentView = QtDeclarative.QDeclarativeView() self.loadingDocumentView.setWindowTitle('Loading Document') self.loadingDocumentView.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) self.loadingDocumentView.setSource(QtCore.QUrl('qml/LoadingDocument.qml')) self.loadingDocumentView.rootContext().setContextProperty('buttonController', self.buttonController) ## Add the book, chapter and verse view's self.addWidget(self.documentView) self.addWidget(self.bookView) self.addWidget(self.chapterView) self.addWidget(self.verseView) self.addWidget(self.ftpLoginView) self.addWidget(self.directoryView) self.addWidget(self.fileView) self.addWidget(self.toolsView) self.addWidget(self.downloadingView) self.addWidget(self.downloadDoneView) self.addWidget(self.loadingDocumentView) ## Set window title, set geometry and show self.setWindowTitle('ScriptBook') self.setGeometry(400, 200, 280, 430) self.show() ## Load settings self.loadSettings() ## Load documents self.displayDocuments() print 'DEBUG emiting set widget index signal' #self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView) def ftpReadyRead(self, bytes): print 'readyRead bytes:', bytes ## Reackt on Tool Button Click def toolsClicked(self, entry): if int(entry) == 0: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) elif int(entry) == 1: print 'toolsClicked: Font settings - not implemented' elif int(entry) == 2: print 'toolsClicked: Bookmars - not implemented' else: print 'toolsClicked: unknonw' def ftpConnect(self, host, port): self.ftpEntryListController.setHostPort(host, port) self.ftpEntryListController.setDirectory(".") self.ftpEntryListController.directoryList() def ftpCancel(self): if self.currentWidget() == self.fileView: self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView) #self.setCurrentWidget(self.directoryView) elif self.currentWidget() == self.directoryView: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) elif self.currentWidget() == self.ftpLoginView: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) else: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) def ftpDirectoryListDone(self): print 'ftpDirectoryListDone' directoryListItems = [] directories = self.ftpEntryListController.list() #print 'directories', directories if len(directories) > int(0): for d in directories: directoryListItems.append(DirectoryListWrapper(str(d))) print d self.directoryList = DirectoryModel(directoryListItems) self.directoryView.rootContext().setContextProperty('directoryListModel', self.directoryList) self.setWidgetIndexSignal.emit(WidgetIndex().DirectoryView) #self.setCurrentWidget(self.directoryView) def directoryClicked(self, name): print 'directoryClicked', name self.ftpEntryListController.setDirectory(name) self.ftpEntryListController.fileList() def ftpFileListDone(self): print 'ftpFileListDone' fileListItems = [] files = self.ftpEntryListController.list() if len(files) > int(0): print 'Directory contains', len(files), "entries" for f in files: fileListItems.append(FileList.FileListWrapper(str(f))) print f self.fileList = FileList.FileModel(fileListItems) self.fileView.rootContext().setContextProperty('fileListModel', self.fileList) self.setWidgetIndexSignal.emit(WidgetIndex().FileView) #self.setCurrentWidget(self.fileView) def ftpDownloading(self): print 'ftpDownloading' self.setWidgetIndexSignal.emit(WidgetIndex().DownloadingView) #self.setCurrentWidget(self.downloadingView) def ftpDownloadDone(self): ## Get content to local variable self._downloadedFile = self.ftpEntryListController.getFile() print 'ftpDownloadDone', len(self._downloadedFile) ## Write content to file f = open(self._filename, "w") f.write(self._downloadedFile) f.close() ## Set Download done Widget self.setWidgetIndexSignal.emit(WidgetIndex().DownloadDoneView) def fileClicked(self, name): print 'fileClicked', name if name != str(""): self._filename = name self.ftpEntryListController.downloadFile(self._filename) def findXmlFiles(self): xmlFiles = [] directory = QtCore.QDir() ## Go through directory content and look for xml files for e in directory.entryList(): if e == '.' or e == '..': continue ## Split filename string on '.' and check if last part is 'xml' f = e.split('.') if len(f) == 2: if f[1] == 'xml': ## XML file - append xmlFiles.append(e) return xmlFiles def loadSettings(self): ## Read the settings settings = QtCore.QSettings() ## The ftp host and port self.ftpHost = settings.value("ScriptBook/ftpHost", "localhost") self.ftpPort = settings.value("ScriptBook/ftpPort", "21") ## Update the view through the controller self.ftpController.setHost(self.ftpHost) self.ftpController.onHostChanged.emit(str(self.ftpHost)) self.ftpController.setPort(self.ftpPort) self.ftpController.onPortChanged.emit(str(self.ftpPort)) document = settings.value("ScriptBook/document") book = settings.value("ScriptBook/book") chapter = settings.value("ScriptBook/chapter") vers = settings.value("ScriptBook/vers") ## Look for xml files in directory xmlFiles = self.findXmlFiles() ## If we don't have any xml files, load ftp login view if len(xmlFiles) == 0: self.setWidgetIndexSignal.emit(WidgetIndex().FtpLoginView) #self.setCurrentWidget(self.ftpLoginView) return ## If there are no document give we cannot preload anything if document == None: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If we don't have the requested document we cannot preload it if xmlFiles.__contains__(str(document)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If we fail to open the file, set document view as page if self.openFile(document) == False: self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) return ## If book is not give, load the book view if book == None: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) return ## SHOULD GIVE PROPER ERROR PAGE HERE if self.loadBook(int(book)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) return ## If chapter is not give, show chapter view if chapter == None: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) return ## SHOULD GIVE PROPER ERROR PAGE HERE if self.loadChapter(int(chapter)) == False: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) return self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) def displayDocuments(self): documentListItems = [] dirFilter = [] dirFilter.append('*.xml') directory = QtCore.QDir() dirList = directory.entryList(dirFilter) if len(dirList) > 0: count = int(1) for entry in directory.entryInfoList(dirFilter): documentListItems.append(DocumentListWrapper(str(count), str(entry.size()), str(entry.fileName()))) count += 1 self.documentList = DocumentModel(documentListItems) self.documentView.rootContext().setContextProperty('documentListModel', self.documentList) else: print 'No XML files in directory' # TBD Inform user def documentClicked(self, document): #print 'documentClicked', document if self.openFile(document) == True: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) def loadBook(self, book): chapterListItems = [] try: ## TBD inform user - rewrite this books = self.document.books() for b in books: if int(b.document_entry) == int(book): ## Book requested found self.book = b ## Append chapters in book into chapterListItems chapters = self.book.chap() for c in chapters: chapterListItems.append(ChapterListWrapper(c.no, c.verses, c.vers()[0].text)) break self.chapterList = ChapterModel(chapterListItems) self.chapterView.rootContext().setContextProperty('chapterListModel', self.chapterList) return True except: return False def bookClicked(self, book): if self.loadBook(book) == True: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) self.setWindowTitle(str("ScriptBook %s" % self.book.name)) def loadChapter(self, chapter): try: verseListItems = [] chapters = self.book.chap() for c in chapters: if int(c.no) == int(chapter): v = c.vers() for i in v: textstring = str("%s %s" % (str(i.number), i.text)) verseListItems.append(VerseListWrapper(int(i.number), textstring)) #verseListItems.append(VerseListWrapper(int(i.number), str(i.text))) break self.verseList = VerseModel(verseListItems) self.verseView.rootContext().setContextProperty('verseListModel', self.verseList) return True except: print 'loadChapter failed' return False def chapterClicked(self, chapter): if self.loadChapter(chapter) == True: self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) ## Write bookmark to settings settings = QtCore.QSettings() settings.setValue("ScriptBook/verse", "1") ## Reset verse to first vers settings.setValue("ScriptBook/chapter", chapter) ## Write chapter settings.setValue("ScriptBook/book", self.book.document_entry) ## Book is not stored before a chapter is choosen def verseClicked(self, verse): ## Write the verse to settings (needed ?) ## Note what verse was clicked (we wind to this place at restore) - do this more dynamic (onContenYChanged ?) settings = QtCore.QSettings() settings.setValue("ScriptBook/verse", verse) ## Shoud give pop up options here ## 1. Save bookmark ## 2. Save note ## 3. Higlight (set different font and background color) def buttonClicked(self, button): print 'buttonClicked: button', button if button == 0: self.displayDocuments() self.setWidgetIndexSignal.emit(WidgetIndex().DocumentView) #self.setCurrentWidget(self.documentView) elif button == 1: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) elif button == 2: self.setWidgetIndexSignal.emit(WidgetIndex().ChapterView) #self.setCurrentWidget(self.chapterView) elif button == 3: self.setWidgetIndexSignal.emit(WidgetIndex().VerseView) #self.setCurrentWidget(self.verseView) elif button == 4: self.setWidgetIndexSignal.emit(WidgetIndex().ToolsView) #self.setCurrentWidget(self.toolsView) ## Back button on Donwload done elif button == 10: print 'button == 10' self.setWidgetIndexSignal.emit(WidgetIndex().FileView) #self.setCurrentWidget(self.fileView) ## Cancel download elif button == 11: print 'button == 11 Cancel button' self.setPreviousIndexSignal.emit() elif button == 12: print'button == 12 Load document (self._filename)' if self.openFile(self._filename) == True: self.setWidgetIndexSignal.emit(WidgetIndex().BookView) #self.setCurrentWidget(self.bookView) def loadDocument(self): self.bookListItems = [] books = self.document.books() for b in books: self.bookListItems.append(BookListWrapper(b.document_entry, b.name, b.chapters)) return True def openFile(self, filename): ## Open xml file file = QtCore.QFile(filename) if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot read file \n%s:\n." % filename) self.setPreviousIndexSignal.emit() return False ## Initialize xml reader reader = QtXml.QXmlSimpleReader() reader.setContentHandler(self.handler) reader.setErrorHandler(self.handler) ## xml input source xmlInputSource = QtXml.QXmlInputSource(file) ## Set loading document widget self.setWidgetIndexSignal.emit(WidgetIndex().LoadingDocumentView) ## Parse xml file if reader.parse(xmlInputSource) == False: print "openFile Error:", self.handler.errorString() QtGui.QMessageBox.warning(self, "ScriptBook", "Cannot parse file \n%s\n %s\n" % (filename, self.handler.errorString())) self.setPreviousIndexSignal.emit() return False ## Copy document from the xml handler self.document = self.handler.document ## Check document if self.document.checkDocument() == False: print 'Loading documet failed' self.setPreviousIndexSignal.emit() return False ## Load Document if (self.loadDocument() == False): print 'openFile: loadDocument failed' self.setPreviousIndexSignal.emit() return False ## Populate book list self.bookList = BookModel(self.bookListItems) self.bookView.rootContext().setContextProperty('bookListModel', self.bookList) ## Set window title self.setWindowTitle(str(("ScriptBook %s" % self.document.description))) ## Backup settings settings = QtCore.QSettings() settings.setValue("ScriptBook/document", filename) settings.setValue("ScriptBook/book", None) settings.setValue("ScriptBook/chapter", None) settings.setValue("ScriptBook/verse", None) ## Set the previous widget (current is LoadinDocumentView), the caller should set the apropriate widget self.setPreviousIndexSignal.emit() return True
from Vocabulary import * from IndexBuilder import * import sys import time if __name__ == '__main__': if len(sys.argv) < 3: print 'argument too few, need arg(lexdb, rootdir)' else: lexdb, rootdir = sys.argv[1], sys.argv[2] print 'Reading Dictionary...' token = Tokenizer(Dictionary(lexdb)) reader = Reader(rootdir) document = Document() vocabulary = Vocabulary() indexBuilder = IndexBuilder() i = 1 print 'Parsing...' for (filename, fullpath, filesize, create_time) in reader.txt_files(): print 'Process %d: %s' % (i, fullpath) i += 1 token_stream = token.parse(fullpath) doc_id = document.add((filename, fullpath, filesize, create_time, len(token_stream))) vocabulary.add(doc_id, token_stream) print 'Saving vocabulary...' vocabulary.save() print 'Saving document...' document.save() print 'Building index...'
def create_new_document(content): doc = Document("doc") doc.dictionary = doc.count_words(content) return doc