emacs/vimgolf.el in vimgolf-0.4.5 vs emacs/vimgolf.el in vimgolf-0.4.6
- old
+ new
@@ -2,11 +2,11 @@
;; Copyright (C) never, by no one
;;; Author: Tim Visher <tim.visher@gmail.com>
;;; Maintainer: Tim Visher <tim.visher@gmail.com>
;;; Created: 2011-11-02
-;;; Version: 0.9.3
+;;; Version: 0.10.0
;;; Keywords: games vimgolf vim
;; This file is not part of GNU Emacs
;;; Commentary:
@@ -43,13 +43,16 @@
;;; Contributors
;; Tim Visher (@timvisher)
;; Steve Purcell (@sanityinc)
;; Adam Collard (@acollard)
+;; Siddhanathan Shanmugam (@siddhanathan)
;;; Code:
+(require 'json)
+
(defgroup vimgolf nil
"Compete on VimGolf with the One True Editor."
:prefix "vimgolf-"
:group 'applications)
@@ -266,11 +269,11 @@
;; Overall VimGolf Rank ID: 4d2fb20e63b08b08b0000075
;; Sort entries based on date ID: 4ea9bc988b36f70001000008
;; HTML to Haml ID: 4d3c51f1aabf526ed6000030
;; Assignment Allignment: 4d2c9d06eda6262e4e00007a
-(defvar vimgolf-challenge-extension ".yaml")
+(defvar vimgolf-challenge-extension ".json")
(defun vimgolf-challenge-path (challenge-id)
(concat "challenges/" challenge-id))
(defun vimgolf-challenge-url (challenge-id)
@@ -290,29 +293,30 @@
vimgolf-end-buffer-name
vimgolf-keystrokes-buffer-name))
(when (get-buffer buf)
(kill-buffer buf))))
-(defun vimgolf-read-next-data-chunk ()
- "Return the next chunk of data as a string, leaving the point at the end of that chunk."
- (let ((data-start-regexp " data: |\\+\\{0,1\\}\n")
- (data-end-regexp "\\([ ]\\{4\\}\\|[ ]\\{0\\}\\)\n type: [-a-z]+"))
- (unless (re-search-forward data-start-regexp nil t)
- (error "Can't find data in response from vimgolf"))
- (let ((start (point)))
- (unless (re-search-forward data-end-regexp nil t)
- (error "Unclosed data section in response from vimgolf"))
- (let ((str (buffer-substring-no-properties start (match-beginning 0))))
- (replace-regexp-in-string "^ " "" str)))))
+(defun vimgolf-get-text (var response)
+ (format "%s" (assoc-default 'data (assq var response))))
+(defun vimgolf-retrieve-challenge (challenge-id)
+ (interactive)
+ (with-current-buffer
+ (url-retrieve-synchronously (vimgolf-challenge-url challenge-id))
+ (goto-char url-http-end-of-headers)
+ (json-read)))
+
(defun vimgolf-setup (status challenge-id)
+ (let ((url-mime-encoding-string "identity"))
+ (setq vimgolf-response (vimgolf-retrieve-challenge challenge-id)))
+
(vimgolf-clear-keystrokes)
(setq vimgolf-prior-window-configuration (current-window-configuration)
vimgolf-challenge challenge-id)
(goto-char (point-min))
- (let* ((start-text (vimgolf-read-next-data-chunk))
- (end-text (vimgolf-read-next-data-chunk)))
+ (let* ((start-text (vimgolf-get-text 'in vimgolf-response))
+ (end-text (vimgolf-get-text 'out vimgolf-response)))
(vimgolf-kill-existing-session)
(let ((vimgolf-start-buffer (get-buffer-create vimgolf-start-buffer-name))
(vimgolf-work-buffer (get-buffer-create vimgolf-work-buffer-name))
(vimgolf-end-buffer (get-buffer-create vimgolf-end-buffer-name)))