Skip to content

Commit ed5ec6d

Browse files
committed
fix: #52 cause filter by tags failed
- cleans LeetCode cookies in `url-cookie-file' before login closes #56
1 parent 75447bb commit ed5ec6d

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2020-05-31 Wang Kai <[email protected]>
2+
3+
* leetcode.el: Cleans LeetCode cookies in `url-cookie-file' before
4+
login, because we can't figure out when to expire the session.
5+
16
2020-05-23 Wang Kai <[email protected]>
27

38
* leetcode.el: add option for saving solutions, install my_cookies automatically.

leetcode.el

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
;; Keywords: extensions, tools
77
;; URL: https://github.com/kaiwk/leetcode.el
88
;; Package-Requires: ((emacs "26") (dash "2.16.0") (graphql "0.1.1") (spinner "1.7.3") (aio "1.0") (log4e "0.3.3"))
9-
;; Version: 0.1.14
9+
;; Version: 0.1.15
1010

1111
;; This program is free software; you can redistribute it and/or modify
1212
;; it under the terms of the GNU General Public License as published by
@@ -225,23 +225,23 @@ VALUE should be the referer."
225225
("content-type" . "")))
226226

227227
(defun leetcode--login ()
228-
"Send login request and return a deferred object.
229-
When ACCOUNT or PASSWORD is empty string it will show a prompt."
228+
"Steal LeetCode login session from local browser.
229+
It also cleans LeetCode cookies in `url-cookie-file'."
230230
(leetcode--loading-mode t)
231-
(let ((my-cookies (executable-find "my_cookies")))
232-
(set-process-filter
233-
(start-process "my_cookies" nil "my_cookies")
234-
(lambda (proc string)
235-
(let* ((cookies-list (seq-filter
236-
(lambda (s) (not (string-empty-p s)))
237-
(split-string string "\n")))
238-
(cookies-pairs (seq-map
239-
(lambda (s) (split-string s))
240-
cookies-list))
241-
(leetcode-session (cadr (assoc "LEETCODE_SESSION" cookies-pairs)))
242-
(leetcode-csrftoken (cadr (assoc "csrftoken" cookies-pairs))))
243-
(url-cookie-store "LEETCODE_SESSION" leetcode-session nil leetcode--domain "/" t)
244-
(url-cookie-store "csrftoken" leetcode-csrftoken nil leetcode--domain "/" t)))))
231+
(url-cookie-delete-cookies leetcode--domain)
232+
(let* ((my-cookies (executable-find "my_cookies"))
233+
(my-cookies-output (shell-command-to-string my-cookies))
234+
(cookies-list (seq-filter
235+
(lambda (s) (not (string-empty-p s)))
236+
(split-string my-cookies-output "\n")))
237+
(cookies-pairs (seq-map
238+
(lambda (s) (split-string s))
239+
cookies-list))
240+
(leetcode-session (cadr (assoc "LEETCODE_SESSION" cookies-pairs)))
241+
(leetcode-csrftoken (cadr (assoc "csrftoken" cookies-pairs))))
242+
(leetcode--debug "login: %s" my-cookies-output)
243+
(url-cookie-store "LEETCODE_SESSION" leetcode-session nil leetcode--domain "/" t)
244+
(url-cookie-store "csrftoken" leetcode-csrftoken nil leetcode--domain "/" t))
245245
(leetcode--loading-mode -1))
246246

247247
(defun leetcode--login-p ()
@@ -358,7 +358,9 @@ Return a object with following attributes:
358358
(list (cons "titleSlug" slug-title)))))
359359
(result (aio-await (aio-url-retrieve leetcode--api-graphql))))
360360
(if-let ((error-info (plist-get (car result) :error)))
361-
(leetcode--warn "LeetCode fetch problem ERROR: %S" error-info)
361+
(progn
362+
(switch-to-buffer (cdr result))
363+
(leetcode--warn "LeetCode fetch problem ERROR: %S" error-info))
362364
(with-current-buffer (cdr result)
363365
(goto-char url-http-end-of-headers)
364366
(alist-get 'question (alist-get 'data (json-read)))))))
@@ -444,6 +446,7 @@ Return a list of rows, each row is a vector:
444446

445447
(defun leetcode--filter (rows)
446448
"Filter ROWS by `leetcode--filter-regex' and `leetcode--filter-tag'."
449+
(leetcode--debug "filter rows: %s" rows)
447450
(seq-filter
448451
(lambda (row)
449452
(and
@@ -452,7 +455,7 @@ Return a list of rows, each row is a vector:
452455
(string-match-p leetcode--filter-regex title))
453456
t)
454457
(if leetcode--filter-tag
455-
(let ((tags (split-string (aref row 5) ", ")))
458+
(let* ((tags (split-string (aref row 6) ", ")))
456459
(member leetcode--filter-tag tags))
457460
t)))
458461
rows))
@@ -501,7 +504,9 @@ Return a list of rows, each row is a vector:
501504
(result (aio-await (aio-url-retrieve leetcode--api-all-problems))))
502505
(leetcode--loading-mode -1)
503506
(if-let ((error-info (plist-get (car result) :error)))
504-
(leetcode--warn "LeetCode fetch user and problems failed: %S" error-info)
507+
(progn
508+
(switch-to-buffer (cdr result))
509+
(leetcode--warn "LeetCode fetch user and problems failed: %S" error-info))
505510
(with-current-buffer (cdr result)
506511
(goto-char url-http-end-of-headers)
507512
(json-read))))))
@@ -599,7 +604,9 @@ LeetCode require slug-title as the request parameters."
599604
(typed_code . ,(leetcode--buffer-content code-buf)))))
600605
(result (aio-await (aio-url-retrieve (format leetcode--api-try slug-title)))))
601606
(if-let ((error-info (plist-get (car result) :error)))
602-
(leetcode--warn "LeetCode try failed: %S" error-info)
607+
(progn
608+
(switch-to-buffer (cdr result))
609+
(leetcode--warn "LeetCode try failed: %S" error-info))
603610
(let ((data (with-current-buffer (cdr result)
604611
(goto-char url-http-end-of-headers)
605612
(json-read)))
@@ -663,6 +670,7 @@ nil."
663670
(if-let ((error-info (plist-get (car result) :error)))
664671
(progn
665672
(leetcode--loading-mode -1)
673+
(switch-to-buffer (cdr result))
666674
(leetcode--warn "LeetCode check submission failed: %S" error-info))
667675
(with-current-buffer (cdr result)
668676
(let ((submission-res
@@ -795,6 +803,7 @@ following possible value:
795803
(if-let ((error-info (plist-get (car result) :error)))
796804
(progn
797805
(leetcode--loading-mode -1)
806+
(switch-to-buffer (cdr result))
798807
(leetcode--warn "LeetCode check submit failed: %S" error-info))
799808
(let* ((resp
800809
(with-current-buffer (cdr result)

0 commit comments

Comments
 (0)