Skip to content

Commit cf3b05b

Browse files
authored
Merge pull request #5 from Motobug/updater
Add updater functionality based on work from the Mario Party Netplay development team; thanks to them for their hard work and allowing us to use their updater as a base! https://www.github.com/MarioPartyNetplay/Dolphin-MPN This allows Dolphin to automatically update itself by reading info from a json file, autodetecting builds from a GitHub release, and downloading and installing the new version entirely within Dolphin itself. This is likely to need some minor cleanup once merged to exclude certain files from overwriting current ones.
2 parents 8841340 + 00b3aca commit cf3b05b

20 files changed

+923
-58
lines changed

.github/workflows/appimage_build.yml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,6 @@ jobs:
140140
with:
141141
name: Project-Plus-Dolphin_${{ env.DOLPHINVER }}
142142
path: uploads/
143-
- name: Upload Dolphin
144-
run: |
145-
ls -al artifacts/
146-
wget -c https://github.com/tcnksm/ghr/releases/download/v0.17.0/ghr_v0.17.0_linux_amd64.tar.gz
147-
tar xfv ghr_v0.17.0_linux_amd64.tar.gz
148-
ghr_v0.17.0_linux_amd64/ghr -u Motobug -r Project-Plus-Dolphin -recreate -n 'Continuous build' -b "$(printf "DOLPHIN Build ${{ env.DOLPHINVER }}\nGitHub https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID")" continuous artifacts/
149143
env:
150144
DEFAULT_BRANCH: git-actions
151-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
145+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/scripts/macos/build-dependencies.sh

100755100644
File mode changed.

Data/Dolphin.icns

-159 KB
Binary file not shown.

Readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ This is a work-in-progress version of the Dolphin Emulator built for usage with
2222
* Client side music toggle in netplay window
2323
* Gamecube adapter polling rate in controller settings
2424
* Spectator button in netplay window
25+
* Overwrite Dolphin updater functions with our own
2526

2627
* To-Do
27-
* Overwrite Dolphin updater functions with our own
28-
* Sub-Frame Netplay Buffer Support
28+
* Bug fixes and miscellaneous improvements
2929

3030
# Dolphin - A GameCube and Wii Emulator
3131

Source/Core/Common/HttpRequest.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,13 @@ HttpRequest::Response HttpRequest::Post(const std::string& url, const std::strin
112112
int HttpRequest::Impl::CurlProgressCallback(Impl* impl, curl_off_t dltotal, curl_off_t dlnow,
113113
curl_off_t ultotal, curl_off_t ulnow)
114114
{
115-
// Abort if callback isn't true
116-
return !impl->m_callback(static_cast<s64>(dltotal), static_cast<s64>(dlnow),
117-
static_cast<s64>(ultotal), static_cast<s64>(ulnow));
115+
// Call the progress callback with the current download progress
116+
if (impl->m_callback)
117+
{
118+
return !impl->m_callback(static_cast<s64>(dltotal), static_cast<s64>(dlnow),
119+
static_cast<s64>(ultotal), static_cast<s64>(ulnow));
120+
}
121+
return 0; // If no callback, continue
118122
}
119123

120124
HttpRequest::Impl::Impl(std::chrono::milliseconds timeout_ms, ProgressCallback callback)
@@ -147,6 +151,13 @@ HttpRequest::Impl::Impl(std::chrono::milliseconds timeout_ms, ProgressCallback c
147151
m_curl.get(), CURLOPT_LOW_SPEED_TIME,
148152
static_cast<long>(std::chrono::duration_cast<std::chrono::seconds>(timeout_ms).count()));
149153
curl_easy_setopt(m_curl.get(), CURLOPT_LOW_SPEED_LIMIT, 1);
154+
// Add SSL option to disable revocation checking
155+
curl_easy_setopt(m_curl.get(), CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
156+
157+
#ifdef _WIN32
158+
// ALPN support is enabled by default but requires Windows >= 8.1.
159+
curl_easy_setopt(m_curl.get(), CURLOPT_SSL_ENABLE_ALPN, false);
160+
#endif
150161
}
151162

152163
bool HttpRequest::Impl::IsValid() const
@@ -267,6 +278,9 @@ HttpRequest::Response HttpRequest::Impl::Fetch(const std::string& url, Method me
267278
else
268279
list = curl_slist_append(list, (name + ": " + *value).c_str());
269280
}
281+
282+
list = curl_slist_append(list, "User-Agent: Dolphin/1.0");
283+
270284
curl_easy_setopt(m_curl.get(), CURLOPT_HTTPHEADER, list);
271285

272286
curl_easy_setopt(m_curl.get(), CURLOPT_HEADERFUNCTION, header_callback);

Source/Core/Common/HttpRequest.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ class HttpRequest final
2828
// Return false to abort the request
2929
using ProgressCallback = std::function<bool(s64 dltotal, s64 dlnow, s64 ultotal, s64 ulnow)>;
3030

31+
void SetProgressCallback(ProgressCallback callback) {
32+
m_callback = std::move(callback);
33+
}
34+
35+
3136
explicit HttpRequest(std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{3000},
3237
ProgressCallback callback = nullptr);
3338
~HttpRequest();
@@ -62,5 +67,6 @@ class HttpRequest final
6267
private:
6368
class Impl;
6469
std::unique_ptr<Impl> m_impl;
70+
ProgressCallback m_callback;
6571
};
6672
} // namespace Common

