made search case-insensitive; renamed command search to show
This commit is contained in:
parent
6a00869ffd
commit
47f9fdb0bb
16
README.md
16
README.md
|
@ -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
12
func.py
|
@ -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"
|
||||||
|
|
54
main.py
54
main.py
|
@ -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,15 +205,13 @@ 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__":
|
||||||
|
|
Loading…
Reference in a new issue