static int set_streaming_playlist(struct action_event *event)  
{
	if (obtain_instanceid(event, NULL) < 0) {
		return -1;
	}

	char *playlistdata = upnp_get_string(event, "PlaylistData");
	if (playlistdata == NULL) {
		return -1;
	}
	int playlistdatalength = atoi(upnp_get_string(event, "PlaylistDataLength"));
	/*char *playlistmimetype = upnp_get_string(event, "PlaylistMIMEType");
	if (playlistmimetype == NULL) {
		free(playlistdata);
		return -1;
	} */
	char *playliststep = upnp_get_string(event, "PlaylistStep");  //Initial Continue Stop Reset
	if (playliststep == NULL) {
		free(playlistdata);
	//	free(playlistmimetype);
		return -1;
	}

	int rc = 0;
	service_lock();
	if(strcmp(playliststep, "Initial") == 0){
		//TODO:
		rc = write_playlist(event, playlistdata, playlistdatalength, "w");
		
	}

	if(strcmp(playliststep, "Continue") == 0){
		rc = write_playlist(event, playlistdata, playlistdatalength, "a");
		
	}

	if(strcmp(playliststep, "Stop") == 0){
		//TODO:  Indicates that the current streaming playlist operation will end when all pending playlist data at then device is consumed.
		if(playlistdata)
			rc = write_playlist(event, playlistdata, playlistdatalength,  "a");
		output_set_playlist(M3U_STREAMINGPLAYLIST_PATH);
	}

	if(strcmp(playliststep, "Reset") == 0){
		//TODO: Indicates that processing of the current streaming playlist ends immediately. any pending playlist data for the streaming playlist is discarded.
		output_set_playlist(M3U_STREAMINGPLAYLIST_PATH);
	}

	if(!rc)
		replace_var(TRANSPORT_VAR_AAT_PLAYLIST_STEP, playliststep);
	service_unlock();
	if(playlistdata)
		free(playlistdata);
	free(playliststep);
	return rc;

}
Ejemplo n.º 2
0
void
handle_dbus_message(DBusMessage *msg)
{
    int state;
    char **new_uris;
    int uri_count;
    GstState pipeline_state;
    int hemp_state;
    int i;
    int new_head = 0; /* is there a new hotlist head?
                         If so, play means skip */

    if (!strncmp (HEMP_DBUS_DESTINATION, dbus_message_get_destination(msg),
                  strlen(HEMP_DBUS_DESTINATION))) {
        dbus_message_get_args (msg, NULL,
                               DBUS_TYPE_INT32, &state,
                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
                               &new_uris, &uri_count,
                               DBUS_TYPE_INVALID);
        for (i = 0; i<uri_count; i++) {
            g_queue_push_head(hotlist, 
                              new_playlist_entry(new_uris[i]));
            new_head = 1; 
        }
        if (uri_count) write_playlist();

        if (!GST_IS_ELEMENT(pipeline)) init_pipeline();
        gst_element_get_state(GST_ELEMENT (pipeline),
                              &pipeline_state,
                              NULL,
                              GST_CLOCK_TIME_NONE);
        if (pipeline_state == GST_STATE_PAUSED) {
            hemp_state = HEMP_STATE_PAUSED;
        } else {
            hemp_state = HEMP_STATE_PLAYING;
        }

        switch (state) {
            case HEMP_STATE_TOGGLE:
                if (pipeline_state == GST_STATE_PLAYING) {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PAUSED);
                } else {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PLAYING);
                }
                break;
            case HEMP_STATE_SKIP:
                next(hemp_state, 1);
                break;
            case HEMP_STATE_PREVIOUS:
                previous(hemp_state);
                break;
            case HEMP_STATE_PLAYING:
                if (new_head) {
                    next(HEMP_STATE_PLAYING, 0);
                } else {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PLAYING);
                }
                break;
            case HEMP_STATE_PAUSED:
                gst_element_set_state (GST_ELEMENT (pipeline),
                                       GST_STATE_PAUSED);
                break;
            case HEMP_STATE_STOP:
                drop_pipeline(0);
                break;
            case HEMP_STATE_PING:
                printf("ping!\n");
                break;
            default:
                printf("Unknown state %d\n", state);
       }
    }
}
Ejemplo n.º 3
0
static void
write_button_clicked (EtPlaylistDialog *self)
{
    EtPlaylistDialogPrivate *priv;
    gchar *playlist_name = NULL;
    gchar *playlist_path_utf8;      // Path
    gchar *playlist_basename_utf8;  // Filename
    gchar *playlist_name_utf8;      // Path + filename
    gchar *temp;
    GtkWidget *msgdialog;

    priv = et_playlist_dialog_get_instance_private (self);

    /* Check if playlist name was filled. */
    if (g_settings_get_boolean (MainSettings, "playlist-use-mask")
        && *(gtk_entry_get_text (GTK_ENTRY (priv->name_mask_entry))) == '\0')
    {
        /* TODO: Can this happen? */
        g_settings_set_boolean (MainSettings, "playlist-use-mask", FALSE);
    }

    // Path of the playlist file (may be truncated later if PLAYLIST_CREATE_IN_PARENT_DIR is TRUE)
    temp = g_file_get_path (et_application_window_get_current_path (ET_APPLICATION_WINDOW (MainWindow)));
    playlist_path_utf8 = g_filename_display_name (temp);
    g_free (temp);

    /* Build the playlist filename. */
    if (g_settings_get_boolean (MainSettings, "playlist-use-mask"))
    {
        EtConvertSpaces convert_mode;

        if (!ETCore->ETFileList)
            return;

        playlist_name = g_settings_get_string (MainSettings,
                                               "playlist-filename-mask");

        /* Generate filename from tag of the current selected file (FIXME). */
        temp = filename_from_display (playlist_name);
        g_free (playlist_name);
        playlist_basename_utf8 = et_scan_generate_new_filename_from_mask (ETCore->ETFileDisplayed,
                                                                          temp,
                                                                          FALSE);
        g_free (temp);

        /* Replace Characters (with scanner). */
        convert_mode = g_settings_get_enum (MainSettings,
                                            "rename-convert-spaces");

        switch (convert_mode)
        {
            case ET_CONVERT_SPACES_SPACES:
                Scan_Convert_Underscore_Into_Space (playlist_basename_utf8);
                Scan_Convert_P20_Into_Space (playlist_basename_utf8);
                break;
            case ET_CONVERT_SPACES_UNDERSCORES:
                Scan_Convert_Space_Into_Underscore (playlist_basename_utf8);
                break;
            case ET_CONVERT_SPACES_REMOVE:
                Scan_Remove_Spaces (playlist_basename_utf8);
                break;
            /* FIXME: Check that this is intended. */
            case ET_CONVERT_SPACES_NO_CHANGE:
            default:
                g_assert_not_reached ();
                break;
        }
    }else // PLAYLIST_USE_DIR_NAME
    {

        if ( strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S)==0 )
        {
            playlist_basename_utf8 = g_strdup("playlist");
        }else
        {
            gchar *tmp_string = g_strdup(playlist_path_utf8);
            // Remove last '/'
            if (tmp_string[strlen(tmp_string)-1]==G_DIR_SEPARATOR)
                tmp_string[strlen(tmp_string)-1] = '\0';
            // Get directory name
            temp = g_path_get_basename(tmp_string);
            playlist_basename_utf8 = g_strdup(temp);
            g_free(tmp_string);
            g_free(temp);
        }

    }

    /* Must be placed after "Build the playlist filename", as we can truncate
     * the path! */
    if (g_settings_get_boolean (MainSettings, "playlist-parent-directory"))
    {
        if ( (strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S) != 0) )
        {
            gchar *tmp;
            // Remove last '/'
            if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
                playlist_path_utf8[strlen(playlist_path_utf8)-1] = '\0';
            // Get parent directory
            if ( (tmp=strrchr(playlist_path_utf8,G_DIR_SEPARATOR)) != NULL )
                *(tmp + 1) = '\0';
        }
    }

    // Generate path + filename of playlist
    if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
        playlist_name_utf8 = g_strconcat(playlist_path_utf8,playlist_basename_utf8,".m3u",NULL);
    else
        playlist_name_utf8 = g_strconcat(playlist_path_utf8,G_DIR_SEPARATOR_S,playlist_basename_utf8,".m3u",NULL);

    g_free(playlist_path_utf8);
    g_free(playlist_basename_utf8);

    playlist_name = filename_from_display(playlist_name_utf8);

    {
        GFile *file = g_file_new_for_path (playlist_name);
        GError *error = NULL;

        if (!write_playlist (self, file, &error))
        {
            // Writing fails...
            msgdialog = gtk_message_dialog_new (GTK_WINDOW (self),
                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                               GTK_MESSAGE_ERROR,
                                               GTK_BUTTONS_CLOSE,
                                               _("Cannot write playlist file ‘%s’"),
                                               playlist_name_utf8);
            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
                                                      "%s", error->message);
            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Playlist File Error"));

            gtk_dialog_run(GTK_DIALOG(msgdialog));
            gtk_widget_destroy(msgdialog);
            g_error_free (error);
        }else
        {
            gchar *msg;
            msg = g_strdup_printf (_("Wrote playlist file ‘%s’"),
                                   playlist_name_utf8);
            et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
                                                      msg, TRUE);
            g_free (msg);
        }
        g_object_unref (file);
    }
    g_free(playlist_name_utf8);
    g_free(playlist_name);
}