Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opt.: share on desktop #405

Merged
merged 2 commits into from
Jun 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 16 additions & 40 deletions lib/core/utils/window_size_listener.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,52 +8,40 @@ abstract final class WindowSizeListener {

final class _WindowSizeListener implements WindowListener {
@override
void onWindowBlur() {
}
void onWindowBlur() {}

@override
void onWindowClose() {
}
void onWindowClose() {}

@override
void onWindowDocked() {
}
void onWindowDocked() {}

@override
void onWindowEnterFullScreen() {
}
void onWindowEnterFullScreen() {}

@override
void onWindowEvent(String eventName) {
}
void onWindowEvent(String eventName) {}

@override
void onWindowFocus() {
}
void onWindowFocus() {}

@override
void onWindowLeaveFullScreen() {
}
void onWindowLeaveFullScreen() {}

@override
void onWindowMaximize() {
}
void onWindowMaximize() {}

@override
void onWindowMinimize() {
}
void onWindowMinimize() {}

@override
void onWindowMove() {
}
void onWindowMove() {}

@override
void onWindowMoved() {
}
void onWindowMoved() {}

@override
void onWindowResize() {
if (!isLinux) return;
final current = Stores.setting.windowSize.fetch();
if (current.isEmpty) return;

Expand All @@ -63,26 +51,14 @@ final class _WindowSizeListener implements WindowListener {
}

@override
void onWindowResized() {
if (!isMacOS || !isWindows) return;
final current = Stores.setting.windowSize.fetch();
if (current.isEmpty) return;

windowManager.getSize().then((size) {
Stores.setting.windowSize.put(size.toIntStr());
});
}
void onWindowResized() {}

@override
void onWindowRestore() {
}
void onWindowRestore() {}

@override
void onWindowUndocked() {
}
void onWindowUndocked() {}

@override
void onWindowUnmaximize() {
}

}
void onWindowUnmaximize() {}
}
4 changes: 3 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ Future<void> _initApp() async {
_setupDebug();

final windowSize = Stores.setting.windowSize.fetch().toSize();
final hideTitleBar = Stores.setting.hideTitleBar.fetch();
print('windowSize: $windowSize, hideTitleBar: $hideTitleBar');
SystemUIs.initDesktopWindow(
hideTitleBar: Stores.setting.hideTitleBar.fetch(),
hideTitleBar: hideTitleBar,
size: windowSize,
listener: WindowSizeListener.instance,
);
Expand Down
13 changes: 1 addition & 12 deletions lib/view/page/backup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,7 @@ class BackupPage extends StatelessWidget {
trailing: const Icon(Icons.save),
onTap: () async {
final path = await Backup.backup();
debugPrint("Backup path: $path");

/// Issue #188
switch (Pfs.type) {
case Pfs.windows:
final backslashPath = path.replaceAll('/', '\\');
await Process.run('explorer', ['/select,$backslashPath']);
case Pfs.linux:
await Process.run('xdg-open', [path]);
default:
await Pfs.sharePath(path);
}
await Pfs.share(path: path);
},
),
ListTile(
Expand Down
2 changes: 1 addition & 1 deletion lib/view/page/storage/local.dart
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ class _LocalStoragePageState extends State<LocalStoragePage> {
leading: const Icon(Icons.open_in_new),
title: Text(l10n.open),
onTap: () {
Pfs.sharePath(file.absolute.path);
Pfs.share(path: file.absolute.path);
},
),
],
Expand Down
137 changes: 78 additions & 59 deletions lib/view/page/storage/sftp_mission.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,65 +59,84 @@ class _SftpMissionPageState extends State<SftpMissionPage> {
),
);
}
switch (status.status) {
case SftpWorkerStatus.finished:
final time = status.spentTime.toString();
final str = '${l10n.finished} ${l10n.spentTime(
time == 'null' ? l10n.unknown : (time.substring(0, time.length - 7)),
)}';
return _wrapInCard(
status: status,
subtitle: str,
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
onPressed: () {
final idx = status.req.localPath.lastIndexOf('/');
final dir = status.req.localPath.substring(0, idx);
AppRoutes.localStorage(initDir: dir).go(context);
},
icon: const Icon(Icons.file_open)),
IconButton(
onPressed: () => Pfs.sharePath(status.req.localPath),
icon: const Icon(Icons.open_in_new),
)
],
),
);
case SftpWorkerStatus.loading:
final percentStr = (status.progress ?? 0.0).toStringAsFixed(2);
final size = (status.size ?? 0).bytes2Str;
return _wrapInCard(
status: status,
subtitle: l10n.percentOfSize(percentStr, size),
trailing: _buildDelete(status.fileName, status.id),
);
case SftpWorkerStatus.preparing:
return _wrapInCard(
status: status,
subtitle: l10n.sftpDlPrepare,
trailing: _buildDelete(status.fileName, status.id),
);
case SftpWorkerStatus.sshConnectted:
return _wrapInCard(
status: status,
subtitle: l10n.sftpSSHConnected,
trailing: _buildDelete(status.fileName, status.id),
);
default:
return _wrapInCard(
status: status,
subtitle: l10n.unknown,
trailing: IconButton(
onPressed: () => context.showRoundDialog(
title: l10n.error,
child: Text((status.error ?? l10n.unknown).toString()),
),
icon: const Icon(Icons.error),
),
);
}
return switch (status.status) {
const (SftpWorkerStatus.finished) => _buildFinished(status),
const (SftpWorkerStatus.loading) => _buildLoading(status),
const (SftpWorkerStatus.sshConnectted) => _buildConnected(status),
const (SftpWorkerStatus.preparing) => _buildPreparing(status),
_ => _buildDefault(status),
};
}

Widget _buildPreparing(SftpReqStatus status) {
return _wrapInCard(
status: status,
subtitle: l10n.sftpDlPrepare,
trailing: _buildDelete(status.fileName, status.id),
);
}

Widget _buildDefault(SftpReqStatus status) {
return _wrapInCard(
status: status,
subtitle: l10n.unknown,
trailing: IconButton(
onPressed: () => context.showRoundDialog(
title: l10n.error,
child: Text((status.error ?? l10n.unknown).toString()),
),
icon: const Icon(Icons.error),
),
);
}

Widget _buildConnected(SftpReqStatus status) {
return _wrapInCard(
status: status,
subtitle: l10n.sftpSSHConnected,
trailing: _buildDelete(status.fileName, status.id),
);
}

Widget _buildLoading(SftpReqStatus status) {
final percentStr = (status.progress ?? 0.0).toStringAsFixed(2);
final size = (status.size ?? 0).bytes2Str;
return _wrapInCard(
status: status,
subtitle: l10n.percentOfSize(percentStr, size),
trailing: _buildDelete(status.fileName, status.id),
);
}

Widget _buildFinished(SftpReqStatus status) {
final time = status.spentTime.toString();
final str = '${l10n.finished} ${l10n.spentTime(
time == 'null' ? l10n.unknown : (time.substring(0, time.length - 7)),
)}';

final btns = Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
onPressed: () {
final idx = status.req.localPath.lastIndexOf('/');
final dir = status.req.localPath.substring(0, idx);
AppRoutes.localStorage(initDir: dir).go(context);
},
icon: const Icon(Icons.file_open),
),
IconButton(
onPressed: () => Pfs.share(path: status.req.localPath),
icon: const Icon(Icons.open_in_new),
)
],
);

return _wrapInCard(
status: status,
subtitle: str,
trailing: btns,
);
}

Widget _wrapInCard({
Expand Down
24 changes: 21 additions & 3 deletions macos/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
PODS:
- device_info_plus (0.0.1):
- FlutterMacOS
- dynamic_color (0.0.2):
- FlutterMacOS
- FlutterMacOS (1.0.0)
- icloud_storage (0.0.1):
- FlutterMacOS
- package_info_plus (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
Expand All @@ -16,27 +20,36 @@ PODS:
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
- wakelock_plus (0.0.1):
- FlutterMacOS
- window_manager (0.2.0):
- FlutterMacOS

DEPENDENCIES:
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)

EXTERNAL SOURCES:
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
dynamic_color:
:path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos
FlutterMacOS:
:path: Flutter/ephemeral
icloud_storage:
:path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
screen_retriever:
Expand All @@ -47,18 +60,23 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
wakelock_plus:
:path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos
window_manager:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos

SPEC CHECKSUMS:
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
icloud_storage: 33b05299e26d1391d724da8d62860e702380a1cd
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8

PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d
Expand Down
4 changes: 2 additions & 2 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -385,8 +385,8 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "v1.0.45"
resolved-ref: ec8b29583a872130a536745eb2ff34f3f71ec042
ref: "v1.0.47"
resolved-ref: ea605db48e626fa08f06b2056510ed4887ade087
url: "https://github.com/lppcg/fl_lib"
source: git
version: "0.0.1"
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ dependencies:
fl_lib:
git:
url: https://github.com/lppcg/fl_lib
ref: v1.0.45
ref: v1.0.47

dependency_overrides:
# dartssh2:
Expand Down