void BaseExternalTrackModel::trackLoaded(QString group, TrackPointer pTrack) {
    if (group == m_previewDeckGroup) {
        // If there was a previously loaded track, refresh its rows so the
        // preview state will update.
        if (m_previewDeckTrackId.isValid()) {
            const int numColumns = columnCount();
            QLinkedList<int> rows = getTrackRows(m_previewDeckTrackId);
            m_previewDeckTrackId = TrackId(); // invalidate
            foreach (int row, rows) {
                QModelIndex left = index(row, 0);
                QModelIndex right = index(row, numColumns);
                emit(dataChanged(left, right));
            }
        }
        if (pTrack) {
            // The external table has foreign Track IDs, so we need to compare
            // by location
            for (int row = 0; row < rowCount(); ++row) {
                QString location = index(row, fieldIndex("location")).data().toString();
                if (location == pTrack->getLocation()) {
                    m_previewDeckTrackId = TrackId(index(row, 0).data());
                    //qDebug() << "foreign track id" << m_previewDeckTrackId;
                    break;
                }
            }
        }
    }
Esempio n. 2
0
TrackId BaseSqlTableModel::getTrackId(const QModelIndex& index) const {
    if (index.isValid()) {
        return TrackId(index.sibling(index.row(), fieldIndex(m_idColumn)).data());
    } else {
        return TrackId();
    }
}
Esempio n. 3
0
GlobalTrackCacheResolver::GlobalTrackCacheResolver(
        QFileInfo fileInfo,
        SecurityTokenPointer pSecurityToken)
        : m_lookupResult(GlobalTrackCacheLookupResult::NONE) {
    DEBUG_ASSERT(m_pInstance);
    m_pInstance->resolve(this, std::move(fileInfo), TrackId(), std::move(pSecurityToken));
}
Esempio n. 4
0
track_id SeqPhraseMatrixView::CurrentTrackId()
{
    BPoint	pt;
    uint32	button;
    GetMouse(&pt, &button, false);
    return TrackId(pt);
}
Esempio n. 5
0
void CrateFeature::slotTrackSelected(TrackPointer pTrack) {
    m_pSelectedTrack = pTrack;
    TrackId trackId(pTrack.isNull() ? TrackId() : pTrack->getId());
    m_crateDao.getCratesTrackIsIn(trackId, &m_cratesSelectedTrackIsIn);

    TreeItem* rootItem = m_childModel.getItem(QModelIndex());
    if (rootItem == nullptr) {
        return;
    }

    // Set all crates the track is in bold (or if there is no track selected,
    // clear all the bolding).
    int row = 0;
    for (QList<QPair<int, QString> >::const_iterator it = m_crateList.begin();
            it != m_crateList.end(); ++it, ++row) {
        TreeItem* crate = rootItem->child(row);
        if (crate == nullptr) {
            continue;
        }
        int crateId = it->first;
        bool shouldBold = m_cratesSelectedTrackIsIn.contains(crateId);
        crate->setBold(shouldBold);
    }

    m_childModel.triggerRepaint();
}
Esempio n. 6
0
TrackInfoObject::TrackInfoObject(const QFileInfo& fileInfo,
                                 SecurityTokenPointer pToken,
                                 bool parseHeader, bool parseCoverArt)
        : m_fileInfo(fileInfo),
          m_pSecurityToken(pToken.isNull() ? Sandbox::openSecurityToken(
                  m_fileInfo, true) : pToken),
          m_bDeleteOnReferenceExpiration(false),
          m_qMutex(QMutex::Recursive) {
    m_id = TrackId();
    m_analyzerProgress = -1;

    m_bDirty = false;
    m_bBpmLocked = false;
    m_bHeaderParsed = false;

    m_iDuration = 0;
    m_iBitrate = 0;
    m_iSampleRate = 0;
    m_iChannels = 0;
    m_fCuePoint = 0.0f;
    m_dateAdded = QDateTime::currentDateTime();
    m_Rating = 0;

    // Parse the metadata from file. This is not a quick operation!
    m_bHeaderParsed = false;
    if (parseHeader) {
        parse(parseCoverArt);
    }
}
Esempio n. 7
0
void SeqPhraseMatrixView::ShowProperties(BPoint where)
{
    track_id		trackId = TrackId(where);
    AmPhraseEvent*	pe = NULL;
    SeqSongWinPropertiesI*		win = dynamic_cast<SeqSongWinPropertiesI*>(Window() );
    _SeqPhraseToolTarget*	target;
    if (win && trackId && (target = new _SeqPhraseToolTarget(win, this, &mMtc)) ) {
        // READ SONG BLOCK
#ifdef AM_TRACE_LOCKS
        printf("SeqPhraseMatrixView::ShowProperties() read lock\n");
        fflush(stdout);
#endif
        const AmSong*	song = mSongRef.ReadLock();
        if (song) {
            const AmTrack*	track = song->Track(trackId);
            if (track) {
                pe = target->PhraseEventAt(track, where);
                if (pe) pe->IncRefs();
            }
        }
        mSongRef.ReadUnlock(song);
        // END READ SONG BLOCK
        delete target;
    }
    /* Done this way so I get out of the read lock as soon as
     * possible (and because opening the properties window causes
     * a read lock, and I don't want them nested).
     */
    if (pe) {
        ShowPropertiesWin(pe);
        pe->DecRefs();
    }
}
Esempio n. 8
0
void BaseSqlTableModel::trackLoaded(QString group, TrackPointer pTrack) {
    if (group == m_previewDeckGroup) {
        // If there was a previously loaded track, refresh its rows so the
        // preview state will update.
        if (m_previewDeckTrackId.isValid()) {
            const int numColumns = columnCount();
            QLinkedList<int> rows = getTrackRows(m_previewDeckTrackId);
            m_previewDeckTrackId = TrackId(); // invalidate
            foreach (int row, rows) {
                QModelIndex left = index(row, 0);
                QModelIndex right = index(row, numColumns);
                emit(dataChanged(left, right));
            }
        }
        m_previewDeckTrackId = pTrack ? pTrack->getId() : TrackId();
    }
Esempio n. 9
0
void TrackInfoObject::initialize(bool parseHeader, bool parseCoverArt) {
    m_bDeleteOnReferenceExpiration = false;
    m_bDirty = false;
    m_bLocationChanged = false;

    m_sArtist = "";
    m_sTitle = "";
    m_sType= "";
    m_sComment = "";
    m_sYear = "";
    m_sURL = "";
    m_iDuration = 0;
    m_iBitrate = 0;
    m_iTimesPlayed = 0;
    m_bPlayed = false;
    m_fReplayGain = 0.;
    m_bHeaderParsed = false;
    m_id = TrackId();
    m_iSampleRate = 0;
    m_iChannels = 0;
    m_fCuePoint = 0.0f;
    m_dateAdded = QDateTime::currentDateTime();
    m_Rating = 0;
    m_bBpmLock = false;
    m_sGrouping = "";
    m_sAlbumArtist = "";

    // parse() parses the metadata from file. This is not a quick operation!
    if (parseHeader) {
        parse(parseCoverArt);
    }
}
Esempio n. 10
0
//static
TrackPointer Track::newTemporary(
        const QFileInfo& fileInfo,
        const SecurityTokenPointer& pSecurityToken) {
    Track* pTrack =
            new Track(
                    fileInfo,
                    pSecurityToken,
                    TrackId());
    return TrackPointer(pTrack);
}
Esempio n. 11
0
//static
TrackPointer TrackInfoObject::newTemporary(
        const QFileInfo& fileInfo,
        const SecurityTokenPointer& pSecurityToken) {
    return TrackPointer(
            new TrackInfoObject(
                    fileInfo,
                    pSecurityToken,
                    TrackId()),
            &QObject::deleteLater);
}
Esempio n. 12
0
TrackInfoObject::TrackInfoObject(const QDomNode &nodeHeader)
        : m_qMutex(QMutex::Recursive),
          m_analyserProgress(-1) {
    QString filename = XmlParse::selectNodeQString(nodeHeader, "Filename");
    QString location = QDir(XmlParse::selectNodeQString(nodeHeader, "Filepath")).filePath(filename);
    m_fileInfo = QFileInfo(location);
    m_pSecurityToken = Sandbox::openSecurityToken(m_fileInfo, true);

    // We don't call initialize() here because it would end up calling parse()
    // on the file. Plus those initializations weren't done before, so it might
    // cause subtle bugs. This constructor is only used for legacy importing so
    // I'm not going to do it. rryan 6/2010

    m_sTitle = XmlParse::selectNodeQString(nodeHeader, "Title");
    m_sArtist = XmlParse::selectNodeQString(nodeHeader, "Artist");
    m_sType = XmlParse::selectNodeQString(nodeHeader, "Type");
    m_sComment = XmlParse::selectNodeQString(nodeHeader, "Comment");
    m_iDuration = XmlParse::selectNodeQString(nodeHeader, "Duration").toInt();
    m_iSampleRate = XmlParse::selectNodeQString(nodeHeader, "SampleRate").toInt();
    m_iChannels = XmlParse::selectNodeQString(nodeHeader, "Channels").toInt();
    m_iBitrate = XmlParse::selectNodeQString(nodeHeader, "Bitrate").toInt();
    m_iTimesPlayed = XmlParse::selectNodeQString(nodeHeader, "TimesPlayed").toInt();
    m_fReplayGain = XmlParse::selectNodeQString(nodeHeader, "replaygain").toFloat();
    m_bHeaderParsed = false;
    m_bBpmLock = false;
    m_Rating = 0;

    // Mixxx <1.8 recorded track IDs in mixxxtrack.xml, but we are going to
    // ignore those. Tracks will get a new ID from the database.
    //m_id = XmlParse::selectNodeQString(nodeHeader, "Id").toInt();
    m_id = TrackId();

    m_fCuePoint = XmlParse::selectNodeQString(nodeHeader, "CuePoint").toFloat();
    m_bPlayed = false;
    m_bDeleteOnReferenceExpiration = false;
    m_bDirty = false;
    m_bLocationChanged = false;
}
Esempio n. 13
0
TrackInfoObject::TrackInfoObject(
        const QFileInfo& fileInfo,
        SecurityTokenPointer pToken)
        : m_fileInfo(fileInfo),
          m_pSecurityToken(pToken.isNull() ? Sandbox::openSecurityToken(
                  m_fileInfo, true) : pToken),
          m_bDeleteOnReferenceExpiration(false),
          m_qMutex(QMutex::Recursive) {
    m_id = TrackId();
    m_analyzerProgress = -1;

    m_bDirty = false;
    m_bBpmLocked = false;
    m_bHeaderParsed = false;

    m_iDuration = 0;
    m_iBitrate = 0;
    m_iSampleRate = 0;
    m_iRating = 0;
    m_iChannels = 0;
    m_fCuePoint = 0.0f;
    m_dateAdded = QDateTime::currentDateTime();
}
Esempio n. 14
0
TrackId ProxyTrackModel::getTrackId(const QModelIndex& index) const {
    QModelIndex indexSource = mapToSource(index);
    return m_pTrackModel ? m_pTrackModel->getTrackId(indexSource) : TrackId();
}
Esempio n. 15
0
TrackId BrowseTableModel::getTrackId(const QModelIndex& index) const {
    Q_UNUSED(index);
    // We can't implement this as it stands.
    return TrackId();
}
Esempio n. 16
0
AmTrackLookahead::~AmTrackLookahead()
{
	DeleteAll();
}

const AmEvent* AmTrackLookahead::Lookahead(track_id tid) const
{
	const _LookaheadEntry*	e = EntryFor(tid);
	if (!e) return NULL;
	return e->event;
}

const AmEvent* AmTrackLookahead::Lookahead(AmFilterHolderI* holder) const
{
	ArpVALIDATE(holder, return NULL);
	const _LookaheadEntry*	e = EntryFor(holder->TrackId());
	if (!e) return NULL;
	if (e->event) return e->event;
	for (uint32 k = 0; k < mEntries.size(); k++) {
		if (mEntries[k].tid != e->tid && mEntries[k].groups == e->groups) {
			if (mEntries[k].event) return mEntries[k].event;
		}
	}
	return NULL;
}

status_t AmTrackLookahead::SetTracks(const AmSong* song)
{
	DeleteAll();
	ArpVALIDATE(song, return B_ERROR);
	const AmTrack*				t = NULL;
Esempio n. 17
0
 TrackId addTrackToCollection(const QString& trackLocation) {
     TrackPointer pTrack(collection()->getTrackDAO().addSingleTrack(trackLocation, false));
     return pTrack ? pTrack->getId() : TrackId();
 }