6
6
; ; Keywords: extensions, tools
7
7
; ; URL: https://github.com/kaiwk/leetcode.el
8
8
; ; 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
10
10
11
11
; ; This program is free software; you can redistribute it and/or modify
12
12
; ; it under the terms of the GNU General Public License as published by
@@ -225,23 +225,23 @@ VALUE should be the referer."
225
225
(" content-type" . " " )))
226
226
227
227
(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' ."
230
230
(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 ))
245
245
(leetcode--loading-mode -1 ))
246
246
247
247
(defun leetcode--login-p ()
@@ -358,7 +358,9 @@ Return a object with following attributes:
358
358
(list (cons " titleSlug" slug-title)))))
359
359
(result (aio-await (aio-url-retrieve leetcode--api-graphql))))
360
360
(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))
362
364
(with-current-buffer (cdr result)
363
365
(goto-char url-http-end-of-headers)
364
366
(alist-get 'question (alist-get 'data (json-read )))))))
@@ -444,6 +446,7 @@ Return a list of rows, each row is a vector:
444
446
445
447
(defun leetcode--filter (rows )
446
448
" Filter ROWS by `leetcode--filter-regex' and `leetcode--filter-tag' ."
449
+ (leetcode--debug " filter rows: %s" rows)
447
450
(seq-filter
448
451
(lambda (row )
449
452
(and
@@ -452,7 +455,7 @@ Return a list of rows, each row is a vector:
452
455
(string-match-p leetcode--filter-regex title))
453
456
t )
454
457
(if leetcode--filter-tag
455
- (let ((tags (split-string (aref row 5 ) " , " )))
458
+ (let* ((tags (split-string (aref row 6 ) " , " )))
456
459
(member leetcode--filter-tag tags))
457
460
t )))
458
461
rows))
@@ -501,7 +504,9 @@ Return a list of rows, each row is a vector:
501
504
(result (aio-await (aio-url-retrieve leetcode--api-all-problems))))
502
505
(leetcode--loading-mode -1 )
503
506
(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))
505
510
(with-current-buffer (cdr result)
506
511
(goto-char url-http-end-of-headers)
507
512
(json-read ))))))
@@ -599,7 +604,9 @@ LeetCode require slug-title as the request parameters."
599
604
(typed_code . ,(leetcode--buffer-content code-buf)))))
600
605
(result (aio-await (aio-url-retrieve (format leetcode--api-try slug-title)))))
601
606
(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))
603
610
(let ((data (with-current-buffer (cdr result)
604
611
(goto-char url-http-end-of-headers)
605
612
(json-read )))
@@ -663,6 +670,7 @@ nil."
663
670
(if-let ((error-info (plist-get (car result) :error )))
664
671
(progn
665
672
(leetcode--loading-mode -1 )
673
+ (switch-to-buffer (cdr result))
666
674
(leetcode--warn " LeetCode check submission failed: %S" error-info))
667
675
(with-current-buffer (cdr result)
668
676
(let ((submission-res
@@ -795,6 +803,7 @@ following possible value:
795
803
(if-let ((error-info (plist-get (car result) :error )))
796
804
(progn
797
805
(leetcode--loading-mode -1 )
806
+ (switch-to-buffer (cdr result))
798
807
(leetcode--warn " LeetCode check submit failed: %S" error-info))
799
808
(let* ((resp
800
809
(with-current-buffer (cdr result)
0 commit comments