Plik listy kontaktów Gadu-Gadu jest zwykłym plikiem CSV (aczkolwiek stosującym niezalecany znak średnika jako separator pól). W związku z tym jest go dość łatwo wygenerować. Jakkolwiek nieskomplikowany, zupełnie pominięty w dokumentacji protokołu (co zresztą jest łatwe do zrozumienia, ponieważ plik kontaktów jest wyższą warstwą niż protokół), co prowadzi do konieczności jego niezależnego definiowania. Będąc już kilkukrotnie zmuszonym do opisywania schematu tego pliku, i musząc za każdym razem robić to od nowa, postanowiłem zebrać całą wiedzę w jednym miejscu. Tym miejscu.
Plik składa się z trzech części:
Poniżej znajduje się schemat każdej z tych części. Należy pamiętać, że plik kontaktów musi być zapisany w kodowaniu cp1250 (Windows dla Europy Środkowej). Ponieważ wszelkie puste linie i tak są ignorowane, nie zaszkodzi zakończyć go jedną taką (plik kontaktów generowany przez GG kończy się taką; pamiętamy też, że w Uniksach 30 lat temu również był to wymóg, do dziś dziedziczony przez Linuksy).
GG70ExportString,;[grupa,;]<Pozostałe>,;
Nagłówek zawiera ciąg GG70ExportString,; oraz nazwy grup oddzielone przecinkiem i średnikiem (!). Jedyną, domyślną, grupą jest <Pozostałe>. Grupy ułożone są w kolejności alfabetycznej, jednak najprawdopodobniej nie ma to większego znaczenia, ponieważ (ponownie: najprawdopodobniej) GG zawiera procedury do wyświetlania grup na liście kontaktów w kolejności alfabetycznej.
Nagłówek nie występował w GG przed wersją 7.0. Oznacza to, że GG z linii 7.x potrafią zaimportować listę kontaktów niezawierającą nagłówka.
imię;nazwisko;pseudo;wyświetlanie;telefon komórkowy;grupa;nr GG;e-mail;dźwięk wiadomości;ścieżka;dźwięk dostępności;ścieżka;Nie informuj o zmianie statusu w trybie tylko dla znajomych;telefon domowy
Wytłumaczenia są raczej zrozumiałe. Praktycznie wszystkie pola poza 4. (wyświetlanie), 7. (numer GG), 9. i 11. (dźwięki; patrz też uwaga niżej) oraz 13. (Nie informuj o zmianie statusu w trybie tylko dla znajomych) są opcjonalne. Należy pamiętać, że spacja też jest treścią, więc puste pole to po prostu dwa następujące po sobie separatory (średniki). Dla przykładu poniższy zapis jest w pełni akceptowalny przez GG:
;;;Wyświetlanie;;;nr GG;;0;;0;;0;
Pomimo to GG zazwyczaj wypełnia identycznie pola 3. i 4. (Pseudo i Wyświetlanie) i najczęściej spotyka się zapis podobny do powyższego ale uzupełniony o 3. pole.
Kontakt może być przypisany do kilku grup jednocześnie. W takim przypadku każda z grup od reszty oddzielona jest jednym średnikiem. Powoduje to wydłużenie ilość pól w linii o liczba grup - 1. Należy mieć to na uwadze czytając plik (zwykła funkcja split będzie generowała tablice o różnej długości). Dla przykładu poniżej linijka opisująca kontakt przypisany do trzech grup:
;;;Wyświetlanie;;grupa1;grupa2;grupa3;nr GG;;0;;0;;0;
Pola dźwięków (9. i 11.) przyjmują wartości:
Jedynka w polu 13. (Nie informuj o zmianie statusu w trybie tylko dla znajomych) implikuje jedynkę w polu 11.
i;;;;;;blokowany_numer
Blokowany numer nie musi, ale może, być wymieniony także w w części głównej.
Written by Minio.