File indexing completed on 2024-05-05 05:36:38
0001 /* 0002 SPDX-FileCopyrightText: 2018 Martin Kacej <m.kacej@atlas.sk> 0003 SPDX-FileCopyrightText: 2020-2021 Devin Lin <espidev@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "cellularnetworksettings.h" 0009 0010 #include <KLocalizedString> 0011 #include <KPluginFactory> 0012 #include <KUser> 0013 0014 #include <QQmlEngine> 0015 0016 K_PLUGIN_CLASS_WITH_JSON(CellularNetworkSettings, "kcm_cellular_network.json") 0017 0018 CellularNetworkSettings *CellularNetworkSettings::staticInst = nullptr; 0019 0020 CellularNetworkSettings::CellularNetworkSettings(QObject *parent, const KPluginMetaData &metaData) 0021 : KQuickConfigModule(parent, metaData) 0022 , m_modemList{} 0023 , m_simList{} 0024 { 0025 setButtons({}); 0026 0027 CellularNetworkSettings::staticInst = this; 0028 0029 qmlRegisterType<ProfileSettings>("cellularnetworkkcm", 1, 0, "ProfileSettings"); 0030 qmlRegisterType<Modem>("cellularnetworkkcm", 1, 0, "Modem"); 0031 qmlRegisterType<ModemDetails>("cellularnetworkkcm", 1, 0, "ModemDetails"); 0032 qmlRegisterType<AvailableNetwork>("cellularnetworkkcm", 1, 0, "AvailableNetwork"); 0033 qmlRegisterType<Sim>("cellularnetworkkcm", 1, 0, "Sim"); 0034 qmlRegisterType<InlineMessage>("cellularnetworkkcm", 1, 0, "InlineMessage"); 0035 0036 // find modems 0037 updateModemList(); 0038 0039 connect(ModemManager::notifier(), &ModemManager::Notifier::modemAdded, this, &CellularNetworkSettings::updateModemList); 0040 connect(ModemManager::notifier(), &ModemManager::Notifier::modemRemoved, this, &CellularNetworkSettings::updateModemList); 0041 } 0042 0043 CellularNetworkSettings *CellularNetworkSettings::instance() 0044 { 0045 return CellularNetworkSettings::staticInst; 0046 } 0047 0048 Modem *CellularNetworkSettings::selectedModem() 0049 { 0050 // TODO: we are currently assuming there is a single modem 0051 if (m_modemList.count() > 0) { 0052 return m_modemList[0]; 0053 } 0054 return nullptr; 0055 } 0056 0057 QList<Modem *> CellularNetworkSettings::modems() 0058 { 0059 return m_modemList; 0060 } 0061 0062 QList<Sim *> CellularNetworkSettings::sims() 0063 { 0064 return m_simList; 0065 } 0066 0067 bool CellularNetworkSettings::modemFound() 0068 { 0069 return !m_modemList.empty(); 0070 } 0071 0072 void CellularNetworkSettings::updateModemList() 0073 { 0074 // loop over every modem 0075 for (ModemManager::ModemDevice::Ptr device : ModemManager::modemDevices()) { 0076 ModemManager::Modem::Ptr modem = device->modemInterface(); 0077 0078 qDebug() << QStringLiteral("Found modem:") << device->uni(); 0079 0080 m_modemList.push_back(new Modem(this, device, modem)); 0081 0082 // update sims list if modem's list changes 0083 connect(m_modemList[m_modemList.size() - 1], &Modem::simsChanged, this, [this]() -> void { 0084 fillSims(); 0085 }); 0086 } 0087 0088 if (m_modemList.empty()) { 0089 qDebug() << QStringLiteral("No modems found."); 0090 } 0091 0092 // fill sim list 0093 fillSims(); 0094 0095 // update the currently selected modem 0096 Q_EMIT selectedModemChanged(); 0097 } 0098 0099 void CellularNetworkSettings::fillSims() 0100 { 0101 for (auto p : m_simList) { 0102 delete p; 0103 } 0104 m_simList.clear(); 0105 0106 qDebug() << QStringLiteral("Scanning SIMs list..."); 0107 for (auto modem : m_modemList) { 0108 auto sims = modem->sims(); 0109 for (auto sim : sims) { 0110 qDebug() << QStringLiteral("Found SIM") << sim->uni() << sim->imsi(); 0111 m_simList.push_back(sim); 0112 } 0113 } 0114 0115 Q_EMIT simsChanged(); 0116 } 0117 0118 QList<InlineMessage *> CellularNetworkSettings::messages() 0119 { 0120 return m_messages; 0121 } 0122 0123 void CellularNetworkSettings::addMessage(InlineMessage::Type type, QString msg) 0124 { 0125 m_messages.push_back(new InlineMessage{this, type, msg}); 0126 Q_EMIT messagesChanged(); 0127 } 0128 0129 void CellularNetworkSettings::removeMessage(int index) 0130 { 0131 if (index >= 0 && index < m_messages.size()) { 0132 m_messages.removeAt(index); 0133 Q_EMIT messagesChanged(); 0134 } 0135 } 0136 0137 InlineMessage::InlineMessage(QObject *parent, Type type, QString message) 0138 : QObject{parent} 0139 , m_type{type} 0140 , m_message{message} 0141 { 0142 } 0143 0144 InlineMessage::Type InlineMessage::type() 0145 { 0146 return m_type; 0147 } 0148 0149 QString InlineMessage::message() 0150 { 0151 return m_message; 0152 } 0153 0154 #include "cellularnetworksettings.moc"