def start(): """ Starts the main program. """ hostname = get_hostname() locs = config.HOSTS[hostname] for l in locs: hr_text(l) path = locs[l] print_blue("# PATH: " + path) filename_db = config.PATH_DB + l + '.db' print "# creating DB ... ", filename_db dbf = Database(path, filename_db) if dbf.scan(): dbf.print_statistics() # simply logging f = open(config.PATH_LOGFILE, 'aw') f.write(get_datetime() + '\n') f.close()
def search(self, arguments, opt): """ This searches :-) This function is way too big and should be split up (it has 267 lines and up to 45 local variables!) * input: - arguments & opt based on cmd input by user """ list_with_action = True # if x 2 related to firefox's bookmarks if opt.bookmarks: # sqlite3 is required! import sqlite3 conn = sqlite3.connect(FF_SQLITE_DATABASE) c = conn.cursor() c.execute("select title, url from moz_places;") conn.commit() results = c.fetchall() if 1: for r in results: title = r[0] if title: pass else: title = '' line = title + r[1] # a stupid way word = arguments[0] try: word2 = arguments[1] except IndexError: word2 = '' if compile(word, I).search(line) \ and compile(word2, I).search(line): print_red_and_blue(title, ' ' + r[1]) exit(1) if opt.bookmarks_folder: # dirty but works # django required! try: from django.conf import settings except ImportError: print 'ImportError: Install python-django to run this feature: sudo apt-get install python-django or sudo pip install django' exit(1) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': FF_SQLITE_DATABASE, 'HOST': '', 'PORT': '', } } settings.configure(DATABASES=DATABASES) from orm.models import MozBookmarks show_path = False phrase = argv[2].strip() print 'phrase:', phrase, '\n' bookmarks = MozBookmarks.objects.all() c = 0 for b in bookmarks: if b.fk is None and b.title != '': # b.fk = has bookmarks try: path = b.title.strip() except AttributeError: print '-- b.title:', b.title while b.parent != 1: parent = MozBookmarks.objects.get(id=b.parent) path = parent.title.strip() + '/' + path b = parent if show_path: print path if path.lower().find(phrase.lower()) > -1: print path c += 1 exit(1) if opt.invert: arguments.reverse() # main search body words = '*' + '*'.join(arguments) + '*' # '*a*b*c*' words_rex = '.*' + '.*'.join(arguments) + '.*' # '.*a.*b*.c*' if opt.global_search: places = PLACES_GLOBAL else: places = PLACES_LOCAL places.append(get_hostname()) if opt.grep_here: places = ['current dir'] status = 'grepping the current directory' cmd = GREP_CMD + " '" + words.replace('*', '') + "' *" if opt.verbose: print 'cmd: ', cmd out = getoutput(cmd).strip() for l in out.split('\n'): if l.find(':') > -1: try: filename, text = l.split(':') filename += ':' except: items = l.split(':') filename = items[0] text = ':'.join(items[1:]) print_red_and_blue(filename, text) elif l.find('-') > -1: try: filename, text = l.split('-') filename += '-' except: items = l.split('-') filename = items[0] text = '-'.join(items[1:]) print_red_and_blue(filename, text) else: print l exit(1) if opt.wholename: # or basename wholename_or_basename = ' -w ' else: wholename_or_basename = ' -b ' if opt.find_dir: places = ['find directories@' + get_hostname()] if opt.find_find: places = ['find@' + get_hostname()] if opt.find_tu: places = ['find here -t tu@' + get_hostname()] # reset file paths_text_file = open('/home/' + getuser() + '/.mmfinder-paths', 'w') paths_text_file_to_open = open( '/home/' + getuser() + '/.mmfinder-paths-to-open', 'w') mmterminalpathtext = '' mmterminalpathtext_to_open = '' html_hits = '' c = 1 for p in places: hr_text(p + '...') html_hits += '#' + p + '\n' status = '' if opt.pdf_find: status = 'pdf searching...' cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i -r '" + words_rex + "pdf" elif opt.document_find: status = 'document searching...' extensions = '$|'.join(EXTENSIONS_OF_DOCUMENTS) cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + \ words_rex + ".*(" + extensions + ")'" elif opt.find_media: status = 'document searching...' extensions = '$|'.join(EXTENSIONS_OF_MEDIA) cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + \ words_rex + ".*(" + extensions + ")'" elif opt.rex: status = 'rex searching...' word = arguments[0] # <--- !!! cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + word + "'" elif opt.find_tu: status = 'finding here (tutaj)...' cmd = "find '" + getcwd() + "' -iname '" + words + "'" elif opt.find_find: status = 'finding /home/...' cmd = "find ~ -iname '" + words + "'" elif opt.find_dir: status = 'finding a dir /...' cmd = "find ~ -iname '" + words + "' -type d" # very slow :-( if False: if word.startswith('^'): word_without = word.replace('^', '') cmd = "locate -d " + PATH_DB + p + '.db' + \ " -e -i -r '/" + word_without + \ "*' | xarguments file" #locate -r '/*python2.7*/' | less else: cmd = "locate -d " + PATH_DB + p + '.db' + \ " -e -i -r '/*" + word + "*/'" \ #locate -r '/*python2.7*/' | less else: status = 'basic search...' cmd = "locate -d " + PATH_DB + p + '.db' + \ " " + wholename_or_basename + " -i '" + words + "'" if opt.un_grep: cmd = cmd + " | grep -v '" + opt.un_grep + "'" if opt.verbose: print '# status:', status print '# cmd', cmd # execute! out = getoutput(cmd).strip() if opt.dev: hr_text('dev::out') print out hr() if out and list_with_action: for item in out.strip().split('\n'): # @@ BUG @@ id = IDS[c] id = 'a' # TO FIX h = Hit(id, item) self.items.append(h) h.check_filetype() #print i.is_dir #if i.is_dir and find_dir: # i.show() #print 'x' #if not find_dir: hit = h.show(opt.not_less, opt.noncolor, c) if opt.www_browser: html_hits += hit + '\n' else: mmterminalpathtext += hit.split('\n')[0].strip() \ + ' #' + str(c) + '\n' mmterminalpathtext_to_open += hit.split('\n')[1].strip() \ + ' #' + str(c) + '\n' c += 1 print # and out becuase don't 'press key' for empty outputs if opt.key and out: raw_input('[press key]') if opt.www_browser: html_text = '<pre>' html_text += html_hits.replace('\n', '</br>') html_text += '<pre>' fn = HTML_FN f = open(fn, 'w') f.write(html_text) f.close() cmd = HTML_CMD + ' ' + fn print cmd system(cmd) paths_text_file.write(mmterminalpathtext) paths_text_file_to_open.write(mmterminalpathtext_to_open) paths_text_file.close()
def search(self, arguments, opt): """ This searches :-) This function is way too big and should be split up (it has 267 lines and up to 45 local variables!) * input: - arguments & opt based on cmd input by user """ list_with_action = True # if x 2 related to firefox's bookmarks if opt.bookmarks: # sqlite3 is required! import sqlite3 conn = sqlite3.connect(FF_SQLITE_DATABASE) c = conn.cursor() c.execute("select title, url from moz_places;") conn.commit() results = c.fetchall() if 1: for r in results: title = r[0] if title: pass else: title = '' line = title + r[1] # a stupid way word = arguments[0] try: word2 = arguments[1] except IndexError: word2 = '' if compile(word, I).search(line) \ and compile(word2, I).search(line): print_red_and_blue(title, ' ' + r[1]) exit(1) if opt.bookmarks_folder: # dirty but works # django required! try: from django.conf import settings except ImportError: print 'ImportError: Install python-django to run this feature: sudo apt-get install python-django or sudo pip install django' exit(1) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': FF_SQLITE_DATABASE, 'HOST': '', 'PORT': '', } } settings.configure(DATABASES=DATABASES) from orm.models import MozBookmarks show_path = False phrase = argv[2].strip() print 'phrase:', phrase, '\n' bookmarks = MozBookmarks.objects.all() c = 0 for b in bookmarks: if b.fk is None and b.title != '': # b.fk = has bookmarks try: path = b.title.strip() except AttributeError: print '-- b.title:', b.title while b.parent != 1: parent = MozBookmarks.objects.get(id=b.parent) path = parent.title.strip() + '/' + path b = parent if show_path: print path if path.lower().find(phrase.lower()) > -1: print path c += 1 exit(1) if opt.invert: arguments.reverse() # main search body words = '*' + '*'.join(arguments) + '*' # '*a*b*c*' words_rex = '.*' + '.*'.join(arguments) + '.*' # '.*a.*b*.c*' if opt.global_search: places = PLACES_GLOBAL else: places = PLACES_LOCAL places.append(get_hostname()) if opt.grep_here: places = ['current dir'] status = 'grepping the current directory' cmd = GREP_CMD + " '" + words.replace('*', '') + "' *" if opt.verbose: print 'cmd: ', cmd out = getoutput(cmd).strip() for l in out.split('\n'): if l.find(':') > -1: try: filename, text = l.split(':') filename += ':' except: items = l.split(':') filename = items[0] text = ':'.join(items[1:]) print_red_and_blue(filename, text) elif l.find('-') > -1: try: filename, text = l.split('-') filename += '-' except: items = l.split('-') filename = items[0] text = '-'.join(items[1:]) print_red_and_blue(filename, text) else: print l exit(1) if opt.wholename: # or basename wholename_or_basename = ' -w ' else: wholename_or_basename = ' -b ' if opt.find_dir: places = ['find directories@' + get_hostname()] if opt.find_find: places = ['find@' + get_hostname()] if opt.find_tu: places = ['find here -t tu@' + get_hostname()] # reset file paths_text_file = open('/home/' + getuser() + '/.mmfinder-paths', 'w') paths_text_file_to_open = open('/home/' + getuser() + '/.mmfinder-paths-to-open', 'w') mmterminalpathtext = '' mmterminalpathtext_to_open = '' html_hits = '' c = 1 for p in places: hr_text(p + '...') html_hits += '#' + p + '\n' status = '' if opt.pdf_find: status = 'pdf searching...' cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i -r '" + words_rex + "pdf" elif opt.document_find: status = 'document searching...' extensions = '$|'.join(EXTENSIONS_OF_DOCUMENTS) cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + \ words_rex + ".*(" + extensions + ")'" elif opt.find_media: status = 'document searching...' extensions = '$|'.join(EXTENSIONS_OF_MEDIA) cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + \ words_rex + ".*(" + extensions + ")'" elif opt.rex: status = 'rex searching...' word = arguments[0] # <--- !!! cmd = "locate -d " + PATH_DB + p + '.db' + " " + \ wholename_or_basename + " -i --regex '" + word + "'" elif opt.find_tu: status = 'finding here (tutaj)...' cmd = "find '" + getcwd() + "' -iname '" + words + "'" elif opt.find_find: status = 'finding /home/...' cmd = "find ~ -iname '" + words + "'" elif opt.find_dir: status = 'finding a dir /...' cmd = "find ~ -iname '" + words + "' -type d" # very slow :-( if False: if word.startswith('^'): word_without = word.replace('^', '') cmd = "locate -d " + PATH_DB + p + '.db' + \ " -e -i -r '/" + word_without + \ "*' | xarguments file" #locate -r '/*python2.7*/' | less else: cmd = "locate -d " + PATH_DB + p + '.db' + \ " -e -i -r '/*" + word + "*/'" \ #locate -r '/*python2.7*/' | less else: status = 'basic search...' cmd = "locate -d " + PATH_DB + p + '.db' + \ " " + wholename_or_basename + " -i '" + words + "'" if opt.un_grep: cmd = cmd + " | grep -v '" + opt.un_grep + "'" if opt.verbose: print '# status:', status print '# cmd', cmd # execute! out = getoutput(cmd).strip() if opt.dev: hr_text('dev::out') print out hr() if out and list_with_action: for item in out.strip().split('\n'): # @@ BUG @@ id = IDS[c] id = 'a' # TO FIX h = Hit(id, item) self.items.append(h) h.check_filetype() #print i.is_dir #if i.is_dir and find_dir: # i.show() #print 'x' #if not find_dir: hit = h.show(opt.not_less, opt.noncolor, c) if opt.www_browser: html_hits += hit + '\n' else: mmterminalpathtext += hit.split('\n')[0].strip() \ + ' #' + str(c) + '\n' mmterminalpathtext_to_open += hit.split('\n')[1].strip() \ + ' #' + str(c) + '\n' c += 1 print # and out becuase don't 'press key' for empty outputs if opt.key and out: raw_input('[press key]') if opt.www_browser: html_text = '<pre>' html_text += html_hits.replace('\n', '</br>') html_text += '<pre>' fn = HTML_FN f = open(fn, 'w') f.write(html_text) f.close() cmd = HTML_CMD + ' ' + fn print cmd system(cmd) paths_text_file.write(mmterminalpathtext) paths_text_file_to_open.write(mmterminalpathtext_to_open) paths_text_file.close()