///////////////////////////////////////////////////////////////////////////// // Name: checkupdates_listener.cpp // Purpose: // Author: Cesar Mauri Loba (cesar at crea-si dot com) // Copyright: (C) 2012-14 Cesar Mauri Loba - CREA Software Systems // // This program 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. // // This program 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 this program. If not, see . ///////////////////////////////////////////////////////////////////////////// #include "checkupdates_manager.h" #include "checkupdates_ui.h" #include "version.h" #include namespace eviacam { CheckUpdatesManager::CheckUpdatesManager(wxWindow* parent) : m_parent(parent) , m_pCheckUpdatesUI(NULL) { m_checker.Connect( CHECKUPDATE_FINISHED_EVENT, wxCommandEventHandler(CheckUpdatesManager::OnCheckUpdatesFinished), NULL, this); } CheckUpdatesManager::~CheckUpdatesManager() { m_checker.Disconnect( CHECKUPDATE_FINISHED_EVENT, wxCommandEventHandler(CheckUpdatesManager::OnCheckUpdatesFinished), NULL, this); } static void SetResults(CheckUpdatesUI* dlg, CheckUpdates::ResultStatus status, wxString str) { wxString txt1; wxString txt2; switch (status) { case CheckUpdates::NEW_VERSION_AVAILABLE: txt1 = _("New version available: "); txt1 += str; txt2 = _("Installed version: "); txt2 += _T(VERSION); dlg->SetResults(txt1, txt2, true); break; case CheckUpdates::NO_NEW_VERSION_AVAILABLE: txt1 = _("No updates available"); dlg->SetResults(txt1, txt2, false); break; case CheckUpdates::ERROR_CHECKING_NEW_VERSION: txt1 = _("Error checking for updates"); dlg->SetResults(txt1, str, false); break; default: assert(false); } } void CheckUpdatesManager::OnCheckUpdatesFinished(wxCommandEvent& event) { event.Skip(false); // Finish processing the event CheckUpdates::ResultStatus status = static_cast(event.GetInt()); if (m_pCheckUpdatesUI) { // Checking in foreground m_pCheckUpdatesUI->StopProgress(); SetResults(m_pCheckUpdatesUI, status, event.GetString()); return; } // Checking in background if (status != CheckUpdates::NEW_VERSION_AVAILABLE) return; m_pCheckUpdatesUI = new CheckUpdatesUI(m_parent); SetResults(m_pCheckUpdatesUI, status, event.GetString()); m_pCheckUpdatesUI->ShowModal(); wxDELETE(m_pCheckUpdatesUI); } void CheckUpdatesManager::LaunchBackground() { assert(m_pCheckUpdatesUI == NULL); m_checker.Start(); } void CheckUpdatesManager::LaunchForeground() { assert(m_pCheckUpdatesUI == NULL); m_pCheckUpdatesUI = new CheckUpdatesUI(m_parent); m_checker.Start(); m_pCheckUpdatesUI->StartProgress(); m_pCheckUpdatesUI->ShowModal(); } }