67 lines
2.1 KiB
Racket
67 lines
2.1 KiB
Racket
#lang racket/gui
|
|
(require drracket/tool
|
|
racket/unit
|
|
racket/class
|
|
"discord-ipc.rkt")
|
|
|
|
(provide tool@)
|
|
|
|
(define CLIENT-ID "1456391630356746343")
|
|
|
|
(define tool@
|
|
(unit
|
|
(import drracket:tool^)
|
|
(export drracket:tool-exports^)
|
|
(define phase1 void)
|
|
(define phase2 void)
|
|
|
|
(connect-discord CLIENT-ID)
|
|
|
|
(define start-time (current-seconds))
|
|
(define (update-status tab [override-running #f])
|
|
(define defs (send tab get-defs))
|
|
(define filename
|
|
(let ([path (send defs get-filename)])
|
|
(if path (path->string (file-name-from-path path)) "Untitled")))
|
|
(define line-count (add1 (send defs last-paragraph)))
|
|
(define is-running? (or override-running (send tab is-running?)))
|
|
(define details (if is-running?
|
|
(format "Running ~a" filename)
|
|
(format "Editing ~a" filename)))
|
|
(define state (format "~a lines" line-count))
|
|
(update-presence details state
|
|
#:start start-time
|
|
#:small-text (if is-running? "Running" "Editing")))
|
|
|
|
(drracket:get/extend:extend-tab
|
|
(mixin (drracket:unit:tab<%>) ()
|
|
(super-new)
|
|
(define/override (disable-evaluation)
|
|
(super disable-evaluation)
|
|
(update-status this #t))
|
|
|
|
(define/override (enable-evaluation)
|
|
(super enable-evaluation)
|
|
(update-status this #f))))
|
|
|
|
(drracket:get/extend:extend-definitions-text
|
|
(mixin (drracket:unit:definitions-text<%> editor<%>) ()
|
|
(super-new)
|
|
(define/augment (after-save-file success?)
|
|
(inner (void) after-save-file success?)
|
|
(when success?
|
|
(update-status (send this get-tab))))))
|
|
|
|
(drracket:get/extend:extend-unit-frame
|
|
(mixin (drracket:unit:frame<%>) ()
|
|
(super-new)
|
|
(define/augment (on-tab-change old-tab new-tab)
|
|
(inner (void) on-tab-change old-tab new-tab)
|
|
(update-status new-tab))
|
|
|
|
(define/override (on-activate active?)
|
|
(super on-activate active?)
|
|
(when active?
|
|
(update-status (send this get-current-tab))))))))
|
|
|