⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playlist.c

📁 一个开源的音频解码源程序
💻 C
字号:
/* *  Playlist implementation * *  Copyright (C) 2003 Mason Kidd <mrkidd@mrkidd.com> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */#include <gnome.h>#include <libgnomevfs/gnome-vfs.h>#include "main.h"#include "playlist.h"enum {	COLUMN_TITLE,	COLUMN_TIME,	COLUMN_URI,	N_COLUMNS};GtkListStore *liststore_playlist;void playlist_create_list (GtkTreeView *treeview){	GtkCellRenderer *renderer;	GtkTreeViewColumn *column;		liststore_playlist = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);		gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (liststore_playlist));	renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ("Title", renderer, "text", COLUMN_TITLE, NULL);	gtk_tree_view_column_set_expand (column, TRUE);	gtk_tree_view_append_column (treeview, column);		renderer = gtk_cell_renderer_text_new ();	column = gtk_tree_view_column_new_with_attributes ("Time", renderer, "text", COLUMN_TIME, NULL);	gtk_tree_view_append_column (treeview, column);}void playlist_add_item (char *title, char *time, char *uri){	GtkTreeIter iter_add;	GnomeVFSFileInfo file_info;	GnomeVFSResult vfs_result;		g_print ("Adding: %s\n", uri);	gtk_list_store_append (liststore_playlist, &iter_add);	gtk_list_store_set (liststore_playlist, &iter_add,				COLUMN_TITLE, title,				COLUMN_TIME, time,				COLUMN_URI, uri,				-1);}void playlist_add_pls (char *uri){	GnomeVFSResult vfs_result;	int file_size, i, number_of_entries, ret_val;	char *file_contents, **file_lines, *delimiter, **file_line;		vfs_result = gnome_vfs_read_entire_file (uri, &file_size, &file_contents);	/* check return */	delimiter = "\n";	file_lines = g_strsplit (file_contents, delimiter, 0);	g_free (file_contents);	ret_val = g_ascii_strcasecmp (file_lines[0], "[playlist]");	if (ret_val != 0)		return;	file_line = g_strsplit (file_lines[1], "=", 2);	ret_val = g_ascii_strcasecmp (file_line[0], "numberofentries");	if (ret_val != 0)		return;		number_of_entries = g_strtod (file_line[1], NULL);	if (number_of_entries <= 0)		return;	for (i = 2; i < (number_of_entries * 2); i++)	{		file_line = g_strsplit (file_lines[i], "=", 2);		if (g_ascii_strncasecmp (file_line[0], "file", 4) == 0)		{			char *t_artist = NULL, *t_title = NULL, *t_format = NULL;			long t_duration;			char *s_duration;                                 			gap_get_metadata_uri (file_line[1], &t_artist, &t_title, &t_duration);			t_format = g_strdup_printf ("%s - %s", t_artist, t_title);			s_duration = g_strdup_printf ("%d:%02d", t_duration / 60, t_duration %60);			playlist_add_item (t_format, s_duration, file_line[1]);			g_free (t_format);			g_free (t_artist);			g_free (t_title);		}	}		g_strfreev (file_lines);	g_strfreev (file_line);}void playlist_remove_selected (GtkTreeView *treeview){	GtkTreeSelection *current_selection;	GtkTreeIter iter;		current_selection = gtk_tree_view_get_selection (treeview);	gtk_tree_selection_get_selected (current_selection, NULL, &iter);	gtk_list_store_remove (liststore_playlist, &iter);}void playlist_play_selected (void){	GtkTreeSelection *current_selection;	GtkTreeIter iter;	char *selected_uri;	char *selected_title;	GtkTreeModel *tree_model;		tree_model = gtk_tree_view_get_model (playlist_treeview);	current_selection = gtk_tree_view_get_selection (playlist_treeview);	gtk_tree_selection_get_selected (current_selection, NULL, &iter);		gtk_tree_model_get (tree_model, &iter, 0, &selected_title, -1);	gtk_tree_model_get (tree_model, &iter, 2, &selected_uri, -1);		gap_open (gamp_gp, selected_uri);	update_currently_playing (selected_title, FALSE);	gap_play (gamp_gp);}void playlist_play_and_sel_first (void){	GtkTreeIter iter;	GtkTreePath *path;	char *selected_uri;	char *selected_title;	GtkTreeModel *tree_model;		tree_model = gtk_tree_view_get_model (playlist_treeview);	path = gtk_tree_path_new_first ();	gtk_tree_view_set_cursor (playlist_treeview, path, NULL, FALSE);	gtk_tree_model_get_iter_first (tree_model, &iter);		gtk_tree_model_get (tree_model, &iter, 0, &selected_title, -1);	gtk_tree_model_get (tree_model, &iter, 2, &selected_uri, -1);	gap_open (gamp_gp, selected_uri);	update_currently_playing (selected_title, FALSE);	gap_play (gamp_gp);}void playlist_clear (void){	gtk_list_store_clear (liststore_playlist);}void playlist_next (void){	GtkTreeSelection *current_selection;	GtkTreeIter iter;	gboolean ret_val;	GtkTreeModel *tree_model;	char *selected_uri, *selected_title;	tree_model = gtk_tree_view_get_model (playlist_treeview);	current_selection = gtk_tree_view_get_selection (playlist_treeview);	gtk_tree_selection_get_selected (current_selection, NULL, &iter);	ret_val = gtk_tree_model_iter_next (tree_model, &iter);	if (ret_val == FALSE)	{		update_currently_playing ("Not Playing", FALSE);	}	else	{		gtk_tree_selection_select_iter (current_selection, &iter);		gtk_tree_model_get (tree_model, &iter, 2, &selected_uri, -1);		gtk_tree_model_get (tree_model, &iter, 0, &selected_title, -1);			gap_open (gamp_gp, selected_uri);		update_currently_playing (selected_title, FALSE);		gap_play (gamp_gp);			g_free (selected_uri);		g_free (selected_title);	}}void playlist_previous (void){	GtkTreeSelection *current_selection;	GtkTreeIter iter;	GtkTreePath *path;	GtkTreeModel *tree_model;	char *selected_uri, *selected_title;	tree_model = gtk_tree_view_get_model (playlist_treeview);	current_selection = gtk_tree_view_get_selection (playlist_treeview);	gtk_tree_selection_get_selected (current_selection, NULL, &iter);	path = gtk_tree_model_get_path (tree_model, &iter);	if (!gtk_tree_path_prev (path))	{		gtk_tree_path_free (path);		return;	}	gtk_tree_model_get_iter (tree_model, &iter, path);	gtk_tree_selection_select_iter (current_selection, &iter);	gtk_tree_model_get (tree_model, &iter, 2, &selected_uri, -1);	gtk_tree_model_get (tree_model, &iter, 0, &selected_title, -1);	gap_open (gamp_gp, selected_uri);	update_currently_playing (selected_title, FALSE);	gap_play (gamp_gp);		g_free (selected_uri);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -