Medialib now works a bit better and has a very nice status bar.

This commit is contained in:
Tobias Rundstrom 2006-03-03 19:40:45 -03:00
parent 44de5fb428
commit b0f7061f84
2 changed files with 65 additions and 12 deletions

View file

@ -26,10 +26,18 @@ MedialibWindow::MedialibWindow (QWidget *parent) : QMainWindow (parent)
m_tab = new QTabWidget (m_dummy);
m_vbox->addWidget (m_tab);
m_progress = new QProgressBar (m_dummy);
statusBar ()->addPermanentWidget (m_progress, 1);
m_progress->setSizePolicy (QSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed));
m_status = new QLabel (tr ("Idle"), statusBar ());
m_status->setFrameStyle (QFrame::NoFrame);
statusBar ()->addPermanentWidget (m_status, 2);
m_list = new MedialibList (m_tab);
m_tab->addTab (new QWidget (m_tab), "Artists");
m_tab->addTab (m_list, "Albums");
m_tab->addTab (new QWidget (m_tab), "Songs");
m_tab->addTab (new QWidget (m_tab), tr ("Artists"));
m_tab->addTab (m_list, tr ("Albums"));
m_tab->addTab (new QWidget (m_tab), tr ("Songs"));
connect (m_search, SIGNAL (textEdited (QString)), m_list, SLOT (search (QString)));
}
@ -39,8 +47,10 @@ MedialibList::MedialibList (QWidget *parent) : QListWidget (parent)
XMMSHandler *xmmsh = XMMSHandler::getInstance ();
m_http = new QHttp (this);
m_httpmap = new QHash<int, MedialibListItem *>;
m_win = dynamic_cast<MedialibWindow*>(window ());
setIconSize (QSize (85, 85));
setDragEnabled (true);
QDir dir (QDir::homePath ()+"/.xmms2/clients/generic/art/");
if (!dir.exists()) {
@ -55,6 +65,8 @@ MedialibList::MedialibList (QWidget *parent) : QListWidget (parent)
connect (m_http, SIGNAL (requestFinished (int, bool)), this,
SLOT (httpDone (int, bool)));
m_win->setBusy (true);
m_win->setStatusText ("Loading album view");
}
void
@ -94,7 +106,6 @@ MedialibList::httpDone (int id, bool error)
f->close ();
QString newname (QDir::homePath()+"/.xmms2/clients/generic/art/"+(f->fileName ().section("/", -1)));
qDebug ("new path %s", qPrintable (newname));
f->rename (newname);
f->setFileName (newname);
@ -102,12 +113,18 @@ MedialibList::httpDone (int id, bool error)
if (!ico.isNull()) {
it->setIcon (ico);
} else {
qDebug ("removing %s", qPrintable (f->fileName()));
f->remove ();
}
delete f;
m_httpmap->remove (id);
if (m_httpmap->count () == 0) {
m_win->setBusy (false);
m_win->setStatusText ("idle");
} else {
m_win->setBusy (m_httpmap->count ());
m_win->setStatusText ("Got art for: " + it->text());
}
}
update ();
@ -121,6 +138,9 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
font.setPixelSize (14);
m_win->setBusy (false);
m_win->setStatusText ("idle");
for (int i = 0; i < l.count (); i++) {
QHash<QString, QString> h(l.value (i));
@ -128,12 +148,12 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
item->setSizeHint (QSize (90, 90));
item->setIcon (QIcon (":nocover.jpg"));
item->setFont (font);
item->setTextAlignment (Qt::AlignHCenter | Qt::AlignVCenter);
item->setTextAlignment (Qt::AlignVCenter);
if (h.contains ("image")) {
QString name = qtMD5 ((h.value("artist").toLower()+"-"+h.value("album").toLower()).toUtf8());
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+".jpg");
QString fname (QDir::homePath () +"/.xmms2/clients/generic/art/"+name+"_small.jpg");
if (!QFile::exists (fname)) {
QUrl url (h.value("image"));
@ -143,7 +163,7 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
m_http->setUser (url.userName(), url.password());
}
QFile *file = new QFile ("/tmp/"+name+".jpg");
QFile *file = new QFile ("/tmp/"+name+"_small.jpg");
file->open(QIODevice::WriteOnly);
item->setFile (file);
@ -160,5 +180,10 @@ MedialibList::queryCallback (QList<QHash<QString, QString> >l)
}
if (m_httpmap->count() > 0) {
m_win->setBusy (0, m_httpmap->count ());
m_win->setStatusText ("Loading album art");
}
}

View file

@ -1,14 +1,19 @@
#ifndef __MEDIALIB_H__
#define __MEDIALIB_H__
#include <QListWidgetItem>
#include <QProgressBar>
#include <QMainWindow>
#include <QTabWidget>
#include <QLineEdit>
#include <QListWidget>
#include <QVBoxLayout>
#include <QStatusBar>
#include <QTabWidget>
#include <QLineEdit>
#include <QLabel>
#include <QHttp>
#include <QFile>
#include <QListWidgetItem>
class MedialibWindow;
class MedialibListItem : public QListWidgetItem
{
@ -37,6 +42,8 @@ class MedialibList : public QListWidget
private:
QHash<int, MedialibListItem*> *m_httpmap;
QHttp *m_http;
MedialibWindow *m_win;
int m_httpr;
};
@ -47,12 +54,33 @@ class MedialibWindow : public QMainWindow
MedialibWindow (QWidget *parent);
~MedialibWindow () {}
void setBusy (bool b) {
if (b) {
m_progress->setMaximum (0);
m_progress->setMinimum (0);
} else {
m_progress->setMaximum (1);
m_progress->reset ();
}
}
void setBusy (int min, int max) {
m_progress->setMaximum (max);
m_progress->setMinimum (min);
}
void setBusy (int cur) {
m_progress->setValue (cur);
}
void setStatusText (QString s) {
m_status->setText (s);
}
private:
QWidget *m_dummy;
QTabWidget *m_tab;
QLineEdit *m_search;
QVBoxLayout *m_vbox;
QProgressBar *m_progress;
QLabel *m_status;
MedialibList *m_list;
};