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

ArtistPrivate::ArtistPrivate(Artist *pubPtr, MusicLibraryPrivate *l) : MusicObjectPrivate(pubPtr, l)
{
    LogAlloc();
    // Add to music library
    library->addArtist(this);
}

ArtistPrivate::~ArtistPrivate()
{
    // Clear pointer from records
    foreach (RecordPrivate *record, records) {
        record->artistDeleted();
    }

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

void ArtistPrivate::libraryDeleted()
{
    // If library is deleted, clear pointer so destructor doesn't use it
    library = 0;
}

void ArtistPrivate::listRecords(QList<Record *> &list)
{
    foreach (RecordPrivate *record, records) {
        list.append(static_cast<Record *>(record->publicPtr()));
    }
}

void ArtistPrivate::listSongs(QList<Song *> &list)
{
    foreach (RecordPrivate *record, records) {
        record->listSongs(list);
    }
}
