From 95b11fb56b2b9e225a742a52d46ec970b446cccb Mon Sep 17 00:00:00 2001 From: newtonick Date: Mon, 12 Jul 2021 10:55:58 -0400 Subject: [PATCH] fix qr scan and generate for non animated qr (single qr) for specter and sparrow --- src/seedsigner/models/sparrow_wallet.py | 4 +++- src/seedsigner/models/specter_desktop_wallet.py | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/seedsigner/models/sparrow_wallet.py b/src/seedsigner/models/sparrow_wallet.py index 12f8caa9..8f678cc8 100644 --- a/src/seedsigner/models/sparrow_wallet.py +++ b/src/seedsigner/models/sparrow_wallet.py @@ -127,7 +127,9 @@ class SparrowWallet(Wallet): def total_frames_parse(data) -> int: if re.search("^UR\:CRYPTO-PSBT\/(\d+)\-(\d+)\/", data, re.IGNORECASE) != None: - return 10 #valid + return 10 # valid + elif re.search("^UR\:CRYPTO-PSBT", data, re.IGNORECASE) != None: + return 1 # valid but only 1 segment else: return -1 #invalid diff --git a/src/seedsigner/models/specter_desktop_wallet.py b/src/seedsigner/models/specter_desktop_wallet.py index a6cbe58b..f0ec19ec 100644 --- a/src/seedsigner/models/specter_desktop_wallet.py +++ b/src/seedsigner/models/specter_desktop_wallet.py @@ -54,14 +54,18 @@ class SpecterDesktopWallet(Wallet): def total_frames_parse(data) -> int: if re.search("^p(\d+)of(\d+) ", data, re.IGNORECASE) != None: return int(re.search("^p(\d+)of(\d+) ", data, re.IGNORECASE).group(2)) + elif re.search("UR\:.*", data, re.IGNORECASE) != None: + return -1 # if data has UR:, assume invalid wallet selected else: - return -1 + return 1 def current_frame_parse(data) -> int: if re.search("^p(\d+)of(\d+) ", data, re.IGNORECASE) != None: return int(re.search("^p(\d+)of(\d+) ", data, re.IGNORECASE).group(1)) + elif re.search("UR\:.*", data, re.IGNORECASE) != None: + return -1 # if data has UR:, assume invalid wallet selected else: - return -1 + return 1 # assume a single frame for specter if no p#of# is found. def data_parse(data) -> str: return data.split(" ")[-1].strip() @@ -96,7 +100,12 @@ class SpecterDesktopWallet(Wallet): stop = self.qrsize qr_cnt = ((len(data)-1) // self.qrsize) + 1 - while cnt < qr_cnt: + if qr_cnt == 1: + part = data[start:stop] + images.append(qr.qrimage(part)) + print(part) + + while cnt < qr_cnt and qr_cnt != 1: part = "p" + str(cnt+1) + "of" + str(qr_cnt) + " " + data[start:stop] images.append(qr.qrimage(part)) print(part)