-
Notifications
You must be signed in to change notification settings - Fork 1
/
util-gui.rkt
106 lines (93 loc) · 4.3 KB
/
util-gui.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
;; The MIT License (MIT)
;;
;; Copyright (c) 2013 Matthew C. Jadud
;;
;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:
;;
;; The above copyright notice and this permission notice shall be included in
;; all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
;; THE SOFTWARE.
#lang racket
(provide (all-defined-out))
(require racket/gui
racket/serialize
browser/external)
(require "util.rkt"
"debug.rkt"
"version.rkt")
(define (fetch-version hardware)
(define raw (read-url (format "http://~a:~a/version"
(send hardware get-host)
(send hardware get-port)
)))
(define decoded (b64-decode raw))
(deserialize (read (open-input-bytes decoded))))
(define (check-version hardware f)
(let* ([remote-version (fetch-version hardware)])
(debug 'CHECK-VERSION "[~a] LOCAL [~a] REMOTE"
VERSION
remote-version)
(define block? true)
(define get? false)
(when (> (string->number (~a remote-version))
(string->number (~a VERSION)))
(define changelog (safe-url-fetch port->string
(format "http://~a:~a/ide/changelogs/~a-changelog.txt"
(send hardware get-host)
(send hardware get-port)
remote-version)
#:default "Important stuff. Get it!"))
(debug 'CHECK-VERSION "Newer version exists!")
(define vf (new dialog%
[label "New Version!"]
[parent f]
))
(new message%
[label (format "You're running version ~a of Plumb." VERSION)]
[parent vf])
(new message%
[label (format "We recommend version ~a instead." remote-version)]
[parent vf])
(define ed (new editor-canvas%
[parent vf]
))
(define t (new text% [auto-wrap true]))
(send ed set-editor t)
(send ed set-line-count 8)
(send t insert changelog
(send t get-end-position))
(define h (new horizontal-panel%
[parent vf]
[stretchable-width true]))
(define b (new button%
[label "Later..."]
[parent h]
[stretchable-width true]
[callback (λ (b e)
(set! block? false)
(send vf show false))]))
(define b2 (new button%
[label "Take me there!"]
[parent h]
[stretchable-width true]
[callback (λ (b e)
(set! get? true)
(set! block? false)
(send vf show false)
)]))
(send vf show true)
(let loop () (when block? (yield) (loop)))
(when get? (send-url "http://concurrency.cc/downloads/"))
)))