├── SwissSMS_Prefix.pch ├── English.lproj ├── Localizable.strings ├── InfoPlist.strings ├── MainMenu.nib │ └── keyedobjects.nib └── Preferences.nib │ └── keyedobjects.nib ├── Frameworks └── Sparkle.framework │ ├── Versions │ ├── Current │ └── A │ │ ├── Resources │ │ ├── fr_CA.lproj │ │ ├── fr.lproj │ │ │ ├── fr.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── relaunch │ │ ├── de.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── en.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── es.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── it.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── nl.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── ru.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── sv.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── keyedobjects.nib │ │ │ │ ├── info.nib │ │ │ │ └── classes.nib │ │ ├── SUStatus.nib │ │ │ ├── keyedobjects.nib │ │ │ ├── info.nib │ │ │ └── classes.nib │ │ ├── Info.plist │ │ └── License.txt │ │ ├── Sparkle │ │ └── Headers │ │ ├── Sparkle.h │ │ ├── SUAppcast.h │ │ ├── SUVersionComparisonProtocol.h │ │ └── SUAppcastItem.h │ ├── Headers │ ├── Sparkle │ └── Resources ├── Resources ├── Flag.png ├── Delete.png ├── Flagged.png ├── Inspect.png ├── general.png ├── network.png ├── person.tiff ├── update.tiff ├── NewMessage.png ├── SwissSMS.icns ├── AddressBook.tiff ├── FlaggedHeader.png ├── SwissSMSLarge.tiff ├── appDefaults.plist ├── SwissSMSDocument.icns ├── SwissSMS Help │ ├── art │ │ └── iconhelpcenter.png │ └── SwissSMS Help.helpindex └── Credits.html ├── Plugins ├── ETHCH │ ├── ETH.png │ ├── ETHCH.h │ └── Info.plist ├── MjoyINT │ ├── Mjoy.png │ ├── MjoyINT.h │ └── Info.plist ├── YalloCH │ ├── Yallo.png │ ├── YalloCH.m │ ├── YalloCH.h │ └── Info.plist ├── OrangeCH │ ├── Orange.png │ ├── OrangeCH.h │ └── Info.plist ├── SunriseCH │ ├── Sunrise.png │ ├── SunriseCH.h │ └── Info.plist ├── hispeedCH │ ├── Hispeed.png │ ├── HispeedCH.h │ ├── Info.plist │ └── HispeedCH.m ├── PostMailCH │ ├── PostMail.png │ ├── PostMailCH.h │ ├── PostMailCH.m │ └── Info.plist ├── RomandieCH │ ├── Romandie.png │ ├── RomandieCH.h │ ├── Info.plist │ └── RomandieCH.m ├── CitycableCH │ ├── Citycable.png │ ├── CitycableCH.h │ └── Info.plist ├── NetAppelINT │ ├── NetAppel.png │ ├── NetAppelINT.h │ └── Info.plist ├── CoopMobileCH │ ├── Coop Mobile.png │ ├── CoopMobileCH.h │ └── Info.plist └── SwisscomXtraZoneCH │ ├── Swisscom Xtra-Zone.png │ ├── SwisscomXtraZoneCH.h │ └── Info.plist ├── German.lproj ├── InfoPlist.strings ├── MainMenu.nib │ └── keyedobjects.nib └── Preferences.nib │ └── keyedobjects.nib ├── PluginTemplate ├── MyServiceCH.png ├── MyServiceCH.h ├── SwissSMSPlugin_Prefix.pch ├── MyServiceCH.m ├── README.txt └── Info.plist ├── swiss_sms_screenshot_small.png ├── SwissSMS_DataModel.xcdatamodel ├── elements └── layout ├── French.lproj ├── MainMenu.nib │ └── keyedobjects.nib └── Preferences.nib │ └── keyedobjects.nib ├── MDImporter ├── English.lproj │ └── InfoPlist.strings ├── schema.xml ├── Info.plist └── GetMetadataForFile.m ├── Automator action ├── English.lproj │ ├── InfoPlist.strings │ └── main.nib │ │ └── keyedobjects.nib ├── French.lproj │ ├── InfoPlist.strings │ └── main.nib │ │ └── keyedobjects.nib ├── German.lproj │ ├── InfoPlist.strings │ └── main.nib │ │ └── keyedobjects.nib ├── Send SMS_Prefix.pch ├── Send SMS.h └── Info.plist ├── Address Book plugin ├── English.lproj │ ├── InfoPlist.strings │ └── Localizable.strings ├── French.lproj │ └── Localizable.strings ├── German.lproj │ └── Localizable.strings ├── SwissSMSABPlugin_Prefix.pch ├── Info.plist ├── SwissSMSABPlugin.h └── SwissSMSABPlugin.m ├── SSSender.h ├── Scripts ├── signcode.sh └── svnrevision.sh ├── .gitignore ├── SwissSMSUpdater.h ├── MyPerson.h ├── PhoneNumberFormatTest.h ├── FlagImageTransformer.h ├── NSDictionary+SMSSender.h ├── NSFileManager_SwissSMS.h ├── NSURL+SMSSender.h ├── SwissSMS_AppDelegate+Export.h ├── NSManagedObjectContext+Metadata.h ├── ABPerson_SwissSMS_AIM.h ├── version.plist ├── NSString_SwissSMS.h ├── SSVersionCheck.plist ├── NSWorkspace_SwissSMS.h ├── IMService_TigerCompat.h ├── SSRecipient.h ├── SwissSMS_AppDelegate+Toolbar.h ├── Tests-Info.plist ├── SSSender-Info.plist ├── NSString+SMSSender.h ├── Message.h ├── KeychainAccess.h ├── FlagImageTransformer.m ├── ABPerson_SwissSMS.h ├── NSFileManager_SwissSMS.m ├── SwissSMSUpdater.m ├── SwissSMS_AppDelegate+TokenField.h ├── NSDictionary+SMSSender.m ├── SSRecipient.m ├── NSURL+SMSSender.m ├── MyPerson.m ├── NSString_SwissSMS.m ├── README.md ├── PreferencesController.h ├── NSManagedObjectContext+Metadata.m ├── ABPerson_SwissSMS_AIM.m ├── NSWorkspace_SwissSMS.m ├── AbstractSender.h ├── HTMLForm.h ├── info.plist ├── SwissSMS_AppDelegate+TokenField.m ├── PhoneNumberFormatTest.m ├── KeychainAccess.m ├── SwissSMS_AppDelegate.h ├── _fixXQuery.h ├── ABPerson_SwissSMS.m ├── STHTTPRequest └── STHTTPRequest.h └── Message.m /SwissSMS_Prefix.pch: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /English.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /**/ -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Resources/Flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/Flag.png -------------------------------------------------------------------------------- /Plugins/ETHCH/ETH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/ETHCH/ETH.png -------------------------------------------------------------------------------- /Resources/Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/Delete.png -------------------------------------------------------------------------------- /Resources/Flagged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/Flagged.png -------------------------------------------------------------------------------- /Resources/Inspect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/Inspect.png -------------------------------------------------------------------------------- /Resources/general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/general.png -------------------------------------------------------------------------------- /Resources/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/network.png -------------------------------------------------------------------------------- /Resources/person.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/person.tiff -------------------------------------------------------------------------------- /Resources/update.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/update.tiff -------------------------------------------------------------------------------- /Plugins/MjoyINT/Mjoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/MjoyINT/Mjoy.png -------------------------------------------------------------------------------- /Resources/NewMessage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/NewMessage.png -------------------------------------------------------------------------------- /Resources/SwissSMS.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/SwissSMS.icns -------------------------------------------------------------------------------- /Plugins/YalloCH/Yallo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/YalloCH/Yallo.png -------------------------------------------------------------------------------- /Plugins/YalloCH/YalloCH.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/YalloCH/YalloCH.m -------------------------------------------------------------------------------- /Resources/AddressBook.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/AddressBook.tiff -------------------------------------------------------------------------------- /Plugins/OrangeCH/Orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/OrangeCH/Orange.png -------------------------------------------------------------------------------- /Plugins/SunriseCH/Sunrise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/SunriseCH/Sunrise.png -------------------------------------------------------------------------------- /Plugins/hispeedCH/Hispeed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/hispeedCH/Hispeed.png -------------------------------------------------------------------------------- /Resources/FlaggedHeader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/FlaggedHeader.png -------------------------------------------------------------------------------- /Resources/SwissSMSLarge.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/SwissSMSLarge.tiff -------------------------------------------------------------------------------- /Resources/appDefaults.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/appDefaults.plist -------------------------------------------------------------------------------- /English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /German.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/German.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /PluginTemplate/MyServiceCH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/PluginTemplate/MyServiceCH.png -------------------------------------------------------------------------------- /Plugins/PostMailCH/PostMail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/PostMailCH/PostMail.png -------------------------------------------------------------------------------- /Plugins/PostMailCH/PostMailCH.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/PostMailCH/PostMailCH.h -------------------------------------------------------------------------------- /Plugins/PostMailCH/PostMailCH.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/PostMailCH/PostMailCH.m -------------------------------------------------------------------------------- /Plugins/RomandieCH/Romandie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/RomandieCH/Romandie.png -------------------------------------------------------------------------------- /Resources/SwissSMSDocument.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/SwissSMSDocument.icns -------------------------------------------------------------------------------- /swiss_sms_screenshot_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/swiss_sms_screenshot_small.png -------------------------------------------------------------------------------- /Plugins/CitycableCH/Citycable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/CitycableCH/Citycable.png -------------------------------------------------------------------------------- /Plugins/NetAppelINT/NetAppel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/NetAppelINT/NetAppel.png -------------------------------------------------------------------------------- /Plugins/CoopMobileCH/Coop Mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/CoopMobileCH/Coop Mobile.png -------------------------------------------------------------------------------- /Plugins/CoopMobileCH/CoopMobileCH.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/CoopMobileCH/CoopMobileCH.h -------------------------------------------------------------------------------- /SwissSMS_DataModel.xcdatamodel/elements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/SwissSMS_DataModel.xcdatamodel/elements -------------------------------------------------------------------------------- /SwissSMS_DataModel.xcdatamodel/layout: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/SwissSMS_DataModel.xcdatamodel/layout -------------------------------------------------------------------------------- /English.lproj/MainMenu.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/English.lproj/MainMenu.nib/keyedobjects.nib -------------------------------------------------------------------------------- /French.lproj/MainMenu.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/French.lproj/MainMenu.nib/keyedobjects.nib -------------------------------------------------------------------------------- /German.lproj/MainMenu.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/German.lproj/MainMenu.nib/keyedobjects.nib -------------------------------------------------------------------------------- /MDImporter/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/MDImporter/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /English.lproj/Preferences.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/English.lproj/Preferences.nib/keyedobjects.nib -------------------------------------------------------------------------------- /French.lproj/Preferences.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/French.lproj/Preferences.nib/keyedobjects.nib -------------------------------------------------------------------------------- /German.lproj/Preferences.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/German.lproj/Preferences.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Resources/SwissSMS Help/art/iconhelpcenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/SwissSMS Help/art/iconhelpcenter.png -------------------------------------------------------------------------------- /Automator action/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Automator action/French.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/French.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Automator action/German.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/German.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | /Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Plugins/SwisscomXtraZoneCH/Swisscom Xtra-Zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Plugins/SwisscomXtraZoneCH/Swisscom Xtra-Zone.png -------------------------------------------------------------------------------- /Resources/SwissSMS Help/SwissSMS Help.helpindex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Resources/SwissSMS Help/SwissSMS Help.helpindex -------------------------------------------------------------------------------- /Address Book plugin/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Address Book plugin/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/fr.lproj: -------------------------------------------------------------------------------- 1 | /Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj -------------------------------------------------------------------------------- /Address Book plugin/English.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Address Book plugin/English.lproj/Localizable.strings -------------------------------------------------------------------------------- /Address Book plugin/French.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Address Book plugin/French.lproj/Localizable.strings -------------------------------------------------------------------------------- /Address Book plugin/German.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Address Book plugin/German.lproj/Localizable.strings -------------------------------------------------------------------------------- /Automator action/English.lproj/main.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/English.lproj/main.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Automator action/French.lproj/main.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/French.lproj/main.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Automator action/German.lproj/main.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Automator action/German.lproj/main.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/relaunch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch -------------------------------------------------------------------------------- /Resources/Credits.html: -------------------------------------------------------------------------------- 1 |
http://swisssms.googlecode.com/
2 | -------------------------------------------------------------------------------- /SSSender.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | //#import 5 | -------------------------------------------------------------------------------- /Scripts/signcode.sh: -------------------------------------------------------------------------------- 1 | 2 | if [ $ACTION == "build" ] && [ $BUILD_STYLE == "Release" ]; then 3 | codesign -s SwissSMS --force "$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME" 4 | exit $? 5 | fi 6 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /PluginTemplate/MyServiceCH.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | 5 | @interface MyServiceCH : AbstractSender { 6 | } 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Automator action/Send SMS_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Send SMS' target in the 'Send SMS' project. 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /PluginTemplate/SwissSMSPlugin_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'SwissSMSPlugin' target in the 'SwissSMSPlugin' project. 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /Plugins/NetAppelINT/NetAppelINT.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "AbstractSender.h" 3 | 4 | @interface NetAppelINT : AbstractSender { 5 | NSString *cachedLogin; 6 | NSString *cachedPassword; 7 | } 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Plugins/ETHCH/ETHCH.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "AbstractSender.h" 3 | 4 | @interface ETHCH : AbstractSender { 5 | NSString *cachedLogin; 6 | NSString *cachedPassword; 7 | NSString *session; 8 | } 9 | 10 | @end 11 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/SwissSMS/master/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Plugins/CitycableCH/CitycableCH.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "AbstractSender.h" 3 | 4 | @interface CitycableCH : AbstractSender { 5 | NSString *cachedLogin; 6 | NSString *cachedPassword; 7 | NSString *session; 8 | } 9 | 10 | @end 11 | -------------------------------------------------------------------------------- /Address Book plugin/SwissSMSABPlugin_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'SwissSMSABPlugin' target in the 'SwissSMSABPlugin' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #endif 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | build/* 3 | *.pbxuser 4 | !default.pbxuser 5 | *.mode1v3 6 | !default.mode1v3 7 | *.mode2v3 8 | !default.mode2v3 9 | *.perspectivev3 10 | !default.perspectivev3 11 | *.xcworkspace 12 | !default.xcworkspace 13 | xcuserdata 14 | profile 15 | *.moved-aside 16 | -------------------------------------------------------------------------------- /Plugins/MjoyINT/MjoyINT.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "AbstractSender.h" 3 | 4 | @interface MjoyINT : AbstractSender { 5 | int sentMessages; 6 | NSString *cachedLogin; 7 | NSString *cachedPassword; 8 | NSHTTPCookieAcceptPolicy userCookiePolicy; 9 | NSString *sid; 10 | } 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /SwissSMSUpdater.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMSUpdater.h 3 | // SwissSMS 4 | // 5 | // Created by Cédric Luthi on 4/6/08. 6 | // Copyright 2008 Cédric Luthi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface SwissSMSUpdater : SUUpdater { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /MyPerson.h: -------------------------------------------------------------------------------- 1 | // 2 | // MyPerson.h 3 | // BindingCategory 4 | // 5 | // Created by Nicolas Seriot on 07.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ABPerson (SwissSMS) { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Plugins/hispeedCH/HispeedCH.h: -------------------------------------------------------------------------------- 1 | // 2 | // HispeedCH.h 3 | // SwissSMS 4 | // 5 | // Created by Cédric Luthi on 20.10.07. 6 | // Copyright 2007 Cédric Luthi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | 12 | 13 | @interface HispeedCH : AbstractSender { 14 | 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /PhoneNumberFormatTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // PhoneNumberFormatTest.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 18.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface PhoneNumberFormatTest : SenTestCase { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FlagImageTransformer.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlagImageTransformer.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 25.05.07. 6 | // Copyright 2007 Sen:te SA. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface FlagImageTransformer : NSValueTransformer { 13 | NSImage *flaggedImage; 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Plugins/YalloCH/YalloCH.h: -------------------------------------------------------------------------------- 1 | // 2 | // YalloCH.h 3 | // SwissSMS 4 | // 5 | // Created by Andre Anjos, 11.08.2008 6 | // Copyright 2008 Andre Anjos. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | 12 | 13 | @interface YalloCH : AbstractSender { 14 | int mAvailableSMS; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Plugins/RomandieCH/RomandieCH.h: -------------------------------------------------------------------------------- 1 | // 2 | // RomandieCH.h 3 | // SMSRomandie 4 | // 5 | // Created by Nicolas Seriot on 08.11.06. 6 | // Copyright 2006 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | #import "HTMLForm.h" 12 | 13 | @interface RomandieCH : AbstractSender { 14 | 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /NSDictionary+SMSSender.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+SMSSender.h 3 | // SMSRomandie 4 | // 5 | // Created by Nicolas Seriot on 24.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSDictionary (SMSSender) 13 | 14 | - (NSData *)formDataWithEncoding:(NSStringEncoding)encoding; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Plugins/SwisscomXtraZoneCH/SwisscomXtraZoneCH.h: -------------------------------------------------------------------------------- 1 | // 2 | // SMSSwisscomSender.h 3 | // SMSSwisscomSender 4 | // 5 | // Created by Nicolas Seriot on 27.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | 12 | 13 | @interface SwisscomXtraZoneCH : AbstractSender { 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /NSFileManager_SwissSMS.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileManager_SwissSMS.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 25.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSFileManager (SwissSMS) 13 | 14 | - (BOOL)copyResource:(NSString *)sourcePath toChosenDestination:(NSString *)defaultDir; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /NSURL+SMSSender.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+SMSSender.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 30.03.09. 6 | // Copyright 2009 Sen:te. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSURL (SMSSender) 13 | 14 | - (NSData *)dataWithUserAgent:(NSString *)userAgent; 15 | - (NSString *)stringWithUserAgent:(NSString *)userAgent; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /SwissSMS_AppDelegate+Export.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMS_AppDelegate+Export.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 15.10.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SwissSMS_AppDelegate.h" 11 | 12 | @interface SwissSMS_AppDelegate (Export) 13 | 14 | - (IBAction)exportToBluePhoneElite:sender; 15 | - (IBAction)exportToCSV:sender; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /NSManagedObjectContext+Metadata.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSManagedObjectContext+Metadata.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 20.06.08. 6 | // Copyright 2008 Sen:te. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSManagedObjectContext (Metadata) 13 | 14 | - (BOOL)saveWithMetadata:(NSError **)error; 15 | - (BOOL)saveWithMetadata:(NSError **)error allItems:(BOOL)allItems; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /ABPerson_SwissSMS_AIM.h: -------------------------------------------------------------------------------- 1 | // 2 | // ABPerson_SwissSMS.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 02.10.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ABPerson (SwissSMS_AIM) 13 | 14 | - (NSNumber *)aimStatus; 15 | - (NSString *)aimScreenName; 16 | - (NSImage *)imageDataForCurrentIMStatus; 17 | 18 | @end 19 | 20 | 21 | -------------------------------------------------------------------------------- /version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildVersion 6 | 18 7 | CFBundleVersion 8 | 1.0 9 | ProjectName 10 | NibPBTemplates 11 | SourceVersion 12 | 1200000 13 | 14 | 15 | -------------------------------------------------------------------------------- /Plugins/SunriseCH/SunriseCH.h: -------------------------------------------------------------------------------- 1 | // 2 | // SMSSunriseSender.h 3 | // SwissSMS 4 | // 5 | // Created by Christian Rueegg on 30.04.07. 6 | // Copyright 2007 Christian Rueegg. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | 12 | 13 | @interface SunriseCH : AbstractSender { 14 | int mAvailableSMS; 15 | NSString *mCookie; 16 | } 17 | 18 | + (NSString *)cookieFromHTTPResponse:(NSHTTPURLResponse *)response; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Automator action/Send SMS.h: -------------------------------------------------------------------------------- 1 | // 2 | // Send SMS.h 3 | // Send SMS 4 | // 5 | // Created by Administrator on 19.09.07. 6 | // Copyright 2007 Cédric Luthi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface Send_SMS : AMBundleAction 13 | { 14 | NSString *swisssms_executable_path; 15 | } 16 | 17 | - (id)runWithInput:(id)input fromAction:(AMAction *)anAction error:(NSDictionary **)errorInfo; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /NSString_SwissSMS.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString_SwissSMS.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 09.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | 13 | @interface NSString (SwissSMS) 14 | 15 | + (NSString *) bluePhoneEliteExportFilePath; 16 | + (NSString *) uuid; 17 | 18 | //- (NSString *)removeCharsInSet:(NSCharacterSet *)set; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /SSVersionCheck.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LatestVersion 6 | 1.9.0 7 | PageURL 8 | http://code.google.com/p/swisssms/ 9 | DownloadURL 10 | http://swisssms.googlecode.com/files/SwissSMS_1_9_0.app.zip 11 | 12 | 13 | -------------------------------------------------------------------------------- /NSWorkspace_SwissSMS.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSWorkspace_SwissSMS.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 03.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSWorkspace (SwissSMS) 13 | 14 | - (OSStatus) quitApplicationWithBundleID:(NSString*)bundleID; 15 | - (BOOL)appIsRunning:(NSString *)appName; 16 | 17 | - (void)openIMClientForScreenName:(NSString *)screenName message:(NSString *)message; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /IMService_TigerCompat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * IMService_TigerCompat.h 3 | * SwissSMS 4 | * 5 | * Created by Cédric Luthi on 22.11.07. 6 | * Copyright 2007 Cédric Luthi. All rights reserved. 7 | * 8 | */ 9 | 10 | #import 11 | 12 | // Silence warning: ‘IMService’ may not respond to ‘+imageNameForStatus:’ when compiling on Tiger with MacOSX10.4u SDK 13 | @interface IMService (TigerCompat) 14 | 15 | #if (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4) 16 | + (NSString *)imageNameForStatus:(IMPersonStatus)status; 17 | #endif 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9D34 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Plugins/OrangeCH/OrangeCH.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "AbstractSender.h" 3 | 4 | @interface OrangeCH : AbstractSender { 5 | NSUInteger nbSentMessages; 6 | NSString *cachedLogin; 7 | NSString *cachedPassword; 8 | NSString *token; 9 | NSHTTPCookieAcceptPolicy userCookiePolicy; 10 | 11 | NSString *sunQueryParamsString; 12 | } 13 | 14 | @property (nonatomic, retain) NSString *cachedLogin; 15 | @property (nonatomic, retain) NSString *cachedPassword; 16 | @property (nonatomic, retain) NSString *token; 17 | @property (nonatomic, retain) NSString *sunQueryParamsString; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /SSRecipient.h: -------------------------------------------------------------------------------- 1 | // 2 | // SSRecipient.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 12.10.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AbstractSender.h" 11 | 12 | @protocol SSRecipientProtocol 13 | -(NSData *)imageData; 14 | -(NSString *)phone; 15 | -(NSString *)name; 16 | @end 17 | 18 | @interface SSRecipient : NSObject { 19 | } 20 | 21 | +(id ) findRecipientFromObject:(id)o sender:(AbstractSender *)sender; 22 | +(id ) findRecipientFromObject:(id)o; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | 6 12 | 13 | IBSystem Version 14 | 9D34 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /SwissSMS_AppDelegate+Toolbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMS_AppDelegate+Toolbar.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 26.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SwissSMS_AppDelegate.h" 11 | 12 | @interface SwissSMS_AppDelegate (Toolbar) 13 | 14 | - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar 15 | itemForItemIdentifier:(NSString *)itemIdentifier 16 | willBeInsertedIntoToolbar:(BOOL)flag; 17 | - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar; 18 | - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SPARKLE_H 10 | #define SPARKLE_H 11 | 12 | // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless 13 | // there are name-space collisions) so we can list all of them to start with: 14 | 15 | #import 16 | 17 | #import 18 | #import 19 | #import 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | IBSystem Version 14 | 9E17 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /PluginTemplate/MyServiceCH.m: -------------------------------------------------------------------------------- 1 | #import "MyServiceCH.h" 2 | 3 | @implementation MyServiceCH 4 | 5 | - (SecProtocolType)serviceProtocol { 6 | return kSecProtocolTypeHTTPS; 7 | } 8 | 9 | - (NSString *)serviceServerName { 10 | return @"www.myservice.ch"; 11 | } 12 | 13 | - (SwissSMSSendingStatus)login:(NSString *)login password:(NSString *)password { 14 | return SS_LOGIN_ERROR; 15 | } 16 | 17 | - (SwissSMSSendingStatus)sendOneMessage:(NSString *)message toNumber:(NSString *)number { 18 | return SS_SENDING_ERROR; 19 | } 20 | 21 | // returns a valid phone number for the service, else return nil 22 | - (NSString *)normalizePhoneNumber:(NSString *)rawString { 23 | return nil; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ch.seriot.SwissSMS.Tests 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9E17 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 18 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBDocumentLocation 6 | 69 14 356 240 0 0 1280 778 7 | IBFramework Version 8 | 489.0 9 | IBLastKnownRelativeProjectPath 10 | ../Sparkle.xcodeproj 11 | IBOldestOS 12 | 5 13 | IBSystem Version 14 | 9D34 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /SSSender-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ch.seriot.SwissSMS.SSSender 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | FMWK 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9E17 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /NSString+SMSSender.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+SMSSender.h 3 | // SMSRomandie 4 | // 5 | // Created by Nicolas Seriot on 24.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface NSString (SMSSender) 13 | 14 | - (NSString *) normalizedSwissGSMPhoneNumber ; 15 | //- (NSString *)normalizedFrenchNumber; 16 | - (NSString *)normalizedInternationalNumberWithZero; // 0033791234567 17 | - (NSString *)normalizedInternationalNumberWithPlus; // +33791234567 18 | 19 | - (NSString *)escapeWithEncoding:(NSStringEncoding)encoding; 20 | - (NSString *) stringByRemovingCharactersFromSet:(NSCharacterSet *) set; 21 | 22 | + (NSSet *) swissGSMPrefixes; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 658 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9C7010 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 5 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 41 15 | 16 | IBSystem Version 17 | 10A96 18 | targetFramework 19 | IBCocoaFramework 20 | 21 | 22 | -------------------------------------------------------------------------------- /Message.h: -------------------------------------------------------------------------------- 1 | // 2 | // Message.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 07.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface Message : NSManagedObject 13 | { 14 | } 15 | 16 | +(Message *)messageWithText:(NSString *)text name:(NSString *)name phone:(NSString *)phone context:(NSManagedObjectContext *)context; 17 | 18 | +(NSArray *)allObjectsInContext:(NSManagedObjectContext *)moc; 19 | +(unsigned)messagesCountInContext:(NSManagedObjectContext *)moc; 20 | 21 | -(NSDictionary *)bluePhoneEliteFormatAndRemove:(BOOL)remove; 22 | -(NSString *)csvLine; 23 | -(ABPerson *)guessedPerson; 24 | 25 | -(void)toggleFlag; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /KeychainAccess.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeychainAccess.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 05.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #include 12 | 13 | @interface KeychainAccess : NSObject { 14 | 15 | } 16 | 17 | + (NSString *)internetHTMLFormPasswordForServer:(NSString *)serverName protocol:(SecProtocolType)protocol keychainItem:(SecKeychainItemRef *)keychainItem notFound:(BOOL *)notFound; 18 | + (NSString *)loginForItem:(SecKeychainItemRef)keychainItem; 19 | 20 | + (void)addInternetHTMLFormPasswordForServer:(NSString *)serverName login:(NSString *)login password:(NSString *)password protocol:(SecProtocolType)protocol; 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /FlagImageTransformer.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlagImageTransformer.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 25.05.07. 6 | // Copyright 2007 Sen:te SA. All rights reserved. 7 | // 8 | 9 | #import "FlagImageTransformer.h" 10 | 11 | 12 | @implementation FlagImageTransformer 13 | 14 | + (Class)transformedValueClass { 15 | return [NSImage class]; 16 | } 17 | 18 | + (BOOL)allowsReverseTransformation { 19 | return NO; 20 | } 21 | 22 | -(id)init { 23 | [super init]; 24 | 25 | flaggedImage = [NSImage imageNamed:@"Flagged.png"]; 26 | 27 | return self; 28 | } 29 | 30 | -(void)dealloc { 31 | [flaggedImage release]; 32 | [super dealloc]; 33 | } 34 | 35 | - (id)transformedValue:(NSNumber *)value { 36 | return [value boolValue] ? flaggedImage : nil; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /ABPerson_SwissSMS.h: -------------------------------------------------------------------------------- 1 | // 2 | // ABPerson_SwissSMS.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 08.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @interface ABPerson (SwissSMS) 14 | 15 | + (NSArray *)personsWithMobilePhone; 16 | 17 | - (NSString *)fullname; 18 | - (NSString *)mobilePhoneNumber; // not normalized 19 | - (NSString *)phone; // normalized 20 | 21 | // TODO enable use of groups 22 | + (ABPerson *)personFromFullname:(NSString *)fullName mobilePhone:(NSString *)phone sender:(AbstractSender *)sender; 23 | + (ABPerson *)personFromFullname:(NSString *)fullName mobilePhone:(NSString *)phone; 24 | + (ABPerson *)personFromUniqueId:(NSString *)uid; 25 | 26 | @end 27 | 28 | 29 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcast.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCAST_H 10 | #define SUAPPCAST_H 11 | 12 | @class SUAppcastItem; 13 | @interface SUAppcast : NSObject { 14 | NSArray *items; 15 | NSString *userAgentString; 16 | id delegate; 17 | NSMutableData *incrementalData; 18 | } 19 | 20 | - (void)fetchAppcastFromURL:(NSURL *)url; 21 | - (void)setDelegate:delegate; 22 | - (void)setUserAgentString:(NSString *)userAgentString; 23 | 24 | - (NSArray *)items; 25 | 26 | @end 27 | 28 | @interface NSObject (SUAppcastDelegate) 29 | - (void)appcastDidFinishLoading:(SUAppcast *)appcast; 30 | - (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; 31 | @end 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | Sparkle 9 | CFBundleIdentifier 10 | org.andymatuschak.Sparkle 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | Sparkle 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.5 Beta 6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 313 23 | 24 | 25 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | /*! 13 | @protocol 14 | @abstract Implement this protocol to provide version comparison facilities for Sparkle. 15 | */ 16 | @protocol SUVersionComparison 17 | 18 | /*! 19 | @method 20 | @abstract An abstract method to compare two version strings. 21 | @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. 22 | */ 23 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 24 | 25 | @end 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /NSFileManager_SwissSMS.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileManager_SwissSMS.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 25.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "NSFileManager_SwissSMS.h" 10 | 11 | 12 | @implementation NSFileManager (SwissSMS) 13 | 14 | - (BOOL)copyResource:(NSString *)sourcePath toChosenDestination:(NSString *)defaultDir { 15 | NSFileManager *fm = [NSFileManager defaultManager]; 16 | 17 | BOOL isDir; 18 | BOOL fileExists = [fm fileExistsAtPath:defaultDir isDirectory:&isDir]; 19 | if(!fileExists) { 20 | [fm createDirectoryAtPath:defaultDir attributes:nil]; 21 | } 22 | 23 | NSString *destPath = [defaultDir stringByAppendingPathComponent:[sourcePath lastPathComponent]]; 24 | 25 | if ([fm fileExistsAtPath:sourcePath]) { 26 | [fm removeFileAtPath:destPath handler:nil]; 27 | return [fm copyPath:sourcePath toPath:destPath handler:nil]; 28 | } else { 29 | return NO; 30 | } 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Address Book plugin/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.abplugin.sendsms 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleSignature 20 | SwSm 21 | CFBundleShortVersionString 22 | ${SHORT_VERSION_STRING} 23 | CFBundleVersion 24 | 0 25 | NSPrincipalClass 26 | SwissSMSABPlugin 27 | 28 | 29 | -------------------------------------------------------------------------------- /SwissSMSUpdater.m: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMSUpdater.m 3 | // SwissSMS 4 | // 5 | // Created by Cédric Luthi on 4/6/08. 6 | // Copyright 2008 Cédric Luthi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SwissSMSUpdater.h" 11 | #import 12 | //#import 13 | 14 | 15 | @implementation SwissSMSUpdater 16 | 17 | // The Sparkle 1.1 implementation compares the version in the appcast ([updateItem fileVersion]) 18 | // to host app "version" (CFBundleVersion). But for SwissSMS CFBundleVersion is the svn revision number. 19 | // We want to compare the appcast version to the dotted version of SwissSMS which lies in CFBundleShortVersionString. 20 | // Original implementation: 21 | // return SUStandardVersionComparison([updateItem fileVersion], SUHostAppVersion()) == NSOrderedAscending; 22 | - (BOOL)newVersionAvailable 23 | { 24 | return NO;//SUStandardVersionComparison([updateItem fileVersion], SUInfoValueForKey(@"CFBundleShortVersionString")) == NSOrderedAscending; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /SwissSMS_AppDelegate+TokenField.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMS_AppDelegate+TokenField.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 08.10.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SwissSMS_AppDelegate.h" 11 | 12 | @interface SwissSMS_AppDelegate (TokenField) 13 | 14 | - (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int *)selectedIndex; 15 | - (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject; 16 | //- (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject; 17 | //- (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject; 18 | - (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString:(NSString *)editingString; 19 | - (NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(unsigned)index; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006 Andy Matuschak 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /PluginTemplate/README.txt: -------------------------------------------------------------------------------- 1 | SwissSMS plug-in template 2 | ------------------------- 3 | 4 | 1. rename classes according to your service, suffix with the country code 5 | 6 | MyServiceCH.h -> BouygesFR.h 7 | MyServiceCH.m -> BouygesFR.m 8 | 9 | 2. edit and rename the service image 10 | 11 | MyServiceCH.png -> BouygesFR.png 12 | 13 | 3. edit Info.plist 14 | 15 | CFBundleIdentifier 16 | fr.free.toto.Bouyges.fr 17 | 18 | NSPrincipalClass 19 | BouygesFR 20 | 21 | SSPAuthor 22 | Jean-Pierre Boulet 23 | 24 | SSPCountryCode 25 | fr 26 | 27 | SSPMaxChars 28 | 150 (change into the right value..) 29 | 30 | SSPName 31 | BouygesFR 32 | 33 | SSPNeedsAuthentication 34 | true 35 | 36 | SSPVersion 37 | 0.1 (increment this value each time you release a new version for your plugin) 38 | 39 | SSPWebSite 40 | http://toto.free.fr/my_plugins_page 41 | 42 | 3. rename Target and product 43 | 44 | Targets > MyServiceCH > rename -> BouygesFR 45 | BouygesFR > Info > ProductName: MyServiceCH -> BouygesFR 46 | 47 | 4. put your plugin in "~/Library/Application Support/SwissSMS/PlugIns/" 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /NSDictionary+SMSSender.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+SMSSender.m 3 | // SMSRomandie 4 | // 5 | // Created by Nicolas Seriot on 24.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "NSDictionary+SMSSender.h" 10 | #import "NSString+SMSSender.h" 11 | 12 | @implementation NSDictionary (SMSSender) 13 | 14 | - (NSData *)formDataWithEncoding:(NSStringEncoding)encoding { 15 | NSArray *allKeys = [self allKeys]; 16 | NSMutableArray *keyAndValues = [NSMutableArray arrayWithCapacity:[allKeys count]]; 17 | 18 | NSEnumerator *e = [allKeys objectEnumerator]; 19 | NSString *dictKey; 20 | while((dictKey = [e nextObject])){ 21 | 22 | NSString *encodedKey = [dictKey escapeWithEncoding:encoding]; 23 | NSString *encodedValue = [(NSString *)[self objectForKey:dictKey] escapeWithEncoding:encoding]; 24 | 25 | NSString *keyAndValue = [NSString stringWithFormat:@"%@=%@", encodedKey, encodedValue]; 26 | 27 | [keyAndValues addObject:keyAndValue]; 28 | } 29 | 30 | NSString *s = [keyAndValues componentsJoinedByString:@"&"]; 31 | return [s dataUsingEncoding:NSASCIIStringEncoding]; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /SSRecipient.m: -------------------------------------------------------------------------------- 1 | // 2 | // SSRecipient.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 12.10.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "SSRecipient.h" 10 | #import "ABPerson_SwissSMS.h" 11 | #import "NSString_SwissSMS.h" 12 | #import "AbstractSender.h" 13 | 14 | @implementation SSRecipient 15 | 16 | +(id ) findRecipientFromObject:(id)o sender:(AbstractSender *)sender { 17 | NSObject *p; 18 | 19 | if([o isKindOfClass:[ABPerson class]]) { 20 | return o; 21 | } else if ([o isKindOfClass:[NSString class]]) { 22 | p = [ABPerson personFromUniqueId:o]; if(p) { return p; } 23 | p = [ABPerson personFromFullname:o mobilePhone:o sender:sender]; if(p) { return p; } 24 | p = [sender normalizePhoneNumber:o]; if(p) { return p; } 25 | } 26 | 27 | return nil; 28 | } 29 | 30 | +(id ) findRecipientFromObject:(id)o { 31 | AbstractSender *sender = [[NSApp delegate] valueForKey:@"smsSender"]; 32 | return [SSRecipient findRecipientFromObject:o sender:sender]; 33 | } 34 | 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /NSURL+SMSSender.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSURL+SMSSender.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 30.03.09. 6 | // Copyright 2009 Sen:te. All rights reserved. 7 | // 8 | 9 | #import "NSURL+SMSSender.h" 10 | 11 | 12 | @implementation NSURL (SMSSender) 13 | 14 | - (NSData *)dataWithUserAgent:(NSString *)userAgent { 15 | NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:self cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0]; 16 | NSHTTPURLResponse *response; 17 | [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; 18 | NSError *connectionError = nil; 19 | NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&connectionError]; 20 | [request release]; 21 | 22 | if (connectionError) { 23 | NSLog(@"-- error while retrieving %@: %@", self, [connectionError localizedDescription]); 24 | return nil; 25 | } 26 | 27 | return data; 28 | } 29 | 30 | - (NSString *)stringWithUserAgent:(NSString *)userAgent { 31 | NSData *data = [self dataWithUserAgent:userAgent]; 32 | if(!data) return nil; 33 | return [[[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] autorelease]; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Scripts/svnrevision.sh: -------------------------------------------------------------------------------- 1 | export PATH=/opt/local/bin:/usr/local/bin:/sw/bin/:$PATH 2 | 3 | if [ $ACTION == "build" ]; then 4 | revision=`svnversion` 5 | 6 | if [ $BUILD_STYLE == "Release" ]; then 7 | errorLevel="warning"#"error" 8 | else 9 | errorLevel="warning" 10 | fi 11 | 12 | warned=0 13 | 14 | if echo $revision | grep -q : 15 | then 16 | echo "$errorLevel: mixed revision working copy ($revision)" 17 | warned=1 18 | fi 19 | 20 | if echo $revision | grep -q M && [ $warned -eq 0 ] 21 | then 22 | echo "$errorLevel: modified working copy ($revision)" 23 | warned=1 24 | fi 25 | 26 | if echo $revision | grep -q S && [ $warned -eq 0 ] 27 | then 28 | echo "$errorLevel: switched working copy ($revision)" 29 | warned=1 30 | fi 31 | 32 | if [ $warned -eq 1 ] && [ $errorLevel == "error" ] 33 | then 34 | exit 1 35 | fi 36 | 37 | perl -i -pe "undef $/; s{(CFBundleVersion.*?).*?}{\\1$revision}s" "$CONFIGURATION_BUILD_DIR/$INFOPLIST_PATH" 38 | exitCode=$? 39 | 40 | if [ $exitCode -ne 0 ]; then 41 | echo "error: could not set CFBundleVersion ($exitCode)" 42 | exit $exitCode 43 | fi 44 | 45 | echo $revision > "$DERIVED_FILE_DIR/revision" 46 | fi 47 | -------------------------------------------------------------------------------- /MyPerson.m: -------------------------------------------------------------------------------- 1 | // 2 | // MyPerson.m 3 | // BindingCategory 4 | // 5 | // Created by Nicolas Seriot on 07.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "MyPerson.h" 10 | 11 | 12 | @implementation ABPerson (SwissSMS) 13 | 14 | // http://www.cocoabuilder.com/archive/message/cocoa/2007/5/6/182892 15 | - (id) valueForKeyPath: (NSString*) keyPath { 16 | NSArray *path = [keyPath componentsSeparatedByString: @"."]; 17 | unsigned i, max; 18 | max = [path count]; 19 | id value = self; 20 | for ( i = 0; i < max; i++ ) { 21 | value = [value valueForKey: [path objectAtIndex: i]]; 22 | } 23 | return value; 24 | } 25 | 26 | //- (void) setImageData:(NSData *)data { 27 | // [super setImageData:data]; 28 | //} 29 | 30 | // #warning might break 31 | // http://www.cocoabuilder.com/archive/message/cocoa/2004/5/8/106572 32 | - (void) encodeWithCoder:(NSCoder *) coder { 33 | [coder encodeDataObject:[self vCardRepresentation]]; 34 | } 35 | 36 | - (id) initWithCoder:(NSCoder *)decoder; { 37 | self=[self init]; // this call assigns a uniqueId 38 | self=[self initWithVCardRepresentation:[decoder decodeDataObject]]; 39 | return self; 40 | } 41 | 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | { 2 | IBClasses = ( 3 | { 4 | CLASS = FirstResponder; 5 | LANGUAGE = ObjC; 6 | SUPERCLASS = NSObject; 7 | }, 8 | { 9 | CLASS = NSApplication; 10 | LANGUAGE = ObjC; 11 | SUPERCLASS = NSResponder; 12 | }, 13 | { 14 | CLASS = NSObject; 15 | LANGUAGE = ObjC; 16 | }, 17 | { 18 | ACTIONS = { 19 | installUpdate = id; 20 | remindMeLater = id; 21 | skipThisVersion = id; 22 | }; 23 | CLASS = SUUpdateAlert; 24 | LANGUAGE = ObjC; 25 | OUTLETS = { 26 | delegate = id; 27 | description = NSTextField; 28 | releaseNotesView = WebView; 29 | }; 30 | SUPERCLASS = SUWindowController; 31 | }, 32 | { 33 | CLASS = SUWindowController; 34 | LANGUAGE = ObjC; 35 | SUPERCLASS = NSWindowController; 36 | } 37 | ); 38 | IBVersion = 1; 39 | } -------------------------------------------------------------------------------- /MDImporter/schema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 12 | 13 | kMDItemContentCreationDate 14 | kMDItemRecipients 15 | kMDItemTextContent 16 | 17 | 18 | 19 | kMDItemContentCreationDate 20 | kMDItemRecipients 21 | kMDItemTextContent 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcastItem.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCASTITEM_H 10 | #define SUAPPCASTITEM_H 11 | 12 | @interface SUAppcastItem : NSObject { 13 | NSString *title; 14 | NSDate *date; 15 | NSString *itemDescription; 16 | 17 | NSURL *releaseNotesURL; 18 | 19 | NSString *DSASignature; 20 | NSString *minimumSystemVersion; 21 | 22 | NSURL *fileURL; 23 | NSString *versionString; 24 | NSString *displayVersionString; 25 | 26 | NSDictionary *propertiesDictionary; 27 | } 28 | 29 | // Initializes with data from a dictionary provided by the RSS class. 30 | - initWithDictionary:(NSDictionary *)dict; 31 | 32 | - (NSString *)title; 33 | - (NSString *)versionString; 34 | - (NSString *)displayVersionString; 35 | - (NSDate *)date; 36 | - (NSString *)itemDescription; 37 | - (NSURL *)releaseNotesURL; 38 | - (NSURL *)fileURL; 39 | - (NSString *)DSASignature; 40 | - (NSString *)minimumSystemVersion; 41 | 42 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 43 | - (NSDictionary *)propertiesDictionary; 44 | 45 | @end 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /NSString_SwissSMS.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString_SwissSMS.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 09.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "NSString_SwissSMS.h" 10 | #import "AbstractSender.h" 11 | 12 | 13 | @implementation NSString (SwissSMS) 14 | 15 | + (NSString *)bluePhoneEliteExportFilePath { 16 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); 17 | NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory(); 18 | NSArray *pathComponents = [NSArray arrayWithObjects:basePath, @"BluePhoneElite", @"SMS Archive", @"Local", @"contents.plist", nil]; 19 | 20 | return [pathComponents componentsJoinedByString:@"/"]; 21 | } 22 | 23 | -(NSString *)name { 24 | return self; 25 | } 26 | 27 | -(NSString *)phone { 28 | return [(AbstractSender *)[[NSApp delegate] valueForKey:@"smsSender"] normalizePhoneNumber:self]; 29 | } 30 | 31 | -(NSData *)imageData { 32 | return nil; 33 | } 34 | 35 | -(NSData *)imageDataForCurrentIMStatus { 36 | return nil; 37 | } 38 | 39 | + (NSString *) uuid { 40 | CFUUIDRef uuidRef = CFUUIDCreate(nil); 41 | NSString *newUUID = (NSString *)CFUUIDCreateString(nil, uuidRef); 42 | CFRelease(uuidRef); 43 | return [newUUID autorelease]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Address Book plugin/SwissSMSABPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMSABPlugin.h 3 | // SwissSMSABPlugin 4 | // 5 | // Created by Cédric Luthi on 18.11.07. 6 | // Copyright Cédric Luthi 2007. All rights reserved. 7 | // 8 | 9 | #import 10 | //#import "SwissSMSABPlugin.h" 11 | 12 | @interface SwissSMSABPlugin : NSObject 13 | { 14 | } 15 | 16 | // Returns the property this action is for. 17 | - (NSString *)actionProperty; 18 | 19 | // Returns the title for this action. The current person is passed in as person. 20 | // If the actionProperty is a multiValue type, identifier will contain the identifier 21 | // of the item the user rolled over. If the actionProperty is not a multiValue type 22 | // identifier will be nil. 23 | - (NSString *)titleForPerson:(ABPerson *)person identifier:(NSString *)identifier; 24 | 25 | // This method is called when the user selects your action. As above, this method 26 | // is passed information about the data item rolled over. 27 | - (void)performActionForPerson:(ABPerson *)person identifier:(NSString *)identifier; 28 | 29 | // Optional. Your action will always be enabled in the absence of this method. As 30 | // above, this method is passed information about the data item rolled over. 31 | - (BOOL)shouldEnableActionForPerson:(ABPerson *)person identifier:(NSString *)identifier; 32 | 33 | @end 34 | 35 | -------------------------------------------------------------------------------- /Plugins/RomandieCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleName 10 | ${PRODUCT_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | ch.seriot.SwissSMS.RomandieCH 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | RomandieCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 153 33 | SSPName 34 | Romandie 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 1.0 39 | SSPWebSite 40 | http://www.seriot.ch 41 | 42 | 43 | -------------------------------------------------------------------------------- /PluginTemplate/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.MyServiceCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | MyServiceCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | John Doe 29 | SSPCountryCode 30 | ch 31 | SSPMaxChars 32 | 150 33 | SSPName 34 | MyServiceCH 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | http://www.your_website.ch/MyServiceCH_download__page 41 | 42 | 43 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Plugins/ETHCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.belfrage.SwissSMS.ETHCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | ETHCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Michael Belfrage 29 | SSPCountryCode 30 | CH 31 | SSPKProtocol 32 | https 33 | SSPKServer 34 | www.ethz.ch 35 | SSPMaxChars 36 | 159 37 | SSPName 38 | ETH 39 | SSPNeedsAuthentication 40 | 41 | SSPSignupPage 42 | http://www.ethz.ch 43 | SSPVersion 44 | 0.1 45 | 46 | 47 | -------------------------------------------------------------------------------- /Plugins/MjoyINT/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.MjoyINT 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | MjoyINT 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 133 33 | SSPName 34 | Mjoy 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | http://www.seriot.ch 41 | SSPKProtocol 42 | http 43 | SSPKServer 44 | http://mjoy.com 45 | SSPSignupPage 46 | http://mjoy.com 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/SunriseCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.SunriseCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | SunriseCH 25 | SSPAPIVersion 26 | 1.3 27 | SSPAuthor 28 | Christian Rüegg 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 160 33 | SSPName 34 | Sunrise 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 1.3 39 | SSPWebSite 40 | 41 | SSPKProtocol 42 | 43 | SSPKServer 44 | mip.sunrise.ch 45 | SSPSignupPage 46 | http://mip.sunrise.ch 47 | 48 | 49 | -------------------------------------------------------------------------------- /MDImporter/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDocumentTypes 8 | 9 | 10 | CFBundleTypeRole 11 | MDImporter 12 | LSItemContentTypes 13 | 14 | ch.seriot.swisssms 15 | 16 | 17 | 18 | CFBundleExecutable 19 | ${EXECUTABLE_NAME} 20 | CFBundleIconFile 21 | 22 | CFBundleIdentifier 23 | ch.seriot.SwissSMS.MDImporter 24 | CFBundleInfoDictionaryVersion 25 | 6.0 26 | CFBundleName 27 | ${PRODUCT_NAME} 28 | CFBundleVersion 29 | 1.0 30 | CFPlugInDynamicRegisterFunction 31 | 32 | CFPlugInDynamicRegistration 33 | NO 34 | CFPlugInFactories 35 | 36 | 3873C3BD-93D3-4B1C-8F8E-17ACBB5A8861 37 | MetadataImporterPluginFactory 38 | 39 | CFPlugInTypes 40 | 41 | 8B08C4BF-415B-11D8-B3F9-0003936726FC 42 | 43 | 3873C3BD-93D3-4B1C-8F8E-17ACBB5A8861 44 | 45 | 46 | CFPlugInUnloadFunction 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Plugins/YalloCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | Yallo.png 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.YalloCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | YalloCH 25 | SSPAPIVersion 26 | 0.2 27 | SSPAuthor 28 | Andre Anjos 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 130 33 | SSPName 34 | Yallo 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | 41 | SSPKProtocol 42 | https 43 | SSPKServer 44 | www.yallo.ch 45 | SSPSignupPage 46 | https://www.yallo.ch/kp/dyn/web/pub/home/home.do 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/OrangeCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.OrangeCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | OrangeCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 133 33 | SSPName 34 | Orange 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.2 39 | SSPWebSite 40 | http://www.seriot.ch 41 | SSPKProtocol 42 | https 43 | SSPKServer 44 | www.orange.ch 45 | SSPSignupPage 46 | https://www.orange.ch/registration 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/CitycableCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.CitycableCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | CitycableCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | CH 31 | SSPKProtocol 32 | https 33 | SSPKServer 34 | www.citycable.ch 35 | SSPMaxChars 36 | 160 37 | SSPName 38 | Citycable 39 | SSPNeedsAuthentication 40 | 41 | SSPSignupPage 42 | http://www.citycable.ch 43 | SSPVersion 44 | 0.1 45 | SSPWebSite 46 | http://www.seriot.ch 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/CoopMobileCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.CoopMobileCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.1 23 | NSPrincipalClass 24 | CoopMobileCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Cédric Luthi 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 112 33 | SSPName 34 | Coop Mobile 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 1.1 39 | SSPWebSite 40 | 41 | SSPKProtocol 42 | 43 | SSPKServer 44 | www.coop.ch 45 | SSPSignupPage 46 | http://www.coop.ch/coopmobile/generate_code.cfm 47 | 48 | 49 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | CLASS 25 | FirstResponder 26 | LANGUAGE 27 | ObjC 28 | SUPERCLASS 29 | NSObject 30 | 31 | 32 | CLASS 33 | NSObject 34 | LANGUAGE 35 | ObjC 36 | 37 | 38 | CLASS 39 | SUStatusController 40 | LANGUAGE 41 | ObjC 42 | OUTLETS 43 | 44 | actionButton 45 | NSButton 46 | progressBar 47 | NSProgressIndicator 48 | 49 | SUPERCLASS 50 | SUWindowController 51 | 52 | 53 | IBVersion 54 | 1 55 | 56 | 57 | -------------------------------------------------------------------------------- /Plugins/PostMailCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.PostMailCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | PostMailCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Cédric Luthi 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 530 33 | SSPName 34 | PostMail 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | 41 | SSPKProtocol 42 | https 43 | SSPKServer 44 | www.postmail.ch 45 | SSPSignupPage 46 | https://login.postmail.ch/postbox/RegistrationNewCustomer.do 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/hispeedCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.HispeedCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.1 23 | NSPrincipalClass 24 | HispeedCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Cédric Luthi 29 | SSPCountryCode 30 | CH 31 | SSPKProtocol 32 | https 33 | SSPKServer 34 | your.hispeed.ch 35 | SSPMaxChars 36 | 160 37 | SSPName 38 | Hispeed 39 | SSPNeedsAuthentication 40 | 41 | SSPVersion 42 | 1.1 43 | SSPWebSite 44 | http://code.google.com/p/swisssms/ 45 | SSPSignupPage 46 | https://registration.hispeed.ch 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/NetAppelINT/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.NetAppelINT 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | NetAppelINT 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | INT 31 | SSPMaxChars 32 | 160 33 | SSPName 34 | NetAppel 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | http://www.seriot.ch 41 | SSPKProtocol 42 | https 43 | SSPKServer 44 | myaccount.netappel.fr 45 | SSPSignupPage 46 | http://www.netappel.fr/fr/websignup.php 47 | 48 | 49 | -------------------------------------------------------------------------------- /Plugins/SwisscomXtraZoneCH/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | ch.seriot.SwissSMS.SwisscomXtraZoneCH 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | SSPl 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | NSPrincipalClass 24 | SwisscomXtraZoneCH 25 | SSPAPIVersion 26 | 0.1 27 | SSPAuthor 28 | Nicolas Seriot 29 | SSPCountryCode 30 | CH 31 | SSPMaxChars 32 | 458 33 | SSPName 34 | Swisscom Xtra-Zone 35 | SSPNeedsAuthentication 36 | 37 | SSPVersion 38 | 0.1 39 | SSPWebSite 40 | 41 | SSPKProtocol 42 | https 43 | SSPKServer 44 | www.swisscom-mobile.ch 45 | SSPSignupPage 46 | https://www.swisscom-mobile.ch/selfreg/login-en.jsp 47 | 48 | 49 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | NSObject 10 | LANGUAGE 11 | ObjC 12 | 13 | 14 | CLASS 15 | SUWindowController 16 | LANGUAGE 17 | ObjC 18 | SUPERCLASS 19 | NSWindowController 20 | 21 | 22 | ACTIONS 23 | 24 | finishPrompt 25 | id 26 | toggleMoreInfo 27 | id 28 | 29 | CLASS 30 | SUUpdatePermissionPrompt 31 | LANGUAGE 32 | ObjC 33 | OUTLETS 34 | 35 | delegate 36 | id 37 | descriptionTextField 38 | NSTextField 39 | moreInfoButton 40 | NSButton 41 | moreInfoView 42 | NSView 43 | 44 | SUPERCLASS 45 | SUWindowController 46 | 47 | 48 | CLASS 49 | FirstResponder 50 | LANGUAGE 51 | ObjC 52 | SUPERCLASS 53 | NSObject 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SwissSMS 2 | ======== 3 | 4 | `Starting from https://code.google.com/p/swisssms/ r509.` 5 | 6 | SwissSMS is a **legacy** Mac OS X front-end to SMS operators services. 7 | 8 | It stores your outgoing messages and can export them too. 9 | 10 | If you can code, then you can easily add support for your own operator! See the API and the plugin template. 11 | 12 | SwissSMS is tightly integrated with Mac OS X and features: 13 | 14 | * Address Book integration 15 | * an Address Book plugin 16 | * an Automator Action 17 | * a Spotlight importer 18 | * a command-line mode (think sending sms from your scripts) 19 | 20 | 2009-10-04: version 1.9.12 21 | - fixed ETHZ plugin (Thomas Steinacher) 22 | - fixed Sunrise plugin (Christian Rüegg) 23 | - fixed Citycable plugin 24 | - faster lookup in Address Book 25 | 26 | 2009-09-22: version 1.9.11 27 | - new ETHZ plugin by Michael Belfrage 28 | - fixed Orange plugin 29 | - fixed a potential crash 30 | 31 | 2009-08-20: version 1.9.10 32 | - fixed Hispeed plugin problem that appeared with Mac OS X 10.5.8 33 | 34 | 2009-08-04: version 1.9.9 35 | - fixed the CoopMobile plugin 36 | 37 | 2009-03-30: version 1.9.8 38 | - new mjoy.com plugin (international) 39 | - fixed memory leaks 40 | 41 | 2009-01-17: version 1.9.7 42 | - fixed Orange plugin 43 | 44 | 2008-12-31: version 1.9.6 45 | - fixed Hispeed plugin problem that appeared with Mac OS X 10.5.6 46 | 47 | 2008-12-01: version 1.9.5 48 | - updated Yallo plugin (A. Anjos) 49 | 50 | Nightly build: [http://seriot.ch/temp/SwissSMS.app.zip](http://seriot.ch/temp/SwissSMS.app.zip) 51 | 52 | ![SwissSMS](https://raw.github.com/nst/SwissSMS/master/swiss_sms_screenshot_small.png) 53 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /PreferencesController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PreferencesController.h 3 | // Simple Preferences 4 | // 5 | // Created by John Devor on 12/24/06. 6 | // 7 | // http://www.indiehig.com/wiki/Preference_Windows 8 | /* 9 | Copyright (c) 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of this software and associated documentation files (the "Software"), to deal 13 | in the Software without restriction, including without limitation the rights 14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | copies of the Software, and to permit persons to whom the Software is 16 | furnished to do so, subject to the following conditions: 17 | 18 | The above copyright notice and this permission notice shall be included in 19 | all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 27 | THE SOFTWARE. 28 | */ 29 | 30 | #import 31 | 32 | 33 | @interface PreferencesController : NSWindowController 34 | { 35 | IBOutlet NSView *generalPreferenceView; 36 | IBOutlet NSView *updatePreferenceView; 37 | IBOutlet NSView *networkPreferenceView; 38 | 39 | IBOutlet NSView *activeContentView; 40 | 41 | NSString *GeneralToolbarItemIdentifier; 42 | NSString *NetworkToolbarItemIdentifier; 43 | NSString *UpdateToolbarItemIdentifier; 44 | } 45 | 46 | + (PreferencesController *)sharedPreferencesController; 47 | 48 | - (void)toggleActivePreferenceView:(id)sender; 49 | - (void)setActiveView:(NSView *)view animate:(BOOL)flag; 50 | 51 | - (IBAction)openKeychainAccessApp:(id)sender; 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /NSManagedObjectContext+Metadata.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSManagedObjectContext+Metadata.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 20.06.08. 6 | // Copyright 2008 Sen:te. All rights reserved. 7 | // 8 | 9 | #import "NSManagedObjectContext+Metadata.h" 10 | #import "Message.h" 11 | 12 | @implementation NSManagedObjectContext (Metadata) 13 | 14 | - (BOOL)saveWithMetadata:(NSError **)error allItems:(BOOL)allItems { 15 | 16 | // ensure metadata directory is present, create it if it is not 17 | // TODO: manage errors 18 | NSString *dir = [[NSApp delegate] valueForKey:@"metadataDirectoryPath"]; 19 | BOOL isDir; 20 | //NSLog(@"-- %d", [[NSFileManager defaultManager] fileExistsAtPath:dir isDirectory:&isDir]); 21 | if(![[NSFileManager defaultManager] fileExistsAtPath:dir isDirectory:&isDir]) { 22 | NSString *topDir = [dir stringByDeletingLastPathComponent]; 23 | //NSLog(@"-- %d", [[NSFileManager defaultManager] fileExistsAtPath:topDir isDirectory:&isDir]); 24 | if(![[NSFileManager defaultManager] fileExistsAtPath:topDir isDirectory:&isDir]) { 25 | BOOL dirCreated = [[NSFileManager defaultManager] createDirectoryAtPath:topDir attributes:nil]; 26 | NSLog(@"created %d %@", dirCreated, topDir); 27 | } 28 | 29 | if(![[NSFileManager defaultManager] fileExistsAtPath:dir isDirectory:&isDir]) { 30 | BOOL dirCreated = [[NSFileManager defaultManager] createDirectoryAtPath:dir attributes:nil]; 31 | NSLog(@"created %d %@", dirCreated, dir); 32 | } 33 | } 34 | /* 35 | if(allItems) { 36 | 37 | } 38 | */ 39 | NSSet *insert = allItems ? [Message allObjectsInContext:self] : [[[self insertedObjects] copy] autorelease]; 40 | NSSet *remove = [[[self deletedObjects] copy] autorelease]; 41 | 42 | if(![self save:error]) { 43 | NSLog(@"could not save database"); 44 | [remove release]; 45 | return NO; 46 | } 47 | 48 | [remove makeObjectsPerformSelector:@selector(removeMetadataFile)]; 49 | [insert makeObjectsPerformSelector:@selector(writeMetadataFile)]; 50 | /* 51 | if(!allItems) { 52 | [insert release]; 53 | } 54 | [remove release]; 55 | */ 56 | return YES; 57 | } 58 | 59 | - (BOOL)saveWithMetadata:(NSError **)error { 60 | return [self saveWithMetadata:error allItems:NO]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /ABPerson_SwissSMS_AIM.m: -------------------------------------------------------------------------------- 1 | // 2 | // ABPerson_SwissSMS.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 02.10.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "ABPerson_SwissSMS_AIM.h" 10 | #import "NSString_SwissSMS.h" 11 | #import "IMService_TigerCompat.h" 12 | 13 | #import 14 | #import 15 | 16 | #ifndef NSAppKitVersionNumber10_4 17 | #define NSAppKitVersionNumber10_4 824 18 | #endif 19 | 20 | @implementation ABPerson (SwissSMS_AIM) 21 | 22 | - (void)dealloc { 23 | [super dealloc]; 24 | } 25 | 26 | - (NSString *)aimScreenName { 27 | IMService *aim = [IMService serviceWithName:@"AIM"]; 28 | if(aim == nil) { 29 | return nil; 30 | } 31 | 32 | NSArray *screenNames = [aim screenNamesForPerson:self]; 33 | NSNumber *status = [NSNumber numberWithInt:0]; 34 | NSEnumerator *e = [screenNames objectEnumerator]; 35 | NSString *sn; 36 | NSString *screenNameWithBestStatus = nil; 37 | NSNumber *tempStatus; 38 | while((sn = [e nextObject])) { 39 | tempStatus = [[aim infoForScreenName:sn] valueForKey:IMPersonStatusKey]; 40 | if(tempStatus != nil && [tempStatus intValue] > [status intValue]) { 41 | status = tempStatus; 42 | screenNameWithBestStatus = sn; 43 | } 44 | } 45 | 46 | return screenNameWithBestStatus ? screenNameWithBestStatus : nil; 47 | } 48 | 49 | - (NSNumber *)aimStatus { 50 | IMService *aim = [IMService serviceWithName:@"AIM"]; 51 | if(aim == nil) { 52 | return nil; 53 | } 54 | 55 | NSString *screenName = [self aimScreenName]; 56 | 57 | if(screenName == nil) { 58 | return nil; 59 | } 60 | 61 | return [[aim infoForScreenName:screenName] valueForKey:IMPersonStatusKey]; 62 | } 63 | 64 | - (NSImage *)imageDataForCurrentIMStatus { 65 | int aimStatus = [[self aimStatus] intValue]; 66 | 67 | if(floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_4) { 68 | return [[[NSImage alloc] initWithContentsOfURL:[IMService imageURLForStatus:aimStatus]] autorelease]; // 10.4 69 | } else { 70 | return [NSImage imageNamed:[IMService imageNameForStatus:aimStatus]]; // 10.5 71 | } 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /NSWorkspace_SwissSMS.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSWorkspace_SwissSMS.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 03.05.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "NSWorkspace_SwissSMS.h" 10 | 11 | 12 | @implementation NSWorkspace (SwissSMS) 13 | 14 | // from http://www.cocoadev.com/index.pl?QuitApplicationUsingAppleEvent 15 | - (OSStatus) quitApplicationWithBundleID:(NSString*)bundleID { 16 | OSStatus result = noErr; 17 | AEAddressDesc target = {}; 18 | AEInitializeDesc(&target); 19 | 20 | const char *bundleIDString = [bundleID UTF8String]; 21 | 22 | result = AECreateDesc( typeApplicationBundleID, bundleIDString, strlen(bundleIDString), &target ); 23 | if ( result == noErr ) { 24 | AppleEvent event = {}; 25 | AEInitializeDesc(&event); 26 | 27 | result = AECreateAppleEvent( kCoreEventClass, kAEQuitApplication, &target, kAutoGenerateReturnID, kAnyTransactionID, &event ); 28 | 29 | if ( result == noErr ) { 30 | AppleEvent reply = {}; 31 | AEInitializeDesc(&reply); 32 | result = AESendMessage( &event, &reply, kAENoReply, 60 ); 33 | AEDisposeDesc( &event ); 34 | } 35 | AEDisposeDesc( &target ); 36 | } 37 | return( result ); 38 | } 39 | 40 | - (BOOL)appIsRunning:(NSString *)appName { 41 | return [[[[NSWorkspace sharedWorkspace] runningApplications] valueForKey:@"localizedName"] containsObject:appName]; 42 | } 43 | 44 | - (void)openIMClientForScreenName:(NSString *)screenName message:(NSString *)message { 45 | if(screenName == nil || [screenName isEqualToString:@""]) { 46 | return; 47 | } 48 | 49 | NSMutableString *aimFormattedMessage = message ? [[message mutableCopy] autorelease] : [NSMutableString stringWithString:@""]; 50 | [aimFormattedMessage replaceOccurrencesOfString:@" " 51 | withString:@"+" 52 | options:(unsigned)NULL 53 | range:NSMakeRange(0, [aimFormattedMessage length])]; 54 | 55 | //aim:goim?screenname=abcdef&message=Hi.+Are+you+there? 56 | NSString *urlString = [NSString stringWithFormat:@"aim:goim?screenname=%@&message=%@", screenName, aimFormattedMessage]; 57 | NSURL *url = [NSURL URLWithString:urlString]; 58 | [[NSWorkspace sharedWorkspace] openURL:url]; 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /AbstractSender.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | #define API_VERSION 0.1 5 | 6 | @interface AbstractSender : NSObject { 7 | NSData *imageData; 8 | } 9 | 10 | typedef enum { 11 | SS_SENDING_OK = 0, 12 | SS_SENDING_ERROR, 13 | SS_LOGIN_OK, 14 | SS_LOGIN_ERROR, 15 | SS_KEYCHAIN_ERROR, 16 | SS_QUOTA_EXCEEDED, 17 | SS_NO_INTERNET_ERROR, 18 | SS_ADDRESS_BOOK_ERROR, 19 | SS_MESSAGE_ENCODING_ERROR, 20 | SS_SERVICE_UNAVAILABLE_ERROR, 21 | SS_CLI_ERROR, 22 | SS_PLUGIN_INTERNAL_ERROR, 23 | } SwissSMSSendingStatus; 24 | 25 | + (id)sharedSender; 26 | 27 | #pragma mark default implentation, don't redefine this 28 | 29 | - (unsigned)numberOfMessagesForString:(NSString *)s; 30 | 31 | #pragma mark default implentation, can be redefined by subclasses 32 | 33 | // service image 34 | - (NSData *)imageData; 35 | 36 | // service name 37 | - (NSString *)name; 38 | 39 | // max chars allowed 40 | - (int)maxChars; 41 | 42 | // true is plugin needs login and password 43 | - (BOOL)needsLoginAndPassword; 44 | 45 | // return the country code according to wikipedia (TODO), use 'int' for international or undefined 46 | - (NSString *)countryCode; 47 | 48 | // plugin version number, increment from 0.1, use X.X or X.X.X. if not implemented, 0.0 is assumed 49 | - (NSString *)version; 50 | 51 | // author name 52 | - (NSString *)author; 53 | 54 | // the version of the API the plugin is using 55 | - (NSString *)apiVersion; 56 | 57 | #pragma mark mandatory subclass implentation 58 | 59 | // login 60 | - (SwissSMSSendingStatus)login:(NSString *)login password:(NSString *)password; 61 | 62 | // send the message 63 | - (SwissSMSSendingStatus)sendMessage:(NSString *)message toNumber:(NSString *)phoneNumber; 64 | 65 | // returns a valid phone number for the service, else return nil 66 | - (NSString *)normalizePhoneNumber:(NSString *)rawString; 67 | 68 | #pragma mark optional subclass implentation 69 | 70 | // update check 71 | - (NSString *)latestVersionNumber; 72 | - (NSString *)latestVersionURL; 73 | - (NSString *)pluginWebsiteURL; 74 | 75 | // remaining messages allowed 76 | - (int)remainingMessagesAllowed; 77 | 78 | // logout - will be performed on service change or application quiting 79 | - (BOOL)logout; 80 | 81 | #pragma mark keychain storage 82 | 83 | - (SecProtocolType)serviceProtocol; 84 | - (NSString *)serviceServerName; 85 | 86 | 87 | @end 88 | -------------------------------------------------------------------------------- /HTMLForm.h: -------------------------------------------------------------------------------- 1 | /*! 2 | @header HTMLForm 3 | @abstract Retrieve, fill and submit HTML forms 4 | 5 | @copyright Copyright 2007 Cédric Luthi. 6 | */ 7 | 8 | #import 9 | 10 | /*! 11 | @abstract HTMLForm error domain 12 | @discussion See the Error codes 13 | section for all error codes belonging to this domain. 14 | @constant HTMLFormErrorDomain 15 | */ 16 | extern NSString * const HTMLFormErrorDomain; 17 | 18 | /*! 19 | @abstract HTMLForm user error domain 20 | @discussion Constants used by NSError to differentiate between "domains" of error codes, 21 | serving as a discriminator for error codes that originate from different subsystems or sources. 22 | @constant HTMLFormUserErrorDomain 23 | */ 24 | extern NSString * const HTMLFormUserErrorDomain; 25 | 26 | /*! 27 | @enum Error codes 28 | @abstract Constants used by the HTMLFormErrorDomain. 29 | @discussion Documentation on each constant forthcoming. 30 | */ 31 | enum 32 | { 33 | HTMLFormErrorNoSuchNamedForm = -1, 34 | HTMLFormErrorNoSuchUnnamedForm = -2, 35 | 36 | HTMLFormErrorUnexpectedFormReply = -100, 37 | }; 38 | 39 | /*! 40 | @class HTMLForm 41 | @abstract The HTMLForm class represents a HTML form, as defined in the HTML 4.01 Specification 42 | */ 43 | @interface HTMLForm : NSObject { 44 | 45 | NSURL *fAction; 46 | NSString *fName; 47 | NSString *fMethod; 48 | 49 | NSMutableDictionary *fFields; 50 | 51 | NSXMLDocument *fDocument; 52 | 53 | } 54 | 55 | + (NSString *)userAgent; 56 | + (void)setUserAgent:(NSString *)userAgent; 57 | 58 | + (id)formNamed:(NSString *)formName atURL:(NSURL *)documentURL error:(NSError **)error; 59 | - (id)initWithFormNamed:(NSString *)formName atURL:(NSURL *)documentURL error:(NSError **)error; 60 | 61 | /*! 62 | @method valueForField: 63 | @param fieldName The name of the field 64 | @return The value associated with fieldName, or nil if no value is associated with fieldName. 65 | */ 66 | - (NSString *)valueForField:(NSString *)fieldName; 67 | 68 | - (void)setValue:(NSString *)fieldValue forField:(NSString *)fieldName; 69 | - (void)removeField:(NSString *)fieldName; 70 | 71 | - (BOOL)submitExpectingSuccess:(NSString *)successXpath failures:(NSArray *)failuresXpaths error:(NSError **)error; 72 | 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDocumentTypes 8 | 9 | 10 | CFBundleTypeExtensions 11 | 12 | swisssms 13 | 14 | CFBundleTypeIconFile 15 | SwissSMSDocument.icns 16 | CFBundleTypeName 17 | SwissSMS Message 18 | CFBundleTypeRole 19 | Editor 20 | LSItemContentTypes 21 | 22 | ch.seriot.swisssms 23 | 24 | LSTypeIsPackage 25 | 26 | NSPersistentStoreTypeKey 27 | XML 28 | 29 | 30 | CFBundleExecutable 31 | ${EXECUTABLE_NAME} 32 | CFBundleHelpBookFolder 33 | SwissSMS Help 34 | CFBundleHelpBookName 35 | SwissSMS Help 36 | CFBundleIconFile 37 | SwissSMS 38 | CFBundleIdentifier 39 | ch.seriot.SwissSMS 40 | CFBundleInfoDictionaryVersion 41 | 6.0 42 | CFBundleName 43 | ${PRODUCT_NAME} 44 | CFBundlePackageType 45 | APPL 46 | CFBundleShortVersionString 47 | ${SHORT_VERSION_STRING} 48 | CFBundleSignature 49 | SwSm 50 | CFBundleVersion 51 | 0 52 | FeedbackEmail 53 | swisssms@seriot.ch 54 | NSMainNibFile 55 | MainMenu 56 | NSPrincipalClass 57 | NSApplication 58 | SUFeedURL 59 | http://swisssms.googlecode.com/svn/trunk/appcast.xml 60 | UTExportedTypeDeclarations 61 | 62 | 63 | UTTypeConformsTo 64 | 65 | public.data 66 | 67 | UTTypeDescription 68 | SwissSMS Message 69 | UTTypeIdentifier 70 | ch.seriot.swisssms 71 | UTTypeTagSpecification 72 | 73 | public.filename-extension 74 | swisssms 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Address Book plugin/SwissSMSABPlugin.m: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMSABPlugin.m 3 | // SwissSMSABPlugin 4 | // 5 | // Created by Cédric Luthi on 18.11.07. 6 | // Copyright Cédric Luthi 2007. All rights reserved. 7 | // 8 | 9 | #import "SwissSMSABPlugin.h" 10 | #import "ABPerson_SwissSMS.h" 11 | #import "NSWorkspace_SwissSMS.h" 12 | 13 | @implementation SwissSMSABPlugin 14 | 15 | - (NSString *)actionProperty 16 | { 17 | /* Unfortuantely, kABPhoneMobileLabel does not work as one would expect, i.e. enable 18 | the contextual menu only on the mobile phone number */ 19 | return kABPhoneProperty; 20 | } 21 | 22 | - (NSString *)titleForPerson:(ABPerson *)person identifier:(NSString *)identifier 23 | { 24 | return NSLocalizedStringFromTableInBundle(@"Send SMS", nil, [NSBundle bundleForClass:[self class]], "Send SMS Address Book contextual menu"); 25 | } 26 | 27 | - (void)addPerson:(ABPerson *)person 28 | { 29 | NSDistributedNotificationCenter *dnc = [NSDistributedNotificationCenter defaultCenter]; 30 | 31 | [dnc postNotificationName:@"ch.seriot.SwissSMS.addPersonWithId" 32 | object:[person uniqueId] 33 | userInfo:nil 34 | deliverImmediately:NO]; 35 | } 36 | 37 | - (void)performActionForPerson:(ABPerson *)person identifier:(NSString *)identifier 38 | { 39 | if([[NSWorkspace sharedWorkspace] appIsRunning:@"SwissSMS"] == NO) { 40 | // See comment on applicationDidLaunch: below 41 | // [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(applicationDidLaunch:) name:NSWorkspaceDidLaunchApplicationNotification object:person]; 42 | // For now we poll every half second 43 | [[NSWorkspace sharedWorkspace] launchApplication:@"SwissSMS"]; 44 | while ([[NSWorkspace sharedWorkspace] appIsRunning:@"SwissSMS"] == NO) { 45 | [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; 46 | } 47 | } 48 | [self addPerson:person]; 49 | } 50 | 51 | /* The right way is to use this callback, but unfortunately, applicationDidLaunch: is not called 52 | I have no idea why and I have no idea how to debug a notification that is not sent (or received) 53 | - (void) applicationDidLaunch:(NSNotification *)notification 54 | { 55 | NSLog(@"applicationDidLaunch: %@", notification); 56 | if ([[notification valueForKey:@"NSApplicationName"] isEqualToString:@"SwissSMS"]) { 57 | [self addPerson:[notification object]]; 58 | [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self]; 59 | } 60 | } 61 | */ 62 | 63 | - (BOOL)shouldEnableActionForPerson:(ABPerson *)person identifier:(NSString *)identifier 64 | { 65 | return [person mobilePhoneNumber] != nil; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Automator action/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AMAccepts 6 | 7 | Container 8 | List 9 | Optional 10 | 11 | Types 12 | 13 | com.apple.addressbook.item-object 14 | com.apple.addressbook.person-object 15 | com.apple.addressbook.group-object 16 | 17 | 18 | AMApplication 19 | SwissSMS 20 | AMCanShowSelectedItemsWhenRun 21 | 22 | AMCanShowWhenRun 23 | 24 | AMCategory 25 | AMCategoryInternet 26 | AMDefaultParameters 27 | 28 | message 29 | 30 | 31 | AMDescription 32 | 33 | AMDNote 34 | The SMS will be sent through the network you have chosen in SwissSMS preferences. 35 | AMDRelatedActions 36 | com.apple.Automator.GetSpecifiedAddressBookItems 37 | AMDSummary 38 | This action sends a sms to the person(s) and/or group(s) passed from the previous action. 39 | 40 | AMIconName 41 | SwissSMS 42 | AMKeywords 43 | 44 | Send 45 | SMS 46 | 47 | AMName 48 | Send SMS 49 | AMProvides 50 | 51 | Container 52 | List 53 | Types 54 | 55 | com.apple.applescript.object 56 | 57 | 58 | AMRequiredResources 59 | 60 | CFBundleDevelopmentRegion 61 | English 62 | CFBundleExecutable 63 | ${EXECUTABLE_NAME} 64 | CFBundleIconFile 65 | 66 | CFBundleIdentifier 67 | ch.seriot.SwissSMS.amaction.sendsms 68 | CFBundleInfoDictionaryVersion 69 | 6.0 70 | CFBundleName 71 | ${PRODUCT_NAME} 72 | CFBundlePackageType 73 | BNDL 74 | CFBundleShortVersionString 75 | ${SHORT_VERSION_STRING} 76 | CFBundleSignature 77 | SwSm 78 | CFBundleVersion 79 | 0 80 | NSPrincipalClass 81 | Send_SMS 82 | 83 | 84 | -------------------------------------------------------------------------------- /Plugins/RomandieCH/RomandieCH.m: -------------------------------------------------------------------------------- 1 | // 2 | // RomandieCH.m 3 | // SMSRomandie 4 | // 5 | // Created by Nicolas Seriot on 08.11.06. 6 | // Copyright 2006 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "RomandieCH.h" 10 | #import "NSString+SMSSender.h" 11 | 12 | @implementation RomandieCH 13 | 14 | - (SwissSMSSendingStatus)login:(NSString *)login password:(NSString *)password { 15 | return SS_LOGIN_OK; 16 | } 17 | 18 | - (SwissSMSSendingStatus)sendOneMessage:(NSString *)message toNumber:(NSString *)phoneNumber { 19 | SwissSMSSendingStatus status = SS_SENDING_OK; 20 | NSError *err = nil; 21 | 22 | NSURL *baseURL = [NSURL URLWithString:@"http://www.romandie.com/Mobile/SMS%5Ftel/"]; 23 | NSString *dateUrlComponent = [baseURL propertyForKey:@"Location"]; // ../SMS_tel150508/ 24 | NSURL *controleURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.romandie.com/Mobile/SMS_tel150508/%@controle.asp", dateUrlComponent]]; 25 | HTMLForm *form = [[HTMLForm alloc] initWithFormNamed:@"sms_input" atURL:controleURL error:&err]; 26 | 27 | if (err) { 28 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 29 | status = SS_NO_INTERNET_ERROR; 30 | goto abort; 31 | } else { 32 | // No "sms_input" form, assume a redirect to http://www.romandie.com/Mobile/SMS%5Ftel/NotAllow.asp (quota is over) 33 | status = SS_QUOTA_EXCEEDED; 34 | goto abort; 35 | } 36 | } 37 | 38 | NSMutableString *formattedPhoneNumber = [NSMutableString stringWithString:phoneNumber]; 39 | [formattedPhoneNumber replaceOccurrencesOfString:@"0" withString:@"+41" options:nil range:NSMakeRange(0, 4)]; 40 | 41 | [form setValue:formattedPhoneNumber forField:@"MSISDN"]; // SIGTRAP here 42 | [form setValue:message forField:@"TXT"]; 43 | 44 | BOOL success = [form submitExpectingSuccess:[NSString stringWithUTF8String:"//text()[matches(.,'Votre SMS est parti avec succès')]"] 45 | failures:[NSArray arrayWithObject:[NSString stringWithUTF8String:"//text()[matches(.,'Votre message n.a pu être envoyé correctement')]"]] error:&err]; 46 | 47 | if (success) { 48 | if (err == nil) { 49 | status = SS_SENDING_OK; 50 | } else { 51 | status = SS_SENDING_ERROR; // Probably wrong phone number 52 | } 53 | } else { 54 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 55 | status = SS_NO_INTERNET_ERROR; 56 | } else { 57 | status = SS_PLUGIN_INTERNAL_ERROR; 58 | } 59 | } 60 | 61 | abort: 62 | [form release]; 63 | return status; 64 | } 65 | 66 | // returns a valid phone number for the service, else return nil 67 | - (NSString *)normalizePhoneNumber:(NSString *)rawString { 68 | if(!rawString) return nil; 69 | return [rawString normalizedSwissGSMPhoneNumber]; 70 | } 71 | 72 | - (void)dealloc{ 73 | [super dealloc]; 74 | } 75 | 76 | @end 77 | -------------------------------------------------------------------------------- /SwissSMS_AppDelegate+TokenField.m: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMS_AppDelegate+TokenField.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 08.10.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "SwissSMS_AppDelegate+TokenField.h" 10 | #import "ABPerson_SwissSMS.h" 11 | #import "NSString_SwissSMS.h" 12 | #import "SSRecipient.h" 13 | 14 | @implementation SwissSMS_AppDelegate (TokenField) 15 | 16 | - (id)tokenField:(NSTokenField *)tokenField representedObjectForEditingString:(NSString *)editingString { 17 | NSObject *r = [SSRecipient findRecipientFromObject:editingString]; 18 | return r ? r : editingString; 19 | } 20 | 21 | - (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject { 22 | return [representedObject name]; 23 | } 24 | 25 | - (NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(unsigned)index { 26 | NSPredicate *validPhonesPredicate = [NSPredicate predicateWithFormat: @"phone != NULL"]; 27 | return [tokens filteredArrayUsingPredicate:validPhonesPredicate]; 28 | } 29 | /* 30 | - (BOOL)tokenField:(NSTokenField *)tokenField hasMenuForRepresentedObject:(id)representedObject { 31 | // TODO handle ABPerson instances with several mobile numbers? 32 | return NO; 33 | } 34 | 35 | - (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject { 36 | // TODO handle ABPerson instances with several mobile numbers? 37 | return nil; 38 | } 39 | */ 40 | - (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(int)tokenIndex indexOfSelectedItem:(int *)selectedIndex { 41 | BOOL showAllContacts = [substring hasPrefix:@"*"] || [substring hasPrefix:@"?"]; 42 | if(showAllContacts) { 43 | NSPredicate *peopleWithValidNumber = [NSPredicate predicateWithFormat: @"fullname != NULL"]; 44 | NSArray *validNumberPeople = [[abPersonController arrangedObjects] filteredArrayUsingPredicate:peopleWithValidNumber]; 45 | return [validNumberPeople valueForKey:@"fullname"]; 46 | } 47 | 48 | NSPredicate *peopleWithSameBeginningPredicate = [NSPredicate predicateWithFormat: @"fullname beginswith[c] %@", substring]; 49 | NSArray *filteredPeople = [[abPersonController arrangedObjects] filteredArrayUsingPredicate:peopleWithSameBeginningPredicate]; 50 | return [filteredPeople valueForKey:@"fullname"]; 51 | } 52 | /* 53 | - (void)controlTextDidChange:(NSNotification *)aNotification { 54 | NSObject *o = (recipients && [recipients count] > 0) ? [recipients lastObject] : nil; 55 | if(![o isKindOfClass:[NSString class]]) { 56 | NSObject *recipient = [SSRecipient findRecipientFromObject:(id)o]; 57 | [self setValue:recipient forKey:@"firstRecipient"]; // 2 // 3 58 | } 59 | } 60 | */ 61 | @end 62 | -------------------------------------------------------------------------------- /PhoneNumberFormatTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // PhoneNumberFormatTest.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 18.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "PhoneNumberFormatTest.h" 10 | #import 11 | 12 | @implementation PhoneNumberFormatTest 13 | 14 | - (void) setUp { 15 | } 16 | 17 | - (void) tearDown { 18 | } 19 | 20 | - (void) testnormalizedSwissGSMPhoneNumber { 21 | NSString *n = @"0781234567"; 22 | NSString *s; 23 | int i; 24 | 25 | NSArray *good = [NSArray arrayWithObjects:n, @"+41781234567", @"0041781234567", @"078 / 1234567", nil]; 26 | for(i = 0; i < [good count]; i++) { 27 | s = [good objectAtIndex:i]; 28 | STAssertEqualObjects([s normalizedSwissGSMPhoneNumber], n, @"[NSString +normalizedSwissGSMPhoneNumber] did return %@ instead of %@", [s normalizedSwissGSMPhoneNumber], n); 29 | } 30 | 31 | NSArray *bad = [NSArray arrayWithObjects:@"0001234567", @"078123456", @"07812345678", @"abc", nil]; 32 | for(i = 0; i < [bad count]; i++) { 33 | s = [bad objectAtIndex:i]; 34 | STAssertNil([s normalizedSwissGSMPhoneNumber], @"[NSString +normalizedSwissGSMPhoneNumber] did return %@ instead of %@", [s normalizedSwissGSMPhoneNumber], nil); 35 | } 36 | 37 | } 38 | 39 | - (void) testNormalizedInternationalNumberWithZero { 40 | NSString *n = @"0033612345678"; 41 | NSString *s; 42 | int i; 43 | 44 | NSArray *good = [NSArray arrayWithObjects:n, @"+33612345678", @"0033-6-12345678", nil]; 45 | for(i = 0; i < [good count]; i++) { 46 | s = [good objectAtIndex:i]; 47 | STAssertEqualObjects([s normalizedInternationalNumberWithZero], n, @"[NSString +normalizedInternationalNumberWithZero] did return %@ instead of %@", [s normalizedInternationalNumberWithZero], n); 48 | } 49 | 50 | NSArray *bad = [NSArray arrayWithObjects:@"9933012345678", @"abc", nil]; 51 | for(i = 0; i < [bad count]; i++) { 52 | s = [bad objectAtIndex:i]; 53 | STAssertNil([s normalizedInternationalNumberWithZero], @"[NSString +normalizedInternationalNumberWithZero] did return %@ instead of %@", [s normalizedInternationalNumberWithZero], nil); 54 | } 55 | 56 | n = @"0041781234567"; 57 | 58 | good = [NSArray arrayWithObjects:n, @"+41781234567", @"0041781234567", @"0041-78-1234567", nil]; 59 | for(i = 0; i < [good count]; i++) { 60 | s = [good objectAtIndex:i]; 61 | STAssertEqualObjects([s normalizedInternationalNumberWithZero], n, @"[NSString +normalizedInternationalNumberWithZero] did return %@ instead of %@", [s normalizedInternationalNumberWithZero], n); 62 | } 63 | } 64 | 65 | - (void) test { 66 | NSString *source = @"0795804712"; 67 | NSString *result = [source normalizedInternationalNumberWithZero]; 68 | STAssertEqualObjects(result, @"0041795804712", @"[NSString +normalizedInternationalNumberWithZero] did return %@ instead of %@", result, @"0041795804712"); 69 | 70 | 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /KeychainAccess.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeychainAccess.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 05.11.07. 6 | // Copyright 2007 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "KeychainAccess.h" 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | @implementation KeychainAccess 17 | 18 | + (NSString *)internetHTMLFormPasswordForServer:(NSString *)serverName protocol:(SecProtocolType)protocol keychainItem:(SecKeychainItemRef *)keychainItem notFound:(BOOL *)notFound { 19 | 20 | UInt32 passwordLength; 21 | void *pswd = nil; 22 | 23 | OSStatus err = SecKeychainFindInternetPassword(NULL, strlen([serverName UTF8String]), [serverName UTF8String], /* securityDomain */ 0, NULL, /* accountName */ 0, NULL, 24 | /* path */ 0, NULL, /* port */ 0, protocol, kSecAuthenticationTypeHTMLForm, &passwordLength, &pswd, keychainItem); 25 | 26 | *notFound = err == errSecItemNotFound; 27 | if (err != noErr) { 28 | // TODO somehow report the error if it's not one of (errSecItemNotFound | userCanceledErr | errSecAuthFailed) 29 | // errSecAuthFailed happens when user clicks the Deny button 30 | return nil; 31 | } 32 | 33 | return [[[NSString alloc] initWithData:[NSData dataWithBytes:pswd length:passwordLength] encoding:NSUTF8StringEncoding] autorelease]; 34 | } 35 | 36 | + (NSString *)loginForItem:(SecKeychainItemRef)keychainItem { 37 | NSString *username; 38 | 39 | SecKeychainAttributeList list; 40 | SecKeychainAttribute attr; 41 | 42 | list.count = 1; 43 | list.attr = &attr; 44 | 45 | attr.tag = kSecAccountItemAttr; 46 | 47 | OSStatus err; 48 | err = SecKeychainItemCopyContent(keychainItem, NULL, &list, NULL, NULL); 49 | NSAssert1(err == noErr, @"SecKeychainItemCopyContent -> %lu", err); 50 | 51 | if (attr.data != NULL) { 52 | username = [[[NSString alloc] initWithData:[NSData dataWithBytes:attr.data length:attr.length] encoding:NSUTF8StringEncoding] autorelease]; 53 | } else { 54 | NSLog(@"Login not found."); 55 | return nil; 56 | } 57 | 58 | SecKeychainItemFreeContent(&list, NULL); 59 | 60 | return username; 61 | } 62 | 63 | + (void)addInternetHTMLFormPasswordForServer:(NSString *)serverName login:(NSString *)login password:(NSString *)password protocol:(SecProtocolType)protocol { 64 | OSStatus err = SecKeychainAddInternetPassword(NULL, strlen([serverName UTF8String]), [serverName UTF8String], /* securityDomain */ 0, NULL, strlen([login UTF8String]), [login UTF8String], 65 | /* path */ 0, NULL, /*port */ 0, protocol, kSecAuthenticationTypeHTMLForm, strlen([password UTF8String]), [password UTF8String], NULL); 66 | 67 | if (err != noErr) { 68 | // Documentation says "The result code errSecNoDefaultKeychain indicates that no default keychain could be found." 69 | // What would a user without a keychain expect when he chose "Add to keychain" ? 70 | NSLog(@"Unable to set password for %@ (%ld)", serverName, err); 71 | } 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /MDImporter/GetMetadataForFile.m: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | /* ----------------------------------------------------------------------------- 6 | Step 1 7 | Set the UTI types the importer supports 8 | 9 | Modify the CFBundleDocumentTypes entry in Info.plist to contain 10 | an array of Uniform Type Identifiers (UTI) for the LSItemContentTypes 11 | that your importer can handle 12 | 13 | ----------------------------------------------------------------------------- */ 14 | 15 | /* ----------------------------------------------------------------------------- 16 | Step 2 17 | Implement the GetMetadataForFile function 18 | 19 | Implement the GetMetadataForFile function below to scrape the relevant 20 | metadata from your document and return it as a CFDictionary using standard keys 21 | (defined in MDItem.h) whenever possible. 22 | ----------------------------------------------------------------------------- */ 23 | 24 | /* ----------------------------------------------------------------------------- 25 | Step 3 (optional) 26 | If you have defined new attributes, update the schema.xml file 27 | 28 | Edit the schema.xml file to include the metadata keys that your importer returns. 29 | Add them to the and elements. 30 | 31 | Add any custom types that your importer requires to the element 32 | 33 | 34 | 35 | ----------------------------------------------------------------------------- */ 36 | 37 | 38 | 39 | /* ----------------------------------------------------------------------------- 40 | Get metadata attributes from file 41 | 42 | This function's job is to extract useful information your file format supports 43 | and return it as a dictionary 44 | ----------------------------------------------------------------------------- */ 45 | 46 | Boolean GetMetadataForFile(void* thisInterface, 47 | CFMutableDictionaryRef attributes, 48 | CFStringRef contentTypeUTI, 49 | CFStringRef pathToFile) 50 | { 51 | /* Pull any available metadata from the file at the specified path */ 52 | /* Return the attribute keys and attribute values in the dict */ 53 | /* Return TRUE if successful, FALSE if there was no data provided */ 54 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 55 | NSMutableDictionary *d = (NSMutableDictionary *)attributes; 56 | NSDictionary *file = [NSDictionary dictionaryWithContentsOfFile:(NSString *)pathToFile]; 57 | //NSLog(@"file: %@", file); 58 | if(!file) goto error; 59 | [d setObject:[NSArray arrayWithObjects:[file objectForKey:@"name"], [file objectForKey:@"phone"], nil] forKey:(NSString *)kMDItemRecipients]; 60 | [d setObject:[file objectForKey:@"date"] forKey:(NSString *)kMDItemContentCreationDate]; 61 | [d setObject:[file objectForKey:@"text"] forKey:(NSString *)kMDItemTextContent]; 62 | NSString *displayName = [NSString stringWithFormat:@"SMS to %@: %@", [file objectForKey:@"name"], [file objectForKey:@"text"]]; 63 | [d setObject:displayName forKey:(NSString *)kMDItemDisplayName]; 64 | [d setObject:displayName forKey:(NSString *)kMDItemTitle]; 65 | [pool release]; 66 | 67 | return TRUE; 68 | 69 | error: 70 | NSLog(@"Error: SwissSMS Spotlight importer could not import %@", (NSString *)pathToFile); 71 | [pool release]; 72 | return FALSE; 73 | } 74 | -------------------------------------------------------------------------------- /SwissSMS_AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SwissSMS_AppDelegate.h 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 07.04.07. 6 | // Copyright Nicolas Seriot 2007 . All rights reserved. 7 | // 8 | 9 | 10 | #import 11 | #import 12 | #import "AbstractSender.h" 13 | #import "Message.h" 14 | 15 | @interface SwissSMS_AppDelegate : NSObject { 16 | IBOutlet NSTokenField *tokenField; 17 | IBOutlet NSWindow *window; 18 | IBOutlet NSWindow *prefsWindow; 19 | IBOutlet NSTextView *messageField; 20 | IBOutlet NSArrayController *messagesController; 21 | IBOutlet NSUserDefaultsController *defaultsController; 22 | IBOutlet NSLevelIndicator *messageSendingLevelIndicator; 23 | IBOutlet NSPanel *messageInspector; 24 | IBOutlet NSView *searchItemView; 25 | IBOutlet NSView *senderItemView; 26 | IBOutlet NSTableView *tableView; 27 | IBOutlet NSButton *sendButton; 28 | 29 | IBOutlet NSPanel *loginPanel; 30 | IBOutlet NSTextField *instructionField; 31 | IBOutlet NSTextField *loginField; 32 | IBOutlet NSTextField *passwordField; 33 | IBOutlet NSButton *rememberCheckbox; 34 | MPSemaphoreID loginSemaphore; 35 | BOOL userCancelledLogin; 36 | BOOL messageSendingLevelIndicatorEnabled; 37 | 38 | NSPersistentStoreCoordinator *persistentStoreCoordinator; 39 | NSManagedObjectModel *managedObjectModel; 40 | NSManagedObjectContext *managedObjectContext; 41 | 42 | AbstractSender *smsSender; 43 | ABPerson *firstRecipient; 44 | NSArray *recipients; 45 | 46 | NSMutableArray *plugins; 47 | 48 | NSToolbar *toolbar; 49 | NSArray *messagesSortDescriptors; 50 | NSNumber *indicatorValue; 51 | double indicatorCriticalValue; 52 | NSString *currentStatus; 53 | NSString *exportStatusBottom; 54 | NSString *messageInfo; 55 | NSString *messageFieldString; 56 | 57 | IBOutlet NSArrayController *abPersonController; 58 | ABAddressBook *sharedAddressBook; 59 | NSPredicate *mobileFilterPredicate; 60 | NSArray *addressBookSortDescriptors; 61 | NSString *comboString; 62 | 63 | BOOL bpeIsRunning; 64 | BOOL exportToBPEIsAllowed; 65 | BOOL isSending; 66 | BOOL messageInspectorNameIsBold; 67 | BOOL isWaking; 68 | } 69 | 70 | - (NSPersistentStoreCoordinator *)persistentStoreCoordinator; 71 | - (NSManagedObjectModel *)managedObjectModel; 72 | - (NSManagedObjectContext *)managedObjectContext; 73 | 74 | - (IBAction)saveAction:sender; 75 | - (IBAction)sendMessage:sender; 76 | - (IBAction)removeSelectedMessages:sender; 77 | - (IBAction)saveAndClosePrefsWindow:sender; 78 | - (IBAction)newMessage:sender; 79 | - (IBAction)openImForCurrentRecipient:sender; 80 | - (IBAction)openImForSelectedMessageGuessedPerson:sender; 81 | - (IBAction)openPreferences:sender; 82 | - (IBAction)toggleFlagOnSelectedMessages:sender; 83 | - (IBAction)sendFeedback:(id)sender; 84 | - (IBAction)openCurrentRecipientInAB:sender; 85 | - (IBAction)endLoginSheet:(id)sender; 86 | - (void)openMessageInspector; 87 | - (AbstractSender *)senderWithClassName:(NSString *)name; 88 | 89 | - (NSString *)metadataDirectoryPath; 90 | - (NSString *)metadataFileExtension; 91 | 92 | - (void)registerAsObserver; 93 | - (SwissSMSSendingStatus)sendMessageInNewThread:(id)sender; 94 | 95 | - (NSDictionary *)keychainLoginAndPasswordForSender:(AbstractSender *)sender; 96 | 97 | - (NSArray *)allMessages; 98 | 99 | - (void)searchForPlugins; 100 | - (void)setServiceOrDefaultServiceIfEmpty; 101 | - (NSArray *)availableServicesNames; 102 | 103 | // toolbar menu actions 104 | - (IBAction)customize:(id)sender; 105 | - (IBAction)showhide:(id)sender; 106 | 107 | @end 108 | -------------------------------------------------------------------------------- /_fixXQuery.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import 4 | 5 | #import 6 | 7 | #import 8 | #import 9 | 10 | #if defined(__i386__) || defined(__x86_64__) 11 | typedef uint8_t instr_t; 12 | #elif defined(__ppc__) || defined(__ppc64__) 13 | typedef uint32_t instr_t; 14 | #endif 15 | 16 | typedef instr_t* instr_ptr; 17 | 18 | static BOOL nodesForXPathIsWorking() 19 | { 20 | BOOL isWorking; 21 | 22 | NSAutoreleasePool *pool = [NSAutoreleasePool new]; 23 | 24 | NSXMLDocument *doc = [[[NSXMLDocument alloc] initWithXMLString:@"" options:0 error:nil] autorelease]; 25 | NSArray *nodes = [doc nodesForXPath:@"/utf8[matches(text(), '☢')]" error:nil]; 26 | 27 | isWorking = [nodes count] > 0; 28 | 29 | [pool release]; 30 | 31 | return isWorking; 32 | } 33 | 34 | static BOOL fixXQuery(BOOL *wasBugged) 35 | { 36 | instr_ptr pcre_compile = NULL; 37 | 38 | BOOL isWorking = nodesForXPathIsWorking(); 39 | if (wasBugged) { 40 | *wasBugged = !isWorking; 41 | } 42 | 43 | if (isWorking) { 44 | return YES; 45 | } 46 | 47 | uint32_t i, count = _dyld_image_count(); 48 | 49 | for(i = 0; i < count; i++) { 50 | const char* imageName = _dyld_get_image_name(i); 51 | if (strstr(imageName, "XQuery.framework")) { 52 | const struct mach_header *imageHeader = _dyld_get_image_header(i); 53 | 54 | // Find the address of the private symbol pcre_compile 55 | #if defined(__LP64__) 56 | #error 64 bits is not yet supported 57 | #else 58 | struct nlist symlist[] = {{{"_pcre_compile"}, 0, 0, 0, 0}}; 59 | if (nlist(imageName, symlist) == 0 && symlist[0].n_value != 0) { 60 | pcre_compile = (instr_ptr)((int)imageHeader + symlist[0].n_value); 61 | } 62 | #endif 63 | break; 64 | } 65 | } 66 | 67 | if (pcre_compile == NULL) { 68 | return NO; 69 | } 70 | 71 | #if defined(__i386__) 72 | // _pcre_compile+35: movl 0x0c(%ebp),%eax -> movl 0x18(%ebp),%eax 73 | // movl %eax,0x04(%esp) 74 | // pass the tableptr argument (arg5, which is null) instead of options (arg2) which is PCRE_UTF8 to pcre_compile2 75 | const instr_t original_instructions[7] = {0x8b, 0x45, 0x0c, 0x89, 0x44, 0x24, 0x04}; 76 | const instr_t patched_instructions[7] = {0x8b, 0x45, 0x18, 0x89, 0x44, 0x24, 0x04}; 77 | instr_ptr instructions_addr = (unsigned char*)pcre_compile+35; 78 | #elif defined(__ppc__) 79 | // _pcre_compile+0: or r0,r6,r6 -> li r4,0x0 80 | // or r8,r7,r7 81 | // or r6,r5,r5 82 | // or r7,r0,r0 -> or r7,r6,r6 83 | const instr_t original_instructions[4] = {0x7cc03378, 0x7ce83b78, 0x7ca62b78, 0x7c070378}; 84 | const instr_t patched_instructions[4] = {0x38800000, 0x7ce83b78, 0x7ca62b78, 0x7cc73378}; 85 | instr_ptr instructions_addr = pcre_compile; 86 | #else 87 | const instr_t original_instructions[0] = {}; 88 | const instr_t patched_instructions[0] = {}; 89 | instr_ptr instructions_addr = NULL; 90 | #endif 91 | 92 | if (memcmp(instructions_addr, original_instructions, sizeof(original_instructions)) == 0) { 93 | // Make it writable in order not to crash in the memcpy (EXC_BAD_ACCESS) 94 | kern_return_t vm_err = vm_protect(mach_task_self(), (vm_address_t)instructions_addr, sizeof(patched_instructions), false, VM_PROT_ALL); 95 | if (vm_err == KERN_SUCCESS) { 96 | memcpy(instructions_addr, patched_instructions, sizeof(patched_instructions)); 97 | } 98 | } 99 | 100 | return nodesForXPathIsWorking(); 101 | } -------------------------------------------------------------------------------- /Plugins/hispeedCH/HispeedCH.m: -------------------------------------------------------------------------------- 1 | // 2 | // HispeedCH.m 3 | // SwissSMS 4 | // 5 | // Created by Cédric Luthi on 20.10.07. 6 | // Copyright 2007 Cédric Luthi. All rights reserved. 7 | // 8 | 9 | #import "HispeedCH.h" 10 | #import "NSString+SMSSender.h" 11 | #import "HTMLForm.h" 12 | 13 | @implementation HispeedCH 14 | 15 | - (SwissSMSSendingStatus)login:(NSString *)login password:(NSString *)password 16 | { 17 | NSError *err = nil; 18 | 19 | // We must first accept the "TornadoAuth=test" cookie so that we do not get http basic authentication 20 | NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 21 | NSHTTPCookieAcceptPolicy userCookiePolicy = [cookieStorage cookieAcceptPolicy]; 22 | [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; 23 | 24 | HTMLForm *loginForm = [HTMLForm formNamed:@"anmeldung" atURL:[NSURL URLWithString:@"https://your.hispeed.ch/fr/apps/messenger/"] error:&err]; 25 | 26 | if (err) { 27 | [cookieStorage setCookieAcceptPolicy:userCookiePolicy]; 28 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 29 | return SS_NO_INTERNET_ERROR; 30 | } else { 31 | // No "anmeldung" form, assume we are already logged thanks to cookies 32 | return SS_LOGIN_OK; 33 | } 34 | } 35 | 36 | [loginForm setValue:login forField:@"mail"]; 37 | [loginForm setValue:password forField:@"password"]; 38 | 39 | BOOL success = [loginForm submitExpectingSuccess:@"//iframe[@name='external_application']" 40 | failures:[NSArray arrayWithObject:@"//input[@class='login']"] error:&err]; 41 | 42 | [cookieStorage setCookieAcceptPolicy:userCookiePolicy]; 43 | 44 | if (success) { 45 | if (err == nil) { 46 | return SS_LOGIN_OK; 47 | } else { 48 | return SS_LOGIN_ERROR; 49 | } 50 | } else { 51 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 52 | return SS_NO_INTERNET_ERROR; 53 | } else { 54 | return SS_PLUGIN_INTERNAL_ERROR; 55 | } 56 | } 57 | } 58 | 59 | - (SwissSMSSendingStatus)sendOneMessage:(NSString *)message toNumber:(NSString *)phoneNumber 60 | { 61 | NSError *err = nil; 62 | 63 | HTMLForm *smsForm = [HTMLForm formNamed:@"smsBean" atURL:[NSURL URLWithString:@"https://your.hispeed.ch/glue.cgi?http://messenger.hispeed.ch/walrus/app/login.do?language=fr"] error:&err]; 64 | 65 | if (err) { 66 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 67 | return SS_NO_INTERNET_ERROR; 68 | } else { 69 | return SS_PLUGIN_INTERNAL_ERROR; 70 | } 71 | } 72 | 73 | [smsForm setValue:message forField:@"message"]; 74 | [smsForm setValue:[NSString stringWithFormat:@"%d", [message length]] forField:@"numCount"]; 75 | [smsForm setValue:@"originatorUser" forField:@"originator"]; 76 | [smsForm setValue:@"yes" forField:@"recipientChecked"]; 77 | [smsForm setValue:phoneNumber forField:@"recipient"]; 78 | [smsForm removeField:@"sendDate"]; 79 | [smsForm removeField:@"sendTime"]; 80 | 81 | BOOL success = [smsForm submitExpectingSuccess:[NSString stringWithUTF8String:"//text()[matches(.,'SMS-Messenger a accepté votre ordre d.envoi')]"] 82 | failures:[NSArray array] error:&err]; 83 | 84 | if (success) { 85 | if (err == nil) { 86 | return SS_SENDING_OK; 87 | } else { 88 | return SS_SENDING_ERROR; 89 | } 90 | } else { 91 | if ([[err domain] isEqualToString:NSURLErrorDomain]) { 92 | return SS_NO_INTERNET_ERROR; 93 | } else { 94 | return SS_PLUGIN_INTERNAL_ERROR; 95 | } 96 | } 97 | } 98 | 99 | - (NSString *)normalizePhoneNumber:(NSString *)rawString 100 | { 101 | if(!rawString) return nil; 102 | return [rawString normalizedSwissGSMPhoneNumber]; 103 | } 104 | 105 | @end 106 | -------------------------------------------------------------------------------- /ABPerson_SwissSMS.m: -------------------------------------------------------------------------------- 1 | // 2 | // ABPerson_SwissSMS.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 08.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "NSString_SwissSMS.h" 10 | 11 | #import 12 | #import "AbstractSender.h" 13 | 14 | @implementation ABPerson (SwissSMS) 15 | 16 | + (NSArray *)personsWithMobilePhone { 17 | ABAddressBook *AB = [ABAddressBook sharedAddressBook]; 18 | 19 | ABSearchElement *haveMobilePhone = [ABPerson searchElementForProperty:kABPhoneProperty 20 | label:kABPhoneMobileLabel 21 | key:nil 22 | value:nil 23 | comparison:kABNotEqual]; 24 | 25 | NSArray *persons = [AB recordsMatchingSearchElement:haveMobilePhone]; 26 | 27 | NSSortDescriptor *sd1 = [[[NSSortDescriptor alloc] initWithKey:@"First" ascending:YES] autorelease]; 28 | NSSortDescriptor *sd2 = [[[NSSortDescriptor alloc] initWithKey:@"Last" ascending:YES] autorelease]; 29 | 30 | return [persons sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd1, sd2, nil]]; 31 | } 32 | 33 | - (void)dealloc { 34 | [super dealloc]; 35 | } 36 | 37 | // TODO remove this and use -name 38 | - (NSString *)fullname { 39 | NSString *first = [self valueForKey:@"First"]; 40 | NSString *last = [self valueForKey:@"Last"]; 41 | 42 | NSMutableArray *components = [[NSMutableArray alloc] init]; 43 | 44 | if(first) { 45 | [components addObject:first]; 46 | } 47 | 48 | if(last) { 49 | [components addObject:last]; 50 | } 51 | 52 | NSString *result = [components componentsJoinedByString:@" "]; 53 | [components release]; 54 | return result; 55 | } 56 | 57 | - (NSString *)name { 58 | return [self fullname]; 59 | } 60 | 61 | - (NSString *)mobilePhoneNumber { 62 | NSDictionary *d = [self valueForKey:@"Phone"]; 63 | NSArray *labels = [d valueForKey:@"labels"]; 64 | int mobilePhoneIndex = [labels indexOfObject:kABPhoneMobileLabel]; 65 | if(mobilePhoneIndex == NSNotFound) { 66 | return nil; 67 | } 68 | NSArray *values = [d valueForKey:@"values"]; 69 | return [values objectAtIndex:mobilePhoneIndex]; 70 | } 71 | 72 | - (NSString *) phone { 73 | AbstractSender *smsSender = [[NSApp delegate] valueForKey:@"smsSender"]; 74 | NSAssert(smsSender != nil, @"sender is nil :-("); 75 | NSString *mobilePhoneNumber = [self mobilePhoneNumber]; 76 | return [smsSender normalizePhoneNumber:mobilePhoneNumber]; 77 | } 78 | 79 | - (NSString *) phoneWithSender:(AbstractSender *)sender { 80 | NSString *mobilePhoneNumber = [self mobilePhoneNumber]; 81 | return [sender normalizePhoneNumber:mobilePhoneNumber]; 82 | } 83 | 84 | + (ABPerson *)personFromFullname:(NSString *)fullName mobilePhone:(NSString *)phone sender:(AbstractSender *)sender { 85 | NSAssert(sender != nil, @"sender is nil :-("); 86 | NSEnumerator *e = [[[ABAddressBook sharedAddressBook] people] objectEnumerator]; 87 | ABPerson *p; 88 | 89 | while((p = [e nextObject])) { 90 | if([[p phoneWithSender:sender] isEqualToString:[sender normalizePhoneNumber:phone]] || 91 | [[[p fullname] lowercaseString] isEqualToString:[fullName lowercaseString]]) { 92 | return p; 93 | } 94 | } 95 | return nil; 96 | } 97 | 98 | + (ABPerson *)personFromFullname:(NSString *)fullName mobilePhone:(NSString *)phone { 99 | AbstractSender *sender = [[NSApp delegate] valueForKey:@"smsSender"]; 100 | return [ABPerson personFromFullname:fullName mobilePhone:phone sender:sender]; 101 | } 102 | 103 | + (ABPerson *)personFromUniqueId:(NSString *)uid { 104 | ABSearchElement* search = [ABPerson searchElementForProperty:kABUIDProperty label:nil key:nil value:uid comparison:kABEqualCaseInsensitive]; 105 | NSArray* matches = [[ABAddressBook sharedAddressBook] recordsMatchingSearchElement:search]; 106 | return [matches count] > 0 ? [matches lastObject] : nil; 107 | } 108 | 109 | - (NSString *)description { 110 | return [NSString stringWithFormat:@"ABPerson %@", [self fullname]]; 111 | } 112 | 113 | @end 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /STHTTPRequest/STHTTPRequest.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2012, Nicolas Seriot 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | * Neither the name of the Nicolas Seriot nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 12 | */ 13 | 14 | #import 15 | 16 | @class STHTTPRequest; 17 | 18 | typedef void (^completionBlock_t)(NSDictionary *headers, NSString *body); 19 | typedef void (^errorBlock_t)(NSError *error); 20 | 21 | @interface STHTTPRequest : NSObject { 22 | completionBlock_t completionBlock; 23 | errorBlock_t errorBlock; 24 | NSStringEncoding postDataEncoding; 25 | NSURLCredential *credential; 26 | NSURLCredential *proxyCredential; 27 | NSDictionary *POSTDictionary; 28 | NSMutableDictionary *requestHeaders; 29 | NSInteger responseStatus; 30 | NSString *responseStringEncodingName; 31 | NSDictionary *responseHeaders; 32 | NSURL *url; 33 | NSMutableData *responseData; 34 | } 35 | 36 | @property (copy) completionBlock_t completionBlock; 37 | @property (copy) errorBlock_t errorBlock; 38 | @property (nonatomic) NSStringEncoding postDataEncoding; 39 | @property (nonatomic, retain) NSURLCredential *credential; 40 | @property (nonatomic, retain) NSURLCredential *proxyCredential; 41 | @property (nonatomic, retain) NSDictionary *POSTDictionary; 42 | @property (nonatomic, retain) NSMutableDictionary *requestHeaders; 43 | @property (nonatomic, readonly) NSInteger responseStatus; 44 | @property (nonatomic, retain, readonly) NSString *responseStringEncodingName; 45 | @property (nonatomic, retain, readonly) NSDictionary *responseHeaders; 46 | @property (nonatomic, retain, readonly) NSURL *url; 47 | @property (nonatomic, retain, readonly) NSMutableData *responseData; 48 | 49 | + (STHTTPRequest *)requestWithURL:(NSURL *)url; 50 | + (STHTTPRequest *)requestWithURLString:(NSString *)urlString; 51 | 52 | - (NSString *)startSynchronousWithError:(NSError **)error; 53 | - (void)startAsynchronous; 54 | 55 | - (NSStringEncoding)responseStringEncoding; 56 | 57 | // Cookies 58 | + (void)addCookieWithName:(NSString *)name value:(NSString *)value url:(NSURL *)url; 59 | - (void)addCookieWithName:(NSString *)name value:(NSString *)value; 60 | - (void)addCookie:(NSHTTPCookie *)cookie; 61 | - (NSArray *)requestCookies; 62 | + (NSArray *)sessionCookies; 63 | + (void)deleteSessionCookies; 64 | 65 | // Credentials 66 | + (NSURLCredential *)sessionAuthenticationCredentialsForURL:(NSURL *)requestURL; 67 | - (void)setUsername:(NSString *)username password:(NSString *)password; 68 | - (void)setProxyUsername:(NSString *)username password:(NSString *)password; 69 | - (NSString *)username; 70 | - (NSString *)password; 71 | + (void)deleteAllCredentials; 72 | 73 | // Headers 74 | - (void)setHeaderWithName:(NSString *)name value:(NSString *)value; 75 | - (void)removeHeaderWithName:(NSString *)name; 76 | - (NSDictionary *)responseHeaders; 77 | 78 | // Session 79 | + (void)clearSession; // delete all credentials and cookies 80 | 81 | @end 82 | 83 | @interface NSError (STHTTPRequest) 84 | - (BOOL)st_isAuthenticationError; 85 | @end 86 | -------------------------------------------------------------------------------- /Message.m: -------------------------------------------------------------------------------- 1 | // 2 | // Message.m 3 | // SwissSMS 4 | // 5 | // Created by Nicolas Seriot on 07.04.07. 6 | // Copyright 2007 Nicolas Seriot. All rights reserved. 7 | // 8 | 9 | #import "Message.h" 10 | #import "ABPerson_SwissSMS.h" 11 | 12 | @implementation Message 13 | 14 | +(NSArray *)allObjectsInContext:(NSManagedObjectContext *)moc { 15 | NSFetchRequest *fr = [[NSFetchRequest alloc] init]; 16 | [fr setEntity:[NSEntityDescription entityForName:@"Message" inManagedObjectContext:moc]]; 17 | NSArray *a = [moc executeFetchRequest:fr error:nil]; 18 | [fr release]; 19 | return a; 20 | } 21 | 22 | +(unsigned)messagesCountInContext:(NSManagedObjectContext *)moc { 23 | return [[self allObjectsInContext:moc] count]; 24 | } 25 | 26 | +(Message *)messageWithText:(NSString *)text name:(NSString *)name phone:(NSString *)phone context:(NSManagedObjectContext *)context { 27 | Message *message = [NSEntityDescription insertNewObjectForEntityForName: @"Message" inManagedObjectContext:context]; 28 | [message setValue:[NSDate date] forKey:@"date"]; 29 | [message setValue:[[name copy] autorelease] forKey:@"name"]; 30 | [message setValue:[[phone copy] autorelease] forKey:@"phone"]; 31 | [message setValue:[[text copy] autorelease] forKey:@"text"]; 32 | return message; 33 | } 34 | 35 | -(NSDictionary *)bluePhoneEliteFormatAndRemove:(BOOL)remove { 36 | NSMutableString *phone = [NSMutableString stringWithString:[self valueForKey:@"phone"]]; 37 | [phone replaceOccurrencesOfString:@"07" withString:@"+417" options:(unsigned)NULL range:NSMakeRange(0, 4)]; 38 | NSDictionary *d = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:phone, [self valueForKey:@"text"], [NSNumber numberWithInt:3], [[self valueForKey:@"date"] description], nil] 39 | forKeys:[NSArray arrayWithObjects:@"Address", @"Message", @"State", @"TimeStamp", nil]]; 40 | if(remove) { 41 | [[self managedObjectContext] deleteObject:self]; 42 | [[self managedObjectContext] save:nil]; 43 | } 44 | return d; 45 | } 46 | 47 | -(NSString *)csvLine { 48 | NSMutableString *noTabText = [[[self valueForKey:@"text"] mutableCopy] autorelease]; 49 | [noTabText replaceOccurrencesOfString:@"\t" withString:@" " options:(unsigned)NULL range:NSMakeRange(0,[noTabText length])]; 50 | 51 | return [NSString stringWithFormat:@"%@\t%@\t%@\t%@", 52 | [self valueForKey:@"date"], 53 | [self valueForKey:@"phone"], 54 | [self valueForKey:@"name"], 55 | noTabText]; 56 | } 57 | 58 | - (ABPerson *)guessedPerson { 59 | NSString *fullname = [self valueForKey:@"name"]; 60 | NSString *phone = [self valueForKey:@"phone"]; 61 | if(!fullname || !phone) { 62 | return nil; 63 | } 64 | return [ABPerson personFromFullname:fullname mobilePhone:phone]; 65 | } 66 | 67 | - (void)toggleFlag { 68 | BOOL state = [[self valueForKey:@"flagged"] boolValue]; 69 | [self setValue:[NSNumber numberWithBool:!state] forKey:@"flagged"]; 70 | } 71 | 72 | - (NSString *)metadataFilePath { 73 | NSString *messageNumber = [[[[[self objectID] URIRepresentation] path] pathComponents] lastObject]; 74 | NSString *dir = [[NSApp delegate] valueForKey:@"metadataDirectoryPath"]; 75 | NSString *ext = [[NSApp delegate] valueForKey:@"metadataFileExtension"]; 76 | return [[dir stringByAppendingPathComponent:messageNumber] stringByAppendingPathExtension:ext]; 77 | } 78 | 79 | - (void)writeMetadataFile { 80 | NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys: 81 | [[[self objectID] URIRepresentation] absoluteString], @"objectID", 82 | [self valueForKey:@"text"], @"text", 83 | [self valueForKey:@"date"], @"date", 84 | [self valueForKey:@"name"], @"name", 85 | [self valueForKey:@"phone"], @"phone", nil]; 86 | 87 | NSString *path = [self metadataFilePath]; 88 | 89 | [d writeToFile:path atomically:YES]; 90 | } 91 | 92 | 93 | - (BOOL)removeMetadataFile { 94 | NSString *path = [self metadataFilePath]; 95 | // [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 96 | NSError *error = nil; 97 | BOOL success = [[NSFileManager defaultManager] removeItemAtPath:path error:&error]; 98 | if(success == NO) { 99 | NSLog(@"-- %@", [error localizedDescription]); 100 | } 101 | return success; 102 | } 103 | 104 | 105 | 106 | @end 107 | --------------------------------------------------------------------------------