MIDI2LR 6.2.0.1
MIDI2LR is an application that interfaces MIDI controllers with Lightroom 6+/CC Classic. It processes MIDI input into develop parameter updates and photo actions, and sends MIDI output when parameters are changed for motorized feedback (on controllers that have motorized faders). A listing of available LightRoom commands is in the Wiki. Assistance on the code and design is welcome.
Loading...
Searching...
No Matches
VersionChecker Class Referencefinal

#include <VersionChecker.h>

+ Inheritance diagram for VersionChecker:

Public Member Functions

 VersionChecker (const VersionChecker &other)=delete
 
 VersionChecker (SettingsManager &settings_manager) noexcept
 
 VersionChecker (VersionChecker &&other)=delete
 
 ~VersionChecker ()=default
 
VersionCheckeroperator= (const VersionChecker &other)=delete
 
VersionCheckeroperator= (VersionChecker &&other)=delete
 
void Start ()
 
void Stop () noexcept
 

Private Member Functions

void handleAsyncUpdate () override
 
void Run () noexcept
 

Private Attributes

int new_version_ {0}
 
std::future< void > run_future_
 
SettingsManagersettings_manager_
 
std::atomic< bool > thread_should_exit_ {false}
 

Constructor & Destructor Documentation

◆ VersionChecker() [1/3]

VersionChecker::VersionChecker ( SettingsManager settings_manager)
explicitnoexcept
46 : settings_manager_ {settings_manager}
47{
48}
SettingsManager & settings_manager_
Definition VersionChecker.h:42

◆ ~VersionChecker()

VersionChecker::~VersionChecker ( )
default

◆ VersionChecker() [2/3]

VersionChecker::VersionChecker ( const VersionChecker other)
delete

◆ VersionChecker() [3/3]

VersionChecker::VersionChecker ( VersionChecker &&  other)
delete

Member Function Documentation

◆ handleAsyncUpdate()

void VersionChecker::handleAsyncUpdate ( )
overrideprivate
60{
61 const auto response {[this](const int result) {
62#ifndef MIDI2LR_BETA
63 if (result) {
64 if (juce::URL("https://github.com/rsjaffe/MIDI2LR/releases")
65 .launchInDefaultBrowser()) { /* successfully opened browser */
67 }
68 }
69 else { /* user doesn't want it, don't show again */
71 }
72#else
73 if (result) {
74 std::ignore =
75 juce::URL("https://github.com/rsjaffe/MIDI2LR/releases").launchInDefaultBrowser();
76 }
77#endif
78 }};
79 /* */
80 try {
81 if (thread_should_exit_.load(std::memory_order_acquire)) { return; }
82 juce::NativeMessageBox::showYesNoBox(juce::AlertWindow::AlertIconType::QuestionIcon,
83 fmt::format(juce::translate("A new version of {} is available.").toStdString(),
84 "MIDI2LR"),
85 juce::translate("Do you want to download the latest version?") + ' '
86 + IntToVersion(new_version_),
87 nullptr, juce::ModalCallbackFunction::create(response));
88 }
89 catch (const std::exception& e) {
90 rsj::ExceptionResponse(e, std::source_location::current());
91 }
92}
void SetLastVersionFound(int version_number)
Definition SettingsManager.h:70
int new_version_
Definition VersionChecker.h:41
std::atomic< bool > thread_should_exit_
Definition VersionChecker.h:43
void ExceptionResponse(gsl::czstring id, gsl::czstring fu, const std::exception &e) noexcept

◆ operator=() [1/2]

VersionChecker & VersionChecker::operator= ( const VersionChecker other)
delete

◆ operator=() [2/2]

VersionChecker & VersionChecker::operator= ( VersionChecker &&  other)
delete

◆ Run()

void VersionChecker::Run ( )
privatenoexcept
119{
120 try {
121 const juce::URL version_url {"https://rsjaffe.github.io/MIDI2LR/version.xml"};
122 const auto version_xml_element {version_url.readEntireXmlStream()};
123 if (version_xml_element && !thread_should_exit_.load(std::memory_order_acquire)) {
124 auto last_checked {settings_manager_.GetLastVersionFound()};
125 if (version_xml_element) { new_version_ = CheckVersion(version_xml_element.get()); }
126 if (last_checked == 0) {
127 last_checked = std::min(new_version_, ProjectInfo::versionNumber);
129 }
130 LogVersion(new_version_, last_checked);
131 if (new_version_ > ProjectInfo::versionNumber && new_version_ != last_checked
132 && !thread_should_exit_.load(std::memory_order_acquire)) {
133 triggerAsyncUpdate();
134 }
135 }
136 else {
137 rsj::Log("Unable to download MIDI2LR/version.xml and parse into valid XML document.",
138 std::source_location::current());
139 }
140 }
141 catch (const std::exception& e) {
142 rsj::ExceptionResponse(e, std::source_location::current());
143 }
144}
int GetLastVersionFound() const noexcept
Definition SettingsManager.h:47
void Log(const juce::String &info, const std::source_location &location=std::source_location::current()) noexcept
Definition Misc.cpp:113

◆ Start()

void VersionChecker::Start ( )
51{
52 run_future_ = std::async(std::launch::async, [this] {
53 rsj::LabelThread(MIDI2LR_UC_LITERAL("VersionChecker run thread"));
54 MIDI2LR_FAST_FLOATS;
55 Run();
56 });
57}
void Run() noexcept
Definition VersionChecker.cpp:118
std::future< void > run_future_
Definition VersionChecker.h:44
void LabelThread(gsl::czstring threadname)
Definition Misc.cpp:48

◆ Stop()

void VersionChecker::Stop ( )
inlinenoexcept
35{ thread_should_exit_.store(true, std::memory_order_release); }

Member Data Documentation

◆ new_version_

int VersionChecker::new_version_ {0}
private
41{0};

◆ run_future_

std::future<void> VersionChecker::run_future_
private

◆ settings_manager_

SettingsManager& VersionChecker::settings_manager_
private

◆ thread_should_exit_

std::atomic<bool> VersionChecker::thread_should_exit_ {false}
private
43{false};

The documentation for this class was generated from the following files: