aboutsummaryrefslogtreecommitdiff
path: root/src/vgstash_cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/vgstash_cli.py')
-rwxr-xr-xsrc/vgstash_cli.py72
1 files changed, 50 insertions, 22 deletions
diff --git a/src/vgstash_cli.py b/src/vgstash_cli.py
index 046443d..ca53576 100755
--- a/src/vgstash_cli.py
+++ b/src/vgstash_cli.py
@@ -126,6 +126,9 @@ def add(title, system, ownership, progress, notes, p_date, b_date, c_date):
def list_games(filter, raw):
db = get_db()
row_data = db.list_games(filter)
+ if len(row_data) == 0:
+ click.echo("No games matching this filter in your collection.")
+ return
if raw:
for r in row_data:
@@ -160,24 +163,36 @@ def list_games(filter, raw):
for r in row_cache:
for i in range(len(columns)):
+ # possible values for r[i]:
+ # title -> str
+ # system -> str
+ # ownership -> int
+ # progress -> int
+ # *_date -> int
# process fields that need massaging for display
- if r[i]:
- if columns[i] == ("p_date"):
- r[i] = vgstash.unix_to_iso(r[i])
- if columns[i] == ("b_date"):
- r[i] = vgstash.unix_to_iso(r[i])
- if columns[i] == ("c_date"):
- r[i] = vgstash.unix_to_iso(r[i])
- if columns[i] == "notes" and len(r[i]) > 0:
- r[i] = "*"
- if columns[i] == "progress":
- r[i] = vgstash.vtok(r[i], vgstash.PROGRESS)[0].capitalize()
- if columns[i] == "ownership":
- r[i] = vgstash.vtok(r[i], vgstash.OWNERSHIP)[0].capitalize()
if r[i] == None:
r[i] = ""
- if isinstance(r[i], int):
- r[i] = str(r[i])
+ else:
+ if columns[i] == "progress":
+ if r[i] == 0:
+ r[i] = ''
+ else:
+ r[i] = vgstash.vtok(r[i], vgstash.PROGRESS)[0].capitalize()
+ if columns[i] == "ownership":
+ if r[i] == 0:
+ r[i] = ''
+ else:
+ r[i] = vgstash.vtok(r[i], vgstash.OWNERSHIP)[0].capitalize()
+ if columns[i] == ("p_date") and r[i] != "":
+ r[i] = vgstash.unix_to_iso(int(r[i]))
+ if columns[i] == ("b_date") and r[i] != "":
+ r[i] = vgstash.unix_to_iso(int(r[i]))
+ if columns[i] == ("c_date") and r[i] != "":
+ r[i] = vgstash.unix_to_iso(int(r[i]))
+ if columns[i] == "notes" and len(r[i]) > 0:
+ r[i] = "*"
+ # if isinstance(r[i], int):
+ # r[i] = str(r[i])
# Store width in relevant list
w = len(str(r[i]))
if w > widths[i]:
@@ -203,7 +218,10 @@ def list_games(filter, raw):
l = []
for i in range(len(columns)):
# TODO: set different fstring based on column name
- l.append(left_fst.format(r[i], w=widths[i]))
+ if columns[i] == 'years' or columns[i] == 'days':
+ l.append(right_fst.format(str(r[i]), w=widths[i]))
+ else:
+ l.append(left_fst.format(r[i], w=widths[i]))
click.echo(" | ".join(l))
@cli.command('delete')
@@ -221,9 +239,16 @@ def delete_game(title, system):
@cli.command('update')
@click.argument('title', required=True)
@click.argument('system', required=True)
-@click.argument('attr', type=click.Choice(['title', 'system', 'ownership', 'progress']), required=True)
+@click.argument('attr', type=click.Choice(['title', 'system', 'ownership', 'progress', 'p_date', 'b_date', 'c_date']), required=True)
@click.argument('val', required=True)
def update_game(title, system, attr, val):
+ """
+ Update a specific game's attribute in the database.
+
+ Use the title and system parameters to target the game to update.
+ Ownership and progress can be their letter or numeric values.
+ p_date, b_date, and c_date MUST be ISO8601 dates, i.e. 2025-07-27
+ """
# TODO: Consider namedtuple as a solution
db = get_db()
try:
@@ -236,11 +261,14 @@ def update_game(title, system, attr, val):
if attr == 'progress':
val = vgstash.vtok(val, vgstash.PROGRESS)
updated_game = vgstash.Game(
- val if attr == 'title' else target_game.title,
- val if attr == 'system' else target_game.system,
- val if attr == 'ownership' else target_game.ownership,
- val if attr == 'progress' else target_game.progress,
- target_game.notes
+ title = val if attr == 'title' else target_game.title,
+ system = val if attr == 'system' else target_game.system,
+ ownership = val if attr == 'ownership' else target_game.ownership,
+ progress = val if attr == 'progress' else target_game.progress,
+ notes = target_game.notes,
+ p_date = vgstash.iso_to_unix(val) if attr == 'p_date' else target_game.p_date,
+ b_date = vgstash.iso_to_unix(val) if attr == 'b_date' else target_game.b_date,
+ c_date = vgstash.iso_to_unix(val) if attr == 'c_date' else target_game.c_date
)
if db.update_game(target_game, updated_game):
click.echo("Updated {} for {}. Its {} is now {}.".format(title, system, attr, val))