Files
drracket-discord/tool.rkt
2026-01-17 19:16:55 +01:00

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