#include "recordprivate.h"
#include "artistprivate.h"
#include "songprivate.h"
#include "musiclibraryprivate.h"
#include "mldebug.h"

RecordPrivate::RecordPrivate(Record *pubPtr, ArtistPrivate *a)
    : MusicObjectPrivate(pubPtr, a), artist(a)
{
    LogAlloc();
    // Add to artists list of records
    artist->addRecord(this);
}

RecordPrivate::~RecordPrivate()
{
    // Clear pointer from songs
    foreach (SongPrivate *song, songs) {
        song->recordDeleted();
    }

    // Remove from artist if it hasn't been cleared
    if (artist) {
        artist->removeRecord(this);
    }
    LogDelete();
}

void RecordPrivate::artistDeleted()
{
    // If artist is deleted, clear pointer so destructor doesn't use it
    artist = 0;
}

void RecordPrivate::setCoverArtFile(const QString &caf)
{
    if (caf != coverArt) {
        coverArt = caf;
        library->notifyChanged(this);
    }
}

void RecordPrivate::setReleaseDate(const QDateTime &rd)
{
    if (rd != relDate) {
        relDate = rd;
        library->notifyChanged(this);
    }
}

void RecordPrivate::listSongs(QList<Song *> &list)
{
    foreach (SongPrivate *song, songs) {
        list.append(static_cast<Song *>(song->publicPtr()));
    }
}
