Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions client/changelog_en-US.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ This release brings communities and a reorganized settings window, on top of eve

WHAT'S NEW

- Group calls: a group with more than 32 participants cannot be called on WhatsApp, so the call buttons are replaced by a "Calling is not possible" button whose note says the group has more than 32 participants, and the call shortcuts say the same instead of starting a call.

- Group calls: the voice and video call buttons now appear in a group conversation and start a call to the group, and an incoming group call rings, is announced by the group's name and can be answered, with the same Answer button and global answer key as a one-to-one call. Turning the camera on during a voice call works as it does in a one-to-one call, and call events from each participant stay with the group, so the call window keeps the group's name from the first ring to the end.

- Video calls: WinZapp now finds the camera with the FFmpeg build it ships, which lists DirectShow devices without the "DirectShow video devices" heading. That build returned no camera at all, so a video call went out receive-only, with "No camera found" in the log.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_es-ES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Esta versión trae las comunidades y una ventana de configuración reorganizada,

NOVEDADES

- Llamadas de grupo: WhatsApp no permite llamar a grupos con más de 32 participantes, así que los botones de llamada se sustituyen por un botón "No es posible llamar" cuya nota dice que el grupo tiene más de 32 participantes, y los atajos de llamada dicen lo mismo en lugar de iniciar la llamada.

- Llamadas grupales: los botones de llamada de voz y de vídeo aparecen ahora en la conversación del grupo e inician una llamada al grupo, y una llamada grupal entrante suena, se anuncia con el nombre del grupo y se puede contestar, con el mismo botón de contestar y el mismo atajo global de contestar que una llamada individual. Activar la cámara durante una llamada de voz funciona como en una llamada individual, y los eventos de llamada de cada participante quedan con el grupo, así que la ventana de la llamada mantiene el nombre del grupo desde el primer tono hasta el final.

- Videollamadas: WinZapp ahora encuentra la cámara con el FFmpeg incluido en WinZapp, que enumera los dispositivos DirectShow sin el encabezado "DirectShow video devices". Esa versión de FFmpeg no devolvía ninguna cámara, así que la videollamada salía solo recibiendo, con "No camera found" en el registro.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_pl.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ W tej wersji pojawiają się społeczności i zreorganizowane okno ustawień, op

NOWOŚCI

- Połączenia grupowe: WhatsApp nie pozwala dzwonić do grup liczących więcej niż 32 członków, więc przyciski połączeń zastępuje przycisk "Nie można zadzwonić", którego opis mówi, że grupa ma więcej niż 32 członków, a skróty połączeń mówią to samo zamiast rozpoczynać połączenie.

- Połączenia grupowe: przyciski połączenia głosowego i wideo pojawiają się teraz w rozmowie grupowej i rozpoczynają połączenie z grupą, a przychodzące połączenie grupowe dzwoni, jest zapowiadane nazwą grupy i można je odebrać tym samym przyciskiem odbierania i tym samym globalnym skrótem odbierania co połączenie indywidualne. Włączenie kamery podczas połączenia głosowego działa jak w połączeniu indywidualnym, a zdarzenia połączenia od każdego uczestnika pozostają przy grupie, więc okno połączenia zachowuje nazwę grupy od pierwszego dzwonka do końca.

- Połączenia wideo: WinZapp znajduje teraz kamerę za pomocą dołączonego FFmpeg, który wyświetla urządzenia DirectShow bez nagłówka „DirectShow video devices”. Ta wersja FFmpeg nie zwracała żadnej kamery, więc połączenie wideo było tylko odbiorcze, z „No camera found” w logu.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_pt-BR.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Esta versão traz as comunidades e uma janela de configurações reorganizada, a

NOVIDADES

- Chamadas em grupo: o WhatsApp não permite ligar para grupos com mais de 32 participantes, então os botões de ligação são trocados por um botão "Não é possível ligar" cuja nota diz que o grupo possui mais de 32 participantes, e os atalhos de ligação dizem o mesmo em vez de iniciar a ligação.

