Merge pull request #2206 from 21pages/portable-service
quick start portable ci
This commit is contained in:
commit
b576c17ff9
9
.github/workflows/flutter-nightly.yml
vendored
9
.github/workflows/flutter-nightly.yml
vendored
@ -15,7 +15,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-for-windows:
|
build-for-windows:
|
||||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
name: ${{ matrix.job.target }} (${{ matrix.job.os }}) ${{ matrix.job.suffix }}
|
||||||
runs-on: ${{ matrix.job.os }}
|
runs-on: ${{ matrix.job.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@ -23,7 +23,8 @@ jobs:
|
|||||||
job:
|
job:
|
||||||
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||||
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||||
- { target: x86_64-pc-windows-msvc , os: windows-2019 }
|
- { target: x86_64-pc-windows-msvc , os: windows-2019, suffix: "" , extra-build-args: "" }
|
||||||
|
- { target: x86_64-pc-windows-msvc , os: windows-2019, suffix: "-qs", extra-build-args: "--quick_start" }
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@ -83,13 +84,13 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Build rustdesk
|
- name: Build rustdesk
|
||||||
run: python3 .\build.py --portable --hwcodec --flutter
|
run: python3 .\build.py --portable --hwcodec --flutter ${{ matrix.job.extra-build-args }}
|
||||||
|
|
||||||
- name: Rename rustdesk
|
- name: Rename rustdesk
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
for name in rustdesk*??-install.exe; do
|
for name in rustdesk*??-install.exe; do
|
||||||
mv "$name" "${name%%-install.exe}-${{ matrix.job.target }}.exe"
|
mv "$name" "${name%%-install.exe}-${{ matrix.job.target }}${{ matrix.job.suffix }}.exe"
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Publish Release
|
- name: Publish Release
|
||||||
|
@ -29,6 +29,7 @@ flutter = ["flutter_rust_bridge"]
|
|||||||
default = ["use_dasp"]
|
default = ["use_dasp"]
|
||||||
hwcodec = ["scrap/hwcodec"]
|
hwcodec = ["scrap/hwcodec"]
|
||||||
mediacodec = ["scrap/mediacodec"]
|
mediacodec = ["scrap/mediacodec"]
|
||||||
|
quick_start = []
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
7
build.py
7
build.py
@ -81,6 +81,11 @@ def make_parser():
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
help='Build windows portable'
|
help='Build windows portable'
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--quick_start',
|
||||||
|
action='store_true',
|
||||||
|
help='Windows quick start portable'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--flatpak',
|
'--flatpak',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
@ -189,6 +194,8 @@ def get_features(args):
|
|||||||
features = ['inline']
|
features = ['inline']
|
||||||
if windows:
|
if windows:
|
||||||
features.extend(get_rc_features(args))
|
features.extend(get_rc_features(args))
|
||||||
|
if args.quick_start:
|
||||||
|
features.append('quick_start')
|
||||||
if args.hwcodec:
|
if args.hwcodec:
|
||||||
features.append('hwcodec')
|
features.append('hwcodec')
|
||||||
if args.flutter:
|
if args.flutter:
|
||||||
|
@ -90,6 +90,9 @@ class _ConnectionPageState extends State<ConnectionPage>
|
|||||||
Get.forceAppUpdate();
|
Get.forceAppUpdate();
|
||||||
}
|
}
|
||||||
isWindowMinisized = false;
|
isWindowMinisized = false;
|
||||||
|
} else if (eventName == 'close') {
|
||||||
|
// called more then one time
|
||||||
|
bind.mainOnMainWindowClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +81,13 @@ pub fn core_main() -> Option<Vec<String>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
|
#[cfg(feature = "quick_start")]
|
||||||
|
if !crate::platform::is_installed() && args.is_empty() && !_is_elevate && !_is_run_as_system {
|
||||||
|
if let Err(e) = crate::portable_service::client::start_portable_service() {
|
||||||
|
log::error!("Failed to start portable service:{:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[cfg(windows)]
|
||||||
if !crate::platform::is_installed() && (_is_elevate || _is_run_as_system) {
|
if !crate::platform::is_installed() && (_is_elevate || _is_run_as_system) {
|
||||||
crate::platform::elevate_or_run_as_system(click_setup, _is_elevate, _is_run_as_system);
|
crate::platform::elevate_or_run_as_system(click_setup, _is_elevate, _is_run_as_system);
|
||||||
return None;
|
return None;
|
||||||
@ -277,7 +284,7 @@ fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option<Vec<Strin
|
|||||||
"RustDesk",
|
"RustDesk",
|
||||||
(WM_USER + 2) as _, // refered from unilinks desktop pub
|
(WM_USER + 2) as _, // refered from unilinks desktop pub
|
||||||
uni_links.as_str(),
|
uni_links.as_str(),
|
||||||
true
|
true,
|
||||||
);
|
);
|
||||||
return if res { None } else { Some(Vec::new()) };
|
return if res { None } else { Some(Vec::new()) };
|
||||||
}
|
}
|
||||||
|
@ -619,7 +619,11 @@ pub fn main_set_peer_option_sync(id: String, key: String, value: String) -> Sync
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn main_set_peer_alias(id: String, alias: String) {
|
pub fn main_set_peer_alias(id: String, alias: String) {
|
||||||
main_broadcast_message(&HashMap::from([("name", "alias"), ("id", &id), ("alias", &alias)]));
|
main_broadcast_message(&HashMap::from([
|
||||||
|
("name", "alias"),
|
||||||
|
("id", &id),
|
||||||
|
("alias", &alias),
|
||||||
|
]));
|
||||||
set_peer_option(id, "alias".to_owned(), alias)
|
set_peer_option(id, "alias".to_owned(), alias)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1173,6 +1177,11 @@ pub fn main_account_auth_result() -> String {
|
|||||||
account_auth_result()
|
account_auth_result()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn main_on_main_window_close() {
|
||||||
|
#[cfg(windows)]
|
||||||
|
crate::portable_service::client::drop_portable_service_shared_memory();
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
pub mod server_side {
|
pub mod server_side {
|
||||||
use jni::{
|
use jni::{
|
||||||
|
@ -1553,6 +1553,13 @@ pub fn run_as_system(arg: &str) -> ResultType<()> {
|
|||||||
|
|
||||||
pub fn elevate_or_run_as_system(is_setup: bool, is_elevate: bool, is_run_as_system: bool) {
|
pub fn elevate_or_run_as_system(is_setup: bool, is_elevate: bool, is_run_as_system: bool) {
|
||||||
// avoid possible run recursively due to failed run.
|
// avoid possible run recursively due to failed run.
|
||||||
|
log::info!(
|
||||||
|
"elevate:{}->{:?}, run_as_system:{}->{}",
|
||||||
|
is_elevate,
|
||||||
|
is_elevated(None),
|
||||||
|
is_run_as_system,
|
||||||
|
crate::username(),
|
||||||
|
);
|
||||||
let arg_elevate = if is_setup {
|
let arg_elevate = if is_setup {
|
||||||
"--noinstall --elevate"
|
"--noinstall --elevate"
|
||||||
} else {
|
} else {
|
||||||
|
@ -406,8 +406,9 @@ pub mod server {
|
|||||||
Pong => {
|
Pong => {
|
||||||
nack = 0;
|
nack = 0;
|
||||||
}
|
}
|
||||||
ConnCount(Some(n)) => {
|
ConnCount(Some(_n)) => {
|
||||||
if n == 0 {
|
#[cfg(not(feature = "quick_start"))]
|
||||||
|
if _n == 0 {
|
||||||
log::info!("Connnection count equals 0, exit");
|
log::info!("Connnection count equals 0, exit");
|
||||||
stream.send(&Data::DataPortableService(WillClose)).await.ok();
|
stream.send(&Data::DataPortableService(WillClose)).await.ok();
|
||||||
break;
|
break;
|
||||||
@ -435,6 +436,7 @@ pub mod server {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
stream.send(&Data::DataPortableService(Ping)).await.ok();
|
stream.send(&Data::DataPortableService(Ping)).await.ok();
|
||||||
|
#[cfg(not(feature = "quick_start"))]
|
||||||
stream.send(&Data::DataPortableService(ConnCount(None))).await.ok();
|
stream.send(&Data::DataPortableService(ConnCount(None))).await.ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -462,6 +464,7 @@ pub mod client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn start_portable_service() -> ResultType<()> {
|
pub(crate) fn start_portable_service() -> ResultType<()> {
|
||||||
|
log::info!("start portable service");
|
||||||
if PORTABLE_SERVICE_RUNNING.lock().unwrap().clone() {
|
if PORTABLE_SERVICE_RUNNING.lock().unwrap().clone() {
|
||||||
bail!("already running");
|
bail!("already running");
|
||||||
}
|
}
|
||||||
@ -484,7 +487,7 @@ pub mod client {
|
|||||||
crate::portable_service::SHMEM_NAME,
|
crate::portable_service::SHMEM_NAME,
|
||||||
shmem_size,
|
shmem_size,
|
||||||
)?);
|
)?);
|
||||||
shutdown_hooks::add_shutdown_hook(drop_shmem);
|
shutdown_hooks::add_shutdown_hook(drop_portable_service_shared_memory);
|
||||||
}
|
}
|
||||||
let mut option = SHMEM.lock().unwrap();
|
let mut option = SHMEM.lock().unwrap();
|
||||||
let shmem = option.as_mut().unwrap();
|
let shmem = option.as_mut().unwrap();
|
||||||
@ -504,7 +507,7 @@ pub mod client {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" fn drop_shmem() {
|
pub extern "C" fn drop_portable_service_shared_memory() {
|
||||||
log::info!("drop shared memory");
|
log::info!("drop shared memory");
|
||||||
*SHMEM.lock().unwrap() = None;
|
*SHMEM.lock().unwrap() = None;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user