/* * Strawberry Music Player * This file was part of Clementine. * Copyright 2010, David Sansome * Copyright 2018-2021, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Strawberry is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Strawberry. If not, see . * */ #include "config.h" #include #include #include #include #include "core/logging.h" #include "internetservices.h" #include "internetservice.h" InternetServices::InternetServices(QObject *parent) : QObject(parent) {} InternetServices::~InternetServices() { while (!services_.isEmpty()) { delete services_.take(services_.firstKey()); } } void InternetServices::AddService(InternetService *service) { services_.insert(service->source(), service); if (service->has_initial_load_settings()) service->InitialLoadSettings(); else service->ReloadSettings(); qLog(Debug) << "Added internet service" << service->name(); } void InternetServices::RemoveService(InternetService *service) { if (!services_.contains(service->source())) return; services_.remove(service->source()); QObject::disconnect(service, nullptr, this, nullptr); qLog(Debug) << "Removed internet service" << service->name(); } InternetService *InternetServices::ServiceBySource(const Song::Source source) const { if (services_.contains(source)) return services_.value(source); return nullptr; } void InternetServices::ReloadSettings() { QList services = services_.values(); for (InternetService *service : services) { service->ReloadSettings(); } } void InternetServices::Exit() { QList services = services_.values(); for (InternetService *service : services) { wait_for_exit_ << service; QObject::connect(service, &InternetService::ExitFinished, this, &InternetServices::ExitReceived); service->Exit(); } if (wait_for_exit_.isEmpty()) emit ExitFinished(); } void InternetServices::ExitReceived() { InternetService *service = qobject_cast(sender()); wait_for_exit_.removeAll(service); if (wait_for_exit_.isEmpty()) emit ExitFinished(); }