- Chamadas em grupo: os botões de chamada de voz e de vídeo agora aparecem na conversa do grupo e iniciam uma chamada para o grupo, e uma chamada em grupo recebida toca, é anunciada pelo nome do grupo e pode ser atendida, com o mesmo botão de atender e o mesmo atalho global de atender de uma chamada individual. Ligar a câmera durante uma chamada de voz funciona como numa chamada individual, e os eventos de chamada de cada participante ficam com o grupo, então a janela da chamada mantém o nome do grupo do primeiro toque até o fim.

- Chamadas de vídeo: o WinZapp agora encontra a câmera com o FFmpeg incluído no WinZapp, que lista os dispositivos DirectShow sem o cabeçalho "DirectShow video devices". Essa versão do FFmpeg não retornava câmera nenhuma, então a chamada de vídeo saía só recebendo, com "No camera found" no log.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_pt-PT.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Esta versão traz as comunidades e uma janela de definições reorganizada, alé

NOVIDADES

- Chamadas de grupo: o WhatsApp não permite ligar para grupos com mais de 32 membros, pelo que os botões de chamada são substituídos por um botão "Não é possível ligar" cuja nota diz que o grupo tem mais de 32 membros, e os atalhos de chamada dizem o mesmo em vez de iniciar a chamada.

- Chamadas de grupo: os botões de chamada de voz e de vídeo aparecem agora na conversa do grupo e iniciam uma chamada para o grupo, e uma chamada de grupo recebida toca, é anunciada pelo nome do grupo e pode ser atendida, com o mesmo botão de atender e o mesmo atalho global de atender de uma chamada individual. Ligar a câmara durante uma chamada de voz funciona como numa chamada individual, e os eventos de chamada de cada participante ficam com o grupo, pelo que a janela da chamada mantém o nome do grupo desde o primeiro toque até ao fim.

- Chamadas de vídeo: o WinZapp encontra agora a câmara com o FFmpeg incluído no WinZapp, que lista os dispositivos DirectShow sem o cabeçalho "DirectShow video devices". Essa versão do FFmpeg não devolvia câmara nenhuma, pelo que a chamada de vídeo seguia apenas a receber, com "No camera found" no registo.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_ro.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Această versiune aduce comunitățile și o fereastră de setări reorganizată

NOUTĂȚI

- Apeluri de grup: WhatsApp nu permite apeluri către grupuri cu mai mult de 32 de participanți, așa că butoanele de apel sunt înlocuite cu un buton "Nu se poate apela" a cărui notă spune că grupul are mai mult de 32 de participanți, iar comenzile rapide de apel spun același lucru în loc să pornească apelul.

- Apeluri de grup: butoanele de apel vocal și video apar acum în conversația de grup și pornesc un apel către grup, iar un apel de grup primit sună, este anunțat cu numele grupului și poate fi răspuns, cu același buton de răspuns și aceeași comandă rapidă globală de răspuns ca un apel individual. Pornirea camerei în timpul unui apel vocal funcționează ca într-un apel individual, iar evenimentele de apel de la fiecare participant rămân la grup, așa că fereastra apelului păstrează numele grupului de la primul sunet până la final.

- Apeluri video: WinZapp găsește acum camera cu FFmpeg-ul inclus în WinZapp, care listează dispozitivele DirectShow fără antetul „DirectShow video devices”. Acea versiune de FFmpeg nu returna nicio cameră, așa că apelul video ieșea doar cu recepție, cu „No camera found” în log.
Expand Down
2 changes: 2 additions & 0 deletions client/changelog_tr-TR.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Bu sürüm, 2.1.0.0 sürümündeki her şeye ek olarak toplulukları ve yeniden

YENİLİKLER

- Grup aramaları: WhatsApp 32'den fazla katılımcısı olan gruplarda arama yapılmasına izin vermez; bu yüzden arama düğmelerinin yerine notu grubun 32'den fazla katılımcısı olduğunu söyleyen bir "Arama yapılamıyor" düğmesi gelir ve arama kısayolları aramayı başlatmak yerine aynı şeyi söyler.

- Grup aramaları: sesli ve görüntülü arama düğmeleri artık grup sohbetinde görünür ve gruba arama başlatır; gelen bir grup araması çalar, grubun adıyla duyurulur ve tek kişilik aramadaki aynı Yanıtla düğmesi ve genel yanıtlama kısayoluyla yanıtlanabilir. Sesli arama sırasında kamerayı açmak tek kişilik aramadaki gibi çalışır ve her katılımcıdan gelen arama olayları grupta kalır, böylece arama penceresi ilk çalmadan sona kadar grubun adını korur.

- Görüntülü aramalar: WinZapp artık kamerayı, DirectShow aygıtlarını "DirectShow video devices" başlığı olmadan listeleyen ve WinZapp ile birlikte gelen FFmpeg ile bulur. Bu FFmpeg sürümü hiçbir kamera döndürmüyordu, bu yüzden görüntülü arama yalnızca alım modunda başlıyordu ve günlükte "No camera found" yazıyordu.
Expand Down
14 changes: 14 additions & 0 deletions client/core/call_logic.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
"""Pure call-state helpers shared by the wx UI and headless tests."""


# WhatsApp only places a group call for groups of up to this many participants
# (the account itself included, as the group-info participant list counts it).
MAX_GROUP_CALL_PARTICIPANTS = 32


def group_too_large_for_call(participant_count: int | None) -> bool:
"""Return whether a group has too many participants for a call.

An unknown count (the group info has not arrived yet) is not "too large":
the call buttons stay, and WhatsApp answers for itself.
"""
return bool(participant_count) and participant_count > MAX_GROUP_CALL_PARTICIPANTS


def incoming_call_can_answer(details: dict | None) -> bool:
"""Return whether this incoming call can be answered.

Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/en-US.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Calls</h2>

<h3>Make a call</h3>
<p>In an individual chat, use the "Voice call" (Ctrl+Shift+V) and "Video call" (Ctrl+Alt+Shift+V) buttons; the shortcuts also work with the message field focused. The screen reader announces when the call connects, when it is reconnecting and when it ends.</p>
<p>WhatsApp only allows calls to groups of up to 32 participants. In a larger group, a "Calling is not possible" button with the note "The group has more than 32 participants" replaces the call buttons, and the call shortcuts say the same.</p>
<p>In a group chat the same buttons call the whole group. An incoming group call rings, is announced by the group's name and is answered like any other call, and the camera can be turned on during the call. WinZapp finds the camera with the FFmpeg it ships, so a video call no longer goes out receive-only.</p>

<h3>During the call</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/es-ES.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Llamadas</h2>

<h3>Hacer una llamada</h3>
<p>En un chat individual, usa los botones "Llamada de voz" (Ctrl+Shift+V) y "Videollamada" (Ctrl+Alt+Shift+V); los atajos también funcionan con el foco en el campo de mensaje. El lector de pantalla anuncia cuándo se conecta la llamada, cuándo se está reconectando y cuándo termina.</p>
<p>WhatsApp solo permite llamar a grupos de hasta 32 participantes. En un grupo mayor, un botón "No es posible llamar" con la nota "El grupo tiene más de 32 participantes" sustituye a los botones de llamada, y los atajos de llamada dicen lo mismo.</p>
<p>En un chat de grupo, los mismos botones llaman a todo el grupo. Una llamada de grupo entrante suena, se anuncia con el nombre del grupo y se contesta como cualquier otra llamada, y se puede activar la cámara durante la llamada. WinZapp encuentra la cámara con el FFmpeg que incluye, así que una videollamada ya no sale solo recibiendo.</p>

<h3>Durante la llamada</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/pl.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Połączenia</h2>

<h3>Wykonanie połączenia</h3>
<p>W czacie indywidualnym użyj przycisków "Połączenie głosowe" (Ctrl+Shift+V) i "Połączenie wideo" (Ctrl+Alt+Shift+V); skróty działają także przy fokusie w polu wiadomości. Czytnik ekranu ogłasza, kiedy połączenie zostaje nawiązane, kiedy się łączy ponownie i kiedy się kończy.</p>
<p>WhatsApp pozwala dzwonić tylko do grup liczących do 32 członków. W większej grupie przyciski połączeń zastępuje przycisk "Nie można zadzwonić" z opisem "Grupa ma więcej niż 32 członków", a skróty połączeń mówią to samo.</p>
<p>W czacie grupowym te same przyciski dzwonią do całej grupy. Przychodzące połączenie grupowe dzwoni, jest ogłaszane nazwą grupy i odbiera się je jak każde inne, a kamerę można włączyć w trakcie połączenia. WinZapp znajduje kamerę za pomocą dołączonego FFmpeg, więc połączenie wideo nie jest już tylko odbierające.</p>

<h3>Podczas połączenia</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/pt-BR.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Ligações</h2>

<h3>Ligar</h3>
<p>Numa conversa individual, use os botões "Ligação de voz" (Ctrl+Shift+V) e "Ligação de vídeo" (Ctrl+Alt+Shift+V); os atalhos funcionam também com o campo de mensagem em foco. O leitor de tela avisa quando a ligação conecta, quando está reconectando e quando termina.</p>
<p>O WhatsApp só permite ligar para grupos com até 32 participantes. Num grupo maior, no lugar dos botões de ligação aparece um botão "Não é possível ligar", com a nota "O grupo possui mais de 32 participantes", e os atalhos de ligação dizem o mesmo.</p>
<p>Numa conversa em grupo os mesmos botões ligam para o grupo todo. Uma ligação de grupo recebida toca, é anunciada pelo nome do grupo e é atendida como qualquer outra ligação, e dá para ligar a câmera durante a ligação. O WinZapp encontra a câmera com o FFmpeg que acompanha o programa, então uma ligação de vídeo não sai mais só recebendo.</p>

<h3>Durante a ligação</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/pt-PT.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Ligações</h2>

<h3>Ligar</h3>
<p>Numa conversa individual, use os botões "Chamada de voz" (Ctrl+Shift+V) e "Chamada de vídeo" (Ctrl+Alt+Shift+V); os atalhos funcionam também com o campo de mensagem em foco. O leitor de ecrã avisa quando a chamada liga, quando está a religar e quando termina.</p>
<p>O WhatsApp só permite ligar para grupos com até 32 membros. Num grupo maior, no lugar dos botões de chamada aparece um botão "Não é possível ligar", com a nota "O grupo tem mais de 32 membros", e os atalhos de chamada dizem o mesmo.</p>
<p>Numa conversa de grupo, os mesmos botões ligam para o grupo todo. Uma chamada de grupo recebida toca, é anunciada pelo nome do grupo e é atendida como qualquer outra chamada, sendo possível ligar a câmara durante a chamada. O WinZapp encontra a câmara com o FFmpeg que acompanha o programa, pelo que uma chamada de vídeo já não sai apenas a receber.</p>

<h3>Durante a chamada</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/ro.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Apeluri</h2>

<h3>Efectuarea unui apel</h3>
<p>Într-o conversație individuală, folosește butoanele "Apel vocal" (Ctrl+Shift+V) și "Apel video" (Ctrl+Alt+Shift+V); comenzile rapide funcționează și cu focalizarea pe câmpul de mesaj. Cititorul de ecran anunță când se conectează apelul, când se reconectează și când se termină.</p>
<p>WhatsApp permite apeluri doar către grupuri de până la 32 de participanți. Într-un grup mai mare, butoanele de apel sunt înlocuite cu un buton "Nu se poate apela", cu nota "Grupul are mai mult de 32 de participanți", iar comenzile rapide de apel spun același lucru.</p>
<p>Într-o conversație de grup, aceleași butoane sună tot grupul. Un apel de grup primit sună, este anunțat cu numele grupului și se răspunde ca la orice alt apel, iar camera poate fi pornită în timpul apelului. WinZapp găsește camera cu FFmpeg-ul inclus, deci un apel video nu mai pleacă doar în recepție.</p>

<h3>În timpul apelului</h3>
Expand Down
1 change: 1 addition & 0 deletions client/data/help_guide/tr-TR.html
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,7 @@ <h2 id="h-ligacoes">📞 9. Aramalar</h2>

<h3>Arama yapma</h3>
<p>Bireysel bir sohbette "Sesli arama" (Ctrl+Shift+V) ve "Görüntülü arama" (Ctrl+Alt+Shift+V) düğmelerini kullanın; kısayollar odak mesaj alanındayken de çalışır. Ekran okuyucu aramanın ne zaman bağlandığını, ne zaman yeniden bağlandığını ve ne zaman bittiğini duyurur.</p>
<p>WhatsApp yalnızca en fazla 32 katılımcılı gruplarda arama yapılmasına izin verir. Daha büyük bir grupta arama düğmelerinin yerine "Arama yapılamıyor" düğmesi ve "Grupta 32 üzerinde katılımcı var" notu gelir; arama kısayolları da aynısını söyler.</p>
<p>Grup sohbetinde aynı düğmeler tüm grubu arar. Gelen grup araması çalar, grubun adıyla duyurulur ve diğer aramalar gibi yanıtlanır; kamera arama sırasında açılabilir. WinZapp kamerayı birlikte gelen FFmpeg ile bulur, bu yüzden görüntülü arama artık yalnızca alma modunda başlamaz.</p>

<h3>Arama sırasında</h3>
Expand Down
36 changes: 34 additions & 2 deletions client/ui/conversation_panel/composer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import threading
import wx
from ui.shortcut_bindings import command_key_event
from core.call_logic import MAX_GROUP_CALL_PARTICIPANTS, group_too_large_for_call
from ui.dialogs.emoji_picker import choose_and_insert_emoji
from core.attachment_types import DEFAULT_PASTED_AUDIO_AS, pasted_attachment_media_type
from core.link_preview import (
Expand Down Expand Up @@ -409,22 +410,53 @@ def _sync_voice_call_button(self, jid: str):
# same native group call WinZapp asks the Node patch for. Newsletters,
# broadcast lists and the self-chat have no call to place.
unavailable = jid.endswith(("@newsletter", "@broadcast")) or is_self_chat
self._voice_call_btn.Show(bool(jid) and not unavailable)
self._video_call_btn.Show(bool(jid) and not unavailable)
too_large = (
jid.endswith("@g.us") and getattr(self, "_group_call_blocked_jid", "") == jid
)
callable_chat = bool(jid) and not unavailable
self._voice_call_btn.Show(callable_chat and not too_large)
self._video_call_btn.Show(callable_chat and not too_large)
self._group_call_unavailable_btn.Show(callable_chat and too_large)
self.conversation_panel.Layout()
self.Layout()

def _set_group_call_limit(self, jid: str, participant_count: int):
"""Main-thread callback: swap the call buttons for the "cannot call"
link button when the open group is over the WhatsApp call limit."""
if not self.conversation or self.conversation.get("remoteJid") != jid:
return
self._group_call_blocked_jid = (
jid if group_too_large_for_call(participant_count) else ""
)
self._sync_voice_call_button(jid)

def _group_call_refused(self, jid: str) -> bool:
"""Say why a call cannot start in a group over the limit (the shortcuts
reach the call handlers even though the buttons are hidden)."""
if not jid.endswith("@g.us") or getattr(self, "_group_call_blocked_jid", "") != jid:
return False
i18n = self.main_window.i18n
self.main_window.output(
i18n.t("group_call_unavailable_note").format(limit=MAX_GROUP_CALL_PARTICIPANTS),
interrupt=True,
)
return True

def _on_voice_call(self, _event=None):
if not self.conversation:
return
jid = str(self.conversation.get("remoteJid") or "")
if self._group_call_refused(jid):
return
name = self.conversation_name or self.conversation.get("name") or ""
self.main_window.start_voice_call(jid, name)

def _on_video_call(self, _event=None):
if not self.conversation:
return
jid = str(self.conversation.get("remoteJid") or "")
if self._group_call_refused(jid):
return
name = self.conversation_name or self.conversation.get("name") or ""
self.main_window.start_video_call(jid, name)

Expand Down
1 change: 1 addition & 0 deletions client/ui/conversation_panel/conversation_navigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ def navigate_to_conversation(self, conversation, *, origin=None,
self._pending_mentions.clear()
self._pending_mention_display_names.clear()
self._group_participants_cache = []
self._group_call_blocked_jid = ""
self._hide_mention_suggestions()
if hasattr(self, "_pending_mentions_panel"):
self._rebuild_mention_pills()
Expand Down
Loading
Loading