1 /*
2 	SPDX-FileCopyrightText: 2010-2021 Graeme Gott <graeme@gottcode.org>
3 
4 	SPDX-License-Identifier: GPL-3.0-or-later
5 */
6 
7 #include "language_settings.h"
8 
9 #include <QFile>
10 #include <QLocale>
11 #include <QSettings>
12 
13 //-----------------------------------------------------------------------------
14 
LanguageSettings()15 LanguageSettings::LanguageSettings()
16 	: m_language(QLocale::system().name())
17 {
18 	loadDefaults();
19 }
20 
21 //-----------------------------------------------------------------------------
22 
LanguageSettings(const QString & language)23 LanguageSettings::LanguageSettings(const QString& language)
24 	: m_language(language)
25 {
26 	loadDefaults();
27 }
28 
29 //-----------------------------------------------------------------------------
30 
LanguageSettings(const QSettings & group)31 LanguageSettings::LanguageSettings(const QSettings& group)
32 	: m_language(group.value("Locale").toString())
33 	, m_dice(group.value("Dice").toString())
34 	, m_words(group.value("Words").toString())
35 	, m_dictionary(group.value("Dictionary").toString())
36 {
37 	if (m_language.isEmpty()) {
38 		const int language = group.value("Language").toInt();
39 		m_language = QLocale(QLocale::Language(language)).name().section('_', 0, 0);
40 	}
41 
42 	loadValues();
43 	loadDefaults();
44 }
45 
46 //-----------------------------------------------------------------------------
47 
loadDefaults()48 void LanguageSettings::loadDefaults()
49 {
50 	if (!QFile::exists(QString("tanglet:%1/words").arg(m_language))) {
51 		m_language = m_language.section('_', 0, 0);
52 		if (!QFile::exists(QString("tanglet:%1/words").arg(m_language))) {
53 			m_language = "en";
54 		}
55 	}
56 
57 	if (m_dice.isEmpty()) {
58 		m_dice = QString("tanglet:%1/dice").arg(m_language);
59 	}
60 
61 	if (m_words.isEmpty()) {
62 		m_words = QString("tanglet:%1/words").arg(m_language);
63 	}
64 
65 	if (m_dictionary.isEmpty()) {
66 		QSettings settings(QString("tanglet:%1/language.ini").arg(m_language), QSettings::IniFormat);
67 #if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
68 		settings.setIniCodec("UTF-8");
69 #endif
70 		m_dictionary = settings.value("Language/Dictionary").toString();
71 	}
72 	if (m_dictionary.isEmpty()) {
73 		m_dictionary = QString("https://%1.wiktionary.org/wiki/%s").arg(m_language);
74 	}
75 }
76 
77 //-----------------------------------------------------------------------------
78 
loadValues()79 void LanguageSettings::loadValues()
80 {
81 	QSettings settings;
82 	settings.beginGroup("Board");
83 
84 	if (m_language.isEmpty()) {
85 		m_language = settings.value("Locale").toString();
86 	}
87 	if (m_language.isEmpty()) {
88 		m_language = QLocale::system().name();
89 	}
90 
91 	if (m_dice.isEmpty()) {
92 		m_dice = settings.value("Dice").toString();
93 	}
94 
95 	if (m_words.isEmpty()) {
96 		m_words = settings.value("Words").toString();
97 	}
98 
99 	if (m_dictionary.isEmpty()) {
100 		m_dictionary = settings.value("Dictionary").toString();
101 	}
102 }
103 
104 //-----------------------------------------------------------------------------
105