summaryrefslogtreecommitdiffstats
path: root/src/library/coverart.cpp
blob: 65a7e048941337e8fe6cca95e1796f92194e8f0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <QStringBuilder>

#include "library/coverart.h"

CoverArt::CoverArt()
        : m_pConfig(NULL),
          m_cDefaultImageFormat("jpg") {
}

CoverArt::~CoverArt() {
}

void CoverArt::setConfig(ConfigObject<ConfigValue>* pConfig) {
    m_pConfig = pConfig;

    if (!QDir().mkpath(getStoragePath())) {
        qDebug() << "WARNING: Could not create cover arts storage path. "
                 << "Mixxx will be unable to store analyses.";
    }
}

QString CoverArt::getStoragePath() const {
    return m_pConfig->getSettingsPath() % "/coverArt/";
}

bool CoverArt::deleteFile(const QString& location) {
    QFile file(location);
    if (file.exists()) {
        return file.remove();
    }
    return true;
}

bool CoverArt::saveImage(QImage cover, QString location) {
    if (cover.isNull()) {
        return false;
    }

    return cover.save(location, m_cDefaultImageFormat);
}

QString CoverArt::searchInTrackDirectory(QString directory) {
    QDir dir(directory);
    dir.setFilter(QDir::NoDotAndDotDot | QDir::Files | QDir::Readable);
    dir.setSorting(QDir::Size | QDir::Reversed);

    QStringList nameFilters;
    nameFilters << "*.jpg" << "*.jpeg" << "*.png" << "*.gif" << "*.bmp";
    dir.setNameFilters(nameFilters);

    QString coverLocation;
    QStringList imglist = dir.entryList();
    if (imglist.size() > 0) {
        coverLocation = directory % "/" % imglist[0];
    }

    return coverLocation;
}

QString CoverArt::getDefaultCoverName(QString artist,
                                      QString album,
                                      QString filename) {
    if (artist.isEmpty() && album.isEmpty()) {
         return filename;
    } else {
        return artist % " - " % album;
    }
}

QString CoverArt::getDefaultCoverLocation(QString coverArtName) {
    return getStoragePath() % coverArtName % "." % m_cDefaultImageFormat;
}

QString CoverArt::getDefaultCoverLocation(TrackPointer pTrack) {
    QString coverArtName = getDefaultCoverName(pTrack->getArtist(),
                                               pTrack->getAlbum(),
                                               pTrack->getFilename());

    return getDefaultCoverLocation(coverArtName);
}

QImage CoverArt::searchCoverArt(TrackPointer pTrack) {
    //
    // Step 1: Look for embedded cover art.
    //
    QImage image = pTrack->parseCoverArt();
    if (!image.isNull()) {
        return image; // FOUND!
    }

    //
    // Step 2: Look for cover stored in track diretory.
    //
    image.load(searchInTrackDirectory(pTrack->getDirectory()));
    if (!image.isNull()) {
        return image; // FOUND!
    }

    return QImage();
}