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 
39  m_musicAudioDevice->SetText(gCoreContext->GetSetting("MusicAudioDevice"));
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 
57  if (m_resetDBButton)
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."));
84  if (m_resetDBButton)
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 
94  BuildFocusList();
95 
96  SetFocusWidget(m_musicCDDevice);
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 
113  MSqlQuery query(MSqlQuery::InitCon());
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 }
GeneralSettings::m_resetDBButton
MythUIButton * m_resetDBButton
Definition: generalsettings.h:29
MythUIButton::Clicked
void Clicked()
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:127
generalsettings.h
gPlayer
MusicPlayer * gPlayer
Definition: musicplayer.cpp:38
StandardSetting::Close
virtual void Close(void)
Definition: standardsettings.h:77
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:384
MythEvent
This class is used as a container for messages.
Definition: mythevent.h:16
mythdialogbox.h
GeneralSettings::m_musicAudioDevice
MythUITextEdit * m_musicAudioDevice
Definition: generalsettings.h:23
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:618
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythUITextEdit::GetText
QString GetText(void) const
Definition: mythuitextedit.h:50
GeneralSettings::slotSave
void slotSave(void)
Definition: generalsettings.cpp:154
MythUITextEdit::SetText
void SetText(const QString &text, bool moveCursor=true)
Definition: mythuitextedit.cpp:198
GeneralSettings::m_cancelButton
MythUIButton * m_cancelButton
Definition: generalsettings.h:31
mythlogging.h
GeneralSettings::m_musicCDDevice
MythUITextEdit * m_musicCDDevice
Definition: generalsettings.h:25
MusicData::reloadMusic
void reloadMusic(void) const
reload music after a scan, rip or import
Definition: musicdata.cpp:61
GeneralSettings::m_saveButton
MythUIButton * m_saveButton
Definition: generalsettings.h:30
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:550
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:226
MythUIType::SetHelpText
void SetHelpText(const QString &text)
Definition: mythuitype.h:175
GeneralSettings::slotResetDB
void slotResetDB(void) const
Definition: generalsettings.cpp:101
GeneralSettings::slotDoResetDB
static void slotDoResetDB(bool ok)
Definition: generalsettings.cpp:107
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:57
MythCoreContext::GetNumSetting
int GetNumSetting(const QString &key, int defaultval=0)
Definition: mythcorecontext.cpp:918
musicdata.h
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
gMusicData
MusicData * gMusicData
Definition: musicdata.cpp:23
mythcorecontext.h
MythUICheckBox::SetCheckState
void SetCheckState(MythUIStateType::StateType state)
Definition: mythuicheckbox.cpp:66
GeneralSettings::Create
bool Create(void) override
Definition: generalsettings.cpp:15
GeneralSettings::m_ignoreID3Tags
MythUICheckBox * m_ignoreID3Tags
Definition: generalsettings.h:27
MythUIStateType::Full
@ Full
Definition: mythuistatetype.h:27
MusicPlayer::stop
void stop(bool stopAll=false)
Definition: musicplayer.cpp:250
GeneralSettings::m_musicDefaultUpmix
MythUICheckBox * m_musicDefaultUpmix
Definition: generalsettings.h:24
MythCoreContext::SaveSetting
void SaveSetting(const QString &key, int newValue)
Definition: mythcorecontext.cpp:887
MythUICheckBox::GetCheckState
MythUIStateType::StateType GetCheckState() const
Definition: mythuicheckbox.cpp:98
MythCoreContext::dispatch
void dispatch(const MythEvent &event)
Definition: mythcorecontext.cpp:1729
ShowOkPopup
MythConfirmationDialog * ShowOkPopup(const QString &message, bool showCancel)
Non-blocking version of MythPopupBox::showOkPopup()
Definition: mythdialogbox.cpp:566
GeneralSettings::m_nonID3FileNameFormat
MythUITextEdit * m_nonID3FileNameFormat
Definition: generalsettings.h:26
MythCoreContext::GetSetting
QString GetSetting(const QString &key, const QString &defaultval="")
Definition: mythcorecontext.cpp:904
GeneralSettings::m_allowTagWriting
MythUICheckBox * m_allowTagWriting
Definition: generalsettings.h:28
MSqlQuery::prepare
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:837
musicplayer.h