X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fupdate_checker.h;h=53ef4457b3452f381d861dec1d0d93f319e3340d;hb=fe933ebb2c55b4235fcba5d02af2ba91c272fc88;hp=b82be7808f7fa0c957a98c02a7ad69a3685e8b5d;hpb=6904ca547ce503c9ea06b4def9b9a716068e493c;p=dcpomatic.git diff --git a/src/lib/update_checker.h b/src/lib/update_checker.h index b82be7808..53ef4457b 100644 --- a/src/lib/update_checker.h +++ b/src/lib/update_checker.h @@ -1,26 +1,29 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic 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 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic 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, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ -/** @file src/lib/update.h + +/** @file src/lib/update_checker.h * @brief UpdateChecker class. */ + #include "signaller.h" #include #include @@ -28,18 +31,22 @@ #include #include + struct update_checker_test; + /** Class to check for the existance of an update for DCP-o-matic on a remote server */ -class UpdateChecker : public Signaller, public boost::noncopyable +class UpdateChecker : public Signaller { public: - UpdateChecker (); ~UpdateChecker (); + UpdateChecker (UpdateChecker const &); + UpdateChecker& operator= (UpdateChecker const &); + void run (); - enum State { + enum class State { YES, ///< there is an update FAILED, ///< the check failed, so we don't know NO, ///< there is no update @@ -58,18 +65,12 @@ public: return _stable; } - /** @return new test version, if there is one and Config is set to look for it */ + /** @return new test version, if there is one */ boost::optional test () { boost::mutex::scoped_lock lm (_data_mutex); return _test; } - /** @return true if the last signal emission was the first */ - bool last_emit_was_first () const { - boost::mutex::scoped_lock lm (_data_mutex); - return _emits == 1; - } - size_t write_callback (void *, size_t, size_t); boost::signals2::signal StateChanged; @@ -83,22 +84,24 @@ private: static bool version_less_than (std::string const & a, std::string const & b); + UpdateChecker (); + void start (); void set_state (State); void thread (); - char* _buffer; - int _offset; - CURL* _curl; + std::vector _buffer; + int _offset = 0; + CURL* _curl = nullptr; /** mutex to protect _state, _stable, _test and _emits */ mutable boost::mutex _data_mutex; State _state; boost::optional _stable; boost::optional _test; - int _emits; - boost::thread* _thread; + boost::thread _thread; boost::mutex _process_mutex; boost::condition _condition; - int _to_do; + int _to_do = 0; + bool _terminate = false; };