Tune WinAmpTuneController::getTune(const HWND &hWnd) { Tune tune = Tune(); int position = (int)SendMessage(hWnd, WM_WA_IPC, 0, IPC_GETLISTPOS); if (position != -1) { if (hWnd && SendMessage(hWnd,WM_WA_IPC,0,IPC_ISPLAYING) == 1) { QPair<bool, QString> trackpair(getTrackTitle(hWnd)); if (!trackpair.first) { // getTrackTitle wants us to retry in a few ms... int interval = AntiscrollInterval; if (++antiscrollCounter_ > 10) { antiscrollCounter_ = 0; interval = NormInterval; } setInterval(interval); return Tune(); } antiscrollCounter_ = 0; tune.setName(trackpair.second); tune.setURL(trackpair.second); tune.setTrack(QString::number(position + 1)); tune.setTime(SendMessage(hWnd, WM_WA_IPC, 1, IPC_GETOUTPUTTIME)); } } return tune; }
Tune* tuneFromFile(const QString& file) { Tune* tune = new Tune(false); tune->file = file; TagLib::FileRef ref = fileName2TaglibRef(file); if(!ref.isNull()) { if(ref.tag()) { TagLib::Tag* tag = ref.tag(); tune->artist = safeTagLibString2QString( tag->artist() ); tune->album = safeTagLibString2QString( tag->album() ); tune->title = safeTagLibString2QString( tag->title() ); tune->trackNumber = QString::number( tag->track() ); tune->genre = safeTagLibString2QString( tag->genre() ); } Qomp::loadCover(tune, ref.file()); if(ref.audioProperties()) { TagLib::AudioProperties *prop = ref.audioProperties(); tune->duration = Qomp::durationSecondsToString( prop->length() ); tune->bitRate = QString::number( prop->bitrate() ); } tune->setMetadataResolved(true); } return tune; }
/** * Polls for new song info. */ void PollingTuneController::check() { Tune tune = currentTune(); if (prev_tune_ != tune) { prev_tune_ = tune; if (tune.isNull()) { emit stopped(); } else { emit playing(tune); } } }
void AimpTuneController::sendTune(const Tune &tune) { if (tune != _currentTune && !tune.isNull()) { _currentTune = tune; _tuneSent = true; } }
Tune AimpTuneController::getTune() const { HANDLE aFile=OpenFileMapping(FILE_MAP_READ, TRUE, AIMP_REMOTE_CLASS); PAIMPRemoteFileInfo aInfo = (PAIMPRemoteFileInfo)MapViewOfFile(aFile, FILE_MAP_READ, 0, 0, AIMPRemoteAccessMapFileSize); if (aInfo != NULL) { wchar_t *str = (wchar_t *)((char*)aInfo + sizeof(*aInfo)); QString album = QString::fromWCharArray(str, aInfo->AlbumLength); str += aInfo->AlbumLength; QString artist = QString::fromWCharArray(str, aInfo->ArtistLength); str += aInfo->ArtistLength + aInfo->DateLength; QString url = QString::fromWCharArray(str, aInfo->FileNameLength); str += aInfo->FileNameLength + aInfo->GenreLength; QString title = QString::fromWCharArray(str, aInfo->TitleLength); unsigned long trackNumber = aInfo->TrackNumber; unsigned long time = aInfo->Duration; Tune tune = Tune(); if (!url.isEmpty()) { if (!title.isEmpty()) { tune.setName(title); } else { int index = url.replace("/", "\\").lastIndexOf("\\"); if (index > 0) { QString filename = url.right(url.length()-index-1); index = filename.lastIndexOf("."); title = (index > 0) ? filename.left(index) : filename; } else { title = url; } tune.setName(title); } if (trackNumber > 0) { tune.setTrack(QString::number(trackNumber)); } if (time > 0) { tune.setTime((uint)time); } if (!artist.isEmpty()) { tune.setArtist(artist); } if (!album.isEmpty()) { tune.setAlbum(album); } tune.setURL(url); } return tune; } UnmapViewOfFile(aInfo); CloseHandle(aFile); return Tune(); }
Payload::Ptr TuneFactory::createPayload() { Tune *tune = new Tune(); bool ok = true; tune->setArtist(m_data[TuneArtist]); tune->setLength(m_data[TuneLength].toInt(&ok) * ok + ok - 1); tune->setRating(m_data[TuneRating].toInt(&ok) * ok + ok - 1); tune->setSource(m_data[TuneSource]); tune->setTitle(m_data[TuneTitle]); tune->setTrack(m_data[TuneTrack]); tune->setUri(QUrl::fromUserInput(m_data[TuneUri])); return Payload::Ptr(tune); }
Tune FileTuneController::currentTune() { Tune tune; QFile file(songFile_); if (file.open(QIODevice::ReadOnly)) { QTextStream stream( &file ); stream.setCodec("UTF-8"); stream.setAutoDetectUnicode(true); tune.setName(stream.readLine()); tune.setArtist(stream.readLine()); tune.setAlbum(stream.readLine()); tune.setTrack(stream.readLine()); tune.setTime(stream.readLine().toUInt()); } return tune; }
void ITunesController::iTunesCallback(CFNotificationCenterRef,void* observer,CFStringRef,const void*, CFDictionaryRef info) { Tune tune; ITunesController* controller = (ITunesController*) observer; CFStringRef cf_state = (CFStringRef) CFDictionaryGetValue(info, CFSTR("Player State")); if (CFStringCompare(cf_state,CFSTR("Paused"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Paused"; emit controller->stopped(); } else if (CFStringCompare(cf_state,CFSTR("Stopped"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Stopped"; emit controller->stopped(); } else if (CFStringCompare(cf_state,CFSTR("Playing"),0) == kCFCompareEqualTo) { //qDebug() << "itunesplayer.cpp: Playing"; tune.setArtist(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Artist")))); tune.setName(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Name")))); tune.setAlbum(CFStringToQString((CFStringRef) CFDictionaryGetValue(info, CFSTR("Album")))); CFNumberRef cf_track = (CFNumberRef) CFDictionaryGetValue(info, CFSTR("Track Number")); if (cf_track) { int tracknr; if (!CFNumberGetValue(cf_track,kCFNumberIntType,&tracknr)) { qWarning("itunesplayer.cpp: Number value conversion failed."); } tune.setTrack(QString::number(tracknr)); } CFNumberRef cf_time = (CFNumberRef) CFDictionaryGetValue(info, CFSTR("Total Time")); int time = 0; if (cf_time && !CFNumberGetValue(cf_time,kCFNumberIntType,&time)) { qWarning("itunesplayer.cpp: Number value conversion failed."); } tune.setTime((unsigned int) (time / 1000)); controller->currentTune_ = tune; emit controller->playing(tune); } else { qWarning("itunesplayer.cpp: Unknown state."); } }
bool ITunesMediaPlayer::isActive() { kdebugf(); Tune t = controller->currentTune(); return (t.state() != Tune::unknown); }
bool ITunesMediaPlayer::isPlaying() { kdebugf(); Tune t = controller->currentTune(); return (t.state() == Tune::playing); }
int ITunesMediaPlayer::getCurrentPos() { kdebugf(); Tune t = controller->currentTune(); return (QDateTime::currentDateTime().toTime_t() - t.started()) * 1000; }
int ITunesMediaPlayer::getLength(int position) { kdebugf(); Tune t = controller->currentTune(); return t.time(); }
QString ITunesMediaPlayer::getFile(int position) { kdebugf(); Tune t = controller->currentTune(); return t.location(); }
QString ITunesMediaPlayer::getArtist(int position) { kdebugf(); Tune t = controller->currentTune(); return t.artist(); }
QString ITunesMediaPlayer::getTitle(int position) { kdebugf(); Tune t = controller->currentTune(); return t.name(); }