Fix crash when profile doesn't exist
This commit is contained in:
parent
d6b8b386fa
commit
06a54a5c32
3 changed files with 16 additions and 12 deletions
|
@ -539,7 +539,7 @@ nav {
|
|||
box-sizing: border-box;
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding: 0 2px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,9 @@ proc getProfileFallback(username: string; headers: HttpHeaders): Future[Profile]
|
|||
url = base / profileIntentUrl ? {"screen_name": username}
|
||||
html = await fetchHtml(url, headers)
|
||||
|
||||
if html.isNil:
|
||||
return Profile()
|
||||
|
||||
result = parseIntentProfile(html)
|
||||
|
||||
proc getProfile*(username: string): Future[Profile] {.async.} =
|
||||
|
@ -139,6 +142,9 @@ proc getProfile*(username: string): Future[Profile] {.async.} =
|
|||
url = base / profilePopupUrl ? params
|
||||
html = await fetchHtml(url, headers, jsonKey="html")
|
||||
|
||||
if html.isNil:
|
||||
return Profile()
|
||||
|
||||
if not html.querySelector(".ProfileCard-sensitiveWarningContainer").isNil:
|
||||
return await getProfileFallback(username, headers)
|
||||
|
||||
|
|
|
@ -16,15 +16,13 @@ proc getCachedProfile*(username: string; force=false): Future[Profile] {.async.}
|
|||
withDb:
|
||||
try:
|
||||
result.getOne("username = ?", username)
|
||||
doAssert(not result.outdated())
|
||||
except:
|
||||
if result.id == 0:
|
||||
result = await getProfile(username)
|
||||
result.insert()
|
||||
elif result.outdated():
|
||||
let
|
||||
profile = await getProfile(username)
|
||||
oldId = result.id
|
||||
doAssert not result.outdated()
|
||||
except AssertionError:
|
||||
var profile = await getProfile(username)
|
||||
profile.id = result.id
|
||||
result = profile
|
||||
result.id = oldId
|
||||
result.update()
|
||||
except KeyError:
|
||||
result = await getProfile(username)
|
||||
if result.username.len > 0:
|
||||
result.insert()
|
||||
|
|
Loading…
Reference in a new issue