Beispiel #1
0
// ----------------------------------------------------------------------------
//
bool DMX_PLAYER_API GetPlaylists( UINT* num_lists, LPSTR playlist_links, size_t buffer_length )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    PlaylistArray playlists = theApp.m_spotify.getPlaylists( );

    UINT link_counter = 0;
    UINT index = 0;
    playlist_links[0] = '\0';
    buffer_length--;
    CString spotifyLink;

    for ( sp_playlist* pl : playlists ) {
        sp_link * link = sp_link_create_from_playlist( pl );

        int size = sp_link_as_string ( link, spotifyLink.GetBuffer( MAX_LINK_SIZE ), MAX_LINK_SIZE );
        sp_link_release( link );
        spotifyLink.ReleaseBuffer();

        if ( (size_t)spotifyLink.GetLength()+1 > buffer_length )
            break;

        strcpy_s( playlist_links, buffer_length, spotifyLink );
        playlist_links = &playlist_links[size+1];
        *playlist_links = '\0';

        buffer_length -= (size+1);

        link_counter++;
    }

    *num_lists = link_counter;

    return *num_lists == playlists.size();
}
Beispiel #2
0
/**
 * Callback from libspotify, telling us the rootlist is fully synchronized
 *
 * @param  pc            The playlist container handle
 * @param  userdata      The opaque pointer
 */
