xfangfang / borealis

Hardware accelerated, Nintendo Switch inspired UI library for PC, Android, iOS, PSV, PS4 and Nintendo Switch
Apache License 2.0
31 stars 21 forks source link

DesktopPlatform 中系统调用补全 #16

Closed dragonflylee closed 1 year ago

dragonflylee commented 1 year ago
api Win32 UWP macOS Linux
hasWirelessConnection -
getWirelessLevel -
getBatteryLevel -
isBatteryCharging -
getIpAddress
getDnsServer -
hasEthernetConnection -
themeDetect - -

① 似乎只能判断wifi是否打开,连接状态还未查到 ② 无法区分虚拟网卡(VPN、虚拟机)会误判为有线连接 通过 GetBestInterfaceEx 解决

另外 isBatteryCharging 应该表示的是 充电中 还是 接了电源呢?

xfangfang commented 1 year ago

@dragonflylee 哇,感觉做的相当详细啊

目前 isBatteryCharging 对应的是左下角的小电池图标显示为绿色,目前看的话应该是充电中。


因为有一些内容还缺失着,所以之前在pc上把大部分内容都给隐藏了。

我能想到的有两处可以优化的位置:

  1. 比如,联网可能需要增加一下有线连接的判断——hasEthernetConnection,这个函数我在 SwitchPlatform 下实现了,如果有线连接返回为真时,对应的左下角的图标也会变化。

  2. 充电可能需要判断一下 充电中接了电源 ,在显示在左下角时图标或许也需要对应的调整,之前只考虑了switch这种有内置电池的设备。

dragonflylee commented 1 year ago

Windows 和 macOS 的系统信息已经做的差不多,Linux 发行版众多还不知道如何下手 比如 RetroArch 查询网络信息使用了nmcli

xfangfang commented 1 year ago

非常感谢,那现在是合并进来还是等linux完善一些再说呢?

dragonflylee commented 1 year ago

非常感谢,那现在是合并进来还是等linux完善一些再说呢?

再完善一下吧

感觉主要用户还是以 Debian 系为主?比如 RaspberryPi 和 Ubuntu-L4T 最近在搞 snap 打包,目前已 Ubuntu 18.04 为基础调试

zeromake commented 1 year ago

@dragonflylee linux 你看到各种 cli 获取系统信息,有极大概率是到 proc 这种虚拟文件系统读取文件……,不过各种发行版都不一定会在一个固定路径里就是了。 可以直接找找 psutil 里是怎么读取网络信息的。

zeromake commented 1 year ago

https://psutil.readthedocs.io/en/latest/#psutil.net_if_stats https://github.com/giampaolo/psutil/blob/master/psutil/_psosx.py#L259 https://github.com/giampaolo/psutil/blob/master/psutil/_psutil_posix.c#L457

dragonflylee commented 1 year ago

https://psutil.readthedocs.io/en/latest/#psutil.net_if_stats https://github.com/giampaolo/psutil/blob/master/psutil/_psosx.py#L259 https://github.com/giampaolo/psutil/blob/master/psutil/_psutil_posix.c#L457

感谢提供信息,另外的参考如下

dragonflylee commented 1 year ago

@xfangfang rebase 到 wiliwili 分支修复了 cmakefile的冲突,如果没问题就先合了吧。linux方面的暂时没时间研究了

xfangfang commented 1 year ago

@dragonflylee 另外 windows 主题那个要不要合并进来呢?可以添加点系统版本的判定?也可以先直接提交过来,我这周末挨个系统测试一遍,到时候发现什么问题再修改如何?

dragonflylee commented 1 year ago

@dragonflylee 另外 windows 主题那个要不要合并进来呢?可以添加点系统版本的判定?也可以先直接提交过来,我这周末挨个系统测试一遍,到时候发现什么问题再修改如何?

Windows 主题那个属于非公开API,感觉还是不要用的好

xfangfang commented 1 year ago

Windows 主题那个属于非公开API,感觉还是不要用的好

@dragonflylee 好的,那等 mac 上那个小问题提交修改之后我就合并啦,周末会抽时间找不同系统再测试一遍。

非常感谢~

有注意到你在开发 jellyfin 的客户端,刚好有人在B站问我有没有jellyfin客户端,小小地推荐了一下~

dragonflylee commented 1 year ago

有注意到你在开发 jellyfin 的客户端,刚好有人在B站问我有没有jellyfin客户端,小小地推荐了一下~

@xfangfang 那个jellyfin客户端大量借(chao)鉴(xi)了仁兄的代码,不介意吧

xfangfang commented 1 year ago

@xfangfang 那个jellyfin客户端大量借(chao)鉴(xi)了仁兄的代码,不介意吧

@dragonflylee 哈哈,开源嘛,能帮助到大家就好。

xfangfang commented 1 year ago

@dragonflylee 在这个PR基础上做了两处调整:

Windows下电池的检测做了一下微调。

之前是所有状态不是 unknown(255)的情况都认为是有电池的,刚刚看到存在状态 no_battery (128) 的情况,这在台式机上可能会触发,现象是左下角电池容量显示大概有 200% 那么长。 顺便把这个图标分辨率从 44 调整到了 176。 https://github.com/xfangfang/borealis/commit/ab4f49ff5b578d0f6f77d3f2c45560840fcd777e

macOS 下获取dns信息时可能会导致程序崩溃

有一处直接使用了 CFStringGetCStringPtr 的返回值初始化 std::string,我在wifi和有线连接分别接入到不同的局域网的情况下触发了这个问题。根据搜索到的内容,在内部缓冲区不够时CFStringGetCStringPtr会返回空指针,在这种情况下调整为使用 CFStringGetCString 获取字符串。 https://github.com/xfangfang/borealis/commit/38ecdf9f919a66b72fda01766a514dc7948400d8

xfangfang commented 1 year ago

顺便一提,最近给wiliwili做了接收DLNA投屏的功能,这个功能需要获取到当前系统的IP,目前在单网卡下运行很好,因为这个pr已经把每个平台的ip获取都做好了,非常感谢。

但是在多网卡的情况下可能会出现问题,比如电脑给手机开热点、电脑的网线和wifi同时连接到不同的局域网,这种情况下会出现只有一个局域网能搜索到 DLNA接收端 的问题。 如果能获取到所有当前有效的ip,就能解决这个问题,如果同样需要DLNA功能的话,可以研究研究把获取ip和dns的接口改成列表的形式?


如果能同时获取到 子网掩码 就更好了

dragonflylee commented 1 year ago

@xfangfang 做成列表确实可以,但是有时候会取到一些虚拟网卡的IP信息,目前还不太懂怎么分辨