From bbf8e5f61f3abd1bbf84c45912ada0a777b01813 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Sun, 22 Nov 2015 14:11:58 -0800 Subject: [PATCH] getting closer on checkouts. --- desktop/src-common/advent/steam.clj | 62 ++++++++++++++--------------- desktop/src-common/advent/utils.clj | 26 ++++++------ 2 files changed, 42 insertions(+), 46 deletions(-) diff --git a/desktop/src-common/advent/steam.clj b/desktop/src-common/advent/steam.clj index d0bee4b5..7cbdbc9e 100644 --- a/desktop/src-common/advent/steam.clj +++ b/desktop/src-common/advent/steam.clj @@ -53,17 +53,35 @@ (defn clear-all-achievements [] (doall (map clear-achievement all-achievements))) -(defn write-file [filename edn] - (let [edn (pr-str edn)] - (steamify - (let [rs (SteamRemoteStorage. nil) - v edn - bb (ByteBuffer/allocateDirect (* 2 (count v)))] - (-> bb .asCharBuffer (.put v) ) - - (.fileWrite rs filename bb (* 2 (count v)))) - (let [f (files! :local filename)] - (.writeString f edn false))))) +(defn get-bytes [filename] + (steamify + (let [rs (SteamRemoteStorage. nil) + len (.getFileSize rs filename) + bb (ByteBuffer/allocateDirect len) + bytes (make-array Byte/TYPE len)] + (.fileRead rs filename bb len) + (.get bb bytes) + bytes) + (.readBytes (files! :local filename)))) + +(defn write-bytes [filename bytes] + (steamify + (let [rs (SteamRemoteStorage. nil) + bb (ByteBuffer/allocateDirect (* 2 (count bytes)))] + (-> bb (.put bytes) ) + (.fileWrite rs filename bb (* 2 (count bytes)))) + (let [f (files! :local filename)] + (.write f bytes false)))) + +(defn list-edn-files [] + (steamify + (let [rs (SteamRemoteStorage. nil)] + (for [i (range (.getFileCount rs)) + :let [n (.getFileNameAndSize rs i (make-array Integer/TYPE 1))] + :when (.endsWith n ".edn")] + n)) + (for [save-file (.list (files! :local ".") ".edn")] + (.name save-file)))) (defn snapshot-list [] (steamify @@ -79,28 +97,6 @@ (for [save-file (.list (files! :local ".") ".edn")] (edn/read-string (.readString save-file))))) - -(defn add-screenshot [filename] - (steamify - (let [rs (SteamRemoteStorage. nil) - bytes (.readBytes (files! :local filename)) - bb (ByteBuffer/allocateDirect (count bytes))] - - (.put bb bytes) - (.fileWrite rs filename bb (count bytes))))) - -(defn get-screenshot-bytes [filename] - (steamify - (let [rs (SteamRemoteStorage. nil) - len (.getFileSize rs filename) - bb (ByteBuffer/allocateDirect len) - bytes (make-array Byte/TYPE len)] - (.fileRead rs filename bb len) - (.get bb bytes) - bytes) - (.readBytes (files! :local filename)))) - - (defn save-screenshot [pm filename] (steamify (let [rs (SteamRemoteStorage. nil) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index f6144ba4..a935880e 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -66,16 +66,20 @@ (str "screenshot-" (clojure.core/name name) ".png" )) (defn snapshot-list [] - (sort-by (fn [s] - (if (= "Autosave" (:name s)) - (Long/MIN_VALUE) - (- (Long/parseLong (:id s))))) - (steam/snapshot-list))) + (->> (for [filename (steam/list-edn-files)] + (try + (edn/read-string (String. (steam/get-bytes filename) "UTF-8")) + (catch Exception _ nil))) + (filter (every-pred identity :name :id)) + (sort-by (fn [s] + (if (= "Autosave" (:name s)) + (Long/MIN_VALUE) + (- (Long/parseLong (:id s)))))))) (defn snapshot-screenshots [] (doall (for [snapshot (snapshot-list)] (assoc-in snapshot [:screenshot] - (try (let [bytes (steam/get-screenshot-bytes (:screenshot snapshot))] + (try (let [bytes (steam/get-bytes (:screenshot snapshot))] (Pixmap. bytes 0 (count bytes))) (catch Exception e (Pixmap. 160 120 Pixmap$Format/RGB888))))))) @@ -97,11 +101,6 @@ (edn/read-string (.getString prefs "chapters")) saves/chapters))) -(defn write-file [filename edn] - (steam/write-file filename edn) - #_(let [f (files! :local filename)] - (.writeString f (pr-str edn) false))) - (defn save-file-name [id] (str id ".edn")) @@ -113,7 +112,8 @@ :x (get-in entities [:room :entities :ego :x]) :y (get-in entities [:room :entities :ego :y])) :blurb (or blurb name)}] - (write-file (save-file-name id) save) + + (steam/write-bytes (save-file-name id) (.getBytes (pr-str save) "UTF-8")) (on-gl (let [_ (Pixmap/setFilter Pixmap$Filter/BiLinear) viewport (-> @ (resolve 'advent.screens.scene/scene) :screen deref :viewport) [x y w h g-l g-r] [(.getScreenX viewport) (.getScreenY viewport) (.getScreenWidth viewport) (.getScreenHeight viewport)] @@ -124,7 +124,7 @@ (defn remove-save [id] (doseq [f [(save-screenshot-file-name id) - (save-file-name id)]] + (save-file-name id)]] (steam/delete-file f) )) (defn save-settings! []