MythTV master
generalsettings.cpp
Go to the documentation of this file.
1// Qt
2#include <QDir>
3#include <QString>
4
5// MythTV
9
10// MythMusic
11#include "generalsettings.h"
12#include "musicdata.h"
13#include "musicplayer.h"
14
16{
17 bool err = false;
18
19 // Load the theme for this screen
20 if (!LoadWindowFromXML("musicsettings-ui.xml", "generalsettings", this))
21 return false;
22
23 UIUtilE::Assign(this, m_musicAudioDevice, "musicaudiodevice", &err);
24 UIUtilE::Assign(this, m_musicDefaultUpmix, "musicdefaultupmix", &err);
25 UIUtilE::Assign(this, m_musicCDDevice, "musiccddevice", &err);
26 UIUtilE::Assign(this, m_nonID3FileNameFormat, "nonid3filenameformat", &err);
27 UIUtilE::Assign(this, m_ignoreID3Tags, "ignoreid3tags", &err);
28 UIUtilE::Assign(this, m_allowTagWriting, "allowtagwriting", &err);
29 UIUtilW::Assign(this, m_resetDBButton, "resetdatabase", &err);
30 UIUtilE::Assign(this, m_saveButton, "save", &err);
31 UIUtilE::Assign(this, m_cancelButton, "cancel", &err);
32
33 if (err)
34 {
35 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'generalsettings'");
36 return false;
37 }
38
40
41 int loadMusicDefaultUpmix = gCoreContext->GetNumSetting("MusicDefaultUpmix", 0);
42 if (loadMusicDefaultUpmix == 1)
44
46
47 m_nonID3FileNameFormat->SetText(gCoreContext->GetSetting("NonID3FileNameFormat"));
48
49 int loadIgnoreTags = gCoreContext->GetNumSetting("Ignore_ID3", 0);
50 if (loadIgnoreTags == 1)
52
53 int allowTagWriting = gCoreContext->GetNumSetting("AllowTagWriting", 0);
54 if (allowTagWriting == 1)
56
59
62
63 m_musicAudioDevice->SetHelpText(tr("Audio Device used for playback. 'default' "
64 "will use the device specified in MythTV"));
65 m_musicDefaultUpmix->SetHelpText(tr("MythTV can upconvert stereo tracks to 5.1 audio. "
66 "Set this option to enable it by default. "
67 "You can enable or disable the upconversion "
68 "during playback at anytime."));
69 m_musicCDDevice->SetHelpText(tr("CD-ROM device used for ripping/playback."));
70 m_nonID3FileNameFormat->SetHelpText(tr("Directory and filename format used to grab "
71 "information if no ID3 information is found. Accepts "
72 "GENRE, ARTIST, ALBUM, TITLE, ARTIST_TITLE and "
73 "TRACK_TITLE."));
74 m_ignoreID3Tags->SetHelpText(tr("If set, MythMusic will skip checking ID3 tags "
75 "in files and just try to determine Genre, Artist, "
76 "Album, and Track number and title from the "
77 "filename."));
78 m_allowTagWriting->SetHelpText(tr("If set, MythMusic will be allowed to update the "
79 "metadata in the file (e.g. ID3) to match the "
80 "database. This means allowing MythTV to write "
81 "to the file and permissions must be set "
82 "accordingly. Features such as ID3 playcounts "
83 "and ratings depend on this being enabled."));
85 {
86 m_resetDBButton->SetHelpText(tr("This will clear all the MythMusic database tables allowing "
87 "for a fresh start. NOTE: You may lose any manual or automatic changes made to "
88 "a tracks metadata like rating or playcount unless you told MythMusic to "
89 "write those to the tag."));
90 }
91 m_cancelButton->SetHelpText(tr("Exit without saving settings"));
92 m_saveButton->SetHelpText(tr("Save settings and Exit"));
93
95
97
98 return true;
99}
100
102{
103 ShowOkPopup(tr("Are you sure you want to reset the music database?"),
104 this, &GeneralSettings::slotDoResetDB, true);
105}
106
108{
109 if (ok)
110 {
111 gPlayer->stop(true);
112
114
115 query.prepare("TRUNCATE music_albumart");
116 if (!query.exec())
117 MythDB::DBError("resetting music_albumart table", query);
118
119 query.prepare("TRUNCATE music_albums");
120 if (!query.exec())
121 MythDB::DBError("resetting music_albums table", query);
122
123 query.prepare("TRUNCATE music_artists");
124 if (!query.exec())
125 MythDB::DBError("resetting music_artists table", query);
126
127 query.prepare("TRUNCATE music_directories");
128 if (!query.exec())
129 MythDB::DBError("resetting music_directories table", query);
130
131 query.prepare("TRUNCATE music_genres");
132 if (!query.exec())
133 MythDB::DBError("resetting music_genres table", query);
134
135 query.prepare("TRUNCATE music_playlists");
136 if (!query.exec())
137 MythDB::DBError("resetting music_playlists table", query);
138
139 query.prepare("TRUNCATE music_songs");
140 if (!query.exec())
141 MythDB::DBError("resetting music_songs table", query);
142
143 query.prepare("TRUNCATE music_stats");
144 if (!query.exec())
145 MythDB::DBError("resetting music_stats table", query);
146
148
149 ShowOkPopup(tr("Music database has been cleared.\n"
150 "You must now scan, rip or import some tracks."));
151 }
152}
153
155{
157 gCoreContext->SaveSetting("MusicAudioDevice", m_musicAudioDevice->GetText());
158 gCoreContext->SaveSetting("NonID3FileNameFormat", m_nonID3FileNameFormat->GetText());
159
160 int saveMusicDefaultUpmix = (m_musicDefaultUpmix->GetCheckState() == MythUIStateType::Full) ? 1 : 0;
161 gCoreContext->SaveSetting("MusicDefaultUpmix", saveMusicDefaultUpmix);
162
163 int saveIgnoreTags = (m_ignoreID3Tags->GetCheckState() == MythUIStateType::Full) ? 1 : 0;
164 gCoreContext->SaveSetting("Ignore_ID3", saveIgnoreTags);
165
166 int allowTagWriting = (m_allowTagWriting->GetCheckState() == MythUIStateType::Full) ? 1 : 0;
167 gCoreContext->SaveSetting("AllowTagWriting", allowTagWriting);
168
169 gCoreContext->dispatch(MythEvent(QString("MUSIC_SETTINGS_CHANGED GENERAL_SETTINGS")));
170
171 Close();
172}
MythUIButton * m_cancelButton
MythUIButton * m_resetDBButton
MythUIButton * m_saveButton
MythUITextEdit * m_musicAudioDevice
bool Create(void) override
MythUITextEdit * m_nonID3FileNameFormat
void slotResetDB(void) const
MythUITextEdit * m_musicCDDevice
MythUICheckBox * m_allowTagWriting
MythUICheckBox * m_ignoreID3Tags
MythUICheckBox * m_musicDefaultUpmix
static void slotDoResetDB(bool ok)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:128
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:837
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:618
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:550
void reloadMusic(void) const
reload music after a scan, rip or import
Definition: musicdata.cpp:61
void stop(bool stopAll=false)
void SaveSetting(const QString &key, int newValue)
QString GetSetting(const QString &key, const QString &defaultval="")
void dispatch(const MythEvent &event)
int GetNumSetting(const QString &key, int defaultval=0)
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:226
This class is used as a container for messages.
Definition: mythevent.h:17
void BuildFocusList(void)
bool SetFocusWidget(MythUIType *widget=nullptr)
virtual void Close()
void Clicked()
void SetCheckState(MythUIStateType::StateType state)
MythUIStateType::StateType GetCheckState() const
QString GetText(void) const
void SetText(const QString &text, bool moveCursor=true)
void SetHelpText(const QString &text)
Definition: mythuitype.h:177
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
MusicData * gMusicData
Definition: musicdata.cpp:23
MusicPlayer * gPlayer
Definition: musicplayer.cpp:38
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27