def __create_shell_item_array(items: List[str]): # -> shell.PyIShellItemArray: pidls = [] for it in items: it = it.replace('/', '\\') pidl = shell.SHParseDisplayName(it, 0, None) pidls.append(pidl[0]) return shell.SHCreateShellItemArrayFromIDLists(pidls)
def open(self): i = len(self.__fl) - 1 r = "" while i >= 0: fn = self.__fl[i] if exists(fn) and isfile(fn): r = fn break i = i - 1 if r != "": if system() == "Windows": pa = split(r)[0] if self.__logg is not None: self.__logg.write(f"Try open '{r}'.", currentframe(), "Auto Open File List Open") c = shell.SHParseDisplayName(pa, 0) d = shell.SHParseDisplayName(r, 0) shell.SHOpenFolderAndSelectItems(c[0], [d[0]], 0)
def loginwithqrcode(r: requests.Session, logg=None): print(lan['WARN1']) prepareSession(r) year = 365 * 24 * 3600 while True: url = "https://passport.bilibili.com/qrcode/getLoginUrl" if logg: logg.write(f"GET {url}", currentframe(), "getloginurl") re = r.get(url) re = re.json() if re['code'] != 0: print(f"{re['code']}") if logg: logg.write(f"content: {re}", currentframe(), "unknownerror") return -1 ts = re['ts'] oauthKey = re['data']['oauthKey'] oauthUrl = re['data']['url'] if not exists('Temp/'): mkdir('Temp/') qr = QRCode(version=1, error_correction=qrconst.ERROR_CORRECT_H, box_size=10) qr.add_data(oauthUrl) pn = f'Temp/{ts}.svg' qr.make_image(SvgImage).save(pn) print(lan['OUTPUT3'].replace("<path>", pn)) # 二维码已保存至 if system() == "Windows": from win32com.shell import shell # pylint: disable=import-error no-name-in-module d = shell.SHParseDisplayName(abspath(pn), 0) shell.SHOpenFolderAndSelectItems(d[0], [], 0) suc = False while not suc: re = r.post("https://passport.bilibili.com/qrcode/getLoginInfo", data={ "oauthKey": oauthKey, "gourl": "" }) re = re.json() if re['status']: url = re['data']['url'] for (key, value) in parse_qsl(urlsplit(url).query): if key != "gourl" and key != "Expires": r.cookies.set(key, value, path="/", domain=".bilibili.com", expires=round(time.time() + year), discard=False) suc = True if exists(pn): try: remove(pn) except: pass break else: if re['data'] == -4: time.sleep(3) if time.time() > ts + 300: if exists(pn): try: remove(pn) except: pass input(lan['OUTPUT4']) break elif re['data'] == -2: if exists(pn): try: remove(pn) except: pass input(lan['OUTPUT4']) break else: if exists(pn): try: remove(pn) except: pass print(f"{re['data']} {re['message']}") return -1 if suc: sa = [] for domain in r.cookies._cookies.keys(): for path in r.cookies._cookies[domain].keys(): for cookiename in r.cookies._cookies[domain][path]: cookie = r.cookies._cookies[domain][path][cookiename] if not cookie.discard: sa.append({ "name": cookie.name, "value": cookie.value, 'domain': cookie.domain, 'path': cookie.path }) return sa