import hashlib import sys from tkinter import * import helpers root = Tk() titleLabel = StringVar() text = StringVar() filesInfo = None csvFiles = None state = None acceptedDataCSV = None rejectedDataCSV = None def findDuplicate (hashDict, title): if title in hashDict: return True else: return False def acceptPaper (file, csvRow, index): global state global acceptedDataCSV fileFilter = helpers.getFilter(file) data = fileFilter.getCSVData(csvRow) digest = hashlib.sha256(str.encode(fileFilter.getTitle(csvRow))).hexdigest() duplicate = findDuplicate(rejectedDataCSV, digest) or findDuplicate(acceptedDataCSV, digest) if duplicate: state['duplihttps://mail.google.com/mail/u/0/#inboxcate'] += 1 else: data.append("{0} - {1}".format(file['path'],index)) acceptedDataCSV[digest] = data state['accepted'] += 1 return def rejectPaper (file, csvRow, index): global rejectedDataCSV global state fileFilter = helpers.getFilter(file) data = fileFilter.getCSVData(csvRow) digest = hashlib.sha256(str.encode(fileFilter.getTitle(csvRow))).hexdigest() duplicate = findDuplicate(rejectedDataCSV, digest) or findDuplicate(acceptedDataCSV, digest) if duplicate: state['duplicate'] += 1 else: data.append("{0} - {1}".format(file['path'],index)) rejectedDataCSV[digest] = data state['rejected'] += 1 return def rejectButtonHandler (*arg): global state global csvFiles index = state['row_index'] fileIndex = state['file_index'] fileTuple = csvFiles[fileIndex] rejectPaper(fileTuple[1], fileTuple[0][index], index) nextPaper() return def acceptButtonHandler (*arg): global state global csvFiles index = state['row_index'] fileIndex = state['file_index'] fileTuple = csvFiles[fileIndex] acceptPaper(fileTuple[1], fileTuple[0][index], index) nextPaper() return def updateAndClear (textField, *args): textField.config(state=NORMAL) textField.delete('1.0', END) textField.insert(INSERT, text.get()) textField.tag_add("center", '1.0', END) textField.config(state=DISABLED) def loadFiles (): global filesInfo global csvFiles global state global root global acceptedDataCSV global rejectedDataCSV filesInfo = helpers.loadConfigFile() if len(filesInfo) == 0: sys.exit("csvconfig.txt not found. You need this file to run the program") state = helpers.loadState(root) acceptedDataCSV = helpers.restoreAcceptedCSV() #load default file, if present append else create new one rejectedDataCSV = helpers.restoreRejectedCSV() if len(acceptedDataCSV) == 0: acceptedDataCSV['header'] = helpers.FINAL_CSV_HEADERS if len(rejectedDataCSV) == 0: rejectedDataCSV['header'] = helpers.FINAL_CSV_HEADERS csvFiles = [(list(f[0]), f[1]) for f in helpers.loadFiles(filesInfo)] setPaperFromState() def setPaperFromState (): global titleLabel global text fileIndex = state['file_index'] if fileIndex >= len(filesInfo): return #finished processing fileList = csvFiles[fileIndex][0] index = state['row_index'] if index >= len(fileList): state['file_index'] += 1 state['row_index'] = 0 setPaperFromState() else: file = fileList[index] fileFilter = helpers.getFilter(csvFiles[fileIndex][1]) title = fileFilter.getTitle(file) abstract = fileFilter.getAbstract(file) titleLabel.set(title) text.set(abstract) def nextPaper (): global titleLabel global text global root fileIndex = state['file_index'] if fileIndex >= len(filesInfo): helpers.removeStateFile() helpers.writeFinalLog(state) helpers.saveAcceptedCSV(acceptedDataCSV) helpers.saveRejectedCSV(rejectedDataCSV) root.destroy()#acabou, fecha essa porra return fileList = csvFiles[fileIndex][0] index = state['row_index'] = state['row_index'] + 1 if index >= len(fileList): state['file_index'] += 1 state['row_index'] = -1 nextPaper() else: file = fileList[index] fileFilter = helpers.getFilter(csvFiles[fileIndex][1]) title = fileFilter.getTitle(file) abstract = fileFilter.getAbstract(file) titleLabel.set(title) text.set(abstract) def onClosing (): global state global root global acceptedDataCSV global rejectedDataCSV helpers.saveState(state) helpers.saveAcceptedCSV(acceptedDataCSV) helpers.saveRejectedCSV(rejectedDataCSV) root.destroy() def main (): global root root.title('Reviewer') root.geometry('800x600') topFrame = Frame(root) bottomFrame = Frame(root) bottomFrame.pack(side=BOTTOM) topFrame.pack(side=TOP, fill=BOTH, expand=True) label = Label(root, textvariable=titleLabel, relief=RAISED) label.pack(in_=topFrame, fill=BOTH, side=TOP) textField = Text(root) textField.tag_configure("center", wrap=WORD) textField.pack(in_=topFrame, fill=BOTH, side=TOP) accept = Button(root, text ="Accept Paper", command = acceptButtonHandler) root.bind('', lambda e: acceptButtonHandler()) accept.pack(in_=bottomFrame, side=LEFT) reject = Button(root, text ="Reject Paper", command = rejectButtonHandler) root.bind('', lambda e: rejectButtonHandler()) reject.pack(in_=bottomFrame, side=LEFT) textField.insert(INSERT, text.get()) text.trace('w', lambda *arg: updateAndClear(textField)) textField.config(state=DISABLED) root.protocol("WM_DELETE_WINDOW", onClosing) root.mainloop() loadFiles() main()