Migration 6, reformat tabs to tabs-list, and get prepared.

This commit is contained in:
Robert C. Martin 2022-07-16 10:54:55 -05:00
parent 930575f7c9
commit d9561adc56
8 changed files with 139 additions and 63 deletions

View File

@ -7,12 +7,13 @@
(defn change-to-tmp-files []
(reset! config/private-directory "tmp")
(reset! config/migration-filename "tmp/migration")
(reset! config/nicknames-filename "tmp/nicknames") ;grandfathered
(reset! config/nicknames-filename "tmp/nicknames") ;grandfathered
(reset! config/profiles-filename "tmp/profiles")
(reset! config/keys-filename "tmp/keys")
(reset! config/relays-filename "tmp/relays")
(reset! config/read-event-ids-filename "tmp/read-event-ids")
(reset! config/tabs-filename "tmp/tabs")
(reset! config/tabs-list-filename "tmp/tabs-list")
(reset! config/messages-directory "tmp/messages")
(reset! config/messages-filename "tmp/messages/message-file")
(.mkdir (io/file "tmp"))
@ -20,12 +21,13 @@
(defn delete-all-tmp-files []
(delete-file "tmp/migration")
(delete-file "tmp/nicknames") ;grandfathered.
(delete-file "tmp/nicknames") ;grandfathered.
(delete-file "tmp/profiles")
(delete-file "tmp/keys")
(delete-file "tmp/relays")
(delete-file "tmp/read-event-ids")
(delete-file "tmp/tabs")
(delete-file "tmp/tabs-list")
(delete-file "tmp/messages/message-file")
(delete-file "tmp/messages")
)
@ -147,4 +149,29 @@
(spit @config/nicknames-filename {1 "user-1"})
(migration-5-remove-nicknames)
(should-not (file-exists? @config/nicknames-filename))))
(context "migration 6 reformat tabs file into tabs-list file"
(it "reformats the tabs file."
(let [tabs-map {:tab1 {:selected [1] :blocked [2]}
:tab2 {:selected [3 4] :blocked [5 6]}}]
(spit @config/tabs-filename tabs-map))
(should-not (file-exists? @config/tabs-list-filename))
(migration-6-reformat-tabs)
(should (file-exists? @config/tabs-list-filename))
(let [tabs-list (read-string (slurp @config/tabs-list-filename))]
(should (vector? tabs-list))
(should= #{{:name "tab1" :selected [1] :blocked [2]}
{:name "tab2" :selected [3 4] :blocked [5 6]}}
(set tabs-list))))
(it "reformats an empty tabs file"
(spit @config/tabs-filename {})
(migration-6-reformat-tabs)
(should= [] (read-string (slurp @config/tabs-list-filename))))
(it "creates an empty tabs-list if no tabs"
(migration-6-reformat-tabs)
(should= [] (read-string (slurp @config/tabs-list-filename)))
)
)
)

View File

@ -0,0 +1,19 @@
(ns more-speech.ui.swing.tabs-spec
(:require [speclj.core :refer :all]
[more-speech.ui.swing.tabs :refer :all]))
(describe "tabs"
(context "ensure-tab-list-has-all"
(it "adds 'all' to tabs that don't have 'all'"
(let [tab-list [{:name "tab1" :selected [1] :blocked [2]}]]
(should= [{:name "tab1" :selected [1] :blocked [2]}
{:name "all" :selected [] :blocked []}]
(ensure-tab-list-has-all tab-list))))
(it "does not add 'all' if it exists"
(let [tab-list [{:name "all" :selected [1] :blocked [2]}
{:name "tab" :selected [3] :blocked 4}]]
(should= tab-list (ensure-tab-list-has-all tab-list))
))
)
)

View File

@ -8,9 +8,9 @@
(def subscribe-days-ago 10) ;get n days worth of events from the relays.
(def migration-level 5)
(def migration-level 6)
(def test-run? false)
(def test-run? true)
;---configuration files
(def private-directory (atom "private"))
(def migration-filename (atom "private/migration"))
@ -20,6 +20,7 @@
(def relays-filename (atom "private/relays"))
(def read-event-ids-filename (atom "private/read-event-ids"))
(def tabs-filename (atom "private/tabs"))
(def tabs-list-filename (atom "private/tabs-list"))
(def messages-directory (atom "private/messages"))
(def messages-filename (atom "private/messages/message-file"))