Source/Core/DolphinQt/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,14 @@ add_executable(dolphin-emu
276276
Main.cpp
277277
MainWindow.cpp
278278
MainWindow.h
279+
ProjectPlus/DownloadUpdateDialog.cpp
280+
ProjectPlus/DownloadUpdateDialog.h
281+
ProjectPlus/DownloadWorker.cpp
282+
ProjectPlus/DownloadWorker.h
283+
ProjectPlus/InstallUpdateDialog.cpp
284+
ProjectPlus/InstallUpdateDialog.h
285+
ProjectPlus/UpdateDialog.cpp
286+
ProjectPlus/UpdateDialog.h
279287
MenuBar.cpp
280288
MenuBar.h
281289
NetPlay/ChunkedProgressDialog.cpp

Source/Core/DolphinQt/DolphinQt.vcxproj

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<PropertyGroup Label="Globals">
66
<ProjectGuid>{FA3FA62B-6F58-4B86-9453-4D149940A066}</ProjectGuid>
77
<ProjectName>Dolphin</ProjectName>
8+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
89
</PropertyGroup>
910
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
1011
<Import Project="$(VSPropsDir)Configuration.Application.props" />
@@ -17,6 +18,12 @@
1718
<Import Project="$(VSPropsDir)QtCompile.props" />
1819
</ImportGroup>
1920
<PropertyGroup Label="UserMacros" />
21+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
22+
<TargetName>Dolphin</TargetName>
23+
</PropertyGroup>
24+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
25+
<TargetName>Dolphin</TargetName>
26+
</PropertyGroup>
2027
<ItemDefinitionGroup>
2128
<ClCompile>
2229
<AdditionalIncludeDirectories>$(ProjectDir)Config\Graphics;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -32,17 +39,23 @@
3239
<AdditionalIncludeDirectories>$(ProjectDir)TAS;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
3340
<AdditionalIncludeDirectories>$(ProjectDir)VideoInterface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
3441
<!--Qt 6.3.0 headers use std::aligned_storage instead of alignas-->
35-
<PreprocessorDefinitions>_SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
42+
<PreprocessorDefinitions>_SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
3643
<!--Jump through some hoops to generate a pch file local to this project-->
3744
<AdditionalIncludeDirectories>$(SourceDir)PCH;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
3845
<PrecompiledHeader>Use</PrecompiledHeader>
3946
<PrecompiledHeaderFile>pch_qt.h</PrecompiledHeaderFile>
4047
<ForcedIncludeFiles>pch_qt.h</ForcedIncludeFiles>
48+
<TreatWarningAsError Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</TreatWarningAsError>
4149
</ClCompile>
4250
<Manifest>
4351
<AdditionalManifestFiles>DolphinQt.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
4452
</Manifest>
4553
</ItemDefinitionGroup>
54+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
55+
<ClCompile>
56+
<TreatWarningAsError>false</TreatWarningAsError>
57+
</ClCompile>
58+
</ItemDefinitionGroup>
4659
<ItemGroup>
4760
<ClCompile Include="AboutDialog.cpp" />
4861
<ClCompile Include="CheatSearchFactoryWidget.cpp" />
@@ -174,6 +187,10 @@
174187
<ClCompile Include="InfinityBase/InfinityBaseWindow.cpp" />
175188
<ClCompile Include="Main.cpp" />
176189
<ClCompile Include="MainWindow.cpp" />
190+
<ClCompile Include="ProjectPlus/DownloadUpdateDialog.cpp" />
191+
<ClCompile Include="ProjectPlus/DownloadWorker.cpp" />
192+
<ClCompile Include="ProjectPlus/InstallUpdateDialog.cpp" />
193+
<ClCompile Include="ProjectPlus/UpdateDialog.cpp" />
177194
<ClCompile Include="MenuBar.cpp" />
178195
<ClCompile Include="NetPlay\ChunkedProgressDialog.cpp" />
179196
<ClCompile Include="NetPlay\GameDigestDialog.cpp" />
@@ -391,6 +408,10 @@
391408
<QtMoc Include="HotkeyScheduler.h" />
392409
<QtMoc Include="InfinityBase/InfinityBaseWindow.h" />
393410
<QtMoc Include="MainWindow.h" />
411+
<QtMoc Include="ProjectPlus/DownloadUpdateDialog.h" />
412+
<QtMoc Include="ProjectPlus/DownloadWorker.h" />
413+
<QtMoc Include="ProjectPlus/InstallUpdateDialog.h" />
414+
<QtMoc Include="ProjectPlus/UpdateDialog.h" />
394415
<QtMoc Include="MenuBar.h" />
395416
<QtMoc Include="NetPlay\ChunkedProgressDialog.h" />
396417
<QtMoc Include="NetPlay\GameDigestDialog.h" />
@@ -455,9 +476,6 @@
455476
<ProjectReference Include="$(CoreDir)DolphinLib.vcxproj">
456477
<Project>{D79392F7-06D6-4B4B-A39F-4D587C215D3A}</Project>
457478
</ProjectReference>
458-
<ProjectReference Include="$(CoreDir)Common\SCMRevGen.vcxproj">
459-
<Project>{41279555-f94f-4ebc-99de-af863c10c5c4}</Project>
460-
</ProjectReference>
461479
<ProjectReference Include="$(DolphinRootDir)Languages\Languages.vcxproj">
462480
<Project>{0e033be3-2e08-428e-9ae9-bc673efa12b5}</Project>
463481
</ProjectReference>
@@ -474,6 +492,7 @@
474492
</ItemGroup>
475493
<Import Project="$(ExternalsDir)bzip2\exports.props" />
476494
<Import Project="$(ExternalsDir)cpp-optparse\exports.props" />
495+
<Import Project="$(ExternalsDir)curl\exports.props" />
477496
<Import Project="$(ExternalsDir)discord-rpc\exports.props" />
478497
<Import Project="$(ExternalsDir)enet\exports.props" />
479498
<Import Project="$(ExternalsDir)fmt\exports.props" />
@@ -482,6 +501,7 @@
482501
<Import Project="$(ExternalsDir)liblzma\exports.props" />
483502
<Import Project="$(ExternalsDir)mbedtls\exports.props" />
484503
<Import Project="$(ExternalsDir)mGBA\exports.props" />
504+
<Import Project="$(ExternalsDir)minizip-ng\exports.props" />
485505
<Import Project="$(ExternalsDir)picojson\exports.props" />
486506
<Import Project="$(ExternalsDir)rcheevos\exports.props" />
487507
<Import Project="$(ExternalsDir)SFML\exports.props" />
@@ -491,16 +511,21 @@
491511
<ImportGroup Label="ExtensionTargets" />
492512
<!--Copy Exe, Data directory and DLLs which should be located in the executable directory-->
493513
<ItemGroup>
514+
<!---<DataSysFiles Include="$(DolphinRootDir)Data\**\Extras\**\*.*" />-->
515+
<DataSysFiles Include="$(DolphinRootDir)Data\**\Games\**\*.*" />
516+
<DataSysFiles Include="$(DolphinRootDir)Data\**\Launcher\**\*.*" />
494517
<DataSysFiles Include="$(DolphinRootDir)Data\**\Sys\**\*.*" />
518+
<DataUserFiles Include="$(DolphinRootDir)Data\**\User\**\*.*" />
495519
<DataTxtFiles Include="$(DolphinRootDir)Data\license.txt" />
520+
<DataTxtFiles Include="$(DolphinRootDir)Data\portable.txt" />
496521
<BinaryFiles Include="$(TargetPath)" />
497-
<AllInputFiles Include="@(DataSysFiles);@(DataTxtFiles);@(BinaryFiles)" />
522+
<AllInputFiles Include="@(DataSysFiles);@(DataUserFiles);@(DataTxtFiles);@(BinaryFiles)" />
498523
</ItemGroup>
499524
<Target Name="AfterBuild" Inputs="@(AllInputFiles)" Outputs="@(AllInputFiles -> '$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(Extension)')">
500525
<Message Text="Copying Data directory..." Importance="High" />
501-
<RemoveDir Directories="$(BinaryOutputDir)Sys" />
502-
<Copy SourceFiles="@(DataSysFiles)" DestinationFolder="$(BinaryOutputDir)%(RecursiveDir)" SkipUnchangedFiles="True" />
503-
<Copy SourceFiles="@(DataTxtFiles)" DestinationFolder="$(BinaryOutputDir)" SkipUnchangedFiles="True" />
526+
<Copy SourceFiles="@(DataSysFiles)" DestinationFolder="$(BinaryOutputDir)%(RecursiveDir)" Condition="!Exists('$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(DataSysFiles.Extension)') OR $([System.DateTime]::Parse('%(ModifiedTime)').Ticks) &gt; $([System.IO.File]::GetLastWriteTime('$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(DataSysFiles.Extension)').Ticks)" />
527+
<Copy SourceFiles="@(DataUserFiles)" DestinationFolder="$(BinaryOutputDir)%(RecursiveDir)" Condition="!Exists('$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(DataSysFiles.Extension)') OR $([System.DateTime]::Parse('%(ModifiedTime)').Ticks) &gt; $([System.IO.File]::GetLastWriteTime('$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(DataSysFiles.Extension)').Ticks)" />
528+
<Copy SourceFiles="@(DataTxtFiles)" DestinationFolder="$(BinaryOutputDir)" Condition="!Exists('$(BinaryOutputDir)%(Filename)%(DataTxtFiles.Extension)') OR $([System.DateTime]::Parse('%(ModifiedTime)').Ticks) &gt; $([System.IO.File]::GetLastWriteTime('$(BinaryOutputDir)%(RecursiveDir)%(Filename)%(DataTxtFiles.Extension)').Ticks)" />
504529
<Message Text="Copy: @(BinaryFiles) -&gt; $(BinaryOutputDir)" Importance="High" />
505530
<Copy SourceFiles="@(BinaryFiles)" DestinationFolder="$(BinaryOutputDir)" />
506531
</Target>

Source/Core/DolphinQt/MainWindow.cpp

Lines changed: 88 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include <QStyleHints>
1818
#include <QVBoxLayout>
1919
#include <QWindow>
20+
#include <QMessageBox>
21+
#include <QByteArray>
22+
#include <QJsonDocument>
2023

2124
#include <fmt/format.h>
2225

@@ -38,6 +41,10 @@
3841
#include "Common/ScopeGuard.h"
3942
#include "Common/Version.h"
4043
#include "Common/WindowSystemInfo.h"
44+
#include "Common/HttpRequest.h"
45+
#include "Common/scmrev.h"
46+
#include "Common/ScopeGuard.h"
47+
#include "Common/StringUtil.h"
4148

4249
#include "Core/AchievementManager.h"
4350
#include "Core/Boot/Boot.h"
@@ -107,6 +114,9 @@
107114
#include "DolphinQt/NetPlay/NetPlayBrowser.h"
108115
#include "DolphinQt/NetPlay/NetPlayDialog.h"
109116
#include "DolphinQt/NetPlay/NetPlaySetupDialog.h"
117+
#include "DolphinQt/ProjectPlus/DownloadUpdateDialog.h"
118+
#include "DolphinQt/ProjectPlus/InstallUpdateDialog.h"
119+
#include "DolphinQt/ProjectPlus/UpdateDialog.h"
110120
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
111121
#include "DolphinQt/QtUtils/FileOpenEventFilter.h"
112122
#include "DolphinQt/QtUtils/ModalMessageBox.h"
@@ -274,6 +284,8 @@ MainWindow::MainWindow(Core::System& system, std::unique_ptr<BootParameters> boo
274284
InitCoreCallbacks();
275285

276286
NetPlayInit();
287+
288+
CheckForUpdatesAuto();
277289

278290
#ifdef USE_RETRO_ACHIEVEMENTS
279291
AchievementManager::GetInstance().Init(reinterpret_cast<void*>(winId()));
@@ -612,6 +624,7 @@ void MainWindow::ConnectMenuBar()
612624
&GameList::OnGameListVisibilityChanged);
613625

614626
connect(m_menu_bar, &MenuBar::ShowAboutDialog, this, &MainWindow::ShowAboutDialog);
627+
connect(m_menu_bar, &MenuBar::ShowUpdateDialog, this, &MainWindow::ShowUpdateDialog);
615628

616629
connect(m_game_list, &GameList::SelectionChanged, m_menu_bar, &MenuBar::SelectionChanged);
617630
connect(this, &MainWindow::ReadOnlyModeChanged, m_menu_bar, &MenuBar::ReadOnlyModeChanged);
@@ -710,7 +723,7 @@ void MainWindow::ConnectToolBar()
710723
connect(m_tool_bar, &ToolBar::SettingsPressed, this, &MainWindow::ShowSettingsWindow);
711724
connect(m_tool_bar, &ToolBar::ControllersPressed, this, &MainWindow::ShowControllersWindow);
712725
connect(m_tool_bar, &ToolBar::GraphicsPressed, this, &MainWindow::ShowGraphicsWindow);
713-
connect(m_tool_bar, &ToolBar::InstallUpdateManuallyPressed, this, &MainWindow::InstallUpdateManually);
726+
connect(m_tool_bar, &ToolBar::InstallUpdateManuallyPressed, this, &MainWindow::ShowUpdateDialog);
714727

715728
connect(m_tool_bar, &ToolBar::StepPressed, m_code_widget, &CodeWidget::Step);
716729
connect(m_tool_bar, &ToolBar::StepOverPressed, m_code_widget, &CodeWidget::StepOver);
@@ -1350,6 +1363,80 @@ void MainWindow::ShowAboutDialog()
13501363
about.exec();
13511364
}
13521365

1366+
// P+ change: New updater; credit to RainbowTabitha and the Mario Party Netplay team for the base code!
1367+
1368+
void MainWindow::ShowUpdateDialog()
1369+
{
1370+
Common::HttpRequest httpRequest;
1371+
1372+
// Make the GET request
1373+
auto response = httpRequest.Get("https://api.github.com/repos/jlambert360/PPlusReleases/releases/latest");
1374+
1375+
if (response)
1376+
{
1377+
// Access the underlying vector and convert it to QByteArray
1378+
QByteArray responseData(reinterpret_cast<const char*>(response->data()), response->size());
1379+
1380+
// Parse the JSON response
1381+
QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);
1382+
QJsonObject jsonObject = jsonDoc.object();
1383+
1384+
QString currentVersion = QString::fromStdString(SCM_DESC_STR);
1385+
QString latestVersion = jsonObject.value(QStringLiteral("tag_name")).toString();
1386+
1387+
if (currentVersion != latestVersion)
1388+
{
1389+
// Create and show the UpdateDialog with the fetched data
1390+
bool forced = false; // Set this based on your logic
1391+
UserInterface::Dialog::UpdateDialog updater(this, jsonObject, forced);
1392+
SetQWidgetWindowDecorations(&updater);
1393+
updater.exec();
1394+
} else {
1395+
QMessageBox::information(this, tr("Info"), tr("You are already up to date."));
1396+
}
1397+
}
1398+
else
1399+
{
1400+
// Handle error
1401+
QMessageBox::critical(this, tr("Error"), tr("Failed to fetch update information."));
1402+
}
1403+
}
1404+
1405+
void MainWindow::CheckForUpdatesAuto()
1406+
{
1407+
Common::HttpRequest httpRequest;
1408+
1409+
// Make the GET request
1410+
auto response = httpRequest.Get("https://api.github.com/repos/jlambert360/PPlusReleases/releases/latest");
1411+
1412+
if (response)
1413+
{
1414+
// Access the underlying vector and convert it to QByteArray
1415+
QByteArray responseData(reinterpret_cast<const char*>(response->data()), response->size());
1416+
1417+
// Parse the JSON response
1418+
QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);
1419+
QJsonObject jsonObject = jsonDoc.object();
1420+
1421+
QString currentVersion = QString::fromStdString(SCM_DESC_STR);
1422+
QString latestVersion = jsonObject.value(QStringLiteral("tag_name")).toString();
1423+
1424+
if (currentVersion != latestVersion)
1425+
{
1426+
// Create and show the UpdateDialog with the fetched data
1427+
bool forced = false; // Set this based on your logic
1428+
UserInterface::Dialog::UpdateDialog updater(this, jsonObject, forced);
1429+
SetQWidgetWindowDecorations(&updater);
1430+
updater.exec();
1431+
}
1432+
}
1433+
else
1434+
{
1435+
// Handle error
1436+
QMessageBox::critical(this, tr("Error"), tr("Failed to fetch update information."));
1437+
}
1438+
}
1439+
13531440
void MainWindow::ShowHotkeyDialog()
13541441
{
13551442
if (!m_hotkey_window)
@@ -1387,16 +1474,6 @@ void MainWindow::ShowGraphicsWindow()
13871474
m_graphics_window->activateWindow();
13881475
}
13891476

1390-
void MainWindow::InstallUpdateManually()
1391-
{
1392-
const std::string autoupdate_track = Config::Get(Config::MAIN_AUTOUPDATE_UPDATE_TRACK);
1393-
const std::string manual_track = autoupdate_track.empty() ? "dev" : autoupdate_track;
1394-
auto* const updater = new Updater(this->parentWidget(), manual_track,
1395-
Config::Get(Config::MAIN_AUTOUPDATE_HASH_OVERRIDE));
1396-
1397-
updater->CheckForUpdate();
1398-
}
1399-
14001477
void MainWindow::ShowNetPlaySetupDialog()
14011478
{
14021479
SetQWidgetWindowDecorations(m_netplay_setup_dialog);

Source/Core/DolphinQt/MainWindow.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ class MainWindow final : public QMainWindow
172172
void ShowGraphicsWindow();
173173
void ShowFreeLookWindow();
174174
void ShowAboutDialog();
175-
void InstallUpdateManually();
175+
void ShowUpdateDialog();
176+
void CheckForUpdatesAuto();
176177
void ShowHotkeyDialog();
177178
void ShowNetPlaySetupDialog();
178179
void ShowNetPlayBrowser();

0 commit comments

Comments
 (0)