-
Notifications
You must be signed in to change notification settings - Fork 0
Meeting Records
Yuchen Zhou edited this page May 2, 2024
·
10 revisions
- Understood the desktop layers on MacOS and realized making a window sink below desktop icons as well as making it float up.
- Determined how to make windows draggable and store their position states (when the window moves, use transform; when the dragging stops, calculate its absolute position; store the position states in frontend temporarily; when the application closes, send the position states to backend and write them down)
- Reviewed and merged PRs
- Finished HW6
- Improve widget sinking and floating.
- Implement widget dragging and position remembering.
- Extend widget API (architecture in #35, more to be done determined referring to Rainmeter)
- Implement the function to close/reopen a widget.
- Determined the architecture of providing packages while using internally (#37)
- Published the NPM package
@deskulpt-test/react
- Reviewed and merged PRs: fix test failure (#26); documentation setup and workflow (#32, #33, #34); make widgets draggable (#31); cross platform test workflow and other formatting and linting tools around the project (#18); adding react boundary to catch rendering errors (#24); integrating the manager window with the system tray (#36); refactoring of frontend-backend IPC interface (#30); fixing deprecation warning of a component (#38)
- Sink and float canvas (requires system-wise implementation, #39)
- Extend widget API (architecture in #35, more to be done determined referring to Rainmeter)
- Typescript support (bundler parsing in #29; more NPM packages for testing)
- Widget layout update and rework (memorize widget position, configure widget shape and more, etc. to be determine during development; the goal is to achieve a visual effect at least comparable with Rainmeter)
- Widget manager update and rework (improved UI, more widget information and buttons to be determined by how widgets are configured; maybe partially refer to Rainmeter)
- External dependencies (hard because if may again have something to do with SWC, not only bundling external dependencies but also minimizing them, and how to tweak widget source code during bundling to correctly refer to those bundled external dependencies during runtime)
- Command protocol: return
Result<T, String>
- Why not
InvokeError
? Implementation is private, not customizable stringify output. - Replace the old
CommandOut
stuff
- Why not
- Frank (Xinyu): Adjust canvas layout
- Make the window fullscreen, transparent, and below desktop icons
- Make each widget div draggable
- Experiment cross-platform
- Xinyu: Widget API
- Frontend widget API wrapper (how to create widget-specific API)
- How to tweak import statements?
- Yao: Support TypeScript
- Yao: Support external dependencies
- Romee: Review #23, #24, more tests and macOS tests
- Realize in the form of Tauri plugin, start with a minimal demo.
- How do we restrict users' access only to these exposed API but not to our internal commands?
- Can we allow user to do something like
import { ... } from "@deskulpt/api"
? The final resolution would be to bind the API on thewindow
global object.
- Romee:
bundler.rs
unit tests. - Yao:
config.rs
unit test. - Yao:
commands.rs
unit test (using Tauri test framework, in particular for our internal commands). - Xinyu: Widget API (after the framework is established, unit test).
-
Do we want something like Docker to be able to test on other platforms?
- Docker does not have GUI.
- Use virtual machine to test different platforms (Romee and Frank will investigate).
-
Rethink how to resolving React and Deskulpt widget API dependencies (after the widget API framework PR)
Details
// Source code import React from "@deskulpt/react"; import { shout } from "@deskulpt/shout";
// `src/widget_dependencies/default_dependencies.js` // map `@deskulpt/react` to blob URL of this script const React = window.__DESKULPT__.defaultDeps.React;
// `src/widget_dependencies/widget_api.js` // map `@deskulpt/shout` to blob URL of this script async function shout(text) { try { const result = await window.__TAURI_INVOKE__({ cmd: "plugin:widget_api|shout_text", text, }); return result; } catch (error) { console.error(error); } }
<script type="importmap"> { "imports": { "@deskulpt/react": "blob:///...default_dependencies.js" "@deskulpt/widget_api": "blob:///...widget_api.js" } } </script>
- Yao: Solve #6.
- Xinyu: Format the canvas window.
- Frank: Familiarize with
React
, try to write some simple widgets. 1.todo list(with stateful saving using "@deskulpt/apis";) 2. weather widget using www.weatherapi.com - Yao: Set up test and codecov GitHub workflows.
- Xinyu: Extend widget APIs.
We use GitHub workflow for CI and better consistency. In particular:
- We use
.github/workflows/build.yaml
to test if Deskulpt can be built on Ubuntu/Mac/Windows (this currently does not provide the actual artifact). - We use
.github/workflows/lint-core.yaml
to test if Deskulpt code pass linting checks.
Both of the above are done in two scenarios:
-
push.branch: main
, i.e., when someone pushes tomain
branch (most likely when a PR is merged intomain
) -
pull_request.branch: main
, i.e., when someone commits to a pull request that is targeted towardsmain
.
We divide into two pairs to write unit tests for two components of Deskulpt:
- Yao & Romee: bundler
- Xinyu & Frank: widget manager
Our earlier meeting records were held in Notion, but due to its storage limits we have migrated to GitHub wiki. You can check our earlier meeting records at this published Notion site.