Commit a94647f0 authored by Clément Stenac's avatar Clément Stenac

Misc cleanups in Qt4. (Closes:#736)

Fix m3u export
parent ff5e7fa7
......@@ -11,9 +11,11 @@ Important notes:
XXX: DETAILED INSTRUCTIONS HERE :XXX
* This version of VLC contains a new interface for Windows and Linux. This
interface lacks a few features that used to be present in vlc 0.8.6:
"Streaming wizard" and "VLM control". These features will be replaced
- "Streaming wizard" and "VLM control". These features will be replaced
by a better alternative in the next version. If you absolutely need these
features, we advise you to keep vlc 0.8.6
- Similarly, "Bookmarks" will be reintroduced in an improved version at a
later point
Changes:
--------
......
......@@ -30,10 +30,20 @@
/*************** Open dialogs **************/
#define I_POP_SEL_FILES N_("Select one or more files to open")
#define I_OP_OPF N_("Quick &Open File...")
#define I_OP_ADVOP N_("&Advanced Open...")
#define I_OP_OPDIR N_("Open &Directory...")
#define I_OP_SEL_FILES N_("Select one or more files to open")
/******************* Menus *****************/
#define I_MENU_INFO N_("Information...")
#define I_MENU_MSG N_("Messages...")
#define I_MENU_EXT N_("Extended settings...")
#define I_MENU_ABOUT N_("About VLC media player...")
/* Playlist popup */
#define I_POP_PLAY N_("Play")
#define I_POP_PREPARSE N_("Fetch information")
......@@ -44,6 +54,30 @@
#define I_POP_STREAM N_("Stream...")
#define I_POP_SAVE N_("Save...")
/*************** Playlist *************/
#define I_PL_LOOP N_("Repeat all")
#define I_PL_REPEAT N_("Repeat one")
#define I_PL_NOREPEAT N_("No repeat")
#define I_PL_RANDOM N_("Random")
#define I_PL_NORANDOM N_("No random")
#define I_PL_ADDPL N_("Add to playlist")
#define I_PL_ADDML N_("Add to media library")
#define I_PL_ADDF N_("Add file...")
#define I_PL_ADVADD N_("Advanced open...")
#define I_PL_ADDDIR N_("Add directory...")
#define I_PL_SAVE N_("Save playlist to file...")
#define I_PL_LOAD N_("Load playlist file...")
#define I_PL_SEARCH N_("Search")
#define I_PL_FILTER N_("Search filter")
#define I_PL_SD N_("Additional sources")
/*************** Preferences *************/
#define I_HIDDEN_ADV N_( "Some options are available but hidden. "\
......
......@@ -27,6 +27,8 @@
#include "components/playlist/panels.hpp"
#include "util/customwidgets.hpp"
#include <vlc_intf_strings.h>
#include <QTreeView>
#include <QPushButton>
#include <QHBoxLayout>
......@@ -53,7 +55,7 @@ StandardPLPanel::StandardPLPanel( BasePlaylistWidget *_parent,
view->setIconSize( QSize(20,20) );
view->setAlternatingRowColors( true );
view->header()->resizeSection( 0, 230 );
view->header()->resizeSection( 2, 60 );
view->header()->resizeSection( 1, 170 );
view->header()->setSortIndicatorShown( true );
view->header()->setClickable( true );
......@@ -95,9 +97,9 @@ StandardPLPanel::StandardPLPanel( BasePlaylistWidget *_parent,
QSpacerItem *spacer = new QSpacerItem( 10, 20 );buttons->addItem( spacer );
QLabel *filter = new QLabel( qfu( "&Search:" ) + " " );
QLabel *filter = new QLabel( qtr(I_PL_SEARCH) + " " );
buttons->addWidget( filter );
searchLine = new ClickLineEdit( qfu( "Playlist filter" ), 0 );
searchLine = new ClickLineEdit( qtr(I_PL_FILTER), 0 );
CONNECT( searchLine, textChanged(QString), this, search(QString));
buttons->addWidget( searchLine ); filter->setBuddy( searchLine );
......@@ -117,17 +119,17 @@ void StandardPLPanel::toggleRepeat()
if( model->hasRepeat() )
{
model->setRepeat( false ); model->setLoop( true );
repeatButton->setText( qtr( "Repeat All" ) );
repeatButton->setText( qtr(I_PL_LOOP) );
}
else if( model->hasLoop() )
{
model->setRepeat( false ) ; model->setLoop( false );
repeatButton->setText( qtr( "No Repeat" ) );
repeatButton->setText( qtr(I_PL_NOREPEAT) );
}
else
{
model->setRepeat( true );
repeatButton->setText( qtr( "Repeat One" ) );
repeatButton->setText( qtr(I_PL_REPEAT) );
}
}
......@@ -135,7 +137,7 @@ void StandardPLPanel::toggleRandom()
{
bool prev = model->hasRandom();
model->setRandom( !prev );
randomButton->setText( prev ? qtr( "No Random" ) : qtr( "Random" ) );
randomButton->setText( prev ? qtr(I_PL_NORANDOM) : qtr(I_PL_RANDOM) );
}
void StandardPLPanel::handleExpansion( const QModelIndex &index )
......@@ -159,13 +161,13 @@ void StandardPLPanel::setCurrentRootId( int _new )
currentRootId == THEPL->p_local_onelevel->i_id )
{
addButton->setEnabled( true );
addButton->setToolTip( qtr("Add to playlist" ) );
addButton->setToolTip( qtr(I_PL_ADDPL) );
}
else if( currentRootId == THEPL->p_ml_category->i_id ||
currentRootId == THEPL->p_ml_onelevel->i_id )
{
addButton->setEnabled( true );
addButton->setToolTip( qtr("Add to media library" ) );
addButton->setToolTip( qtr(I_PL_ADDML) );
}
else
addButton->setEnabled( false );
......@@ -177,15 +179,16 @@ void StandardPLPanel::add()
if( currentRootId == THEPL->p_local_category->i_id ||
currentRootId == THEPL->p_local_onelevel->i_id )
{
popup->addAction( qtr("Add file"), THEDP, SLOT( simplePLAppendDialog() ) );
popup->addAction( qtr("Advanced add"), THEDP, SLOT( PLAppendDialog() ) );
popup->addAction( qtr(I_PL_ADDF), THEDP, SLOT(simplePLAppendDialog()));
popup->addAction( qtr(I_PL_ADVADD), THEDP, SLOT(PLAppendDialog()) );
popup->addAction( qtr(I_PL_ADDDIR), THEDP, SLOT( PLAppendDir()) );
}
else if( currentRootId == THEPL->p_ml_category->i_id ||
currentRootId == THEPL->p_ml_onelevel->i_id )
{
popup->addAction( qtr("Add file"), THEDP, SLOT( simpleMLAppendDialog() ) );
popup->addAction( qtr("Advanced add"), THEDP, SLOT( MLAppendDialog() ) );
popup->addAction( qtr("Directory"), THEDP, SLOT( openMLDirectory() ) );
popup->addAction( qtr(I_PL_ADDF), THEDP, SLOT(simpleMLAppendDialog()));
popup->addAction( qtr(I_PL_ADVADD), THEDP, SLOT( MLAppendDialog() ) );
popup->addAction( qtr(I_PL_ADDDIR), THEDP, SLOT( MLAppendDir() ) );
}
popup->popup( QCursor::pos() );
}
......
......@@ -156,7 +156,7 @@ bool MessagesDialog::save()
p_intf->p_libvlc->psz_homedir,
"Texts / Logs (*.log *.txt);; All (*.*) ");
if( saveLogFileName != NULL )
if( !saveLogFileName.isNull() )
{
QFile file(saveLogFileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
......
......@@ -66,6 +66,12 @@ DialogsProvider::~DialogsProvider()
MediaInfoDialog::killInstance();
}
void DialogsProvider::quit()
{
p_intf->b_die = VLC_TRUE;
QApplication::quit();
}
void DialogsProvider::customEvent( QEvent *event )
{
if( event->type() == DialogEvent_Type )
......@@ -90,7 +96,7 @@ void DialogsProvider::customEvent( QEvent *event )
case INTF_DIALOG_MISCPOPUPMENU:
popupMenu( de->i_dialog ); break;
case INTF_DIALOG_FILEINFO:
MediaInfoDialog(); break;
mediaInfoDialog(); break;
case INTF_DIALOG_INTERACTION:
doInteraction( de->p_arg ); break;
case INTF_DIALOG_VLM:
......@@ -103,11 +109,51 @@ void DialogsProvider::customEvent( QEvent *event )
}
}
/****************************************************************************
* Individual simple dialogs
****************************************************************************/
void DialogsProvider::playlistDialog()
{
PlaylistDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::prefsDialog()
{
PrefsDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::extendedDialog()
{
ExtendedDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::messagesDialog()
{
MessagesDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::helpDialog()
{
HelpDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::aboutDialog()
{
AboutDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::mediaInfoDialog()
{
MediaInfoDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::bookmarksDialog()
{
}
/****************************************************************************
* All the open/add stuff
****************************************************************************/
void DialogsProvider::openDialog()
{
openDialog( 0 );
......@@ -123,49 +169,144 @@ void DialogsProvider::openDialog( int i_tab )
OpenDialog::getInstance( p_intf->p_sys->p_mi , p_intf )->showTab( i_tab );
}
void DialogsProvider::doInteraction( intf_dialog_args_t *p_arg )
/**** Simple open ****/
QStringList DialogsProvider::showSimpleOpen()
{
InteractionDialog *qdialog;
interaction_dialog_t *p_dialog = p_arg->p_dialog;
switch( p_dialog->i_action )
QString FileTypes;
FileTypes = _("Media Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_MEDIA;
FileTypes += ");;";
FileTypes += _("Video Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_VIDEO;
FileTypes += ");;";
FileTypes += _("Sound Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_AUDIO;
FileTypes += ");;";
FileTypes += _("PlayList Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_PLAYLIST;
FileTypes += ");;";
FileTypes += _("All Files");
FileTypes += " (*.*)";
FileTypes.replace(QString(";*"), QString(" *"));
return QFileDialog::getOpenFileNames( NULL, qfu(I_OP_SEL_FILES ),
p_intf->p_libvlc->psz_homedir, FileTypes );
}
void DialogsProvider::addFromSimple( bool pl, bool go)
{
QStringList files = DialogsProvider::showSimpleOpen();
int i = 0;
foreach( QString file, files )
{
case INTERACT_NEW:
qdialog = new InteractionDialog( p_intf, p_dialog );
p_dialog->p_private = (void*)qdialog;
if( !(p_dialog->i_status == ANSWERED_DIALOG) )
qdialog->show();
break;
case INTERACT_UPDATE:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( qdialog)
qdialog->update();
break;
case INTERACT_HIDE:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( qdialog )
qdialog->hide();
p_dialog->i_status = HIDDEN_DIALOG;
break;
case INTERACT_DESTROY:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( !p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR )
delete qdialog;
p_dialog->i_status = DESTROYED_DIALOG;
break;
const char * psz_utf8 = qtu( file );
playlist_Add( THEPL, psz_utf8, NULL,
go ? ( PLAYLIST_APPEND | ( i ? 0 : PLAYLIST_GO ) |
( i ? PLAYLIST_PREPARSE : 0 ) )
: ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ),
PLAYLIST_END,
pl ? VLC_TRUE : VLC_FALSE );
i++;
}
}
void DialogsProvider::quit()
void DialogsProvider::simplePLAppendDialog()
{
p_intf->b_die = VLC_TRUE;
QApplication::quit();
addFromSimple( true, false );
}
void DialogsProvider::MediaInfoDialog()
void DialogsProvider::simpleMLAppendDialog()
{
MediaInfoDialog::getInstance( p_intf )->toggleVisible();
addFromSimple( false, false );
}
void DialogsProvider::simpleOpenDialog()
{
addFromSimple( true, true );
}
void DialogsProvider::openPlaylist()
{
QStringList files = showSimpleOpen();
foreach( QString file, files )
{
playlist_Import( THEPL, qtu(file) );
}
}
void DialogsProvider::savePlaylist()
{
QFileDialog *qfd = new QFileDialog( NULL,
qtr("Choose a filename to save playlist"),
p_intf->p_libvlc->psz_homedir,
qfu("XSPF playlist (*.xspf);; ") +
qfu("M3U playlist (*.m3u);; Any (*.*) ") );
qfd->setFileMode( QFileDialog::AnyFile );
qfd->setAcceptMode( QFileDialog::AcceptSave );
qfd->setConfirmOverwrite( true );
if( qfd->exec() == QDialog::Accepted )
{
if( qfd->selectedFiles().count() > 0 )
{
char *psz_module, *psz_m3u = "export-m3u",
*psz_xspf = "export-xspf";
QString file = qfd->selectedFiles().first();
QString filter = qfd->selectedFilter();
if( file.contains(".xsp") ||
( filter.contains(".xspf") && !file.contains(".m3u") ) )
{
psz_module = psz_xspf;
if( !file.contains( ".xsp" ) )
file.append( ".xspf" );
}
else
{
psz_module = psz_m3u;
if( !file.contains( ".m3u" ) )
file.append( ".m3u" );
}
playlist_Export( THEPL, qtu(file), THEPL->p_playlist_category,
psz_module);
}
}
delete qfd;
}
static void openDirectory( intf_thread_t* p_intf, bool pl, bool go )
{
QString dir = QFileDialog::getExistingDirectory ( 0,
_("Open directory") );
input_item_t *p_input = input_ItemNewExt( THEPL, qtu(dir), NULL,
0, NULL, -1 );
playlist_AddInput( THEPL, p_input,
go ? ( PLAYLIST_APPEND | PLAYLIST_GO ) : PLAYLIST_APPEND,
PLAYLIST_END, pl);
input_Read( THEPL, p_input, VLC_FALSE );
}
void DialogsProvider::PLAppendDir()
{
openDirectory( p_intf, true, false );
}
void DialogsProvider::MLAppendDir()
{
openDirectory( p_intf, false , false );
}
/****************************************************************************
* Sout emulation
****************************************************************************/
void DialogsProvider::streamingDialog()
{
OpenDialog *o = new OpenDialog( p_intf->p_sys->p_mi, p_intf, true );
......@@ -189,29 +330,9 @@ void DialogsProvider::streamingDialog()
delete o;
}
void DialogsProvider::prefsDialog()
{
PrefsDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::extendedDialog()
{
ExtendedDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::messagesDialog()
{
MessagesDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::helpDialog()
{
HelpDialog::getInstance( p_intf )->toggleVisible();
}
void DialogsProvider::aboutDialog()
{
AboutDialog::getInstance( p_intf )->toggleVisible();
}
/****************************************************************************
* Menus / Interaction
****************************************************************************/
void DialogsProvider::menuAction( QObject *data )
{
......@@ -234,115 +355,43 @@ void DialogsProvider::SDMenuAction( QString data )
}
void DialogsProvider::simplePLAppendDialog()
{
QStringList files = showSimpleOpen();
QString file;
foreach( file, files )
{
const char * psz_utf8 = qtu( file );
playlist_Add( THEPL, psz_utf8, NULL,
PLAYLIST_APPEND | PLAYLIST_PREPARSE, PLAYLIST_END, VLC_TRUE );
}
}
void DialogsProvider::simpleMLAppendDialog()
{
QStringList files = showSimpleOpen();
QString file;
foreach( file, files )
{
const char * psz_utf8 = qtu( file );
playlist_Add( THEPL, psz_utf8, psz_utf8,
PLAYLIST_APPEND | PLAYLIST_PREPARSE, PLAYLIST_END,
VLC_TRUE);
}
}
void DialogsProvider::simpleOpenDialog()
{
QStringList files = showSimpleOpen();
QString file;
for( size_t i = 0 ; i< files.size(); i++ )
{
const char * psz_utf8 = qtu( files[i] );
/* Play the first one, parse and enqueue the other ones */
playlist_Add( THEPL, psz_utf8, NULL,
PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO) |
( i ? PLAYLIST_PREPARSE : 0 ),
PLAYLIST_END, VLC_TRUE );
}
}
void DialogsProvider::openPlaylist()
void DialogsProvider::doInteraction( intf_dialog_args_t *p_arg )
{
QStringList files = showSimpleOpen();
QString file;
for( size_t i = 0 ; i< files.size(); i++ )
InteractionDialog *qdialog;
interaction_dialog_t *p_dialog = p_arg->p_dialog;
switch( p_dialog->i_action )
{
const char * psz_utf8 = qtu( files[i] );
playlist_Import( THEPL, psz_utf8 );
case INTERACT_NEW:
qdialog = new InteractionDialog( p_intf, p_dialog );
p_dialog->p_private = (void*)qdialog;
if( !(p_dialog->i_status == ANSWERED_DIALOG) )
qdialog->show();
break;
case INTERACT_UPDATE:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( qdialog)
qdialog->update();
break;
case INTERACT_HIDE:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( qdialog )
qdialog->hide();
p_dialog->i_status = HIDDEN_DIALOG;
break;
case INTERACT_DESTROY:
qdialog = (InteractionDialog*)(p_dialog->p_private);
if( !p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR )
delete qdialog;
p_dialog->i_status = DESTROYED_DIALOG;
break;
}
}
void DialogsProvider::openDirectory()
{
QString dir = QFileDialog::getExistingDirectory ( 0,
_("Open directory") );
const char *psz_utf8 = qtu( dir );
input_item_t *p_input = input_ItemNewExt( THEPL, psz_utf8, NULL,
0, NULL, -1 );
playlist_AddInput( THEPL, p_input, PLAYLIST_APPEND, PLAYLIST_END, VLC_TRUE);
input_Read( THEPL, p_input, VLC_FALSE );
}
void DialogsProvider::openMLDirectory()
{
QString dir = QFileDialog::getExistingDirectory ( 0,
_("Open directory") );
const char *psz_utf8 = qtu( dir );
input_item_t *p_input = input_ItemNewExt( THEPL, psz_utf8, NULL,
0, NULL, -1 );
playlist_AddInput( THEPL, p_input, PLAYLIST_APPEND, PLAYLIST_END,
VLC_FALSE );
input_Read( THEPL, p_input, VLC_FALSE );
}
QStringList DialogsProvider::showSimpleOpen()
{
QString FileTypes;
FileTypes = _("Media Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_MEDIA;
FileTypes += ");;";
FileTypes += _("Video Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_VIDEO;
FileTypes += ");;";
FileTypes += _("Sound Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_AUDIO;
FileTypes += ");;";
FileTypes += _("PlayList Files");
FileTypes += " ( ";
FileTypes += EXTENSIONS_PLAYLIST;
FileTypes += ");;";
FileTypes += _("All Files");
FileTypes += " (*.*)";
FileTypes.replace(QString(";*"), QString(" *"));
return QFileDialog::getOpenFileNames( NULL, qfu(I_POP_SEL_FILES ),
p_intf->p_libvlc->psz_homedir, FileTypes );
}
void DialogsProvider::switchToSkins()
{
var_SetString( p_intf, "intf-switch", "skins2" );
}
void DialogsProvider::bookmarksDialog()
{
}
void DialogsProvider::popupMenu( int i_dialog )
{
}
......@@ -70,11 +70,12 @@ private:
intf_thread_t *p_intf;
static DialogsProvider *instance;
QStringList showSimpleOpen();
void addFromSimple( bool, bool );
public slots:
void playlistDialog();
void bookmarksDialog();
void MediaInfoDialog();
void mediaInfoDialog();
void prefsDialog();
void extendedDialog();
void messagesDialog();
......@@ -92,8 +93,9 @@ public slots:
void SDMenuAction( QString );
void streamingDialog();
void openPlaylist();
void openDirectory();
void openMLDirectory();
void savePlaylist();
void PLAppendDir();
void MLAppendDir();
void quit();
void switchToSkins();
void helpDialog();
......
......@@ -27,8 +27,9 @@
#include <QActionGroup>
#include <QSignalMapper>
#include "main_interface.hpp"
#include <vlc_intf_strings.h>
#include "main_interface.hpp"
#include "menus.hpp"
#include "dialogs_provider.hpp"
#include "input_manager.hpp"
......@@ -155,8 +156,8 @@ QMenu *QVLCMenu::PlaylistMenu( MainInterface *mi, intf_thread_t *p_intf )
menu->addMenu( SDMenu( p_intf ) );
menu->addSeparator();
DP_SADD( qtr( "Open playlist file"), "", "", openPlaylist() );
// DP_SADD( qtr( "Save playlist to file" ), "", "", savePlaylist() );
DP_SADD( qtr(I_PL_LOAD), "", "", openPlaylist() );
DP_SADD( qtr(I_PL_SAVE), "", "", savePlaylist() );
menu->addSeparator();
menu->addAction( qtr("Undock from interface"), mi,
SLOT( undockPlaylist() ) );
......@@ -175,10 +176,9 @@ QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, MainInterface *mi,
menu->addMenu( intfmenu );
menu->addSeparator();
}
DP_SADD( qtr("Messages" ), "", "", messagesDialog() );
DP_SADD( qtr("Information") , "", "", MediaInfoDialog() );
DP_SADD( qtr("Bookmarks"), "", "", bookmarksDialog() );
DP_SADD( qtr("Extended settings"), "","",extendedDialog() );
DP_SADD( qtr(I_MENU_MSG), "", "", messagesDialog() );
DP_SADD( qtr(I_MENU_INFO) , "", "", mediaInfoDialog() );
DP_SADD( qtr(I_MENU_EXT), "","",extendedDialog() );
if( mi )
{
menu->addSeparator();
......@@ -290,7 +290,7 @@ QMenu *QVLCMenu::NavigMenu( intf_thread_t *p_intf, QMenu *current )
QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf )
{
QMenu *menu = new QMenu();
menu->setTitle( qtr( "Additional sources" ) );
menu->setTitle( qtr(I_PL_SD) );
vlc_list_t *p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE,
FIND_ANYWHERE );
int i_num = 0;
......@@ -331,7 +331,7 @@ QMenu *QVLCMenu::HelpMenu()
QMenu *menu = new QMenu();
DP_SADD( qtr("Help") , "", "", helpDialog() );
menu->addSeparator();
DP_SADD( qtr("About VLC media player..."), "", "", aboutDialog() );
DP_SADD( qtr(I_MENU_ABOUT), "", "", aboutDialog() );
return menu;
}
......
......@@ -42,24 +42,26 @@ int Export_M3U ( vlc_object_t * );
/*****************************************************************************
* Export_M3U: main export function
*****************************************************************************/
int Export_M3U( vlc_object_t *p_this )
static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
playlist_item_t *p_root )
{
playlist_t *p_playlist = (playlist_t*)p_this;
playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private;
int i, j;
msg_Dbg(p_playlist, "saving using M3U format");
/* Write header */
fprintf( p_export->p_file, "#EXTM3U\n" );
/* Go through the playlist and add items */
for( i = 0; i< p_export->p_root->i_children ; i++)
for( i = 0; i< p_root->i_children ; i++)
{
playlist_item_t *p_current = p_export->p_root->pp_children[i];
playlist_item_t *p_current = p_root->pp_children[i];
if( p_current->i_flags & PLAYLIST_SAVE_FLAG )
continue;
if( p_current->i_children >= 0 )
{
DoChildren( p_playlist, p_export, p_current );
continue;
}
assert( p_current->p_input->psz_uri );
/* General info */
if( p_current->p_input->psz_name &&
strcmp( p_current->p_input->psz_uri,
......@@ -99,5 +101,19 @@ int Export_M3U( vlc_object_t *p_this )
fprintf( p_export->p_file, "%s\n",
p_current->p_input->psz_uri );
}
}
int Export_M3U( vlc_object_t *p_this )
{
playlist_t *p_playlist = (playlist_t*)p_this;
playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private;
msg_Dbg(p_playlist, "saving using M3U format");
/* Write header */
fprintf( p_export->p_file, "#EXTM3U\n" );
DoChildren( p_playlist, p_export, p_export->p_root );
return VLC_SUCCESS;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment