canonical / workshops Goto Github PK
View Code? Open in Web Editor NEWWorkshops
License: GNU General Public License v3.0
Workshops
License: GNU General Public License v3.0
#268 broke keyboard shortcuts on the home screen. For example, instead of opening the command palette, pressing Ctrl
+Shift
+K
brings up the search field:
Needs its own icon!
There's some old code in remote_store.dart that uses SharedPreferences. We should port that to the new JSON settings to get rid of the SharedPreferences dependency.
If you right click on any page and choose "New Tab" then the title of the home tab is "Terminal" - seems like it should be "Select Image" or something.
There will be a lot of shortcuts and it would be nice to have them customizable.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
Warning
Renovate failed to look up the following dependencies: Failed to look up dart package simplestreams
.
Files affected: pubspec.yaml
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
.github/workflows/analysis.yaml
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
subosito/flutter-action v2
ubuntu 22.04
ubuntu 22.04
ubuntu 22.04
.github/workflows/build.yaml
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
dart-lang/setup-dart v1
ubuntu 22.04
ubuntu 22.04
.github/workflows/cla-check.yaml
canonical/has-signed-canonical-cla v1
ubuntu 20.04
.github/workflows/generate.yaml
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
subosito/flutter-action v2
peter-evans/create-pull-request v4
ubuntu 22.04
ubuntu 22.04
ubuntu 22.04
.github/workflows/snap.yaml
actions/checkout v2
snapcore/action-build v1
actions/upload-artifact v3
ubuntu 20.04
.github/workflows/test.yaml
actions/checkout v2
subosito/flutter-action v2
codecov/codecov-action v3
actions/checkout v2
subosito/flutter-action v2
actions/checkout v2
subosito/flutter-action v2
ubuntu 22.04
ubuntu 22.04
ubuntu 22.04
packages/lxd/.github/workflows/analyze.yml
actions/checkout v2
ubuntu 20.04
packages/lxd/.github/workflows/cla-check.yaml
canonical/has-signed-canonical-cla v1
packages/lxd/.github/workflows/format.yml
actions/checkout v2
ubuntu 20.04
packages/lxd/.github/workflows/test.yml
actions/checkout v2
actions/checkout v2
subosito/flutter-action v2
codecov/codecov-action v1
ubuntu 20.04
ubuntu 20.04
packages/accel_key/pubspec.yaml
ffi ^2.0.1
flutter
ubuntu_localizations ^0.1.6
ffigen ^7.1.0
flutter_lints ^2.0.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/async_value/pubspec.yaml
riverpod ^2.0.0
dart >=2.17.0 <3.0.0
packages/command_store/pubspec.yaml
flutter
flutter_jsettings ^0.1.0
build_runner ^2.3.0
flutter_lints ^2.0.0
mockito 5.4.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/context_menu/pubspec.yaml
flutter
flutter_lints ^2.0.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/flutter_jsettings/example/pubspec.yaml
flutter
provider ^6.0.4
ubuntu_service ^0.2.0
xdg_directories ^0.2.0+2
yaru ^0.9.0
flutter_lints ^2.0.0
dart >=2.18.0 <3.0.0
packages/flutter_jsettings/pubspec.yaml
flutter
jsettings ^0.1.1
build_runner ^2.3.2
flutter_lints ^2.0.0
mockito ^5.3.2
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/jsettings/pubspec.yaml
lints ^2.0.0
mockito ^5.3.2
test ^1.16.0
dart >=2.17.0 <3.0.0
packages/lxd/pubspec.yaml
freezed_annotation ^2.0.3
json_annotation ^4.5.0
build_runner ^2.1.10
freezed ^2.3.1
json_serializable ^6.2.0
lints ^2.0.0
mockito 5.4.0
test ^1.16.8
dart >=2.17.0 <3.0.0
packages/lxd_service/pubspec.yaml
freezed_annotation ^2.0.3
json_annotation ^4.5.0
rxdart ^0.27.3
stdlibc ^0.1.0
ubuntu_logger ^0.0.2
build_runner ^2.1.11
freezed ^2.3.1
json_serializable ^6.2.0
lints ^2.0.0
mockito 5.4.0
test ^1.16.0
dart >=2.17.0 <3.0.0
packages/lxd_test/pubspec.yaml
lints ^2.0.0
dart >=2.17.0 <3.0.0
packages/lxd_x/pubspec.yaml
lints ^2.0.0
dart >=2.17.0 <3.0.0
packages/movable_tabs/pubspec.yaml
flutter
yaru_icons ^1.0.0
flutter_lints ^2.0.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/nested_split_view/example/pubspec.yaml
flutter
flutter_lints ^2.0.0
dart >=2.18.1 <3.0.0
packages/nested_split_view/pubspec.yaml
flutter
split_view ^3.2.1
flutter_lints ^2.0.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/os_logo/pubspec.yaml
flutter
flutter_svg ^1.1.0
build_runner ^2.1.11
flutter_lints ^2.0.0
mockito 5.4.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
packages/osarch/pubspec.yaml
stdlibc ^0.1.0
mockito 5.4.0
test ^1.21.1
dart >=2.17.0 <3.0.0
packages/petname/pubspec.yaml
test ^1.21.1
dart >=2.17.0 <3.0.0
packages/terminal_view/pubspec.yaml
flutter
xterm
flutter_lints ^2.0.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
pubspec.yaml
command_palette
data_size ^0.2.0
data_table_2 ^2.3.8
fake_async ^1.3.1
flutter
flutter_jsettings ^0.1.0
flutter_staggered_grid_view ^0.6.1
freezed_annotation ^2.0.3
handy_window ^0.2.0
jsettings ^0.1.1
json_annotation ^4.5.0
provider ^6.0.3
safe_change_notifier ^0.2.0
simplestreams
substring_highlight ^1.0.33
ubuntu_localizations ^0.1.6
ubuntu_logger ^0.0.2
ubuntu_service ^0.2.0
ubuntu_widgets
window_manager ^0.3.0
wizard_router ^0.9.0
xdg_directories ^0.2.0+2
yaml ^3.1.1
yaru ^0.5.0
yaru_icons ^1.0.0
yaru_widgets ^2.0.0
build_runner ^2.1.11
flutter_lints ^2.0.0
freezed ^2.3.1
json_serializable ^6.2.0
melos ^3.0.1
mockito 5.4.0
dart >=2.17.0 <3.0.0
flutter >=3.0.0
It would be cool to have a command palette like in the windows terminal.
The scroll offset should be saved and restored:
Ref: #108
https://linuxcontainers.org/lxd/getting-started-cli/#initial-configuration
$ sudo snap install lxd
[sudo] password for user:
lxd 5.5-37534be from Canonical\u2713 installed
$ lxc list
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first container, try: lxc launch ubuntu:22.04
Or for a virtual machine: lxc launch ubuntu:22.04 --vm
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
$ lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (lvm, zfs, btrfs, ceph, cephobject, dir) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GiB of the new loop device (1GiB minimum) [default=16GiB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, \u201cauto\u201d or \u201cnone\u201d) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, \u201cauto\u201d or \u201cnone\u201d) [default=auto]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Some default integer values have "(minimum)" or "(maximum)" suffixes. Users must erase that part when editing values to avoid invalid integer values. We could try to detect these and move them as part of the input field decoration? Label, helper, suffix, whatever looks reasonable. :)
instance_config_schema.yaml:
...
limits.network.priority:
Default: 0 (minimum)
...
Type: integer
limits.processes:
Default: '- (max)'
...
Type: integer
limits.cpu.priority:
Default: 10 (maximum)
...
Type: integer
limits.disk.priority:
Default: 5 (medium)
...
Type: integer
...
Ref: #108
We need LogicalKeyboardKey
<=> String
conversion for (de-)serializing shortcut settings.
Flutter exposes some relevant bits and pieces but not a complete solution, so we're currently getting some help from GTK:
Storing shortcuts formatted in the usual GTK way made more sense when we were using GSettings. Now that we have human-editable JSON config files, it would be nicer to have more human-friendly VSCode-like formatting for shortcuts.
GTK | VS Code |
---|---|
<Control><Shift>Down |
Control+Shift+Down |
Also, if we ever want to support other platforms then using GTK for the conversion might become a real problem. If Flutter doesn't offer a solution, is there any package out there that could help?
It would be rather nice if it were possible to configure the graphics, audio, home mounting, LXD server connectivity also for a container that already exists.
Once you are logged into an image, it's not clear how to return (i.e. type exit or ctrl+d). Might be worth having the tabs show by default, and disable them in preferences or using right click (i.e. how gnome-terminal does it).
ID | Shortcut |
---|---|
terminal-resize-up |
Alt +Shift +Up |
terminal-resize-down |
Alt +Shift +Down |
terminal-resize-left |
Alt +Shift +Left |
terminal-resize-right |
Alt +Shift +Right |
NOTE: The split commands should be changed to use Alt
+Shift
+W
|A
|S
|D
shortcuts.
xterm.dart version 3 no longer has the TerminalBackend
class that version 2 had and that Workshops uses to implement LXD interop.
2022/11/18 11:04:22.072561 cmd_run.go:1055: WARNING: cannot start document portal: dial unix /run/user/1000/bus: connect: no such file or directory
(workshops:5244): Gdk-WARNING **: 11:04:22.200: Settings portal not found: Could not connect: No such file or directory
(workshops:5244): IBUS-WARNING **: 11:04:22.255: Failed to mkdir /home/user/snap/workshops/213/.config/ibus/bus: Not a directory
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Connection failed (OS Error: Permission denied, errno = 13), address = /var/snap/lxd/common/lxd/unix.socket, port = 0
#0 _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:682)
#1 _RawSocket.startConnect (dart:io-patch/socket_patch.dart:1827)
#2 RawSocket.startConnect (dart:io-patch/socket_patch.dart:27)
#3 Socket._startConnect (dart:io-patch/socket_patch.dart:2048)
#4 Socket.startConnect (dart:io/socket.dart:759)
#5 LxdClient._createClient.<anonymous closure> (package:lxd/src/lxd_client.dart:74)
#6 _ConnectionTarget.connect (dart:_http/http_impl.dart:2443)
#7 _HttpClient._getConnection.connect (dart:_http/http_impl.dart:2867)
#8 _HttpClient._getConnection (dart:_http/http_impl.dart:2872)
#9 _HttpClient._openUrl (dart:_http/http_impl.dart:2727)
#10 _HttpClient.openUrl (dart:_http/http_impl.dart:2591)
#11 LxdClient._requestSync (package:lxd/src/lxd_client.dart:548)
#12 LxdClient._connect (package:lxd/src/lxd_client.dart:532)
#13 LxdClient._requestSync (package:lxd/src/lxd_client.dart:545)
#14 LxdClient.getInstances (package:lxd/src/lxd_client.dart:202)
#15 _LxdService.init (package:lxd_service/src/service.dart:78)
#16 main (package:workshops/main.dart:23)
#17 _runMain.<anonymous closure> (dart:ui/hooks.dart:134)
#18 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297)
#19 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192)
With the version 0+git.af9303f
from latest/edge
, when attempting to click the + button to create a new container, I am experiencing a failure to render the launch wizard (a grey screen pops up instead, with the associated error shown below output by the process).
My pre-existing containers continue to work OK, can be connected to from Workshops, only thing that seems affected is the ability to create new containers.
flutter: Provider<RemoteStore> not found for LauncherWizard
flutter: #0 Provider._inheritedElementOf (package:provider/src/provider.dart:343)
flutter: #1 SelectContext.select (package:provider/src/inherited_provider.dart:272)
flutter: #2 _LauncherWizardState.build (package:workshops/launcher/launcher_wizard.dart:58)
flutter: #3 StatefulElement.build (package:flutter/src/widgets/framework.dart:4992)
flutter: #4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4878)
flutter: #5 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050)
flutter: #6 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #7 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #8 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5041)
flutter: #9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #10 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #11 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #12 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #13 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #14 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #15 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #16 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411)
flutter: #17 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #18 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #19 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #20 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #21 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #22 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #23 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222)
flutter: #24 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #25 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #26 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #27 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #28 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #29 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #30 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #31 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #32 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #33 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #34 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #35 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #36 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #37 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #38 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #39 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #40 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #41 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #42 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #43 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #44 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #45 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #46 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #47 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #48 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #49 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #50 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #51 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #52 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #53 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #54 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #55 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #56 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #57 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #58 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #60 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #61 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #62 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #63 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #64 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #65 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #66 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #67 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #68 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #69 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #70 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #71 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #72 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #73 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #74 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #75 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #76 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #78 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #79 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #80 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #81 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #82 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #83 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #84 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #85 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #86 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #87 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #88 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #89 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4904)
flutter: #90 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050)
flutter: #91 Element.rebuild (package:flutter/src/widgets/framework.dart:4604)
flutter: #92 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859)
flutter: #93 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5041)
flutter: #94 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853)
flutter: #95 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #96 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
flutter: #97 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6300)
flutter: #98 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863)
flutter: #99 Element.updateChild (package:flutter/src/widgets/framework.dart:3592)
I can also see from the grey error state of the app window that the failing component is the launch wizard overlay, since the list of containers and associated controls are faintly visible in the background.
When creating a new image and selecting a 'desktop' variant in the dropdown menu the 'type' dropdown keeps its value ('container') but changes it's color, indicating that this option isn't available for desktop images. However, re-selecting 'container' as a type automatically changes the variant back to 'default'. Also, it is possible to simply click 'continue' with a disabled container type selected.
I'd expect:
When LXD is not installed, the app should present an error screen with a nice human-readable error description together with installation instructions.
$ flutter test
00:01 +0: loading /home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart test/os_logo_test.mocks.dart:56:23: Error: The return type of the method 'MockAssetBundle.loadBuffer' is 'Future<dynamic>', which does not match the return type, 'Future<ImmutableBuffer>',
of the overridden method, 'AssetBundle.loadBuffer'.
- 'Future' is from 'dart:async'.
- 'ImmutableBuffer' is from 'dart:ui'.
Change to a subtype of 'Future<ImmutableBuffer>'.
_i4.Future<dynamic> loadBuffer(String? key) => (super.noSuchMethod(
^
../../../../../.fvm/versions/stable/packages/flutter/lib/src/services/asset_bundle.dart:64:30: Context: This is the overridden method ('loadBuffer').
Future<ui.ImmutableBuffer> loadBuffer(String key) async {
^
00:04 +0 -1: loading /home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart [E]
Failed to load "/home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart": Compilation failed for testPath=/home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart
To run this test again: /home/jpnurmi/.fvm/versions/stable/bin/cache/dart-sdk/bin/dart test /home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart -p vm --plain-name 'loading /home/jpnurmi/Projects/canonical/workshops/packages/os_logo/test/os_logo_test.dart'
00:04 +0 -1: Some tests failed.
diff --git a/packages/os_logo/test/os_logo_test.mocks.dart b/packages/os_logo/test/os_logo_test.mocks.dart
index 39f201f..50ed777 100644
--- a/packages/os_logo/test/os_logo_test.mocks.dart
+++ b/packages/os_logo/test/os_logo_test.mocks.dart
@@ -3,11 +3,10 @@
// Do not manually edit this file.
// ignore_for_file: no_leading_underscores_for_library_prefixes
-import 'dart:async' as _i5;
+import 'dart:async' as _i4;
import 'dart:typed_data' as _i2;
-import 'dart:ui' as _i3;
-import 'package:flutter/src/services/asset_bundle.dart' as _i4;
+import 'package:flutter/src/services/asset_bundle.dart' as _i3;
import 'package:mockito/mockito.dart' as _i1;
// ignore_for_file: type=lint
@@ -31,57 +30,38 @@ class _FakeByteData_0 extends _i1.SmartFake implements _i2.ByteData {
);
}
-class _FakeImmutableBuffer_1 extends _i1.SmartFake
- implements _i3.ImmutableBuffer {
- _FakeImmutableBuffer_1(
- Object parent,
- Invocation parentInvocation,
- ) : super(
- parent,
- parentInvocation,
- );
-}
-
/// A class which mocks [AssetBundle].
///
/// See the documentation for Mockito's code generation for more information.
-class MockAssetBundle extends _i1.Mock implements _i4.AssetBundle {
+class MockAssetBundle extends _i1.Mock implements _i3.AssetBundle {
MockAssetBundle() {
_i1.throwOnMissingStub(this);
}
@override
- _i5.Future<_i2.ByteData> load(String? key) => (super.noSuchMethod(
+ _i4.Future<_i2.ByteData> load(String? key) => (super.noSuchMethod(
Invocation.method(
#load,
[key],
),
- returnValue: _i5.Future<_i2.ByteData>.value(_FakeByteData_0(
+ returnValue: _i4.Future<_i2.ByteData>.value(_FakeByteData_0(
this,
Invocation.method(
#load,
[key],
),
)),
- ) as _i5.Future<_i2.ByteData>);
+ ) as _i4.Future<_i2.ByteData>);
@override
- _i5.Future<_i3.ImmutableBuffer> loadBuffer(String? key) =>
- (super.noSuchMethod(
+ _i4.Future<dynamic> loadBuffer(String? key) => (super.noSuchMethod(
Invocation.method(
#loadBuffer,
[key],
),
- returnValue:
- _i5.Future<_i3.ImmutableBuffer>.value(_FakeImmutableBuffer_1(
- this,
- Invocation.method(
- #loadBuffer,
- [key],
- ),
- )),
- ) as _i5.Future<_i3.ImmutableBuffer>);
+ returnValue: _i4.Future<dynamic>.value(),
+ ) as _i4.Future<dynamic>);
@override
- _i5.Future<String> loadString(
+ _i4.Future<String> loadString(
String? key, {
bool? cache = true,
}) =>
@@ -91,12 +71,12 @@ class MockAssetBundle extends _i1.Mock implements _i4.AssetBundle {
[key],
{#cache: cache},
),
- returnValue: _i5.Future<String>.value(''),
- ) as _i5.Future<String>);
+ returnValue: _i4.Future<String>.value(''),
+ ) as _i4.Future<String>);
@override
- _i5.Future<T> loadStructuredData<T>(
+ _i4.Future<T> loadStructuredData<T>(
String? key,
- _i5.Future<T> Function(String)? parser,
+ _i4.Future<T> Function(String)? parser,
) =>
(super.noSuchMethod(
Invocation.method(
@@ -106,8 +86,8 @@ class MockAssetBundle extends _i1.Mock implements _i4.AssetBundle {
parser,
],
),
- returnValue: _i5.Future<T>.value(null),
- ) as _i5.Future<T>);
+ returnValue: _i4.Future<T>.value(null),
+ ) as _i4.Future<T>);
@override
void evict(String? key) => super.noSuchMethod(
Invocation.method(
The "quick launch" dropdown menu doesn't work very well with lots of instances. Especially, the Preferences item is problematic at the bottom. Could favorites be a solution to this?
#80 took a step towards dynamic terminal themes. At the moment, there are only two themes defined under the hood and the selection is automatic:
Ubuntu | Others |
---|---|
Some ideas to improve it further:
Steps:
Expected result:
Image is created with image name from step 5 above.
Observed result:
Image is created with random name.
Originally posted by @Feichtmeier in #177 (comment)
How about exchanging the current tabs in the titlebar with this shortcut input while it is active instead of showing it free-floating?
Flutter tooltips are pretty aggressive by default. We could set TooltipThemeData.waitDuration for the whole app.
The GNOME screen recorder refused to record the cursor and Kooha refused to record anything at all, so no mouse cursor was recorded this time but imagine it's there... ๐คฃ
Ctrl+PageDn
and Ctrl+PageUp
are supposed to switch to the next or previous tab, respectively. These no longer work if there's an open terminal in any tab but only if all are showing the home page.
Ref: #108
Proxying the Wayland socket is problematic because:
$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY
(or $XDG_RUNTIME_DIR/wayland-0
).$XDG_RUNTIME_DIR
must not survive a reboot.devices:
wayland:
bind: instance
connect: unix:/run/user/1000/wayland-0
gid: "1000"
listen: unix:/run/user/1000/wayland-0
security.gid: "1000"
security.uid: "1000"
type: proxy
uid: "1000"
After reboot:
Error occurred when starting proxy device: Error: Failed to listen on /run/user/1000/wayland-0: listen unix /run/user/1000/wayland-0: bind: no such file or directory
The click area for close/stop image is small, if you are a few pixels off then you accidentally select that image and log into it. Suggest using the whole end of the row as a click area or at least make it not log in if clicked in that area.
I had trouble adding workshops as a pre-installed snap to an Ubuntu Core image: with it included, the system fails to complete the seeding process.
The cause seems to be this plug on the snap:
Lines 15 to 22 in 7b13e00
While all the prerequisite snaps were also included in the image, the lxd snap doesn't include a matching plug here. Upgrading lxd from the store doesn't change this, so it never installs workshops. As the system hasn't completed seeding, this causes a bunch of follow-on problems for the system.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.