Пример #1
0
void Spotify::Session::loadCoverart( const byte* coverartIdentifier,
                                     Spotify::ImageContainer* imageContainer )
{
    if( coverartIdentifier && imageContainer )
    {
        sp_image* image = sp_image_create( m_session, coverartIdentifier );
        if( image )
        {
            // Already loaded:
            if( sp_image_is_loaded( image ) )
            {
                Spotify::ImageData* imageData = new Spotify::ImageData( image );
                imageContainer->imageReadySlot( imageData, imageContainer );
            }
            // Load:
            else
            {
                sp_image_add_load_callback( image, &Spotify::Session::imageLoadedCallback,
                                            imageContainer );

                connect( this, SIGNAL(coverArtReady(Spotify::ImageData*,Spotify::ImageContainer*)),
                         imageContainer, SLOT(imageReadySlot(Spotify::ImageData*,Spotify::ImageContainer*)) );
            }
        }
        else
        {
Пример #2
0
static int try_play(sp_session *session, sp_track *t,int offset)
{
    sp_error err;
    fprintf(stderr,"try play\n");
    err = sp_session_player_load(session,t);
    if( err != SP_ERROR_OK) {
        fprintf(stderr,"Load failed %d\n",err);
    }
    if(!sp_track_is_loaded(t)) {
        if(g_track_to_be_played != t) {
            if(g_track_to_be_played)
                sp_track_release(g_track_to_be_played);
            g_track_to_be_played = t; //FIXME: Do I need to addref?
            sp_track_add_ref(g_track_to_be_played);
        }
    } else {
        //FIXME: Seek!
//        g_current_fifo_idx = (g_current_fifo_idx+1) % 2;
        sp_session_player_seek(session,offset);
        sp_session_player_play(session,true);
        sp_album *album = sp_track_album(t);
        if(album) {
            const byte *id = sp_album_cover(album);
            g_gazify.current_t = t;
            if(id) {
                sp_image *img = sp_image_create(session,id);
                sp_image_add_load_callback(img,&image_loaded,&g_gazify);
                
            }
        }
        g_track_to_be_played = NULL;
    }
    return err;
}
Пример #3
0
sp_image* track_get_image(sp_track* track) {
    sp_album* alb = NULL;
    sp_image* img = NULL;
    const void* img_id = NULL;

    /* Get album */
    alb = sp_track_album(track);
    if (!alb)
        g_error("Can't get track album.");
    sp_album_add_ref(alb);

    if (!sp_album_is_loaded(alb))
        g_error("Album not loaded.");

    /* Get image */
    img_id = sp_album_cover(alb, SP_IMAGE_SIZE_NORMAL);
    if (!img_id) {
        /* Since the album is loaded, a NULL here indicates that there is no
           cover for this album. */
        sp_album_release(alb);
        return NULL;
    }

    img = sp_image_create(g_session, img_id);
    sp_album_release(alb);

    if (!img)
        g_error("Can't create image.");
    return img;
}
ListResponse<TrackInfo*>* SpotifyPlaylistContainer::listTracks(
		PlaylistTask* task) {
	ListResponse<TrackInfo*>* response = new ListResponse<TrackInfo*>();
	response->setListType(ListTypeSong);
	ListPlaylistTrackInfo info = task->getCommandInfo().listPlaylistTrackInfo;
	int playlistId = info.playlist;
	if (playlistId > -1
			&& playlistId
					< sp_playlistcontainer_num_playlists(playlistContainer)) {
		bool sendName = ((info.trackInfoFlags & TrackInfoName) == TrackInfoName);
		bool sendArtist = ((info.trackInfoFlags & TrackInfoArtists)
				== TrackInfoArtists);
		bool sendAlbum = ((info.trackInfoFlags & TrackInfoAlbum)
				== TrackInfoAlbum);
		bool sendDuration = ((info.trackInfoFlags & TrackInfoDuration)
				== TrackInfoDuration);
		bool sendArtwork = ((info.trackInfoFlags & TrackInfoArtwork)
				== TrackInfoArtwork);

		sp_playlist* playlist = sp_playlistcontainer_playlist(playlistContainer,
				playlistId);
		int numTracks = sp_playlist_num_tracks(playlist);
		for (int i = 0; i < numTracks; i++) {
			TrackInfo* trackInfo = new TrackInfo();
			trackInfo->id = i;

			sp_track* track = sp_playlist_track(playlist, i);

			if (sendName) {
				trackInfo->name = sp_track_name(track);
			}
			if (sendArtist) {
				trackInfo->numArtists = sp_track_num_artists(track);
				trackInfo->artists = new const char*[trackInfo->numArtists];
				for (int j = 0; j < trackInfo->numArtists; j++) {
					trackInfo->artists[j] = sp_artist_name(
							sp_track_artist(track, j));
				}
			}
			if (sendAlbum) {
				trackInfo->album = sp_album_name(sp_track_album(track));
			}
			if (sendDuration) {
				trackInfo->duration = sp_track_duration(track);
			}
			if (sendArtwork) {
				trackInfo->artwork = sp_image_create(session,
						sp_album_cover(sp_track_album(track),
								SP_IMAGE_SIZE_NORMAL));
			}
			response->addMember(trackInfo);
		}

		return response;
	}

	delete response;
	return nullptr;
}
Пример #5
0
PyObject *Session_image_create(Session *self, PyObject *args) {
    char *image_id;
    size_t len;
    if(!PyArg_ParseTuple(args, "s#", &image_id, &len))
        return NULL;
    assert(len == 20);
    Image *i = PyObject_CallObject((PyObject *)&ImageType, NULL);
    i->_image = sp_image_create(self->_session, image_id);
    return (PyObject *)i;
}
Пример #6
0
sp_image *Track::albumImage(SpotifySession *session) const
{
    if(isValid()) {
        sp_album *album = sp_track_album(m_spTrack);
        if (album) {
            const byte *id = sp_album_cover(album);
            return sp_image_create(session->session(), id);
        }
    }
    return NULL;
}
Пример #7
0
static PyObject *
Session_image_create(Session * self, PyObject *args)
{
    byte *image_id;
    size_t len;
    sp_image *image;

    if (!PyArg_ParseTuple(args, "s#", &image_id, &len))
        return NULL;
    if (len != 20) {
        PyErr_SetString(SpotifyError, "Image id length != 20");
        return NULL;
    }
    image = sp_image_create(self->_session, image_id);
    return Image_FromSpotify(image);
}
Пример #8
0
static PyObject *
Session_image_create(PyObject *self, PyObject *args)
{
    byte *image_id;
    size_t len;
    sp_image *image;

    if (!PyArg_ParseTuple(args, "s#", &image_id, &len))
        return NULL;
    if ((int)len != 20) {
        PyErr_SetString(SpotifyError, "Image id length != 20");
        return NULL;
    }

    image = sp_image_create(Session_SP_SESSION(self), image_id);
    return Image_FromSpotify(image, 0 /* add_ref */);
}
Пример #9
0
void QSpotifySession::sendImageRequest(const QString &id)
{
    qDebug() << "QSpotifySession::sendImageRequest" << id;
    sp_image *image = nullptr;
    byte *idPtr = QSpotifyPlaylist::getImageIdPtr(id);
    if(idPtr)
        image = sp_image_create(m_sp_session, idPtr);
    else {
        sp_link *link = sp_link_create_from_string(id.toUtf8().constData());
        if(link) {
            image = sp_image_create_from_link(m_sp_session, link);
            sp_link_release(link);
        }
    }

    if (image) {
        g_imageRequestObject.insert(image, id);
        sp_image_add_load_callback(image, callback_image_loaded, nullptr);
    }
}
Пример #10
0
PHP_METHOD(SpotifyArtist, getPortrait)
{
        int timeout = 0;

        zval *index, *object = getThis();
        spotifyartist_object *p = (spotifyartist_object*)zend_object_store_get_object(object TSRMLS_CC);

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) {
                return;
        }

        zval tempretval, *thisptr = getThis();
        SPOTIFY_METHOD(SpotifyArtist, browse, &tempretval, thisptr);

        int numportraits = sp_artistbrowse_num_portraits(p->artistbrowse);

        if(Z_LVAL_P(index) > numportraits)
        {
                RETURN_FALSE;
        }

        const byte* image_id = sp_artistbrowse_portrait(p->artistbrowse, Z_LVAL_P(index));
        sp_image *image = sp_image_create(p->session, image_id);

        while(!sp_image_is_loaded(image))
        {
                sp_session_process_events(p->session, &timeout);
        }

        size_t size;
        const byte* image_data = sp_image_data(image, &size);

        RETURN_STRINGL(image_data, size, 1);

        sp_image_release(image);
}
Пример #11
0
sp_search *
sp_mock_search_create(sp_error error, const char *query, const char *did_you_mean,
                     int total_tracks, int num_tracks, const sp_track **tracks,
                     int total_albums, int num_albums, const sp_album **albums,
                     int total_artists, int num_artists, const sp_artist **artists,
                     int total_playlists, int num_playlists, const sp_playlist **playlists,
                     search_complete_cb *callback, void *userdata)
{
  int i = 0, length = 0;
  sp_link *uri = NULL;
  sp_session *session = NULL;
  sp_image *image = NULL;
  sp_search *search = ALLOC(sp_search);

  search->error = error;
  search->query = strclone(query);

  if (did_you_mean)
  {
    search->did_you_mean = strclone(did_you_mean);
  }

  search->total_tracks  = total_tracks;
  search->total_artists = total_artists;
  search->total_albums  = total_albums;
  search->total_playlists = total_playlists;

  search->num_tracks  = num_tracks;
  search->num_artists = num_artists;
  search->num_albums  = num_albums;
  search->num_playlists =
    search->num_playlist_names =
    search->num_playlist_uris  =
    search->num_playlist_image_uris = num_playlists;

  search->tracks  = ALLOC_N(sp_track *, num_tracks);
  search->artists = ALLOC_N(sp_artist *, num_artists);
  search->albums  = ALLOC_N(sp_album *, num_artists);

  MEMCPY_N(search->tracks, tracks, sp_track *, num_tracks);
  MEMCPY_N(search->artists, artists, sp_artist *, num_artists);
  MEMCPY_N(search->albums, albums, sp_album *, num_albums);

  search->playlist_names = ALLOC_N(char *, num_playlists);
  search->playlist_uris  = ALLOC_N(char *, num_playlists);
  search->playlist_image_uris = ALLOC_N(char *, num_playlists);
  for (i = 0; i < num_playlists; ++i)
  {
    const sp_playlist *playlist = playlists[i];

    search->playlist_names[i] = strclone(playlist->name);

    uri = sp_link_create_from_playlist((sp_playlist *) playlist);

    if (uri)
    {
      length = sp_link_as_string(uri, NULL, 0);
      search->playlist_uris[i] = ALLOC_STR(length);
      sp_link_as_string(uri, search->playlist_uris[i], length + 1);
    }

    if (playlist->image)
    {
      image = sp_image_create(session, playlist->image);

      if (image)
      {
        uri    = sp_link_create_from_image(image);
        length = sp_link_as_string(uri, NULL, 0);
        search->playlist_image_uris[i] = ALLOC_STR(length);
        sp_link_as_string(uri, search->playlist_image_uris[i], length + 1);
      }
    }
  }

  search->callback = callback;
  search->userdata = userdata;

  return search;
}
Пример #12
0
bool Image::Load(const byte *image_id) {
    image_ = sp_image_create(session_->session_, image_id);

    return (image_ != NULL);
}