View File

@ -9,6 +9,7 @@
[more-speech.ui.swing.main-window :as swing]
[more-speech.nostr.events :as events]
[more-speech.nostr.relays :as relays]
[more-speech.ui.swing.tabs :as tabs]
[more-speech.ui.swing.ui-context :refer :all]
[more-speech.migrator :as migrator])
)
@ -27,11 +28,14 @@
read-event-ids (read-string (slurp @config/read-event-ids-filename))
profiles (read-string (slurp @config/profiles-filename))
tabs (read-string (slurp @config/tabs-filename))
tabs-list (tabs/ensure-tab-list-has-all
(read-string (slurp @config/tabs-list-filename)))
event-context (events/make-event-context {:keys keys
:send-chan send-chan
:profiles profiles
:read-event-ids read-event-ids
:tabs tabs
:tabs-list tabs-list
})
_ (swap! ui-context assoc :event-context event-context)
handler (swing/setup-main-window)

View File

@ -61,7 +61,7 @@
(defn migration-2-fix-names []
(let [nicknames (read-string (slurp @config/nicknames-filename))
fixed-nicknames (apply hash-map (flatten (map (fn [v] (vector(first v) (events/fix-name (second v)))) nicknames)))]
fixed-nicknames (apply hash-map (flatten (map (fn [v] (vector (first v) (events/fix-name (second v)))) nicknames)))]
(spit @config/nicknames-filename fixed-nicknames)
))
@ -69,8 +69,8 @@
(defn migration-3-add-messages-directory []
(when-not (file-exists? @config/messages-directory)
(.mkdir (io/file @config/messages-directory))
(spit @config/messages-filename {}))
(.mkdir (io/file @config/messages-directory))
(spit @config/messages-filename {}))
)
;--- Migration 4 ---
@ -81,9 +81,22 @@
(spit @config/profiles-filename profiles))
)
;--- Migration 5 ---
(defn migration-5-remove-nicknames []
(delete-file @config/nicknames-filename))
;--- Migration 6 ---
(defn migration-6-reformat-tabs []
(if (file-exists? @config/tabs-filename)
(let [tabs-map (read-string (slurp @config/tabs-filename))
tabs-list (reduce (fn [l [k v]] (conj l (assoc v :name (name k)))) [] tabs-map)]
(spit @config/tabs-list-filename
(with-out-str (clojure.pprint/pprint tabs-list))))
(spit @config/tabs-list-filename [])))
;---------- The Migrations List -------
(def migrations (atom {1 initial-migration
@ -91,6 +104,7 @@
3 migration-3-add-messages-directory
4 migration-4-add-profiles-and-load-with-nicknames
5 migration-5-remove-nicknames
6 migration-6-reformat-tabs
}))
;--------------------------------------

View File

@ -5,7 +5,7 @@
[more-speech.ui.swing.article-tree :as article-tree]
[more-speech.ui.swing.article-panel :as article-panel]
[more-speech.ui.swing.relay-panel :as relay-panel]
[more-speech.ui.swing.util :as util]
[more-speech.ui.swing.tabs :as tabs]
[more-speech.ui.swing.ui-context :refer :all])
(:use [seesaw core])
(:import (javax.swing Timer)
@ -24,59 +24,7 @@
(invoke-now (make-main-window))
(->seesawHandler))
(declare timer-action
get-tabs-with-all
tab-menu)
(defn make-tabs []
(let [event-context (:event-context @ui-context)
tabs (get-tabs-with-all event-context)]
(loop [tab-names (keys tabs)
header-tree-tabs []]
(if (empty? tab-names)
header-tree-tabs
(let [tab-name (first tab-names)
header-tree (article-tree/make-header-tree tab-name)
_ (config! header-tree
:user-data (get tabs tab-name)
:id tab-name)
tab-label (label :text (name tab-name)
:user-data tab-name)
_ (listen tab-label :mouse-pressed tab-menu)
tab-data {:title tab-label
:content (scrollable header-tree
:id (keyword (str "tab-" (name tab-name))))}]
(recur (rest tab-names) (conj header-tree-tabs tab-data)))))))
(declare change-tab-name
delete-tab)
(defn tab-menu [e]
(let [tab-label (.getComponent e)
tab-name (config tab-label :user-data)
isAll? (= :all tab-name)
p (popup :items [(action :name "Change name..."
:handler (partial change-tab-name tab-name)
:enabled? (not isAll?))
(action :name "Delete"
:handler (partial delete-tab tab-name)
:enabled? (not isAll?))])]
(if (.isPopupTrigger e)
(.show p (to-widget e) (.x (.getPoint e)) (.y (.getPoint e)))
(util/select-tab tab-name))
))
(defn change-tab-name [tab-name _e]
(prn 'change-tab-name tab-name))
(defn delete-tab [tab-name _e]
(prn 'delete-tab tab-name))
(defn get-tabs-with-all [event-context]
(let [tabs (:tabs @event-context)]
(when-not (contains? tabs :all)
(swap! event-context assoc-in [:tabs :all] {:selected [] :blocked []}))
(:tabs @event-context)))
(declare timer-action)
(defn open-link [e]
(if (= HyperlinkEvent$EventType/ACTIVATED (.getEventType e))
@ -87,7 +35,7 @@
_ (swap! ui-context assoc :frame main-frame)
article-area (article-panel/make-article-area)
_ (listen article-area :hyperlink open-link)
header-tab-panel (tabbed-panel :tabs (make-tabs) :id :header-tab-panel)
header-tab-panel (tabbed-panel :tabs (tabs/make-tabs) :id :header-tab-panel)
relay-panel (relay-panel/make-relay-panel)
header-panel (left-right-split (scrollable relay-panel)
header-tab-panel)

View File

@ -0,0 +1,64 @@
(ns more-speech.ui.swing.tabs
(:require [more-speech.ui.swing.util :as util]
[more-speech.ui.swing.ui-context :refer :all]
[more-speech.ui.swing.article-tree :as article-tree])
(:use [seesaw core]))
(declare change-tab-name
delete-tab
tab-menu
get-tabs-with-all)
(defn make-tabs []
(let [event-context (:event-context @ui-context)
tabs (get-tabs-with-all event-context)]
(loop [tab-names (keys tabs)
header-tree-tabs []]
(if (empty? tab-names)
header-tree-tabs
(let [tab-name (first tab-names)
header-tree (article-tree/make-header-tree tab-name)
_ (config! header-tree
:user-data (get tabs tab-name)
:id tab-name)
tab-label (label :text (name tab-name)
:user-data tab-name)
_ (listen tab-label :mouse-pressed tab-menu)
tab-content (scrollable header-tree
:id (keyword (str "tab-" (name tab-name))))
tab-data {:title tab-label
:content tab-content}]
(recur (rest tab-names) (conj header-tree-tabs tab-data)))))))
(defn tab-menu [e]
(let [tab-label (.getComponent e)
tab-name (config tab-label :user-data)
isAll? (= :all tab-name)
p (popup :items [(action :name "Change name..."
:handler (partial change-tab-name tab-name)
:enabled? (not isAll?))
(action :name "Delete"
:handler (partial delete-tab tab-name)
:enabled? (not isAll?))])]
(if (.isPopupTrigger e)
(.show p (to-widget e) (.x (.getPoint e)) (.y (.getPoint e)))
(util/select-tab tab-name))
))
(defn change-tab-name [tab-name _e]
(prn 'change-tab-name tab-name))
(defn delete-tab [tab-name _e]
(prn 'delete-tab tab-name))
(defn get-tabs-with-all [event-context]
(let [tabs (:tabs @event-context)]
(when-not (contains? tabs :all)
(swap! event-context assoc-in [:tabs :all] {:selected [] :blocked []}))
(:tabs @event-context)))
(defn ensure-tab-list-has-all [tab-list]
(if (some #(= "all" (:name %)) tab-list)
tab-list
(conj tab-list {:name "all" :selected [] :blocked []})))

View File

@ -7,7 +7,6 @@
(.remove popup 0)))
(defn select-tab [tab-id]
(prn 'select-tab tab-id)
(let [frame (:frame @ui-context)
tabbed-panel (select frame [:#header-tab-panel])
tab-component (select tabbed-panel [(keyword (str "#tab-" (name tab-id)))])]