Created
March 14, 2011 20:58
-
-
Save pingles/869867 to your computer and use it in GitHub Desktop.
not working yet. work in progress.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; #!/bin/sh | |
;; java -Djna.library.path=/usr/local/Cellar/libspotify/0.0.7/lib -server -cp "$CLASSPATH:lib/*:src/" clojure.main ./run.clj | |
(ns spotify-explore.run | |
(:use [clj-native.direct :only [defclib loadlib typeof]] | |
[clj-native.structs :only [byref byval]] | |
[clj-native.callbacks :only [callback]] | |
[clojure.contrib.string :only [join]])) | |
(def api-key-digits [0x01, 0x77, 0xC7, 0x76, 0x4C, 0x50, 0xDB, 0x51, 0x75, 0xD8, 0x92, 0x68, 0x9E, 0xD6, 0x75, 0x05, | |
0x0B, 0xFA, 0x7D, 0xE3, 0xD1, 0x36, 0xFF, 0x28, 0xA1, 0x0B, 0x56, 0x86, 0xA8, 0x8A, 0x9D, 0xA4, | |
0x99, 0x93, 0xBC, 0x28, 0x66, 0x07, 0xEB, 0x36, 0x17, 0xA2, 0x77, 0x2D, 0x19, 0x9C, 0x4F, 0x01, | |
0xA4, 0xEE, 0xF3, 0x10, 0xE3, 0xF8, 0x0C, 0x56, 0x3F, 0x89, 0x77, 0x75, 0xC2, 0x43, 0x38, 0x5E, | |
0x2B, 0x46, 0x5A, 0x76, 0x17, 0xDB, 0x58, 0xDA, 0xA8, 0xBF, 0x95, 0x3E, 0x18, 0x1A, 0xAF, 0x5F, | |
0xD7, 0x9E, 0x7D, 0xDD, 0xF0, 0x86, 0x01, 0x73, 0x6F, 0x0D, 0x6B, 0x42, 0x0B, 0x5E, 0x65, 0x6C, | |
0xB2, 0xB8, 0x97, 0x42, 0x77, 0x93, 0xAC, 0x36, 0xEC, 0x7B, 0xF2, 0x35, 0xE1, 0xAD, 0xDB, 0x99, | |
0xB7, 0x78, 0x0B, 0xE6, 0x90, 0x91, 0xF1, 0x31, 0x6D, 0xDE, 0xE8, 0x90, 0xD6, 0x92, 0x58, 0x21, | |
0x63, 0x54, 0x63, 0x02, 0xEC, 0x6E, 0x4E, 0x25, 0x1A, 0xB4, 0x71, 0x96, 0x75, 0xBA, 0xEF, 0x5C, | |
0xB2, 0x5B, 0x0B, 0xD6, 0x51, 0x41, 0x63, 0xCF, 0xB5, 0xE5, 0x36, 0xB0, 0xC5, 0xB1, 0xEC, 0xC9, | |
0x2C, 0xDF, 0xEB, 0x86, 0x22, 0x47, 0x3D, 0xBF, 0x46, 0x63, 0x3E, 0x68, 0xD0, 0x02, 0x2D, 0xAC, | |
0x5D, 0x56, 0xBD, 0xC3, 0x6A, 0x6E, 0xC2, 0x37, 0x6B, 0x22, 0x9B, 0x7D, 0x45, 0xD3, 0xC9, 0x63, | |
0x4F, 0x4C, 0x5E, 0xEF, 0xAF, 0x82, 0x8C, 0xA1, 0xCC, 0x10, 0x57, 0x09, 0x16, 0xF2, 0xE1, 0x8F, | |
0xAC, 0xC9, 0x24, 0xAD, 0x16, 0x3B, 0x98, 0xEA, 0x02, 0x22, 0xF1, 0x30, 0xE7, 0xD5, 0xAE, 0xA2, | |
0x1C, 0x8F, 0x50, 0x4B, 0xF0, 0xEA, 0x50, 0xF2, 0xDB, 0x8E, 0x9F, 0xE5, 0xE7, 0x8B, 0xDF, 0x65, | |
0x09, 0x55, 0x1E, 0x35, 0xD5, 0x01, 0x17, 0x32, 0x22, 0x28, 0x36, 0xE3, 0x7C, 0x6B, 0x03, 0xB7, | |
0x96, 0xFF, 0x35, 0x3E, 0x86, 0x76, 0x1F, 0x26, 0x7B, 0x68, 0xC7, 0x50, 0x8E, 0xFA, 0x3E, 0x9E, | |
0x61, 0x99, 0xF6, 0xF3, 0x40, 0x29, 0x8C, 0x7B, 0x19, 0x82, 0x56, 0x96, 0x4A, 0x8F, 0xD2, 0x96, | |
0x10, 0xC0, 0xC0, 0x2D, 0x58, 0xAD, 0x68, 0xCA, 0x5F, 0xF4, 0x7E, 0xC3, 0x62, 0x6A, 0x2E, 0x49, | |
0xEA, 0x8C, 0x17, 0xCB, 0x7D, 0x3F, 0x78, 0xB4, 0xDD, 0x51, 0x7B, 0x07, 0x6A, 0xB5, 0xF6, 0xCD, | |
0x2F]) | |
(def api-key-bytes (into-array Byte/TYPE | |
(map #(.byteValue %) | |
api-key-digits))) | |
(defclib libspotify | |
(:libname "spotify") | |
(:structs (session) | |
(session-config :api_version int | |
:cache_location constchar* | |
:settings_location constchar* | |
:application_key i8* | |
:application_key_size size_t ; key size in bytes | |
:user_agent constchar* | |
:sp_session_callbacks void* ; a pointer if | |
:userdata void* | |
:compress_playlists BOOL | |
:dont_save_metadata_for_playlists BOOL | |
:initially_unload_playlists BOOL)) | |
(:functions (session-create sp_session_create [session-config* session*]))) | |
(print "Loading libspotify... ") | |
(loadlib libspotify) | |
(println "Loaded!") | |
(defmacro set-all [object & fields-and-values] | |
(let [obj-sym (gensym)] | |
`(let [~obj-sym ~object] | |
~@(for [[field value] (partition 2 fields-and-values)] | |
`(set! (. ~obj-sym ~field) | |
~value))) | |
object)) | |
(def sc (let [config (byref session-config)] | |
(set! (.api_version config) 7) | |
(set! (.cache_location config) "/Users/paul/Work/spotify-explore/cache") | |
(set! (.settings_location config) "/Users/paul/Work/spotify-explore/settings") | |
(set! (.application_key config) (java.nio.ByteBuffer/wrap api-key-bytes)) | |
(set! (.application_key_size config) (count api-key-digits)) | |
(set! (.user_agent config) "SpotifyExplore") | |
(set! (.sp_session_callbacks config) nil) | |
(set! (.userdata config) nil) | |
(set! (.compress_playlists config) false) | |
(set! (.dont_save_metadata_for_playlists config) false) | |
(set! (.initially_unload_playlists config) false) | |
config)) | |
(def *session* (byref session)) | |
(println "Session Config: " sc) | |
(println "Session Create: " (session-create sc *session*)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment