mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-05 13:00:42 +08:00
url protocol registration on linux
This commit is contained in:
parent
a98efb954c
commit
3b13add8a0
@ -14,7 +14,8 @@ enum DownloadState
|
||||
DownloadStopped,
|
||||
DownloadDone,
|
||||
DownloadError,
|
||||
DownloadPaused
|
||||
DownloadPaused,
|
||||
DownloadStateUnknown
|
||||
};
|
||||
|
||||
class Download {
|
||||
|
@ -78,6 +78,7 @@ bool DownloadApp::OnInit()
|
||||
m_frame = new DownloadFrame("Downloader", wxPoint(50, 50), wxSize(450, 340));
|
||||
m_frame->Show(true);
|
||||
|
||||
#ifdef _WIN32
|
||||
wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) {
|
||||
auto frame = dynamic_cast<DownloadFrame*>(win);
|
||||
COPYDATASTRUCT* copy_data_structure = { 0 };
|
||||
@ -88,6 +89,7 @@ bool DownloadApp::OnInit()
|
||||
}
|
||||
return true;
|
||||
});
|
||||
#endif
|
||||
|
||||
return wxApp::OnInit();
|
||||
}
|
||||
@ -400,6 +402,7 @@ DownloadState DownloadFrame::get_download_state(int id) const
|
||||
return m_downloads[i]->get_state();
|
||||
}
|
||||
}
|
||||
return DownloadState::DownloadStateUnknown;
|
||||
}
|
||||
|
||||
bool DownloadFrame::is_in_state(int id, DownloadState state) const
|
||||
@ -409,6 +412,7 @@ bool DownloadFrame::is_in_state(int id, DownloadState state) const
|
||||
return m_downloads[i]->get_state() == state;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DownloadFrame::cancel_download(int id)
|
||||
@ -471,6 +475,7 @@ wxString DownloadFrame::get_path_of(int id) const
|
||||
return m_downloads[i]->get_final_path().string();
|
||||
}
|
||||
}
|
||||
return wxString();
|
||||
}
|
||||
|
||||
wxString DownloadFrame::get_folder_path_of(int id) const
|
||||
@ -480,6 +485,7 @@ wxString DownloadFrame::get_folder_path_of(int id) const
|
||||
return m_downloads[i]->get_final_path().parent_path().string();
|
||||
}
|
||||
}
|
||||
return wxString();
|
||||
}
|
||||
|
||||
void DownloadFrame::handle_message(const wxString& msg)
|
||||
|
@ -217,22 +217,31 @@ bool execute_command(const wxString& command)
|
||||
|
||||
bool SlicerSend::get_instance_exists() const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return !EnumWindows(EnumWindowsProcSlicer, 0);
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
bool SlicerSend::send_path(const wxString& path) const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
std::string escaped = escape_strings_cstyle({ "prusa-downloader", boost::nowide::narrow(path) });
|
||||
return send_message_slicer(boost::nowide::widen(escaped));
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SlicerSend::start_with_path(const wxString& path) const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
// "C:\\Users\\User\\Downloads\\PrusaSlicer-2.4.2+win64-202204251110\\prusa-slicer.exe "
|
||||
std::string escaped = escape_strings_cstyle({ boost::nowide::narrow(path) });
|
||||
//return execute_command(boost::nowide::widen(escaped));
|
||||
std::string binary = (boost::dll::program_location().parent_path() / "prusa-slicer.exe").string() + " ";
|
||||
//return execute_command("C:\\Users\\User\\Downloads\\PrusaSlicer-2.4.2+win64-202204251110\\prusa-slicer.exe " + boost::nowide::widen(escaped));
|
||||
return execute_command(boost::nowide::widen(binary) + boost::nowide::widen(escaped));
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SlicerSend::start_or_send(const wxString& path) const
|
||||
@ -248,12 +257,18 @@ bool SlicerSend::start_or_send(const wxString& path) const
|
||||
|
||||
bool DownloaderSend::get_instance_exists() const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return !EnumWindows(EnumWindowsProcDownloader, 0);
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
bool DownloaderSend::send_url(const wxString& url) const
|
||||
{
|
||||
#ifdef _WIN32
|
||||
//std::string escaped = escape_strings_cstyle({ boost::nowide::narrow(url) });
|
||||
return send_message_downloader(url);
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1248,8 +1248,7 @@ PageUpdate::PageUpdate(ConfigWizard *parent)
|
||||
box_presets->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent &event) { this->preset_update = event.IsChecked(); });
|
||||
|
||||
box_registry->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) {
|
||||
//if(!event.IsChecked())
|
||||
// return;
|
||||
#ifdef _WIN32
|
||||
// Registry key creation for "prusaslicer://" URL
|
||||
|
||||
boost::filesystem::path binary_path(resources_dir());
|
||||
@ -1272,7 +1271,7 @@ PageUpdate::PageUpdate(ConfigWizard *parent)
|
||||
}
|
||||
//key_full = "\"C:\\Program Files\\Prusa3D\\PrusaSlicer\\prusa-slicer-console.exe\" \"%1\"";
|
||||
key_full = key_string;
|
||||
|
||||
#endif
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -420,6 +420,34 @@ void DesktopIntegrationDialog::perform_desktop_integration()
|
||||
show_error(nullptr, _L("Performing desktop integration failed - could not create Gcodeviewer desktop file. PrusaSlicer desktop file was probably created successfully."));
|
||||
}
|
||||
}
|
||||
bool url_destop_file = true;
|
||||
if (url_destop_file)
|
||||
{
|
||||
// no need for icon right?
|
||||
std::string desktop_file = GUI::format(
|
||||
"[Desktop Entry]\n"
|
||||
"Name=PrusaSlicer URL Protocol%1%\n"
|
||||
"Exec=\"%3%\" %%u\n"
|
||||
"Terminal=false\n"
|
||||
"Type=Application\n"
|
||||
"MimeType=x-scheme-handler/prusaslicer;\n"
|
||||
"StartupNotify=false\n"
|
||||
, name_suffix, version_suffix, excutable_path);
|
||||
|
||||
std::string desktop_path = GUI::format("%1%/applications/PrusaSlicerURLProtocol%2%.desktop", target_dir_desktop, version_suffix);
|
||||
if (create_desktop_file(desktop_path, desktop_file)) {
|
||||
// save path to desktop file
|
||||
//app_config->set("desktop_integration_app_viewer_path", desktop_path);
|
||||
std::string command = GUI::format("xdg-mime default PrusaSlicerURLProtocol%1%.desktop x-scheme-handler/prusaslicer", version_suffix);
|
||||
//std::string command = GUI::format("xdg-mime default PrusaSlicer%1%.desktop x-scheme-handler/prusaslicer", version_suffix);
|
||||
BOOST_LOG_TRIVIAL(debug) << "system command: " << command;
|
||||
int r = system(command.c_str());
|
||||
BOOST_LOG_TRIVIAL(debug) << "system result: " << r;
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(error) << "Performing desktop integration failed - could not create URL Protocol desktop file";
|
||||
show_error(nullptr, _L("Performing desktop integration failed - could not create RL Protocol desktop file. PrusaSlicer desktop file was probably created successfully."));
|
||||
}
|
||||
}
|
||||
|
||||
wxGetApp().plater()->get_notification_manager()->push_notification(NotificationType::DesktopIntegrationSuccess);
|
||||
}
|
||||
|
@ -201,7 +201,8 @@ FileArchiveDialog::FileArchiveDialog( mz_zip_archive* archive, std::vector<boost
|
||||
stack.pop_back();
|
||||
};
|
||||
// recursively stores whole structure of file onto function stack and synchoronize with stack object.
|
||||
std::function<size_t(boost::filesystem::path&, std::vector<ArchiveViewNode*>&)> adjust_stack = [&adjust_stack, &reduce_stack, &avc = m_avc](boost::filesystem::path& file, std::vector<ArchiveViewNode*>& stack)->size_t {
|
||||
std::function<size_t(const boost::filesystem::path&, std::vector<ArchiveViewNode*>&)> adjust_stack = [&adjust_stack, &reduce_stack, &avc = m_avc](const boost::filesystem::path& const_file, std::vector<ArchiveViewNode*>& stack)->size_t {
|
||||
boost::filesystem::path file(const_file);
|
||||
size_t struct_size = file.has_parent_path() ? adjust_stack(file.parent_path(), stack) : 0;
|
||||
|
||||
if (stack.size() > struct_size && (file.has_extension() || file.filename().string() != stack[struct_size]->get_name()))
|
||||
@ -209,7 +210,7 @@ FileArchiveDialog::FileArchiveDialog( mz_zip_archive* archive, std::vector<boost
|
||||
reduce_stack(stack, struct_size);
|
||||
}
|
||||
if (!file.has_extension() && stack.size() == struct_size)
|
||||
stack.push_back(avc->get_model()->AddFile(stack.empty() ? nullptr : stack.back(), boost::nowide::widen(file.filename().string())));
|
||||
stack.push_back(avc->get_model()->AddFile(stack.empty() ? nullptr : stack.back(), file.filename().string())); // filename string to wstring?
|
||||
return struct_size + 1;
|
||||
};
|
||||
|
||||
@ -230,7 +231,7 @@ FileArchiveDialog::FileArchiveDialog( mz_zip_archive* archive, std::vector<boost
|
||||
if (!stack.empty())
|
||||
parent = stack.back();
|
||||
|
||||
m_avc->get_model()->AddFile(parent, boost::nowide::widen(path.filename().string()))->set_fullpath(std::move(path));
|
||||
m_avc->get_model()->AddFile(parent, path.filename().string())->set_fullpath(std::move(path)); // filename string to wstring?
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,10 @@
|
||||
#include "GUI_Utils.hpp"
|
||||
#include "libslic3r/miniz_extension.hpp"
|
||||
|
||||
#include <boost/filesystem/path.hpp>
|
||||
#include <wx/wx.h>
|
||||
|
||||
#include <wx/dataview.h>
|
||||
#include "wxExtensions.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
Loading…
x
Reference in New Issue
Block a user