mockspotify 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ Makefile
2
+ Makefile.in
3
+ aclocal.m4
4
+ autom4te.cache/
5
+ config.guess
6
+ config.h
7
+ config.h.in
8
+ config.log
9
+ config.status
10
+ config.sub
11
+ configure
12
+ depcomp
13
+ install-sh
14
+ libtool
15
+ ltmain.sh
16
+ m4/
17
+ missing
18
+ src/.deps/
19
+ src/.libs/
20
+ src/*.o
21
+ src/*.la
22
+ src/*.lo
23
+ src/Makefile
24
+ src/Makefile.in
25
+ stamp-h1
26
+ *.bundle
27
+ pkg/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ..gemspec
4
+ gemspec
data/Makefile.am ADDED
@@ -0,0 +1,3 @@
1
+ SUBDIRS = src
2
+
3
+ ACLOCAL_AMFLAGS = -I m4
data/README.rst ADDED
@@ -0,0 +1,55 @@
1
+ libmockspotify
2
+ ==============
3
+
4
+ A mock of libspotify for use in development of language bindings.
5
+
6
+ This project was started in July 2011 with the goal of splitting out
7
+ pyspotify's mock of libspotify, so that it could be reused by the developers of
8
+ the Node.js and Ruby bindings for libspotify.
9
+
10
+ Coordination of the development efforts happens on GitHub and #spotify on
11
+ Freenode.
12
+
13
+ Note about my fork
14
+ ------------------
15
+ To ease usage in my own development, I’ve turned this project into a
16
+ Ruby gem. This allows you to install it as a gem, and also allows you
17
+ to retrieve the path to the compiled binary.
18
+
19
+ Installing it as a gem:
20
+
21
+ ::
22
+
23
+ gem install mockspotify
24
+
25
+ Using its’ API (one method):
26
+
27
+ ::
28
+
29
+ require 'mockspotify'
30
+ MockSpotify.lib_path # => path/to/gem/src/libmockspotify.extension
31
+
32
+ You can then use this to bind this library using Ruby FFI:
33
+
34
+ ::
35
+
36
+ require 'ffi'
37
+ require 'mockspotify'
38
+
39
+ module Spotify
40
+ extend FFI::Library
41
+ ffi_lib MockSpotify.lib_path
42
+
43
+ attach_function …, etc
44
+ end
45
+
46
+ Manual compilation
47
+ ------------------
48
+ If you ever want to do it, here you go:
49
+
50
+ ::
51
+
52
+ $ ./autogen.sh
53
+ $ ./configure
54
+ $ make
55
+ # make install
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+
4
+ task :compile do
5
+ Dir.chdir('src') do
6
+ sh 'ruby extconf.rb'
7
+ sh 'make'
8
+ end
9
+ end
10
+
11
+ require 'rake/testtask'
12
+ Rake::TestTask.new do |t|
13
+ t.pattern = 'test/*_spec.rb'
14
+ end
15
+
16
+ task :test => :compile
data/autogen.sh ADDED
@@ -0,0 +1,4 @@
1
+ #! /bin/sh
2
+
3
+ libtoolize \
4
+ && autoreconf --install
data/configure.ac ADDED
@@ -0,0 +1,10 @@
1
+ AC_INIT([libmockspotify], [0.1], [http://github.com/mopidy/libmockspotify])
2
+ AM_INIT_AUTOMAKE([foreign -Wall -Werror])
3
+
4
+ AC_PROG_CC
5
+ AC_PROG_LIBTOOL
6
+
7
+ AC_CONFIG_MACRO_DIR([m4])
8
+ AC_CONFIG_HEADERS([config.h])
9
+ AC_CONFIG_FILES([Makefile src/Makefile])
10
+ AC_OUTPUT
@@ -0,0 +1,11 @@
1
+ require 'rbconfig'
2
+
3
+ module MockSpotify
4
+ VERSION = "0.0.1"
5
+
6
+ class << self
7
+ def lib_path
8
+ File.expand_path('../../src/libmockspotify.', __FILE__) << RbConfig::CONFIG['DLEXT']
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/mockspotify', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = "mockspotify"
6
+ gem.summary = %Q{A mock of libspotify for use in development of language bindings}
7
+ gem.homepage = "https://github.com/Burgestrand/libmockspotify"
8
+ gem.authors = ["Kim Burgestrand"]
9
+ gem.email = 'kim@burgestrand.se'
10
+
11
+ gem.files = `git ls-files`.split("\n")
12
+ gem.executables = []
13
+ gem.require_paths = ["lib", "src"]
14
+ gem.extensions << 'src/extconf.rb'
15
+
16
+ gem.version = MockSpotify::VERSION
17
+ gem.platform = Gem::Platform::RUBY
18
+ end
data/src/Makefile.am ADDED
@@ -0,0 +1,18 @@
1
+ lib_LTLIBRARIES = libmockspotify.la
2
+ include_HEADERS = libmockspotify.h
3
+
4
+ AM_CFLAGS = -Wall
5
+
6
+ libmockspotify_la_SOURCES = album.c \
7
+ albumbrowse.c \
8
+ artist.c \
9
+ artistbrowse.c \
10
+ error.c \
11
+ image.c \
12
+ link.c \
13
+ playlist.c \
14
+ search.c \
15
+ session.c \
16
+ track.c \
17
+ user.c \
18
+ util.c
data/src/album.c ADDED
@@ -0,0 +1,77 @@
1
+ #include <stdlib.h>
2
+ #include <string.h>
3
+ #include "libmockspotify.h"
4
+
5
+ /*** MockSpotify API ***/
6
+
7
+ sp_album *
8
+ mocksp_album_create(char *name, sp_artist *artist, int year, byte * cover,
9
+ int type, int loaded, int available)
10
+ {
11
+ sp_album *a;
12
+
13
+ a = malloc(sizeof(sp_album));
14
+ memset(a, 0, sizeof(sp_album));
15
+ strcpy(a->name, name);
16
+ a->artist = artist;
17
+ a->year = year;
18
+ memcpy(a->cover, cover, 20);
19
+ a->type = type;
20
+ a->loaded = loaded;
21
+ a->available = available;
22
+ return a;
23
+ }
24
+
25
+ /*** Spotify API ***/
26
+
27
+ void
28
+ sp_album_add_ref(sp_album *a)
29
+ {
30
+ }
31
+
32
+ void
33
+ sp_album_release(sp_album *a)
34
+ {
35
+ }
36
+
37
+ bool
38
+ sp_album_is_loaded(sp_album *a)
39
+ {
40
+ return a->loaded;
41
+ }
42
+
43
+ bool
44
+ sp_album_is_available(sp_album *a)
45
+ {
46
+ return a->available;
47
+ }
48
+
49
+ sp_artist *
50
+ sp_album_artist(sp_album *a)
51
+ {
52
+ return a->artist;
53
+ }
54
+
55
+ const byte *
56
+ sp_album_cover(sp_album *a)
57
+ {
58
+ return a->cover;
59
+ }
60
+
61
+ const char *
62
+ sp_album_name(sp_album *a)
63
+ {
64
+ return a->name;
65
+ }
66
+
67
+ int
68
+ sp_album_year(sp_album *a)
69
+ {
70
+ return a->year;
71
+ }
72
+
73
+ sp_albumtype
74
+ sp_album_type(sp_album *a)
75
+ {
76
+ return a->type;
77
+ }
data/src/albumbrowse.c ADDED
@@ -0,0 +1,77 @@
1
+ #include <stdlib.h>
2
+ #include <string.h>
3
+ #include "libmockspotify.h"
4
+
5
+ /*** MockSpotify API ***/
6
+
7
+ sp_albumbrowse *
8
+ mocksp_albumbrowse_create(sp_album *album, bool loaded)
9
+ {
10
+ sp_albumbrowse *ab;
11
+
12
+ ab = malloc(sizeof(sp_albumbrowse));
13
+ ab->loaded = loaded;
14
+ ab->album = album;
15
+ return ab;
16
+ }
17
+
18
+ /*** Spotify API ***/
19
+
20
+ void
21
+ sp_albumbrowse_add_ref(sp_albumbrowse *ab)
22
+ {
23
+ }
24
+
25
+ void
26
+ sp_albumbrowse_release(sp_albumbrowse *ab)
27
+ {
28
+ }
29
+
30
+ sp_track *
31
+ sp_albumbrowse_track(sp_albumbrowse *ab, int index)
32
+ {
33
+ sp_track *track;
34
+
35
+ switch (index) {
36
+ case 0:
37
+ track = mocksp_track_create("foo", 1, &(ab->album->artist), ab->album,
38
+ 123, 0, 1, 1, SP_ERROR_OK, 1);
39
+ break;
40
+ case 1:
41
+ track = mocksp_track_create("bar", 1, &(ab->album->artist), ab->album,
42
+ 123, 0, 1, 2, SP_ERROR_OK, 1);
43
+ break;
44
+ case 2:
45
+ track = mocksp_track_create("baz", 1, &(ab->album->artist), ab->album,
46
+ 123, 0, 1, 3, SP_ERROR_OK, 1);
47
+ break;
48
+ default:
49
+ track = NULL;
50
+ break;
51
+ }
52
+ return track;
53
+ }
54
+
55
+ int
56
+ sp_albumbrowse_num_tracks(sp_albumbrowse *ab)
57
+ {
58
+ return 3;
59
+ }
60
+
61
+ bool
62
+ sp_albumbrowse_is_loaded(sp_albumbrowse *ab)
63
+ {
64
+ return ab->loaded;
65
+ }
66
+
67
+ sp_albumbrowse *
68
+ sp_albumbrowse_create(sp_session *s, sp_album *a,
69
+ albumbrowse_complete_cb cb, void *userdata)
70
+ {
71
+ sp_albumbrowse *ab;
72
+
73
+ ab = mocksp_albumbrowse_create(a, 1);
74
+ if (cb)
75
+ cb(ab, userdata);
76
+ return ab;
77
+ }
data/src/artist.c ADDED
@@ -0,0 +1,41 @@
1
+ #include <stdlib.h>
2
+ #include <string.h>
3
+ #include "libmockspotify.h"
4
+
5
+ /*** MockSpotify API ***/
6
+
7
+ sp_artist *
8
+ mocksp_artist_create(const char *name, int loaded)
9
+ {
10
+ sp_artist *a;
11
+
12
+ a = malloc(sizeof(sp_artist));
13
+ memset(a, 0, sizeof(sp_artist));
14
+ strcpy(a->name, name);
15
+ a->loaded = loaded;
16
+ return a;
17
+ }
18
+
19
+ /*** Spotify API ***/
20
+
21
+ void
22
+ sp_artist_add_ref(sp_artist *a)
23
+ {
24
+ }
25
+
26
+ const char *
27
+ sp_artist_name(sp_artist *a)
28
+ {
29
+ return a->name;
30
+ }
31
+
32
+ bool
33
+ sp_artist_is_loaded(sp_artist *a)
34
+ {
35
+ return a->loaded;
36
+ }
37
+
38
+ void
39
+ sp_artist_release(sp_artist *a)
40
+ {
41
+ }
@@ -0,0 +1,110 @@
1
+ #include <stdlib.h>
2
+ #include "libmockspotify.h"
3
+
4
+ /*** MockSpotify API ***/
5
+
6
+ sp_artistbrowse *
7
+ mocksp_artistbrowse_create(sp_artist * artist, bool loaded)
8
+ {
9
+ sp_artistbrowse *ab;
10
+
11
+ ab = malloc(sizeof(sp_artistbrowse));
12
+ ab->loaded = loaded;
13
+ ab->artist = artist;
14
+ return ab;
15
+ }
16
+
17
+ /*** Spotify API ***/
18
+
19
+ void
20
+ sp_artistbrowse_add_ref(sp_artistbrowse * ab)
21
+ {
22
+ }
23
+
24
+ void
25
+ sp_artistbrowse_release(sp_artistbrowse * ab)
26
+ {
27
+ }
28
+
29
+ sp_artistbrowse *
30
+ sp_artistbrowse_create(sp_session * s, sp_artist * a,
31
+ artistbrowse_complete_cb cb, void *userdata)
32
+ {
33
+ sp_artistbrowse *ab;
34
+
35
+ ab = mocksp_artistbrowse_create(a, 1);
36
+ if (cb)
37
+ cb(ab, userdata);
38
+ return ab;
39
+ }
40
+
41
+ sp_track *
42
+ sp_artistbrowse_track(sp_artistbrowse * ab, int index)
43
+ {
44
+ sp_album *album;
45
+ sp_track *track;
46
+
47
+ album = mocksp_album_create("fool-album", ab->artist, 2001,
48
+ (byte *) "01234567890123456789", 1, 1, 1);
49
+ switch (index) {
50
+ case 0:
51
+ track = mocksp_track_create("foo", 1, &(album->artist), album,
52
+ 123, 0, 1, 1, SP_ERROR_OK, 1);
53
+ break;
54
+ case 1:
55
+ track = mocksp_track_create("bar", 1, &(album->artist), album,
56
+ 123, 0, 1, 2, SP_ERROR_OK, 1);
57
+ break;
58
+ case 2:
59
+ track = mocksp_track_create("baz", 1, &(album->artist), album,
60
+ 123, 0, 1, 3, SP_ERROR_OK, 1);
61
+ break;
62
+ default:
63
+ track = NULL;
64
+ break;
65
+ }
66
+ return track;
67
+ }
68
+
69
+ sp_album *
70
+ sp_artistbrowse_album(sp_artistbrowse * ab, int index)
71
+ {
72
+ sp_album *album;
73
+
74
+ switch (index) {
75
+ case 0:
76
+ album = mocksp_album_create("foo", ab->artist, 2001,
77
+ (byte *) "01234567890123456789", 1, 1, 1);
78
+ break;
79
+ case 1:
80
+ album = mocksp_album_create("bar", ab->artist, 2002,
81
+ (byte *) "01234567890123456789", 1, 1, 1);
82
+ break;
83
+ case 2:
84
+ album = mocksp_album_create("baz", ab->artist, 2003,
85
+ (byte *) "01234567890123456789", 1, 1, 1);
86
+ break;
87
+ default:
88
+ album = NULL;
89
+ break;
90
+ }
91
+ return album;
92
+ }
93
+
94
+ int
95
+ sp_artistbrowse_num_albums(sp_artistbrowse * ab)
96
+ {
97
+ return 3;
98
+ }
99
+
100
+ int
101
+ sp_artistbrowse_num_tracks(sp_artistbrowse * ab)
102
+ {
103
+ return 3;
104
+ }
105
+
106
+ bool
107
+ sp_artistbrowse_is_loaded(sp_artistbrowse * ab)
108
+ {
109
+ return ab->loaded;
110
+ }
data/src/error.c ADDED
@@ -0,0 +1,12 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include "libmockspotify.h"
4
+
5
+ /*** MockSpotify API ***/
6
+ const char*
7
+ sp_error_message(sp_error error)
8
+ {
9
+ char *buff = malloc(20 * sizeof(char));
10
+ sprintf(buff, "sp_error: %d", error);
11
+ return buff;
12
+ }
data/src/extconf.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'mkmf'
2
+
3
+ $CFLAGS << '-O0 -ggdb -Wextra'
4
+
5
+ create_makefile 'libmockspotify'
data/src/image.c ADDED
@@ -0,0 +1,89 @@
1
+ #include "libmockspotify.h"
2
+
3
+ /*** MockSpotify API ***/
4
+ sp_image*
5
+ mocksp_image_create(const byte image_id[20], sp_imageformat format, size_t data_size, byte *data, sp_error error)
6
+ {
7
+ sp_image *image = ALLOC(sp_image);
8
+ memcpy(image->image_id, image_id, 20);
9
+ image->format = format;
10
+ image->data_size = data_size;
11
+ image->data = ALLOC_N(byte, data_size + 1);
12
+ memcpy(image->data, data, data_size);
13
+ image->error = error;
14
+ return image;
15
+ }
16
+
17
+ /*** Spotify API ***/
18
+
19
+ sp_image*
20
+ sp_image_create_from_link(sp_session *session, sp_link *l)
21
+ {
22
+ byte *real_id = l->data + strlen("spotify:image:");
23
+ byte *image_id = ALLOC_N(byte, 20);
24
+ memcpy(image_id, real_id, 20);
25
+ return mocksp_image_create(image_id, SP_IMAGE_FORMAT_JPEG, 0, NULL, SP_ERROR_OK);
26
+ }
27
+
28
+ void
29
+ sp_image_add_ref(sp_image *image)
30
+ {
31
+ }
32
+
33
+ void
34
+ sp_image_release(sp_image *image)
35
+ {
36
+ }
37
+
38
+ bool
39
+ sp_image_is_loaded(sp_image *i)
40
+ {
41
+ return sp_image_error(i) == SP_ERROR_OK;
42
+ }
43
+
44
+ sp_imageformat
45
+ sp_image_format(sp_image *i)
46
+ {
47
+ return i->format;
48
+ }
49
+
50
+ sp_error
51
+ sp_image_error(sp_image *i)
52
+ {
53
+ return i->error;
54
+ }
55
+
56
+ const void *
57
+ sp_image_data(sp_image *i, size_t *t)
58
+ {
59
+ *t = i->data_size;
60
+ return i->data;
61
+ }
62
+
63
+ sp_image *
64
+ sp_image_create(sp_session *session, const byte image_id[20])
65
+ {
66
+ sp_image *image = ALLOC(sp_image);
67
+ memcpy(image->image_id, image_id, 20);
68
+ return image;
69
+ }
70
+
71
+ const byte*
72
+ sp_image_image_id(sp_image *i)
73
+ {
74
+ return i->image_id;
75
+ }
76
+
77
+ void
78
+ sp_image_add_load_callback(sp_image *i, image_loaded_cb *callback,
79
+ void *userdata)
80
+ {
81
+ /* TODO */
82
+ }
83
+
84
+ void
85
+ sp_image_remove_load_callback(sp_image *i, image_loaded_cb *callback,
86
+ void *userdata)
87
+ {
88
+ /* TODO */
89
+ }