Portál AbcLinuxu, 30. dubna 2025 19:49
V rámci importů kontaktů do programu Esmska mě napadlo, že bych mohl naprogramovat jednoduchý importer z Address Booku na Macu. To se mi podařilo, avšak otázka je, zda něco takového lze jednoduše udělat i na Linuxu.
Esmska je program pro odesílání SMS z počítače. Ke své práci využívá kontakty, které si můžete uložit. Je zde i volba importu ze souboru. Typickým příkladem je vCard. Avšak ne každého furt baví lézt do svého programu, kde má uložené kontakty a při každé změně dělat export a import do Esmsky.
Vyrobil jsem prototyp, který proleze celý adresář a v Javě jej vráti jako Stringové pole. Protože toto není možno udělat v Javě, je nutno použít JNI - alias programování v C. V současné době mám hotový export z aplikace Address Book na Mac OS X. A protože jsme na Abclinuxu, tak bych rád něco takového viděl i pro Linux.
Upozorňuji předem, že jsem zatím vůbec nikde negooglil. Chtěl bych se zeptat zdejší programátorské komunity, zda se někdo s podobným problémem již nesetkal. Rád bych, aby vznikl kód, který bude umět prohledat jak aplikaci Kontact, tak i Evolution a ideálně i Thunderbird.
Řešení je prosté. Musíte implementovat jednu metodu, která má hlavičku v podobě C/C++ funkce. Pokud se vám tento jazyk nelíbí (já ho docela nesnáším), můžete v rámci implementace této metody volat jiný jazyk. V mém případě to bylo Objective-C. Pokud to dokážete v Pythonu, Lispu, nebo v assembleru... Je mi to šumák. Java vyžaduje volání té céčkové metody. Co se děje uvnitř - to už je jen a jen na vás.
Mě bude úplně stačit, když mě vhodným směrem popostrčíte. Není nutno hned dávat naprogramovanou knihovnu, ačkoliv bych vám za ní líbal ruce nohy. Když mi ukážete, kde mám stáhnout vhodný framework, budu i za to vděčný. Jo, a pokud se tu najde člověk, co by zvládl takovýto export z Outlooku...
Ukázka kódu je na adrese: http://www.ptakopysk.cz/algi/Archive.zip. Je tam ukázkový zdroják v Javě a implementace v Objective-C, včetně header filu s názvem export.h. Ten je nutno implementovat, ostatní je nepodstatné...
Tiskni
Sdílej:
~/.kde/share/apps/kabc/std.vcf
. Přístup přes API by byl samozřejmě lepší, ale pokud k adresáři přistupovat jen pro čtení, tak se dá použít tohle - a nepotřebuješ žádné JNI. (pokud by uživatel měl kontakty jinde než v lokálních souborech, pak už by API bylo potřeba, nebo by se dalo spojit rovnou s LDAPem, pokud by byl bez hesla).
BTW: když už jsme u té integrace, nezkoušeli jste někdo propojit Javu a nějakého správce hesel (KWalletManager)?
KeyStore keyStore = KeyStore.getInstance("KeychainStore", "Apple"); keyStore.load(new FileInputStream("/path/to the/keychainfile.keychain"),"password".toCharArray());Ovšem nevím, jestli je to přesně to, co hledáš
Algis-Companion:Sample marian$ file libExport.dylib libExport.dylib: Mach-O universal binary with 4 architectures libExport.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libExport.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 libExport.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc libExport.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.