static void container_loaded ( sp_playlistcontainer *pc, void *userdata )
{
    char *folderName = malloc ( sizeof ( char ) * ( MAX_LENGTH_FOLDER_NAME ) );
    int i;


    if ( folderName == NULL )
    {
        fprintf ( stderr, "jahspotify: Could not allocate folder name variable)\n" );
        return;
    }

    // fprintf ( stderr, "jahspotify: Rootlist synchronized (%d playlists)\n",sp_playlistcontainer_num_playlists ( pc ) );
    signalSynchStarting(sp_playlistcontainer_num_playlists (pc));

    for ( i = 0; i < sp_playlistcontainer_num_playlists ( pc ); ++i )
    {
        sp_playlist *pl = sp_playlistcontainer_playlist ( pc, i );
        sp_playlist_add_callbacks ( pl, &pl_callbacks, NULL );

        sp_link *link = sp_link_create_from_playlist(pl);

        char *linkStr = malloc(sizeof(char) * 100);
        if (link)
        {
            sp_link_add_ref(link);
            sp_link_as_string(link,linkStr,100);
        }
        else
        {
            strcpy(linkStr,"N/A\0");
        }
        switch ( sp_playlistcontainer_playlist_type ( pc,i ) )
        {
          case SP_PLAYLIST_TYPE_PLAYLIST:
            signalPlaylistSeen(sp_playlist_name ( pl ),linkStr);
            break;
          case SP_PLAYLIST_TYPE_START_FOLDER:
            sp_playlistcontainer_playlist_folder_name ( pc,i,folderName, MAX_LENGTH_FOLDER_NAME);
            signalStartFolderSeen(folderName, sp_playlistcontainer_playlist_folder_id(pc,i));
            break;
          case SP_PLAYLIST_TYPE_END_FOLDER:
            sp_playlistcontainer_playlist_folder_name ( pc,i,folderName,MAX_LENGTH_FOLDER_NAME);
            signalEndFolderSeen();
            break;
          case SP_PLAYLIST_TYPE_PLACEHOLDER:
            fprintf ( stderr,"jahspotify: placeholder\n");
        }

        if (link)
            sp_link_release(link);
        free(linkStr);
    }
    signalSynchCompleted();
    free ( folderName );
}
Beispiel #3
0
PHP_METHOD(SpotifyPlaylist, getURI)
{
	char uri[256];
	spotifyplaylist_object *p = (spotifyplaylist_object*)zend_object_store_get_object(getThis() TSRMLS_CC);

	sp_link *link = sp_link_create_from_playlist(p->playlist);
	sp_link_as_string(link, uri, 256);
	sp_link_release(link);

	RETURN_STRING(uri, 1);
}
Beispiel #4
0
static void playlist_update_in_progress ( sp_playlist *pl, bool done, void *userdata )
{
    const char *name = sp_playlist_name ( pl );
    char *playListlinkStr;
    char *trackLinkStr;
    sp_link *link;
    int trackCounter;

    // fprintf ( stderr,"jahspotify: playlist update in progress: %s (done: %s)\n",name, (done ? "yes" : "no"));
    if (done)
    {
        link = sp_link_create_from_playlist(pl);
        if (link)
        {
            playListlinkStr =  malloc ( sizeof ( char ) * ( 100 ) );
            sp_link_as_string(link,playListlinkStr,100);
            sp_link_release(link);
            signalPlaylistSeen(name,playListlinkStr);
        }



        //sp_link_release(link);
        //  int numTracks = sp_playlist_num_tracks(pl);
        //  fprintf ( stderr,"jahspotify: playlist: %s num tracks: %d id: %s\n",name,numTracks,playListlinkStr);

        //  for (trackCounter = 0 ; trackCounter < numTracks; trackCounter++)
        //  {
        //      sp_track *track = sp_playlist_track(pl,trackCounter);
        //      if (sp_track_is_loaded(track))
        //      {
        //	  link = sp_link_create_from_track(track,0);
        //	  trackLinkStr = malloc ( sizeof ( char ) * ( 100 ) );
        //	  sp_link_as_string(link,trackLinkStr,100);
        //	  fprintf ( stderr,"jahspotify: track name: %s track id: %s\n",sp_track_name(track),trackLinkStr);
        //	  sp_link_release(link);
        //	  if (trackLinkStr) (trackLinkStr);
        //      }
        //      sp_track_release(track);
        //  }
        //
        //  if (playListlinkStr) free(playListlinkStr);
        // }
    }




}
Beispiel #5
0
static PyObject *
Link_from_playlist(Link * self, PyObject *args)
{
    Playlist *playlist;
    PyObject *plink;

    if (!PyArg_ParseTuple(args, "O!", &PlaylistType, &playlist))
        return NULL;
    sp_link *link = sp_link_create_from_playlist(playlist->_playlist);

    if (!link) {
        PyErr_SetString(SpotifyError, "Failed to get link from a playlist");
        return NULL;
    }
    plink = Link_FromSpotify(link);
    return plink;
}
Beispiel #6
0
static int apply_changes(sp_playlist *pl, struct pl_update_work *puw)
{
	sp_link *l;
	sp_error err;

	if(!sp_playlist_is_loaded(pl))
		return 1;


	l = sp_link_create_from_playlist(pl);
	if(l == NULL)
		return 1;
	sp_link_release(l);

	fprintf(stderr, "Playlist loaded, applying changes ... ");

	err = sp_playlist_add_tracks(pl, puw->tracks,
	    puw->num_tracks, puw->position, g_session);

	switch(err) {
	case SP_ERROR_OK:
		fprintf(stderr, "OK\n");
		break;
	case SP_ERROR_INVALID_INDATA:
		fprintf(stderr, "Invalid position\n");
		break;

	case SP_ERROR_PERMISSION_DENIED:
		fprintf(stderr, "Access denied\n");
		break;
	default:
		fprintf(stderr, "Other error (should not happen)\n");
		break;
	}
	return 0;
}
json_t *playlist_to_json(sp_playlist *playlist, json_t *object) {
  assert(sp_playlist_is_loaded(playlist));

  // Owner
  sp_user *owner = sp_playlist_owner(playlist);
  const char *username = sp_user_display_name(owner);
  sp_user_release(owner);
  json_object_set_new_nocheck(object, "creator",
                              json_string_nocheck(username));

  // URI
  size_t playlist_uri_len = strlen("spotify:user:"******":playlist:") +
                            strlen("284on3DVWeAxWkgVuzZKGt");
  char *playlist_uri = malloc(playlist_uri_len);

  if (playlist_uri == NULL) {
    return NULL;
  }

  sp_link *playlist_link = sp_link_create_from_playlist(playlist);
  sp_link_as_string(playlist_link, playlist_uri, playlist_uri_len);
  sp_link_release(playlist_link);
  json_object_set_new(object, "uri", 
                      json_string_nocheck(playlist_uri));
  free(playlist_uri);

  // Title
  const char *title = sp_playlist_name(playlist);
  json_object_set_new(object, "title",
                      json_string_nocheck(title));

  // Collaborative
  playlist_to_json_set_collaborative(playlist, object);

  // Description
  const char *description = sp_playlist_get_description(playlist);

  if (description != NULL) {
    json_object_set_new(object, "description",
                        json_string_nocheck(description));
  }

  // Number of subscribers
  int num_subscribers = sp_playlist_num_subscribers(playlist);
  json_object_set_new(object, "subscriberCount",
                      json_integer(num_subscribers));

  // Tracks
  json_t *tracks = json_array();
  json_object_set_new(object, "tracks", tracks);
  char track_uri[kTrackLinkLength];

  for (int i = 0; i < sp_playlist_num_tracks(playlist); i++) {
    sp_track *track = sp_playlist_track(playlist, i);
    sp_link *track_link = sp_link_create_from_track(track, 0);
    sp_link_as_string(track_link, track_uri, kTrackLinkLength);
    json_array_append(tracks, json_string_nocheck(track_uri));
    sp_link_release(track_link);
  }

  return object;
}
Beispiel #8
0
jobject createJPlaylist(JNIEnv *env, sp_playlist *playlist)
{
    jclass jClass;
    jobject playlistInstance;
    jmethodID jMethod;

    jClass = (*env)->FindClass(env, "jahspotify/media/Playlist");
    if (jClass == NULL)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not load jahnotify.media.Playlist\n");
        return NULL;
    }

    playlistInstance = (*env)->AllocObject(env,jClass);
    if (!playlistInstance)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not create instance of jahspotify.media.Playlistt\n");
        return NULL;
    }

    sp_link *playlistLink = sp_link_create_from_playlist(playlist);
    if (playlistLink)
    {
        jobject playlistJLink = createJLinkInstance(env,playlistLink);
        setObjectObjectField(env,playlistInstance,"id","Ljahspotify/media/Link;",playlistJLink);
        sp_link_release(playlistLink);
    }

    setObjectStringField(env,playlistInstance,"name",sp_playlist_name(playlist));

    sp_user *owner = sp_playlist_owner(playlist);
    if (owner)
    {
        setObjectStringField(env,playlistInstance,"author",sp_user_display_name(owner));
        sp_user_release(owner);
    }

    // Lookup the method now - saves us looking it up for each iteration of the loop
    jMethod = (*env)->GetMethodID(env,jClass,"addTrack","(Ljahspotify/media/Link;)V");

    if (jMethod == NULL)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not load method addTrack(track) on class Playlist\n");
        return NULL;
    }

    int numTracks = sp_playlist_num_tracks(playlist);
    int trackCounter = 0;
    for (trackCounter = 0 ; trackCounter < numTracks; trackCounter++)
    {
        sp_track *track = sp_playlist_track(playlist,trackCounter);
        if (track)
        {
            sp_track_add_ref(track);
            sp_link *trackLink = sp_link_create_from_track(track, 0);
            if (trackLink)
            {
                sp_link_add_ref(trackLink);
                jobject trackJLink = createJLinkInstance(env,trackLink);
                // Add it to the playlist
                (*env)->CallVoidMethod(env,playlistInstance,jMethod,trackJLink);
                sp_link_release(trackLink);
            }
            sp_track_release(track);

        }
    }

    return playlistInstance;

}
Beispiel #9
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;
}