summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer3/playlist.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/noncore/multimedia/opieplayer3/playlist.cpp b/noncore/multimedia/opieplayer3/playlist.cpp
index 6f2e668..fe2dde3 100644
--- a/noncore/multimedia/opieplayer3/playlist.cpp
+++ b/noncore/multimedia/opieplayer3/playlist.cpp
@@ -70,193 +70,197 @@ void PlaylistItem::Video(bool y)
PlaylistItem::~PlaylistItem()
{
}
/* PlaylistView Methods */
PlaylistView::PlaylistView(QWidget *parent, const char *name)
: QListView(parent,name)
{
// columnLabels << tr("FullName");
columnLabels << tr(""); // icon
columnLabels << tr("File");
columnLabels << tr("Playtime");
columnLabels << tr("Artist");
columnLabels << tr("Album");
columnLabels << tr("Title");
columnLabels << tr("Type");
columnLabels << tr("Size");
for (QStringList::Iterator it = columnLabels.begin(); it != columnLabels.end(); ++it) {
addColumn(*it);
}
m_Infolib=0;
setAllColumnsShowFocus(true);
setSelectionMode(Single);
setSorting(-1);
m_lastItem = 0;
m_lastDir = QDir::homeDirPath();
}
PlaylistView::~PlaylistView()
{
if (m_Infolib) delete m_Infolib;
}
void PlaylistView::checkLib()
{
if (!m_Infolib) {
m_Infolib = new XINE::Lib(XINE::Lib::InitializeImmediately);
connect(m_Infolib,SIGNAL(stopped()),this,SLOT(slotDummyStop()));
m_Infolib->ensureInitialized();
}
}
void PlaylistView::slotDummyStop()
{
odebug << "void PlaylistView::slotDummyStop()" << oendl;
}
void PlaylistView::slotAddFile(const DocLnk&aLink)
{
QFileInfo f(aLink.file());
if (f.extension(FALSE).lower()=="m3u"||f.extension(FALSE).lower()=="pls") {
readPlayList(aLink.file());
} else {
addFile(aLink.file(),aLink.name());
}
emit contentChanged(childCount());
}
void PlaylistView::addFile(const QString&aFile,const QString&aName)
{
QFileInfo fileInfo(aFile);
if (!fileInfo.exists()) return;
checkLib();
QString name = aName;
if (name.isEmpty()) {
name = fileInfo.fileName();
}
int i = m_Infolib->setfile(aFile.utf8().data());
/* realy! otherwise we get an "stopped" signal when playing! - I don't know why */
m_Infolib->stop();
odebug << "File set: " << i << " ("<<aFile.utf8().data()<<")"<<oendl;
if (i<1) {
i = m_Infolib->error();
odebug << "Errorcode: " << i << oendl;
QString msg;
msg = QString(tr("Error open file %1: ")).arg(name);
switch (i) {
case 1:
msg += tr("No input plugin");
break;
case 2:
msg += tr("No demuxer plugin");
break;
case 3:
msg += tr("Demuxer failed");
break;
case 4:
msg+=tr("Malformed mrl");
break;
default:
msg += tr("Unknown error");
break;
}
QMessageBox::warning(0,tr("Error reading fileheader"),msg);
return;
}
- m_lastItem = m_items.last();
+ if (m_items.count()>0) {
+ m_lastItem = m_items.last();
+ } else {
+ m_lastItem = 0;
+ }
PlaylistItem*_it = currentItem();
if (m_lastItem) {
m_lastItem = new PlaylistItem(aFile,this,m_lastItem);
} else {
m_lastItem = new PlaylistItem(aFile,this);
}
m_lastItem->setExpandable(false);
m_lastItem->setText(1,name);
QString codec = m_Infolib->metaInfo(6);
if (codec.isEmpty()) {
codec = m_Infolib->metaInfo(7);
}
// codec
m_lastItem->setText(COL_TYPE,codec);
// title
m_lastItem->setText(COL_TITLE,m_Infolib->metaInfo(0));
// artist
m_lastItem->setText(COL_ARTIST,m_Infolib->metaInfo(2));
// album
m_lastItem->setText(COL_ALBUM,m_Infolib->metaInfo(4));
int l = m_Infolib->length();
int h = l/3600;
l-=h*3600;
int m = l/60;
l-=m*60;
codec = "";
if (h>0) {
codec.sprintf("%2i:%2i:%2i h",h,m,l);
} else {
codec.sprintf("%02i:%02i m",m,l);
}
// time
m_lastItem->setText(COL_TIME,codec);
m_lastItem->Video(m_Infolib->hasVideo());
m_items.append(m_lastItem);
if (_it==NULL) {
setSelected(m_lastItem,true);
}
}
void PlaylistView::slotAppendDir()
{
QString _dir = Opie::Ui::OFileDialog::getDirectory(Opie::Ui::OFileSelector::Extended,m_lastDir,0,m_lastDir);
if (_dir.isEmpty()) return;
m_lastDir = _dir;
QDir sDir(_dir);
QStringList list = sDir.entryList(DEFAULT_FILE_TYPES,QDir::Files,QDir::Name | QDir::IgnoreCase);
for (unsigned i = 0; i < list.count();++i) {
addFile(_dir+QString("/")+list[i]);
}
emit contentChanged(childCount());
}
void PlaylistView::slotOpenM3u()
{
QStringList types;
QMap<QString, QStringList> mimeTypes;
types << "audio/x-mpegurl";
mimeTypes.insert("Playlists",types);
// mimeTypes.insert("All",types);
QString fileName= Opie::Ui::OFileDialog::getOpenFileName(Opie::Ui::OFileSelector::EXTENDED,
m_lastDir,"playlist.m3u", mimeTypes);
if (fileName.isEmpty()) {
return;
}
readPlayList(fileName);
emit contentChanged(childCount());
}
void PlaylistView::readPlayList(const QString&fileName)
{
QFileInfo f(fileName);
Om3u _om3u(fileName, IO_ReadOnly);
if (f.extension(FALSE).lower()=="m3u") {
_om3u.readM3u();
} else if (f.extension(FALSE).lower()=="pls") {
_om3u.readPls();
}
for (unsigned int j=0; j<_om3u.count();++j) {
addFile(_om3u[j]);
}
}
void PlaylistView::slotSaveAsM3u()
{
QStringList types;
QMap<QString, QStringList> mimeTypes;
types << "audio/x-mpegurl";
mimeTypes.insert("Playlists",types);
QString fileName= Opie::Ui::OFileDialog::getSaveFileName(Opie::Ui::OFileSelector::EXTENDED,
m_lastDir,"playlist.m3u", mimeTypes);
odebug << "Save as " << fileName << oendl;
if (fileName.isEmpty()) {