steam saving is close.

This commit is contained in:
Bryce Covert
2015-11-21 12:48:42 -08:00
parent 143bd0f192
commit 7d47414fa9
5 changed files with 72 additions and 18 deletions

View File

@@ -1,8 +1,11 @@
(ns advent.steam)
(ns advent.steam
(:require [play-clj.core :refer :all]
[clojure.edn :as edn])
(:import [java.nio ByteBuffer CharBuffer]))
(def has-steam?
(try
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI])
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI SteamRemoteStorage])
true
(catch Exception e
false)))
@@ -42,3 +45,51 @@
(defn clear-all-achievements []
(doall (map clear-achievement all-achievements)))
(defn write-file [filename edn]
(let [edn (pr-str edn)]
(if has-steam?
(eval `(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 snapshot-list []
(if has-steam?
(eval `(let [rs# (SteamRemoteStorage. nil)]
(for [i# (range (.getFileCount rs#))
:let [len# (* 1024 1024)
n# (.getFileNameAndSize rs# i# (make-array Integer/TYPE 1))
bb# (ByteBuffer/allocateDirect len#)]
:when (.endsWith n# ".edn")]
(do (println n#)
(.fileRead rs# n# bb# len#)
(-> bb# .asCharBuffer .toString edn/read-string)))))
(for [save-file (.list (files! :local ".") ".edn")]
(edn/read-string (.readString save-file)))))
(defn add-screenshot [filename]
(when has-steam?
(eval `(let [rs# (SteamRemoteStorage. nil)
bytes# (.readBytes (files! :local ~filename))
bb# (ByteBuffer/allocateDirect (count bytes#))]
(.put bb# bytes#)
(.fileWrite rs# ~filename bb# (count bytes#))))))
(defn download-screenshot [filename]
(when (and has-steam? (not (.exists (files! :local filename))))
(eval `(let [rs# (SteamRemoteStorage. nil)
len# (.getFileSize rs# ~filename)
bb# (ByteBuffer/allocateDirect len#)
bytes# (make-array Byte/TYPE len#)]
(do (.fileRead rs# ~filename bb# len#)
(.get bb# bytes#)
(.writeBytes (files! :local ~filename)
bytes#
false))))))