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)))