DDEGestureManager是专为DDE桌面环境打造的触摸板手势管理工具(缩写:dgm),客户端使用Flutter构建,后端技术栈为dart的Angel3框架+PostgreSQL+Redis+docker。
web版DDE手势管理器-web版
功能创建、编辑、删除本地手势配置方案将选定手势方案应用到系统中注册登陆后可以上传、分享自己创建的配置方案可以下载、点赞他人分享的配置方案贴合DDE的UI设计风格,支持系统主题切换和活动色支持多语言手册DDE手势管理器-说明手册
运行api使用docker(推荐)
首先安装docker及docker-compose,然后在/api目录下执行:
bashstart.sh手动运行
首先配置dart环境(如果已经配置flutter开发环境则无需再配置):DartSDKoverview
安装项目依赖,运行代码生成命令:在/api目录下执行:
bashsource_gen.sh安装PostgreSQL及Redis
PostgreSQLDownloadsRedisDownloads然后在/config/development.yaml设置如下配置:
#Development-onlyserverconfiguration.debug:truepostgres:host:[dbhost]port:5432database_name:gesture_managerusername:postgrespassword:[dbpassword]use_ssl:falsetime_zone:Asia/Shanghairedis:host:[redishost]port:6379password:[redispassword]smtp:username:[smtpaccountname]password:[smtpaccountpassword]host:[smtpserverhost]设置数据库
登录数据库,创建名为gesture_manager的数据库
createdatabasegesture_manager;运行Migration:
dartbin/migrate.dart运行api
dartbin/dev.dartapp配置flutter开发环境,并启用Linux支持:
LinuxinstallAdditionalLinuxrequirements修改服务器连接地址在/api目录下修改lib/apis.dart:
classApis{staticconstapiScheme='http';staticconstapiHost='localhost';//设置为api的地址staticconstapiPort=3000;//设置为api监听的端口staticconstappNewVersionUrl='https://www.debuggerx.com';……}安装项目依赖,运行代码生成命令:在/app目录下执行:
bashsource_gen.sh运行app项目:
Linux:flutterrun-dlinuxweb:flutterrun-dchromeRoadMap[x]方案下载功能实现[x]方案应用功能实现[x]BugFix[x]MD编辑器中的UI文本国际化[x]编写帮助说明文档[]浅色模式界面优化[x]打包上架Deepin/UOS应用商店FAQQ:为什么要开发这个工具
A:本人是DeepinLinux的老粉了,日常学习工作和生活娱乐几乎完全在Deepin/UOS系统下进行。同时我还是个手势重度依赖者,除了鼠标手势,对笔记本的触摸板手势一样有很强的自定义需求。但是从Deepin系统增加手势功能到如今也有5年多了,官方一直没有在系统层面给出自定义触摸板手势的功能入口,我不得不经常通过手工修改系统手势配置文件的方式来实现自定义。但是长久以来,一方面是自己每次新装系统都需要重新设置,一方面是不断看到论坛和用户群有朋友反馈询问修改方法,遂决定动手写一个方便使用,并支持配置分享下载的GUI工具
Q:为什么使用flutter开发而不是Qt/DTK/GTK……
A:因为本人对flutter比较熟悉,有4年多的研究积累,而且对于flutter的跨平台效果非常看好,而C/C++的经验相对缺乏,又恰逢2021下半年这个时间点,google官方的一大重点就是对桌面应用开发的支持,于是决定尝试通过使用flutter实现本工具。
Q:为何还要兼容开发Web版本
A:得益于flutter的跨平台能力,在开发Linux桌面版应用的基础上,可以以很低的成本同步开发出Web版,于是一方面出于技术探索的目的,从一开始的功能规划我就将Web支持放在了基础需求中。另外,Web版还有三个明显的好处:
用户可以不必安装桌面应用,仅仅通过浏览器打开网页就能体验本工具的功能,方便了用户预览体验,也方便本项目的转发推广;由于UOS系统默认是锁root权限的,某些情况下的用户(比如机关单位的普通员工)可能不方便安装运行第三方软件,虽然我有将本工具上架UOS软件商店的打算,但是并不一定能够保证及时更新,所以此时可以通过使用Web版来实现和桌面版相同的功能和接近的体验;还有一部分用户可能使用的是国产CPU,可能并不是flutter的编译工具所支持的,或者虽然flutter支持,但是由于我没有对应的机器进项编译打包,所以可能暂时无法为这些用户提供二进制的程序使用,此时这些用户一样可以通过使用Web版来解决。Q:为何使用dart编写服务端,而不用其他更流行常见的语言和技术
A:作为全栈开发,虽然有多种其他语言和流行框架的后端开发经验,但是那些方案,有些是框架本身太重太吃资源,不适合这个小项目使用,有些是语言本身实在是写烦了,开发起来没有动力……在看到一些朋友和大佬分享使用dart开发后端的经验之后,我想,是不是可以让前后端项目使用相同的语言,以"同构"的方式开发,并将前后端的一些"弱关联"转变成由语法来保证正确性的"强依赖"呢?
所以在这个项目中,我让api直接作为app的依赖,app的网络请求处理中直接使用api侧导出的请求参数定义和结果模型,探索一种可以不用再通过文档进行前后端配合的开发模式——因为我相信,文档总是不可靠的,只有代码本身不会骗人
评论