Plugin Fresty i tlenowy opis…

W piątek coś sprawdzałem w tlenie i przy okazji jakoś się zainteresowałem opisem. Te kilka wyników moich doświadczeń, głównie już znanych, ale jakoś zapomnianych przedstawiłem na forum ekipy w temacie Status opisowy w Tlenie.

Niestety zawartość postu została skasowana, po tym jak poniekąd o2 zapowiedziało filtrację i ucinanie opisu po stronie serwera... Poniżej oryginalna treść mojego postu:

Przeprowadziłem kilka testów związanych z opisem w tlenie ;)
I udało mi się dokonać ustawiania i pomyślnego odebrania opisu w drugim tlenie. No niby nic szczególnego, prócz tego, ze opis ten składał się z ponad 5200 znaków ;)

Jak się okazuje, pozostała w tlenie ta jabberowska możliwość opisów nieograniczonych :P Jedynym problemem jest klient, a dokładniej to ustawianie i wyświetlanie stanu opisowego.
Próba ustawienia stanu większego niż 100 znaków legalnymi sposobami, tj. przez okno ustawiania opisu lub funkcja PF_CHANGEUSERSTATEdoprowadzi do redukcji opisu do 100 znaków przed wysłaniem na serwer.
Jednak, jeśli uda nam się już wysłać większy status niż "możemy", to pojawia się kolejny problem - jego odbioru i wyświetlenia w drugim kliencie.
Tlen odbierze ten podrasowany opis bez problemów, ba nawet go przypisze konkretnemu kontaktowi, ale niestety pod kontaktem jak również w hincie pokaże tylko ok. 255 znaków.

Spytacie gdzie ta reszta i skąd pewność ze odebrał poprawnie całość i przypisał...
Otóż opcja kopiuj opis skopiuje nam do schowka, cały wysłany opis, a nie tylko te ~250 pierwszych znaków...
Wiec skoro wszystko jest możliwe, to czemu klient blokuje wyświetlenie większego opisu...
Rozumiem, blokowanie przy wysłaniu do 100 znaków, ok może być takie blokada, ale skoro jest możliwość wysłania większego to niech chociaż dobrze zostanie wyświetlony pod kontaktem, lub w hincie ;]

Nie widzę problemów do zaimplementowania obsługi nieograniczonych opisów do tlena :P
Cos a'la mleczko... mleczko2 :D
Chyba że zablokują coś na serwerze :/
Zresztą max to chyba i tak 4KB by mogłoby być, bo tyle można wrzucić pod kontakt lub do hinta... w wolnej chwili obadam :P

Testowo udało mi się w pluginie zaimplementować obsługę ~nieograniczonych opisów, ale na razie się wstrzymałem z tym tematem. Udostępniam plugin, a raczej to co do tej pory napisałem w ramach tego projektu.

Wtyczka o nazwie fresty funkcjonalnością przypomina wtyczkę mleczko autorstwa Trena.

Prawdopodobnie projekt zostanie zaniechany z przyczyn oczywistych, o2 planuje przyblokować ustawianie większych opisów niż 100 znaków ;]
[...]
Aktualnie można ustawić opis 100 znakowy w wielu liniach, max 100 lini po 1 znaku :P
Należy pamietać, że Tlen i tak przytnie Wasz opis pod kontaktem do 4 lini, całość będzie w hincie...

Na razie zostałem przy tych "nieszczęsnych" 100 znakach, poczekamy co o2 zrobi... Dodanie do listy, czy próba ustawienia opisu powyżej 100 znaków, zaowocuje automatycznym skróceniem do wymaganej długości.

Wersja 0.1, miała nie być publikowana do czasu zaimplementowania całej reszty, ale zacząłem tracić dalszą ochotę na pisanie kodu, skoro o2 ma zablokować na dniach przyjmowanie statusów opisowych powyżej 100 znaków.

Przed chwilą wydałem nową wersję :P

Changelog wersji 0.2 pluginu fresty:

  • poprawiono obsługę kursora w EditBoxie;
  • dodano licznik znaków opisu;
  • dodano focus i zaznaczenie przy otwarciu okienka;
  • dodano skróty klawiatury i opcje dostępne pod nimi:
    CTRL+A - wiadomo
    CTRL+S - usuń spacje
    CTRL+D - przywróć spacje (po wykonaniu CTRL+S)
    Oczywiście EditBox posiada jeszcze standardowe skróty Windowsa dla okienek edycyjnych typu kopiuj, wklej etc. (Ctrl+C, ...);

Trochę mi nerwów zeżarło babranie się z tymi kursorami. Kombinowałem na rożne możliwe sposoby, z przechwytywaniem odpowiednich message'ow, nawet hooka lokalnego na klawiaturę postawiłem, ale efekty nigdy nie były takie jakie oczekiwałem :(

Wszystko przez głupią obsługę zdarzeń klawiatury przez VCL. A później modyfikując i subclassując "nie swoje" okno, ciężko się do nich dostać :P

Tren podsunął jeden pomysł, i udało się. Dziwie się, że sam na niego nie wpadłem, bo jest dziecinnie prosty. Przed przetwarzaniem kolejki komunikatów skierować obsługę naciśniętych klawiszy do domyślnej procedury okna:

// przechwycenie przed vcl'em obslugi klawiszy kursorow, aby w edicie dzialaly poprawnie ;]
if (wParam == VK_LEFT || wParam == VK_UP || wParam == VK_RIGHT || wParam == VK_DOWN)
	return DefWindowProc(hWnd, message, wParam, lParam);

Na to nie wpadłem, ale za to wszystkie inne możliwe sposoby przerobiłem...

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *