MIDI2LR 6.1.0.0
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 if (result) {
63 if (juce::URL("https://github.com/rsjaffe/MIDI2LR/releases")
64 .launchInDefaultBrowser()) { /* successfully opened browser */
65#ifndef MIDI2LR_BETA
67#endif
68 }
69 }
70#ifndef MIDI2LR_BETA
71 else { /* user doesn't want it, don't show again */
73 }
74#endif
75 }};
76 /* */
77 try {
78 if (thread_should_exit_.load(std::memory_order_acquire)) { return; }
79 juce::NativeMessageBox::showYesNoBox(juce::AlertWindow::AlertIconType::QuestionIcon,
80 fmt::format(juce::translate("A new version of {} is available.").toStdString(),
81 "MIDI2LR"),
82 juce::translate("Do you want to download the latest version?") + ' '
83 + IntToVersion(new_version_),
84 nullptr, juce::ModalCallbackFunction::create(response));
85 }
86 catch (const std::exception& e) {
88 }
89}
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
115{
116 try {
117 const juce::URL version_url {"https://rsjaffe.github.io/MIDI2LR/version.xml"};
118 const auto version_xml_element {version_url.readEntireXmlStream()};
119 if (version_xml_element && !thread_should_exit_.load(std::memory_order_acquire)) {
120 auto last_checked {settings_manager_.GetLastVersionFound()};
121 new_version_ = CheckVersion(version_xml_element);
122 if (last_checked == 0) {
123 last_checked = std::min(new_version_, ProjectInfo::versionNumber);
125 }
126 LogVersion(new_version_, last_checked);
127 if (new_version_ > ProjectInfo::versionNumber && new_version_ != last_checked
128 && !thread_should_exit_.load(std::memory_order_acquire)) {
129 triggerAsyncUpdate();
130 }
131 }
132 else {
133 rsj::Log("Unable to download MIDI2LR/version.xml and parse into valid XML document.");
134 }
135 }
136 catch (const std::exception& e) {
138 }
139}
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:131

◆ 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:114
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: