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

MusicLibraryPrivate::MusicLibraryPrivate(MusicLibrary *pubPtr) : pPtr(pubPtr)
{
    LogAlloc();
}

MusicLibraryPrivate::~MusicLibraryPrivate()
{
    foreach (ArtistPrivate *artist, artists) {
        artist->libraryDeleted();
    }
    LogDelete();
}

void MusicLibraryPrivate::notifyChanged(MusicObjectPrivate *object)
{
    emit pPtr->objectChanged(object->publicPtr());
}

QList<Artist *> MusicLibraryPrivate::listArtists() const
{
    QList<Artist *> list;
    foreach (ArtistPrivate *artist, artists) {
        list.append(static_cast<Artist *>(artist->publicPtr()));
    }
    return list;
}

QList<Record *> MusicLibraryPrivate::listRecords() const
{
    QList<Record *> list;
    foreach (ArtistPrivate *artist, artists) {
        artist->listRecords(list);
    }
    return list;
}

QList<Song *> MusicLibraryPrivate::listSongs() const
{
    QList<Song *> list;
    foreach (ArtistPrivate *artist, artists) {
        artist->listSongs(list);
    }
    return list;
}
