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; }
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); } } }
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); }