fix: template loading - use index-based row access to avoid unpack error

- Changed from dict-style access (proj['type']) to index access (proj[0])
- Added try/except around each row processing to skip bad rows
- Added detailed error logging with traceback
- Handle cases where row has fewer columns than expected
This commit is contained in:
LemonNexus 2026-02-11 12:58:21 +00:00
parent 91a8da3910
commit 5a76c64b2f
1 changed files with 59 additions and 33 deletions

View File

@ -1136,41 +1136,67 @@ class MainWindow(QMainWindow):
) )
for proj in projects: for proj in projects:
# sqlite3.Row doesn't have .get() method try:
proj_type = proj['type'] if 'type' in proj.keys() else 'hunt' # Access row data by index to avoid key issues
activity = ActivityType.from_string(proj_type) proj_id = proj[0] if len(proj) > 0 else 0
# Get session count proj_name = proj[1] if len(proj) > 1 else "Unnamed"
count_result = self.db.fetchone( proj_type = proj[2] if len(proj) > 2 else 'hunt'
"SELECT COUNT(*) as count FROM sessions WHERE project_id = ?", proj_created = proj[3] if len(proj) > 3 else None
(proj['id'],) proj_desc = proj[4] if len(proj) > 4 else ''
)
session_count = count_result['count'] if count_result else 0 activity = ActivityType.from_string(proj_type)
# Get last session # Get session count
last_result = self.db.fetchone( session_count = 0
"SELECT MAX(started_at) as last FROM sessions WHERE project_id = ?", try:
(proj['id'],) count_result = self.db.fetchone(
) "SELECT COUNT(*) as count FROM sessions WHERE project_id = ?",
last_session = None (proj_id,)
if last_result and last_result['last']: )
last_session = datetime.fromisoformat(last_result['last']) if count_result and len(count_result) > 0:
session_count = count_result[0]
# Handle description which might not exist in old databases except:
description = proj['description'] if 'description' in proj.keys() else '' pass
created_at = proj['created_at'] if 'created_at' in proj.keys() else None
# Get last session
template = SessionTemplate( last_session = None
id=proj['id'], try:
name=proj['name'], last_result = self.db.fetchone(
activity_type=activity, "SELECT MAX(started_at) as last FROM sessions WHERE project_id = ?",
description=description, (proj_id,)
created_at=datetime.fromisoformat(created_at) if created_at else None, )
session_count=session_count, if last_result and len(last_result) > 0 and last_result[0]:
last_session=last_session last_session = datetime.fromisoformat(last_result[0])
) except:
templates.append(template) pass
# Parse created_at
created_at = None
if proj_created:
try:
created_at = datetime.fromisoformat(proj_created)
except:
pass
template = SessionTemplate(
id=proj_id,
name=proj_name,
activity_type=activity,
description=proj_desc,
created_at=created_at,
session_count=session_count,
last_session=last_session
)
templates.append(template)
except Exception as row_error:
self.log_warning("Templates", f"Skipping malformed template row: {row_error}")
continue
except Exception as e: except Exception as e:
self.log_error("Templates", f"Failed to load templates: {e}") self.log_error("Templates", f"Failed to load templates: {e}")
import traceback
logger.error(traceback.format_exc())
return templates return templates