def OnBtnSaveReportButton(self, event): self.startTime = time.time() dlg = wx.FileDialog(self, "Save Known Files Report", ".", "", "*.csv", wx.SAVE) try: if dlg.ShowModal() == wx.ID_OK: db = SqliteDatabase(Globals.FileSystemName) if not db.OpenConnection(): return busy = wx.BusyInfo("It might take a while...") wx.Yield() query = "select DirPath||'%s'||Name, MD5 from %s where KnownFile = 1;" % ( os.path.sep, Globals.CurrentEvidenceID) fileName = dlg.GetPath() fout = open(fileName, 'wb') fout.write('Report Generated on: %s\n' % (time.ctime())) rows = db.FetchAllRows(query) fout.write('There are %d total known files.\n\n' % (len(rows))) delimeter = ";" if self.radComma.GetValue(): delimeter = "," for row in rows: fout.write("%s%s%s\n" % (unicode(row[0]), delimeter, unicode(row[1]))) db.CloseConnection() fout.close() self.elapsedTime = CommonFunctions.ConvertSecondsToYearDayHourMinSec( time.time() - self.startTime) msg = "Done generating report! (%s)" % (self.elapsedTime) CommonFunctions.ShowErrorMessage(self, msg, error=False) except Exception, value: CommonFunctions.ShowErrorMessage( self, "Failed to Save Known Files Report! Error: %s" % value)
def OnBtnOKButton(self, event): self.startTime = time.time() busy = wx.BusyInfo( "Extracting Emails and Attachments and generating reports...It might take some time; just relax!" ) wx.Yield() """ import keyextract keyextract.msg_Folder_Path = self.txtMessageFolderPath.GetValue() keyextract.result_Dir_Path = self.txtResultFolderPath.GetValue() keyextract.file_Name = self.txtKeywordsFile.GetValue() keyextract.DoIt() """ db = SqliteDatabase(Globals.EmailsFileName) if not db.OpenConnection(): return keywordsFile = self.txtKeywordsFile.GetValue() outPutPath = self.txtResultFolderPath.GetValue() if not outPutPath: outPutPath = "." self.ReportOutputPath = os.path.join(outPutPath, "KeywordsReport") self.MessageOutputPath = os.path.join(self.ReportOutputPath, "Messages") #self.HTMLOutputPath = os.path.join(self.ReportOutputPath, "HTML") if not keywordsFile: return keywordsList = self.ReadKeywords(keywordsFile) for keyword in keywordsList: self.searchBitMap(db, keyword.strip()) self.elapsedTime = CommonFunctions.ConvertSecondsToYearDayHourMinSec( time.time() - self.startTime) msg = "Done generating report! (%s)" % (self.elapsedTime) CommonFunctions.ShowErrorMessage(self, msg, error=False) self.Close()
def searchBitMap(self, db, keyword, encoded=True): self.SearchDocIDList = [] #self.webDocs = {} self.searchWords = '' self.wordList = [] self.startTime = 0 self.elapsedTime = '' self.encoded = encoded word = '' totalResult = 0 self.searchWords = keyword if not self.searchWords: #CommonFunctions.ShowErrorMessage(self, "Failed to Export Phone List. Error: %s"%value) return if encoded: query = "select keyword, compressed from %s where (Keyword = " % Constants.TextCatBitMapIndex else: query = "select keyword, bitmap from %s where (Keyword = '" % Constants.TextCatBitMapIndex i = 0 for word in string.split(self.searchWords, ' '): word = word.strip().lower() word = word.strip('"') if word not in Globals.EmailsStopwords: i += 1 self.wordList.append(word) if i == 1: query += db.SqlSQuote(word) else: query += " or keyword = %s" % (db.SqlSQuote(word)) query += ")" if self.wordList < 0: return None #print query bitMap = [] docIndex = 0 #print query rows = db.FetchAllRows(query) totalResult = len(rows) """ if totalResult < len(self.wordList): self.elapsedTime = CommonFunctions.ConvertSecondsToYearDayHourMinSec(time.time() - self.startTime) self.MessagesHeading = "%d Results for %s (%s)"%(len(self.SearchDocIDList), self.searchWords, self.elapsedTime) return None """ if totalResult < 1: self.elapsedTime = CommonFunctions.ConvertSecondsToYearDayHourMinSec( time.time() - self.startTime) self.MessagesHeading = "%d Results for %s (%s)" % (len( self.SearchDocIDList), self.searchWords, self.elapsedTime) return None if totalResult == 1: if self.encoded: bitMap = binascii.rledecode_hqx(rows[0][1]) else: bitMap = rows[0][1] elif totalResult > 1: if self.encoded: bits = binascii.rledecode_hqx(rows[0][1]) for bit in bits: bitMap.append(bit) else: for bit in rows[0][1]: # get the bitmap of first word/row bitMap.append(bit) i = 1 while i < totalResult: row = rows[i] i += 1 index = 0 # start from the beginning of the bitmap if encoded: bits = binascii.rledecode_hqx(row[1]) else: bits = row[1] for bit in bits: if self.searchWords.startswith('"'): bitMap[index] = str(int(bitMap[index]) & int(bit)) else: bitMap[index] = str(int(bitMap[index]) | int(bit)) index += 1 #print bitMap docIndex = 1 for bit in bitMap: if bit == '1': #if len(self.docIDString) >= 1: # self.docIDString += ',' self.SearchDocIDList.append(docIndex) #self.docIDString += str(docIndex) docIndex += 1 if len(self.SearchDocIDList) == 0: return if keyword.startswith('"'): keyword = keyword.replace('"', "'") msgOutputPath = os.path.join(self.MessageOutputPath, keyword) try: os.makedirs(msgOutputPath) except: pass for key in Globals.MessageDict: for msg in Globals.MessageDict[key]: if msg.DocID in self.SearchDocIDList: destPath = os.path.join(msgOutputPath, os.path.basename(msg.filePath)) if not os.path.isfile(destPath): shutil.copyfile(msg.filePath, destPath)