Google Summer of Code – podsumowanie

Google Summer of Code właśnie się zakończył, więc warto się pokusić o małe podsumowanie. Komunikator Pidgin został zaakceptowany wraz z czterema projektami, z których trzy (ten również) zakończyły się sukcesem. Mój projekt trochę się zmienił od czasu zaakceptowania, ale wciąż jestem zadowolony z postępów – możecie to sami ocenić czytając ten post. Niektóre obiecane funkcje nie zostały jeszcze ukończone, głównie z powodu konieczności zmian w libgadu. One kiedyś zostaną zrobione, ale to wymaga czasu: dyskusji, implementacji libgadu, wydania libgadu, aktualizacji libgadu w Pidginie, implementacji w Pidginie i w końcu wydania Pidgina.

Jednak projekt nie był tylko okrajany. Pojawiły się poprawki, które nie były planowane, ale okazały się istotne dla wprowadzenia lepszej jakości obsługi protokołu Gadu-Gadu. To jest miejsce, w którym korzystamy z przejścia na wersję 3.0.0 – mogłem zmieniać co mi się tylko podobało w API libpurple. To również miejsce, w którym zyskują inne protokoły.

Rozliczenie z obietnic

Na początku przedstawię porównanie aktualnych postępów pracy z zaakceptowanym projektem.

Transfer plików: udało mi się przeanalizować najnowszy protokół GG11, a nawet napisałem przykładowego klienta, który wysyła plik. Niestety, jedna rzecz przeszkodziła mi we wdrożeniu tej funkcji w Pidginie: metoda uwierzytelniania. Aby wysłać plik, trzeba podać kod, który jest dostępny tylko, gdy użytkownik łączy się z użyciem najnowszego protokołu sesji. Libgadu jeszcze tego nie obsługuje. Mam jednak zamiar przeanalizować i zaimplementować ją w międzyczasie, ale może to zająć trochę czasu. Z drugiej strony, była możliwość zaimplementowania starego protokołu transferu plików, ale sieć Gadu-Gadu wycofuje wsparcie dla niego, więc mogła to być strata czasu.

Synchronizacja listy kontaktów: udało się. Wymaga, aby libgadu zostało skompilowane z biblioteką zlib.

Obsługa szyfrowania połączeń pod Windows: Pidgin 2.x pod systemem Windows nie wspierał GnuTLS, który to jest wymagany przez libgadu do szyfrowania połączeń. Wcześniej planowałem zaimplementować tam szyfrowanie poprzez bibliotekę Mozilla NSS, ale okazało się, że Pidgin 3.x będzie pod Windowsem korzystał z GnuTLS. Wygląda więc na to, że wsparcie szyfrowania pod tym systemem zostanie dodane bez konieczności zaangażowania z mojej strony.

Poprawa jakości kodu: wtyczka obsługująca protokół GG była pełna starego i obarczonego błędami kodu, który był ciężki w utrzymaniu. Przepisanie go od podstaw było najłatwiejszą metodą na podniesienie jego jakości. Udało mi się przepisać połowę starego kodu, produkując przy tym dwa razy więcej, niż jego poprzednia wielkość. Oczywiście, przy okazji przepisywania kodu, poprawiłem sporo mniejszych lub większych błędów.

Połączenia głosowe: nie udało się. Według dokumentacji libgadu, było możliwe nawiązywanie połączeń głosowych z klientami GG poprzez protokół SIP. Nie udało mi się jednak przeprowadzić takiej rozmowy – wygląda na to, że protokół się zmienił: GG11 używa teraz klienta rozmów głosowych opartego o technologię flash.

Obsługa SOCKS proxy: w trakcie. Ta funkcja wymaga głębokich zmian w libgadu, dyskusja na ten temat jeszcze się nie zakończyła.

Możliwość zapamiętania wielu serwerów gadu-gadu: udało się. Historia serwerów, do których łączył się klient, jest zapisywana w konfiguracji Pidgina, więc użytkownik może sobie wybrać go z listy, zamiast szukać odpowiednich adresów w Internecie.

Wielokrotne logowanie: w większości gotowe, bez możliwości rozłączania innych sesji.

Lepsze wsparcie dla przesyłania obrazków: udało się.

Podstawowe zarządzanie kontem prosto z komunikatora: udało się, z wyjątkiem opcji przywracania hasła, którego właściwie nie miałem gdzie podłączyć.

Pełna obsługa avatarów: udało się.

Edycja danych w katalogu użytkowników: udało się, niestety korzystając ze starego protokołu GG10.5 (z tego samego powodu, co w przypadku transferu plików).

Wykorzystanie danych z katalogu do automatycznego nazwania nowo dodanego kontaktu: udało się.

Obsługa formatowania treści wiadomości: nie udało się. Ta część kodu musi zostać przepisana, ale jeszcze tam nie dotarłem.

Zamknięte tickety#6263, #9463, #13739, #14305, #14649, #14776, #14951, #2188#6918, #11693, #14012, #15132, #a11300, #a6595. Jeszcze zostało sześć: #343 (prawie zrobione), #372 (czeka na libgadu), #5576 (również czeka na libgadu), #8945 (ten kod musi zostać przepisany), #13584 (ten również jest do przepisania), #14366 (prawie gotowe).

Praca wykonana poza planem

Oprócz zadań postawionych w propozycji projektu, udało mi się zrealizować kilka innych, głównie rozwijając API libpurple.

Najważniejsza rzecz, którą udało mi się zrobić, to wstępne przeanalizowanie protokołu GG11. Jeszcze jest przy tym trochę pracy, ale to dobry początek. Przejście na nowy protokół musi być zrobione, aby w pełni wspierać funkcje takie jak transfer plików lub publiczny katalog użytkowników. Przy okazji pracy nad protokołem napisałem wtyczkę analizatora pakietów Gadu-Gadu dla Wiresharka.

Okno konfiguracji konta zostało znacznie poprawione dla protokołów z automatycznie nadawanymi przy rejestracji identyfikatorami użytkowników.

Funkcja weryfikacji poprawności nazw użytkowników wpłynie pozytywnie na wygodę użytkowania, eliminując pomyłki przy wpisywaniu numerów GG przy dodawaniu znajomych lub konfiguracji kont.

W pewnym stopniu powiązana funkcja to sprawdzanie poprawności w oknach utworzonych przez Request API. Wcześniej, sprawdzenie poprawności było możliwe tylko po zamknięciu okna, teraz można to robić już po wypełnieniu danego pola.

Wprowadzenie funkcji historii serwerów GG nie było by możliwe, bez opcji dodania listy podpowiedzi do pól tekstowych w oknie konfiguracji konta. Oczywiście, inne protokoły (jak IRC) na tym zyskają.

Jest jeszcze kilka niezakończonych wątków z dyskusjami, opisanych w moim poprzednim poście.

Kod źródłowy

Kod wyprodukowany w ramach GSoC jest dostępny poprzez repozytoria, lub bezpośrednio, w paczkach przygotowanych poniżej:

Co dalej?

Jak można zauważyć, największym problemem, który nie pozwolił mi na porządne wykonanie wielu funkcji, był brak obsługi protokołu sesji GG11. Analiza i implementacja tego protokołu w libgadu jest moim głównym celem po GSoC.

Gdy uda mi się zrealizować powyższe zadanie, w końcu wprowadzę obsługę transferu plików. To jest jedna z najbardziej pożądanych funkcji, wspominana przez użytkowników od początku istnienia tej wtyczki.

Kolejnym zadaniem będzie dokończenie przepisywania kodu źródłowego oraz uzupełnienie dokumentacji.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.