From 1cb9ff63e73b7a82f06d12bb8c67b46c51461c54 Mon Sep 17 00:00:00 2001 From: omicron Date: Thu, 2 Oct 2025 13:36:27 +0200 Subject: [PATCH] Fix showing/counting items that are socketed into other items --- d2warehouse/app/main.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/d2warehouse/app/main.py b/d2warehouse/app/main.py index 26b3ea1..f9739e8 100644 --- a/d2warehouse/app/main.py +++ b/d2warehouse/app/main.py @@ -92,22 +92,26 @@ def storage_count(item: Item, stash: str) -> int | str: db = get_stash_db(stash) if item.is_simple: return db.execute( - "SELECT COUNT(id) FROM item WHERE code = ? AND deleted IS NULL", + "SELECT COUNT(id) FROM item " + "WHERE code = ? AND deleted IS NULL AND socketed_into IS NULL", (item.code,), ).fetchone()[0] elif item.quality == Quality.UNIQUE: return db.execute( - "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id WHERE code = ? AND unique_id = ? AND deleted IS NULL", + "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id " + "WHERE code = ? AND unique_id = ? AND deleted IS NULL AND socketed_into IS NULL", (item.code, item.unique_id), ).fetchone()[0] elif item.quality == Quality.SET: return db.execute( - "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id WHERE code = ? AND set_id = ? AND deleted IS NULL", + "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id " + "WHERE code = ? AND set_id = ? AND deleted IS NULL AND socketed_into IS NULL", (item.code, item.set_id), ).fetchone()[0] elif item.is_runeword: return db.execute( - "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id WHERE code = ? AND runeword_id = ? AND deleted IS NULL", + "SELECT COUNT(id) FROM item INNER JOIN item_extra ON id = item_id " + "WHERE code = ? AND runeword_id = ? AND deleted IS NULL and socketed_into IS NULL", (item.code, item.runeword_id), ).fetchone()[0] else: @@ -217,7 +221,9 @@ def list_storage(stash_name: str): db = get_stash_db(stash_name) items = {} - rows = db.execute("SELECT id FROM item WHERE deleted IS NULL").fetchall() + rows = db.execute( + "SELECT id FROM item WHERE deleted IS NULL and socketed_into IS NULL" + ).fetchall() for row in rows: items[row["id"]] = Item.load_from_db(row["id"], db=db) @@ -238,16 +244,21 @@ def list_storage_category(stash_name: str, category: str): if category == "uniques": q = db.execute( - "SELECT id FROM item INNER JOIN item_extra ON id = item_id WHERE deleted IS NULL AND quality = ?", + "SELECT id FROM item INNER JOIN item_extra ON id = item_id " + "WHERE deleted IS NULL AND socketed_into IS NULL AND quality = ?", (int(Quality.UNIQUE),), ) elif category == "sets": q = db.execute( - "SELECT id FROM item INNER JOIN item_extra ON id = item_id WHERE deleted IS NULL AND quality = ?", + "SELECT id FROM item INNER JOIN item_extra ON id = item_id " + "WHERE deleted IS NULL AND socketed_into IS NULL AND quality = ?", (int(Quality.SET),), ) elif category == "misc": - q = db.execute("SELECT id FROM item WHERE deleted IS NULL AND is_simple = TRUE") + q = db.execute( + "SELECT id FROM item " + "WHERE deleted IS NULL AND socketed_into IS NULL AND is_simple = TRUE" + ) else: return "Unexpected category", 400 @@ -325,7 +336,9 @@ def storage_currency_counts(item_codes: list[str], stash_name: str) -> dict: for code in item_codes: currencies[code] = { "count": db.execute( - "SELECT COUNT(id) FROM item WHERE code = ? AND deleted IS NULL", (code,) + "SELECT COUNT(id) FROM item " + "WHERE code = ? AND deleted IS NULL AND socketed_into IS NULL", + (code,), ).fetchone()[0], "name": lookup_basetype(code)["name"], }