From ce5a5f1cbbe8b7845f6c047d86fd0aebce6c00bf Mon Sep 17 00:00:00 2001 From: StyxX65 <150797939+StyxX65@users.noreply.github.com> Date: Sun, 26 Apr 2026 11:04:05 +0200 Subject: [PATCH] Fixed Gmail and Google Drive preview: items were being sent to the Microsoft Graph API instead of handled correctly. --- routes/database.py | 38 +++++++++++++++++++++++++++++++++++--- routes/google_scan.py | 2 ++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/routes/database.py b/routes/database.py index ff53acd..f46aba5 100644 --- a/routes/database.py +++ b/routes/database.py @@ -536,14 +536,13 @@ def get_preview(item_id): except Exception as e: return jsonify({"error": str(e)}) - if not state.connector: - return jsonify({"error": "not authenticated"}), 401 - item_meta = next((x for x in state.flagged_items if x.get("id") == item_id), {}) drive_id = item_meta.get("drive_id", "") try: if source_type == "email": + if not state.connector: + return jsonify({"error": "not authenticated"}), 401 uid = account_id try: msg = state.connector._get( @@ -608,8 +607,41 @@ def get_preview(item_id): """ return jsonify({"type": "html", "html": page}) + elif source_type in ("gmail", "gdrive"): + item_url = item_meta.get("url", "") + name = item_meta.get("name", "") + if source_type == "gdrive" and item_url: + # Extract Drive file ID and use the embeddable /preview URL + import re as _re + m = _re.search(r"/file/d/([^/]+)", item_url) + if m: + fid = m.group(1) + return jsonify({"type": "iframe", "url": f"https://drive.google.com/file/d/{fid}/preview"}) + # Fallback: generic Drive embed + return jsonify({"type": "iframe", "url": item_url.replace("/view", "/preview")}) + # Gmail — not embeddable; show link card + icon = "✉️" if source_type == "gmail" else "☁️" + label = "Open in Gmail" if source_type == "gmail" else "Open in Google Drive" + link_html = ( + f'' + f'{label}' + ) if item_url else "" + html_out = ( + f'
' + f'
{icon}
' + f'
{_html_esc(name)}
' + f'
No inline preview available for this item
' + f'{link_html}' + f'
' + ) + return jsonify({"type": "html", "html": html_out}) + else: # OneDrive / SharePoint / Teams — use Graph's embed preview API + if not state.connector: + return jsonify({"error": "not authenticated"}), 401 preview_url = None errors = [] diff --git a/routes/google_scan.py b/routes/google_scan.py index c48baa6..6399a75 100644 --- a/routes/google_scan.py +++ b/routes/google_scan.py @@ -304,6 +304,7 @@ def _run_google_scan(options: dict): }) try: meta["_account"] = _display_name + meta["_source_type"] = "gmail" result = _scan_bytes(data, meta.get("name", "msg.txt")) except Exception as e: broadcast("scan_error", {"file": meta.get("name", ""), "error": str(e)}) @@ -376,6 +377,7 @@ def _run_google_scan(options: dict): }) try: meta["_account"] = _display_name + meta["_source_type"] = "gdrive" result = _scan_bytes(data, meta.get("name", "file")) except Exception as e: broadcast("scan_error", {"file": meta.get("name", ""), "error": str(e)})