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

增加自动暂停和播放源检测;修复macOS和iOS的bug #317

Merged
merged 2 commits into from
Oct 18, 2024

Conversation

ErBWs
Copy link
Contributor

@ErBWs ErBWs commented Oct 18, 2024

  1. 增加外部播放时自动暂停和播放源检测
  2. 修复[Bug]: macOS端在全屏的时候按esc会直接退出软件 #303
  3. 修复macOS和iOS在触发外部播放对话框后,点击框外关闭会导致无法再次拉起对话框,现在无法通过点击框外关闭

@Predidit
Copy link
Owner

@ErBWs

关于 #303 的问题已经添加在了代码注释里。

此外我们有其他办法修复第三点问题吗, 如果我们只是禁止通过点击框外关闭。我相信我们会在使用全面屏后退手势来关闭对话框后遇到同样的问题。我觉得我们应该修复导致无法再次拉起的问题。

@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

我不清楚具体代码注释在哪里
我会尝试构建一个安卓版本进行测试,也会再寻找新的办法解决。目前这个bug只存在于macOS和iOS,因此我之前的猜测是不会对手势返回造成影响。

@Predidit
Copy link
Owner

我重复一下上面的注释

你测试过 player_item.dart 中修改的逻辑吗, 它真的能修复 #303

因为这段代码看上去很奇怪, 在非全屏的情况下按 esc 会调用 windowManager.unmaximize() 方法而不是 windowManager.hide() 方法。这似乎与 #303 描述的情况不符

@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

现在的表现非常奇怪。

原来的代码有这样的问题:无论全屏与否,esc有时都可以直接关闭软件,非全屏不会关闭的情况esc也不会最小化

该PR的问题:其他功能正常,但不能最小化

如果将setFullScreen或者hide改成maximize,unmaximize,minimize,会出现全屏按下esc先退出全屏再直接最小化

其实对于macOS而言,esc没有最小化的作用,macOS最小化的唯一方式就是按红绿灯的黄色按键,而红绿灯按键在main.dart中被隐藏了,所以我不认为无法最小化是个问题,但代码逻辑看着确实奇怪,我会寻找修改方案

@Predidit
Copy link
Owner

如果我的理解没错的话 #303 描述的问题是在全屏状态下按esc会直接退出程序。

上面的修改只修改了非全屏状态下的esc键的响应逻辑,所以我不知道为什么可以修复 #303

@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

我也不能理解,但他甚至能先退出全屏再最小化,猜测是esc被多次触发,然后判断非全屏状态调用了hide()导致退出

@Predidit
Copy link
Owner

好的,我大概明白了,还有一个问题。如果是抖动导致的话,那 #303 中的问题应该可以在非全屏模式下复现,实际上这会发生吗。

如果esc最小化不符合macOS的操作逻辑,也许我们可以直接在 macOS 上不执行 hide 方法。现在修改后的代码会转而在 macOS 上执行 unmaximize 方法。这样做的目的是什么。

@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

原来的代码有这样的问题:无论全屏与否,esc有时都可以直接关闭软件,非全屏不会关闭的情况esc也不会最小化

这里提到了可以在非全屏复现

第二条实际上是我的逻辑问题,我没有仔细检查逻辑,被andriodFullScreen变量名误导了,以为上面是安卓端的缩小逻辑,也没有仔细想过为什么全屏esc直接hide而不是非全屏

@Predidit
Copy link
Owner

androidFullscreen 的变量命名有问题,一直没有修改,这个变量应该是所有平台的全屏状态。

那看上去我们可以在 macOS 平台上响应esc按键时不执行 hide 方法,这样似乎可以修复 #303

@ErBWs ErBWs marked this pull request as draft October 18, 2024 17:22
@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

我无法找到其他办法解决3的问题,貌似与DLNA有关,但我并未搜索到有用的解决办法。错误信息如下

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Failed to create datagram socket (OS Error: Address already in use, errno = 48), address = 0.0.0.0, port = 1900
#0      _NativeSocket.bindDatagram (dart:io-patch/socket_patch.dart:1051:7)
<asynchronous suspension>
#1      _RawDatagramSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:2566:15)
<asynchronous suspension>
#2      DLNAManager.start (package:dlna_dart/dlna.dart:513:22)
<asynchronous suspension>
#3      RemotePlay.castVideo (package:kazumi/utils/remote.dart:25:16)
<asynchronous suspension>

我利用fork的仓库构建了一份安卓版,返回键可以正常识别,因此先保持这样提交
https://github.com/user-attachments/assets/fd8f5670-215d-47bf-9fb7-3ed6583ab4d9

@ErBWs ErBWs marked this pull request as ready for review October 18, 2024 18:02
@WhiteXero
Copy link
Contributor

我无法找到其他办法解决3的问题,貌似与DLNA有关,但我并未搜索到有用的解决办法。错误信息如下

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Failed to create datagram socket (OS Error: Address already in use, errno = 48), address = 0.0.0.0, port = 1900
#0      _NativeSocket.bindDatagram (dart:io-patch/socket_patch.dart:1051:7)
<asynchronous suspension>
#1      _RawDatagramSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:2566:15)
<asynchronous suspension>
#2      DLNAManager.start (package:dlna_dart/dlna.dart:513:22)
<asynchronous suspension>
#3      RemotePlay.castVideo (package:kazumi/utils/remote.dart:25:16)
<asynchronous suspension>

另外我这边无法构建安卓版本进行测试,所以先保持这样提交

这是一个 DLNA 设备搜索地址端口被占用(localhost:1900)的问题,应当和 Q3 无关

@ErBWs
Copy link
Contributor Author

ErBWs commented Oct 18, 2024

这是一个 DLNA 设备搜索地址端口被占用(localhost:1900)的问题,应当和 Q3 无关

但当我尝试lsof -i:1900时结果如下

COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
kazumi  88390     me   33u  IPv4 0xc11410f84f48337c      0t0  UDP *:ssdp

@WhiteXero
Copy link
Contributor

WhiteXero commented Oct 18, 2024

这是一个 DLNA 设备搜索地址端口被占用(localhost:1900)的问题,应当和 Q3 无关

但当我尝试lsof -i:1900时结果如下

COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
kazumi  88390     me   33u  IPv4 0xc11410f84f48337c      0t0  UDP *:ssdp

关于这个我不太清楚,在 Windows 上并未复现
在果家系统上 Airplay 应该实现了 DLNA 的功能,可能是 Airplay 的问题?
设备不足无法判断。

@Predidit
Copy link
Owner

这个PR在我看来已经没有问题

后续我们可以在 #320 追踪

@Predidit Predidit merged commit 5d36f76 into Predidit:main Oct 18, 2024
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants