Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· EmailService
IMAP/SMTP-backed wysyłaj, folder i wyszukiwanie przekąsów
Wyciąg wzorzec delegowania IMAP/SMTP do AbstractImapBackedCloudProvider I mają Zoho, IceWarp, Exchange, Google Workspace i Microsoft 365 To się robi. Klasa podstawowa implementuje MailSender, MailReader, FolderManager, i SearchProvider na górze EmailImapService, EmailSmtpService i SearchService — te same usługi używane przez KamoMail — tak: - wyślij / saveDraft work dla dowolnego dostawcy chmury z poświadczeniami SMTP. - Wszystkie operacje folderów (zatwórz / zmień nazwę / usuwanie / move / setFlags / TredMessage) działa za pośrednictwem IMAP. - Szukaj delegatów do istniejącej usługi wyszukiwania. - Czytaj operacje i inline cid: rendering kontynuuj przepływ przez Podzielony EmailImapService parser. Pozostałe ćwieki w każdym betonowym dostawcy — RealtimeNotifier (gdzie W przypadku usługi DomainManager i MailboxProvisioner — naprawdę potrzebują API administratorów (Microsoft Graph, Google Admin SDK, Zoho Admin API, EWS, IceWarp admin), które nie są jeszcze podłączone do tej bazy kodu. Każdy z nas stub ma teraz komentarz w stylu TODO, nazewnik API, który go zaimplementował.
· EmailService
Zatercony przez IMAP MailReader dla zagłuszacza w chmurze
Zoho, IceWarp, Exchange, Google Workspace i Microsoft 365 ujawniają IMAP, Przejrzyj więc wszystkie metody MailReader dla każdego dostawcy chmury za pomocą EmailImapService Zamiast rzucać UnsupportedOperationException. To: - Odblokowuje odczytywanie wiadomości o tych dostawcach, gdy tylko poświadczenia IMAP są Skonfigurowane (najczęściejjsze wdrożenie dzisiaj). - Uczy nową zawartośćID / inline metadane metadanych jednolicie przez Każdy dostawca, ponieważ EmailImapService jest pojedynczym parserem. - Pozwala na rozwiązanie punktu końcowego w linii w linii: referencje dla każdego dostawcy. Pozostałe metody dostarczania w chmurze (wysyłanie, zarządzanie folderami, rezerwacja, Dome niespodziewanie nieobsługiwania — te potrzeby Użytkowniki dostawców i nie mają tu zasięgu. Dodaj również MailContext.toMailCredentials() tak dostawców (i istniejące Adapter KamoMailReader) udostępnia pojedynczy pomocnik konwersji porównawczej.
· kamo-internal
Render inline Cid: obrazy za pomocą nowego punktu końcowego EmailService
Gdy wiadomość eksponuje części inline (każdy nosi treśćId), e-mail Renderator teraz przepisuje "img src""cid:..."> odniesienia w czasie montażu do - które teraz również pełnomocnik Przewiń Cache-Control na włączony, więc przeglądarka całuje napastowany obraz. - EmailAttachment (zarówno w konwersacjiTypes, jak i kopia lokalna w MessageBrowser) zyskuje pole contentID i inline. - SanitizedEmailRenderer akceptuje inlineImageBaseUrl + inlineContentIds; Cid: imgs, przepisuje znane cydry i ukrywa resztę, z istniejącymi Posługa osób z przerażeniem jednorazowym wciąż ukrywającym każdy inny zepsuty obraz. - Dedykowane odebranie cytryny, które żyło w dezynfekcie, jest przywrócone - Przepisywanie należy do renderowania, gdzie istnieje kontekst wiadomości. - Widoczne załączniki z listy w ThreadDetailView i MessageBrowser Filtry inline części, więc wbudowane logotypy nie są już wyświetlane jako Załączniki do pobrania.
· EmailService
Podawać w linii obrazu MIME części i powierzchowy metadane Content-ID
Renderuj "img src"cid:..."> w komunikatach UI poprzez ujawnienie części w linii To do odniesienia przez ciało HTML. - AttachmentInfo zyskuje zawartośćId (bez wsporników kątowych) i flagę w linii. - parseMultipart i getAttachment share a single isAttachmentPart predicate i rekurencyjny spacerowicz, więc części wbudowanych wewnątrz wieloczęściowy / powiązany Są przechwytywane (a ich indeksy pozostają wyrównane w dwóch metodach). Poprzednio rekurencja napisała listę załączników rodzica, która Upuścił również prawdziwe przystawki w zagnieżdżonych strukturach. - hasAttachment jest teraz napędzany tylko przez części nieinlinowe - podpis logo nie Dłużej zapalić spinacz do każdej wiadomości. - Nowy punkt końcowy GET - na obu EmailController i współdzielonyMailboxMailMailController; rozwiązuje cid przez Parsed AttachmentInfo, przesyła część z Content-Disposition: inline I Cache-Control: prywatny, max-age?3600.
· KlusterServices
Dodaj skrzynkę pocztową .kamorm.com i zewnętrzny IMAP NodePort
- Nowa usługa mail/dovecot-imap-external (NodePort 30143 -> 143), więc IMAP można dotrzeć spoza klastra na $NODE:30143. - Seed pricing-kamorm.com w mysql-init, więc świeży DB bootstrap odtwarza skrzynkę pocztową; wiersz na żywo jest już obecny w MySQL.
· kamo-internal
Przeprojektuj czatyList rzędy — elegancki układ, brak poziomego przewijania, kropki online, nieprzeczytana odznaka, względne znaczniki czasu
· MediaService
Dodaj punkt końcowy GET /sesje/-guid/members z priorytetem nazwy wyświetlacza
Lista członków zwraca z nazwą rozwiązaną za pomocą nazwy użytkownikaAlias - pełnaName - alias - nazwa użytkownika, Dopasowanie tego samego priorytetu co lista sesji czatu. To zawiera ChatBox.loadMembers() paska tytułów okienka narzędzia może pokazać poprawną preferowaną nazwę.
· kamo-internal
Tytuł okna narzędzia do wyboru i wysyłki od członków sesji
Dodaje onMembersChange callback do ChatBox; ChatTool wywodzi tytuł (pojedyncza nazwa dla 1 na 1 lub ''na nazwa> (+N więcej' dla grup) i depeszy Narzędzie: uprawa do dynamicznej aktualizacji paska tytułowego ToolWindowShell.
· kamo-internal
Wyszukiwarka powyszeni powyżek powyżek po stronie paska kart, podziel się zapytaniem między tabelami Członkowie i
Przenosi wyszukiwanie TextField z MemberList do NavTopPanel nad Tabs. Przekazuje searchQuery jako rekwizyt zarówno do MemberList, jak i ChatsList tak jedno pole Filtruje obie zakładki. ChatsList filtruje wiersze, dopasowując imię użytkownika niebędące samolubem.
· MediaService
Rozszerzanie nieprzeczytanej transmisji z ładunkiem ACTIVITY dla aktualizacji listy czatów
· kamo-internal
Aktualizacje na żywo-lista za pośrednictwem kanału nieczytanego NATS
· kamo-internal
Tabs dla członków / czaty w panelu centrum interakcji
· kamo-internal
Lista czatów z nieskończonym przewijaniem, zwirtualizowana przez IntersectionObserver
· kamo-internal
Wieloselekt w MemberList do rozpoczynania czatów grupowych
· kamo-internal
Czatuj nagłówek ze stosem awatarów, wyskakującym tytułem i zbieraczami członków
· kamo-internal
Kompozytor z przeciągnij-kropl, oczekujące chipsy mocujące, wejście wieloliniowe
· kamo-internal
Bańka wiadomości z awatarami, akcjami unoszącymi się i widocznym wskaźnikiem
· kamo-internal
Inline rendering i lightbox
· kamo-internal
Rodzaje klientów i haczyki do sesji, paragony, załączników
· kamo-internal
Trasy proxy do find-or-create, członków, załączników, proxy do obrazowania, wyciszeń,
Wyodrębnij współdzielonego pomocnika do aplikacji/lib/mediaServiceUrl.ts. Dodaj trasy proxy: find-or-create, członkowie, paragony, załączniki (użytkły), wyciszenia, cofnięcie,
· MediaService
Wpisy Configmap dla limitów załączników i wieloczęściowych
· MediaService
Lista czatu Paged z podglądami, członkami, nieprzeczytanymi liczbami
To zwraca wiersze ChatListRowDto, w tym ostatni podgląd wiadomości, członek Suma podsumowań, liczby nieprzesłyczawek na sesji i własneLastViewedAt.
· kamo-shared-library
Dodaj countUnread After (przewodnik, członekId, od tego czasu) do MediaObjRepository
Potrzebny przez stronniczony punkt końcowy listy czatu, aby obliczyć liczbę nieprzestrzegania sesji Kiedy ownLastViewedAt jest wskaźnikem LocalDateTime, a nie wiadomości UUID.
· MediaService
Real NATS wydawca impl i READ_RECEIPT
· MediaService
Per-viewer wycisz punkt końcowy i filtr wiadomości
· kamo-shared-library
Dodaj do MediaSessionMuteRepository
· MediaService
Serwer proxy z obsługą HTTP Range i śledzenie pobierania na osobę
· kamo-shared-library
Dodaj do koszykaBObjImgDownloadRepozytorium z istniejącymObjgIdIdIdImberId
Wymagane przez ImagingProxyService (Task 10) do deduplikacji na osobę Śledzenie pobierania bez pełnego skanowania stołu.
· kamo-shared-library
Dodaj CHAT_ATTACHMENT typu assoc z wiadrem do obrazowania-czatatów
· kamo-shared-library
Metody usługowe do dokładnego znajdowania/tworzenia, dodawanie członków, wyciszania, cofania, czytania

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej