/
repo.cljc
59 lines (43 loc) · 2.02 KB
/
repo.cljc
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
(ns pinkgorilla.storage.repo
(:require
#?(:clj [clojure.tools.logging :refer (info)]
:cljs [taoensso.timbre :refer-macros (info)])
#?(:clj [pinkgorilla.storage.github :refer [save-repo load-repo]])
[clojure.string]
[pinkgorilla.storage.storage :refer [Storage query-params-to-storage Save Load]]))
(defrecord StorageRepo [user repo filename])
(defmethod query-params-to-storage :repo [_ params]
(StorageRepo.
(:user params)
(:repo params)
(or (:path params) (:filename params))))
(extend-type StorageRepo
Storage
(storagetype [self] :repo)
(storageformat [self] :gorilla)
(external-url [self]
(info "local-storage.external-url")
;https://github.com/pink-junkjard/tailwind-workstation-screencast/blob/master/src/workation/core.cljs
(str "https://github.com/" (:user self) "/" (:repo self) "/blob/master/" (:filename self)))
(gorilla-path [self]
(info "repo-storage.gorilla-path")
(str "/edit?source=repo&filename=" (:filename self) "&user=" (:user self) "&repo=" (:repo self))))
#?(:clj
(extend-type StorageRepo
Save
(storage-save [self notebook tokens]
(let [token (:github-token tokens)]
(if (or (nil? token) (clojure.string/blank? token))
(throw (Exception. (str "NOT Saving Notebook without token: " (:filename self))))
(if (nil? notebook)
(throw (Exception. (str "NOT Saving EMPTY Notebook to file: " (:filename self))))
(do
(info "Saving Notebook to repo: " (:repo self) " size: " (count notebook))
(save-repo (:user self) (:repo self) (:filename self) notebook token))))))
Load
(storage-load [self tokens]
(let [token (:github-token tokens)]
(info "Loading Notebook from repo: " (:repo self) "user: " (:user self) " filename: " (:filename self))
(if (or (nil? token) (clojure.string/blank? token))
(load-repo (:user self) (:repo self) (:filename self))
(load-repo (:user self) (:repo self) (:filename self) token))))))