Beispiel #1
0
        public sp_error CreateSession()
        {
            if (ActiveSession())
                throw new InvalidOperationException("There can only be one instance of the Spotify service.");

            _cacheLocation = "tmp";
            _settingsLocation = "tmp";

            IntPtr appKeyHandle = Marshal.AllocHGlobal(SpotifyAppKey.ApplicationKey.Length);
            Marshal.Copy(SpotifyAppKey.ApplicationKey, 0, appKeyHandle, SpotifyAppKey.ApplicationKey.Length);

            _notifyMainThreadCallback = NotifyMainThreadCallback;
            _loginCallback = LoginCallback;
            _searchCallback = SearchCallback;

            _sessionCallbacks.notify_main_thread =
                Marshal.GetFunctionPointerForDelegate(_notifyMainThreadCallback);
            _sessionCallbacks.connection_error =
                Marshal.GetFunctionPointerForDelegate(new connection_error(ConnectionErrorCallback));
            _sessionCallbacks.logged_in = Marshal.GetFunctionPointerForDelegate(_loginCallback);

            IntPtr sessionCallbacksPtr = Marshal.AllocHGlobal(Marshal.SizeOf(_sessionCallbacks));
            Marshal.StructureToPtr(_sessionCallbacks, sessionCallbacksPtr, true);

            _sessionConfig = new sp_session_config
            {
                api_version = SpotifyApiVersion,
                cache_location = _cacheLocation,
                settings_location = _cacheLocation,
                application_key = appKeyHandle,
                application_key_size = SpotifyAppKey.ApplicationKey.Length,
                user_agent = UserAgent,
                callbacks = sessionCallbacksPtr,
                userdata = IntPtr.Zero,
                compress_playlists = false,
                dont_save_metadata_for_playlists = true,
                initially_unload_playlists = true
            };

            var error = sp_session_create(ref _sessionConfig, out _sessionHandle);

            if (error == sp_error.SP_ERROR_OK)
                Debug.WriteLine("Session successfully created.");
            else
                Debug.WriteLine("Session creation failed with error {0}", error);

            return error;
        }
Beispiel #2
0
 public static extern sp_error sp_session_create(ref sp_session_config config, out IntPtr sessionHandle);