made search case-insensitive; renamed command search to show

This commit is contained in:
Michael Rodin 2022-11-17 10:40:38 +01:00
parent 6a00869ffd
commit 47f9fdb0bb
3 changed files with 59 additions and 29 deletions

View file

@ -1,6 +1,14 @@
# image-index # image-index
This project is a collection of scripts which can index and sort files on your pc. You can give every file a title, category, source, tags and content for easier finding later on. This project is a collection of scripts which can index and sort files on your pc. You can give every file a title, category, source, tags and content for easier finding later on.
## Functions
* add - Add a file and entry to the index
* check - check if all files saved in the index exist and aren't faulty
* delete - delete a file and remove the entry
* open - open one or more files from the index in the default application (only Linux and Windows)
* show - search through the index and show the matches
* update - change a value of an entry in the index or move a file to another category
## Installation ## Installation
```sh ```sh
git clone https://gitlab.com/rodin_schule/image-index-py.git git clone https://gitlab.com/rodin_schule/image-index-py.git
@ -8,14 +16,6 @@ cd ./image-index-py
cp config-def.py config.py cp config-def.py config.py
``` ```
## Functions
* add - Add a file and entry to the index
* check - check if all files saved in the index exist and aren't faulty
* delete - delete a file and remove the entry
* open - open one or more files from the index in the default application (only Linux and Windows)
* search - search through the index
* update - change a value of an entry in the index or move a file to another category
## Configuration ## Configuration
The file `config.py` holds some very important variables which you need to look at before using the index: The file `config.py` holds some very important variables which you need to look at before using the index:
* ROOT_DIR: The absolute path of where you want to save your files (the directories for the categories will be created there) * ROOT_DIR: The absolute path of where you want to save your files (the directories for the categories will be created there)

12
func.py
View file

@ -37,7 +37,9 @@ class database():
); """ ); """
self.crsr.execute(sqlcommand) self.crsr.execute(sqlcommand)
'''sqlcommand = """CREATE TABLE META( '''sqlcommand = """CREATE TABLE META(
TAGS TEXT PRIMARY KEY NOT NULL CATEGORY TEXT PRIMARY KEY NOT NULL,
ALIAS TEXT,
DESC TEXT
); """ ); """
self.crsr.execute(sqlcommand)''' self.crsr.execute(sqlcommand)'''
@ -100,9 +102,10 @@ class database():
class metatable(database): class metatable(database):
def __init__(self,filepath = CONFIG_DIR + "/index.db"): def __init__(self,filepath = CONFIG_DIR + "/index.db"):
self.name="META" self.name="META"
self.collist=["TAGS"] self.collist=["CATEGORY","ALIAS","DESCRIPTION"]
super().__init__(filepath) super().__init__(filepath)
def add_index(self):
def add_index(self,alias,dirname,desc=""):
super().add_index(vallist) super().add_index(vallist)
class filestable(database): class filestable(database):
@ -181,7 +184,7 @@ class filestable(database):
success=0 success=0
for j in firstlist: for j in firstlist:
#print(j) #print(j)
if j in str(i): if j in str(i).lower():
#print("Yay") #print("Yay")
if not success == -1: if not success == -1:
success=1 success=1
@ -242,6 +245,7 @@ class filestable(database):
title=[] title=[]
tags=[] tags=[]
for arg in args: for arg in args:
arg=arg.lower()
if re.match('^[-]\w{1}$', arg): if re.match('^[-]\w{1}$', arg):
if arg == "-h": if arg == "-h":
snext="hash" snext="hash"

60
main.py
View file

@ -16,24 +16,46 @@ def add():
args.append(eingabe) args.append(eingabe)
tb.add_index(args[0],args[1],args[2],args[3],args[4],args[5]) tb.add_index(args[0],args[1],args[2],args[3],args[4],args[5])
def check(args): # TODO: Option to see all faulty/missing files. def check(args):
success=0 success=0
if not args: hash_list,temp_list=tb.check_index()
hash_list,path_list=tb.check_index() path_list=[]
hashcheck=pathcheck=True
verbose=False
for arg in args:
if arg == "-v":
verbose=True
elif arg == "-f":
hashcheck=False
elif arg == "-h":
pathcheck=False
if hash_list: if hash_list:
print("{} file{} faulty!".format(len(hash_list),"s are" if len(hash_list) > 1 else " is")) print("{} file{} faulty!".format(len(hash_list),"s are" if len(hash_list) > 1 else " is"))
success=-1 success=-1
if verbose:
for tup in hash_list:
print("Title: ",tup[2])
print("\tCategory:",tup[4])
print("\tFilename:",tup[0])
for i in temp_list:
if not i in path_list:
path_list.append(i)
if path_list: if path_list:
print("{} file{} missing!".format(int(len(path_list)/2),"s are" if int(len(path_list)/2) > 1 else " is")) print("{} file{} missing!".format(len(path_list),"s are" if len(path_list) > 1 else " is"))
success=-1 success=-1
if verbose:
for tup in path_list:
print("Title: ",tup[2])
print("\tCategory:",tup[4])
print("\tFilename:",tup[0])
if success >= 0: if success >= 0:
print("Everything is good!") print("Everything is good!")
if hash_list: if hash_list and hashcheck:
eingabe=input("Do you want to remove the faulty files? [y/N]: ") eingabe=input("Do you want to remove the faulty files? [y/N]: ")
if re.match('[yY]',eingabe): if re.match('[yY]',eingabe):
print("Removing faulty files...") print("Removing faulty files...")
repair(hash_list) repair(hash_list)
if path_list: if path_list and pathcheck:
eingabe=input("Do you want to remove the orphaned entries? [Y/n]: ") eingabe=input("Do you want to remove the orphaned entries? [Y/n]: ")
if not re.match('[nN]',eingabe): if not re.match('[nN]',eingabe):
print("Removing orphaned entries...") print("Removing orphaned entries...")
@ -59,13 +81,16 @@ def help():
#print("\tmeta:\tdisplays help for the metadata thing") #print("\tmeta:\tdisplays help for the metadata thing")
print("\tadd:\tadds a new entry;\n\t\tInstant: image-index add <filepath> <category> <title> <source> <tags> <content>") print("\tadd:\tadds a new entry;\n\t\tInstant: image-index add <filepath> <category> <title> <source> <tags> <content>")
print("\t\tPrompt: image-index add") print("\t\tPrompt: image-index add")
print("\tcheck:\tchecks the existence and correctness of all files in the index;\n\t\tSyntax: image-index check") print("\tcheck:\tchecks the existence and correctness of all files in the index;\n\t\tSyntax: image-index check [options]")
print("\t\tOptions: -v: show every faulty/orphaned entry")
print("\t\t\t -f: check only if files exist (disables the other check)")
print("\t\t\t -h: check only if hashes are correct (disables the other check)")
print("\tdelete:\tdeletes a file and entry based on a search query;\n\t\tInstant: image-index delete <words/filters>") print("\tdelete:\tdeletes a file and entry based on a search query;\n\t\tInstant: image-index delete <words/filters>")
print("\t\tPrompt: image-index delete") print("\t\tPrompt: image-index delete")
print("\topen:\topens a file based on a search query in the standard app;\n\t\tInstant: image-index open <words/filters>") print("\topen:\topens a file based on a search query in the standard app;\n\t\tInstant: image-index open <words/filters>")
print("\t\tPrompt: image-index open") print("\t\tPrompt: image-index open")
print("\tsearch:\tsearches through the index (use prompt for list of filters);\n\t\tInstant: image-index search <words/filters>") print("\tshow:\tsearches through the index and shows the matches (use prompt for list of filters);\n\t\tInstant: image-index show <words/filters>")
print("\t\tPrompt: image-index search") print("\t\tPrompt: image-index show")
print("\tupdate:\tchanges specific column based on a search query;\n\t\tInstant: image-index update <column> <updated_value> <words/filters>") print("\tupdate:\tchanges specific column based on a search query;\n\t\tInstant: image-index update <column> <updated_value> <words/filters>")
print("\t\tPrompt: image-index update") print("\t\tPrompt: image-index update")
@ -141,7 +166,11 @@ def search(args,quiet=False):
return ["."] return ["."]
else: else:
tres=tb.search_index(args,quiet) tres=tb.search_index(args,quiet)
if not quiet and tres[0] != ".": return tres
def show(args):
tres=search(args,False)
if not tres[0] == ".":
for res in tres: for res in tres:
print("Title: ",res[2]) print("Title: ",res[2])
print("\tSource:\t ",res[3]) print("\tSource:\t ",res[3])
@ -150,7 +179,6 @@ def search(args,quiet=False):
print("\tHash:\t ",res[1]) print("\tHash:\t ",res[1])
print("\tTags:\t ",res[5]) print("\tTags:\t ",res[5])
print("\tContent: ",res[6]) print("\tContent: ",res[6])
return tres
def main(): def main():
if len(sys.argv) <= 1 or re.match('[hH].*',sys.argv[1]): if len(sys.argv) <= 1 or re.match('[hH].*',sys.argv[1]):
@ -177,19 +205,17 @@ def main():
elif re.match('[oO].*',command): elif re.match('[oO].*',command):
open(args) open(args)
elif re.match('[sS].*',command): elif re.match('[sS].*',command):
search(args) show(args)
elif re.match('[uU].*',command): elif re.match('[uU].*',command):
update(args) update(args)
else: else:
print("No such option!") print("No such option!")
tb.connection.close() tb.connection.close()
mtb.connection.close() mtb.connection.close()
#for i in sys.argv:
# print("Arg:" + i)
#input("Press return...") #input("Press return...")
if __name__ == "__main__": if __name__ == "__main__":
filepath=CONFIG_DIR + '/index.db' filepath=CONFIG_DIR + '/index.db'
tb = filestable() tb = filestable()
mtb = metatable() mtb = metatable()
main() main()