Nie zauważyłem tego posta...
2/4) Funkcje Dorset* zwracają bool'a
5) Niektóre są tylko do odczytu, niektóre nie... O ile pamiętam, jabber nie reaguje na zmiany ST_HIDE* i nie wysyła komunikatów autoryzacji... Ale np. UI reaguje na zmianę ST_NOTINLIST, a GG na ST_HIDEMYSTATUS:
Co istotne, flagi statusu ustawia się przez SETCNTI, wykorzystując maskowanie i wysyłając komunikat o zmianie w kontakcie...
CODE
SETCNTI(an->act.cnt , CNT_STATUS , 0 , ST_NOTINLIST);
ICMessage(IMC_CNT_CHANGED , an->act.cnt);
1) Nie, myślę że to proste... Wszystko co jest mniejsze od DT_ROWID_MASK (0x40000000) oznacza POZYCJĘ w tablicy (dotyczy to zarówno kontaktów, jak i wiadomości, oraz wszystkiego innego opartego o tablice danych). Pozycja w tablicy jak wiadomo może się zmieniać dowolnie, ten rodzaj id służy do iteracyjnego, szybkiego przeglądania tablic...
Wszystkie ID powyżej tej granicy są identyfikatorami stałymi i unikalnymi. Po usunięciu kontaktu żaden inny nigdy nie otrzyma go ponownie...
Oba id są zamienne, f-cje rozumieją je przezroczyście... Żeby upewnić się czy mamy pozycję na liście używamy DTgetPos(), żeby upewnić się że mamy ID używamy DTgetId()
6) CNT_NET przyjmuje wartość sieci (IM_PLUG_NET) obsługującej ją wtyczki... W przypadku Jabbera będzie to tylko NET_JABBER, niezależnie od sieci w transporcie, ew. któryś z dynamicznie przydzielanych netów dla kopii wtyczki Jabber
7) Tak, j.w.
8) Whatever
signed int i unsigned int można bezstratnie cast'ować między sobą. API w obecnym stadium nie przywiązuje dużej wagi do poprawności typów, co oczywiście obecnie się zmienia... Dla własnego bezpieczeństwa używaj typu tCntId.
9) Mają czyszczoną przydzieloną grupę
10) Pustym stringiem
11) Wszystkie kontakty są aktualizowane o nową wartość
12) Nie.. CNT_CHANGED wysyłane jest tylko po zmianie witalnych parametrów kontaktu... (czyli po dodaniu i np. zmianie UID / Net, ważnych flag itd).