rafatosta / zapzap

WhatsApp desktop application written in Pyqt6 + PyQt6-WebEngine.
https://rtosta.com/zapzap-web/
GNU General Public License v3.0
86 stars 2 forks source link

Inicialização automática não funciona no Deepin 20.6 (Debian 10) #77

Closed eduardomozart closed 2 years ago

eduardomozart commented 2 years ago

Olá, Rafael Ontem instalei o ZapZap manualmente através do Pip (#76) e hoje ao inicializar o sistema, o programa não iniciou automaticamente. Quando abro o programa manualmente através do Deepin Launcher (botão direito no ZapZap > Adicionar à inicialização), ele abre maximizado, ao invés de minimizado. Eis a entrada que o ZapZap adiciona a inicialização (arquivo ~/.config/autostart/com.rtosta.zapzap):

[Desktop Entry]
Version=1.0
Name=ZapZap
Comment=Whatsapp Desktop for Linux
Exec=/usr/bin/flatpak run com.rtosta.zapzap --hideStart
Icon=com.rtosta.zapzap
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
Keywords=whatsapp;chat;im;messaging;messenger;sms;
Terminal=false
SingleMainWindow=true
X-GNOME-Autostart-Delay=60
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true

Quando eu dou botão direito no ZapZap e adiciono ele a inicialização através do Deepin Launcher, ele inicia normalmente, mas maximizado, mesmo eu editando a entrada e adicionando a flag "--hideStart". Se eu alterar "Hidden=false" para "Hidden=true", a interface do programa não é exibida nem nos programas em execução nem na bandeja. Eis a entrada que o Deepin Launcher adiciona a inicialização (arquivo ~/.config/autostart/com.rtosta.zapzap):

[Desktop Entry]
Version=1.0
Name=ZapZap
Comment=Whatsapp Desktop for Linux
Exec=/home/Eduardo/.local/bin/zapzap
Icon=com.rtosta.zapzap
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
Keywords=whatsapp;chat;im;messaging;messenger;sms;
Terminal=false
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true
X-Deepin-CreatedBy=com.deepin.SessionManager
X-Deepin-AppID=com.rtosta.zapzap
Hidden=false

Note que a entrada adicionada pelo ZapZap a inicialização refere-se ao Flatpak, mas instalei o aplicativo através do código-fonte. O programa poderia obter o caminho do próprio executável em execução e criar o arquivo .desktop com o caminho do executável zapzap em execução caso não seja um aplicativo Flatpak.

Quando adiciono o ZapZap a inicialização através do Deepin Launcher, a interface do ZapZap não é atualizada para refletir que o programa foi adicionado a inicialização. Acho que o programa poderia verificar a existência do arquivo ~/.config/autostart/com.rtosta.zapzap e, caso ele exista, exibir na GUI que o programa foi adicionado a inicialização. Mas quando adiciono o ZapZap a inicialização através do próprio ZapZap, o Deepin Launcher reflete essa alteração e mostra o programa como incializado automaticamente com o sistema.

Notei também que quando clico no ícone do ZapZap na bandeja, basta eu clicar uma vez para eu abrir o programa. Estou acostumado a dar dois cliques no mundo Windows, então o programa Maximiza e Minimiza quando clico duas vezes. Não sei se foi feito dessa forma propositalmente, mas caso tenha sido, seria interessante ter uma opção na UI para abrir com duplo-clique, já que quem vem de outras distros e do mundo Windows, dois cliques é o padrão.

rafatosta commented 2 years ago

Olá, Rafael Ontem instalei o ZapZap manualmente através do Pip (#76) e hoje ao inicializar o sistema, o programa não iniciou automaticamente. Quando abro o programa manualmente através do Deepin Launcher (botão direito no ZapZap > Adicionar à inicialização), ele abre maximizado, ao invés de minimizado. Eis a entrada que o ZapZap adiciona a inicialização (arquivo ~/.config/autostart/com.rtosta.zapzap):

[Desktop Entry]
Version=1.0
Name=ZapZap
Comment=Whatsapp Desktop for Linux
Exec=/usr/bin/flatpak run com.rtosta.zapzap --hideStart
Icon=com.rtosta.zapzap
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
Keywords=whatsapp;chat;im;messaging;messenger;sms;
Terminal=false
SingleMainWindow=true
X-GNOME-Autostart-Delay=60
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true

Quando eu dou botão direito no ZapZap e adiciono ele a inicialização através do Deepin Launcher, ele inicia normalmente, mas maximizado. Eis a entrada que o Deepin Launcher adiciona a inicialização (arquivo ~/.config/autostart/com.rtosta.zapzap):

[Desktop Entry]
Version=1.0
Name=ZapZap
Comment=Whatsapp Desktop for Linux
Exec=/home/Eduardo/.local/bin/zapzap
Icon=com.rtosta.zapzap
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
Keywords=whatsapp;chat;im;messaging;messenger;sms;
Terminal=false
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true
X-Deepin-CreatedBy=com.deepin.SessionManager
X-Deepin-AppID=com.rtosta.zapzap
Hidden=false

Note que a entrada adicionada pelo ZapZap a inicialização refere-se ao Flatpak, mas instalei o aplicativo através do código-fonte. O programa poderia obter o caminho do próprio executável em execução e criar o arquivo .desktop com o caminho do executável zapzap em execução caso não seja um aplicativo Flatpak.

Quando adiciono o ZapZap a inicialização através do Deepin Launcher, a interface do ZapZap não é atualizada para refletir que o programa foi adicionado a inicialização. Acho que o programa poderia verificar a existência do arquivo ~/.config/autostart/com.rtosta.zapzap e, caso ele exista, exibir na GUI que o programa foi adicionado a inicialização. Mas quando adiciono o ZapZap a inicialização através do próprio ZapZap, o Deepin Launcher reflete essa alteração e mostra o programa como incializado automaticamente com o sistema.

Notei também que quando clico no ícone do ZapZap na bandeja, basta eu clicar uma vez para eu abrir o programa. Estou acostumado a dar dois cliques no mundo Windows, então o programa Maximiza e Minimiza quando clico duas vezes. Não sei se foi feito dessa forma propositalmente, mas caso tenha sido, seria interessante ter uma opção na UI para abrir com duplo-clique, já que quem vem de outras distros e do mundo Windows, dois cliques é o padrão.

  1. Note que existe uma flag no arquivo original, logo é preciso inseri-la para que funcione corretamente, --hideStart.
  2. A abertura no ícone da bandeja foi pensado pra funcionar dessa forma: apenas um click para abrir caso esteja fechado; se estiver em foco será fechado; caso não esteja em foco será redirecionado para a janela.
  3. Esse modelo é o que é praticado por vários apps (uso e pesquisei) como o telegram, discord ou Franz, pelo menos no Plasma e Gnome (com o uso da extensão).

Esse "problema" na inicialização é porque você não está usando em flatpak, logo, como disse antes, nem tudo irá funcionar. O próprio aplicativo já gerência o arquivo de autostart e coloca as configurações necessárias. É complicado para mim adivinhar como cada DE trabalha com os apps, por isso é importante que use sempre a opção disponível no app para que funcione corretamente. Como você está executando fora do flatpak isso complica mais ainda.

Entendo perfeitamente a questão do costume, mas é muito complicado ter que manter configurações para diferentes hábitos de uso, sem falar na quantidade de ambientes gráficos disponíveis e que nem sempre seguem um padrão. Por isso, antes de definir qualquer funcionalidade pesquiso bastante para saber como os apps mais populares já fazem e assim implemento no ZapZap.

eduardomozart commented 2 years ago

Bom dia, Rafa Claro, eu entendo, não dá para criar um app para todos os gostos. No caso da inicialização, mesmo adicionando a flag "--hideStart", o programa está inicializando maximizado. Pelo que vi, a função createDesktop (https://github.com/rafatosta/zapzap/blob/8dbfa83f8b83139b60dc8282f524202ad4932ad1/zapzap/services/portal_desktop.py#L9) cria o arquivo .desktop adicionado a inicialização e no __main__.py o parâmetro --hideStart é verificado e a janela é minimizada (https://github.com/rafatosta/zapzap/blob/3cc8db225d00c656b94582c428c8a347665db469/zapzap/__main__.py#L42), mas aparentemente não está minimizando aqui. Vou ver se consigo editar o código-fonte para criar o atalho de acordo e envio um Pull Request, ao invés de criar de forma fixa o atalho para o Flatpak, já que isso pode trazer problemas para distros que futuramente desejam criar um pacote nativo para seu app ao invés de executá-lo através do Flatpak, já que em teoria é possível pegar os arquivos instalados pelo setup.py e criar um aplicativo nativo para cada distribuição (.deb, .rpm, etc).

rafatosta commented 2 years ago

Na teoria sim, na prática não. Isso porque nem toda distro dar suporte ao PyQt6 com os recursos necessários. O Opensuse sim, mas o Fedora não. O Ubuntu não, pelo menos por padrão. Por isso que existe um motivo para que o suporte seja apenas em flatpak, evitar dor de cabeça com cada distro que aparecer.

eduardomozart commented 2 years ago

O fato das dependências poderem ser instaladas através do Pip representa que não estamos limitados as versões empacotadas do PyQt6 de cada distro, ele sempre irá obter a versão mais recente do repositório do Pip. Se você empacotar as dependências baixadas pelo Pip em um único arquivo específico da distro, teoricamente seria possível criar um aplicativo ZapZap nativo para cada distro sem tanta dor de cabeça, e disponibiliza-lo através dos repositórios oficiais (ou até mesmo pelo Ubuntu Launchpad). Claro, sei que essa não é a sua intenção, mas fica a ideia. =)

rafatosta commented 2 years ago

Cara, os pacotes via pip está incompleto para o QtWebEngine. Assim, não funciona o corretor ortográfico. Pelo flatpak funciona para qualquer idioma. Enfim, se alguém quiser pegar para suportar em outra plataforma é bom saber que há uma limitação e por isso que já não o fiz. (Por isso que é dor de cabeça, pq não vai funcionar corretamente que nem o flatpak)

rafatosta commented 2 years ago

Fechado por não está rodando via flatpak.