-
Notifications
You must be signed in to change notification settings - Fork 341
/
bluraymetadata.cpp
85 lines (68 loc) · 2.27 KB
/
bluraymetadata.cpp
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
#include <QHash>
#include "bdnav/meta_data.h"
#include "bluraymetadata.h"
#include "mythdirs.h"
BlurayMetadata::BlurayMetadata(const QString path) :
m_bdnav(NULL), m_metadata(NULL),
m_title(QString()), m_alttitle(QString()),
m_language(QString()), m_discnumber(0),
m_disctotal(0), m_path(path),
m_images(QStringList())
{
}
BlurayMetadata::~BlurayMetadata()
{
if (m_bdnav)
bd_close(m_bdnav);
}
bool BlurayMetadata::OpenDisc(void)
{
QString keyfile = QString("%1/KEYDB.cfg").arg(GetConfDir());
QByteArray keyarray = keyfile.toAscii();
const char *keyfilepath = keyarray.data();
m_bdnav = bd_open(m_path.toLatin1().data(), keyfilepath);
if (!m_bdnav)
return false;
return true;
}
bool BlurayMetadata::ParseDisc(void)
{
if (!m_bdnav && !OpenDisc())
return false;
m_metadata = bd_get_meta(m_bdnav);
if (!m_metadata)
return false;
m_title = QString(m_metadata->di_name);
m_alttitle = QString(m_metadata->di_alternative);
m_language = QString(m_metadata->language_code);
m_discnumber = m_metadata->di_set_number;
m_disctotal = m_metadata->di_num_sets;
for (unsigned i = 0; i < m_metadata->toc_count; i++)
{
uint num = m_metadata->toc_entries[i].title_number;
QString title = QString(m_metadata->toc_entries[i].title_name);
QPair<uint,QString> ret(num,title);
m_titles.append(ret);
}
for (unsigned i = 0; i < m_metadata->thumb_count; i++)
{
QString filepath = QString("%1/BDMV/META/DL/%2")
.arg(m_path)
.arg(m_metadata->thumbnails[i].path);
m_images.append(filepath);
}
return true;
}
void BlurayMetadata::toMap(MetadataMap &metadataMap)
{
metadataMap["title"] = m_title;
metadataMap["alttitle"] = m_alttitle;
metadataMap["language"] = m_language;
metadataMap["discnumber"] = QString::number(m_discnumber);
metadataMap["disctotal"] = QString::number(m_disctotal);
metadataMap["discseries"] = QObject::tr("%1 of %2")
.arg(m_discnumber)
.arg(m_disctotal);
metadataMap["numtitles"] = m_titles.count();
metadataMap["numthumbs"] = m_images.count();
}