├── .gitignore ├── Classes ├── Controllers │ ├── AppController.h │ ├── AppController.m │ ├── GrowlController.m │ ├── ImageDownloadManager.h │ ├── ImageDownloadManager.m │ ├── LimeChatApplication.h │ ├── LimeChatApplication.m │ ├── MenuController.h │ ├── MenuController.m │ ├── NickCompletinStatus.h │ ├── NickCompletinStatus.m │ └── Notifications │ │ ├── NotificationController.h │ │ ├── UserNotificationController.h │ │ └── UserNotificationController.m ├── Dialogs │ ├── ChannelDialog.h │ ├── ChannelDialog.m │ ├── DCC │ │ ├── DCCController.h │ │ ├── DCCController.m │ │ ├── DCCFileTransferCell.h │ │ ├── DCCFileTransferCell.m │ │ ├── DCCReceiver.h │ │ ├── DCCReceiver.m │ │ ├── DCCSender.h │ │ └── DCCSender.m │ ├── IgnoreItemSheet.h │ ├── IgnoreItemSheet.m │ ├── InviteSheet.h │ ├── InviteSheet.m │ ├── ListDialog.h │ ├── ListDialog.m │ ├── ModeSheet.h │ ├── ModeSheet.m │ ├── NickSheet.h │ ├── NickSheet.m │ ├── PasteSheet.h │ ├── PasteSheet.m │ ├── Preferences │ │ ├── PreferencesController.h │ │ ├── PreferencesController.m │ │ ├── SoundWrapper.h │ │ └── SoundWrapper.m │ ├── ServerDialog.h │ ├── ServerDialog.m │ ├── SheetBase.h │ ├── SheetBase.m │ ├── TopicSheet.h │ ├── TopicSheet.m │ ├── WelcomeDialog.h │ ├── WelcomeDialog.m │ ├── WhoisDialog.h │ └── WhoisDialog.m ├── Helpers │ ├── GTMBase64.h │ ├── GTMBase64.m │ ├── GTMDefines.h │ ├── GTMGarbageCollection.h │ ├── GTMNSString+HTML.h │ ├── GTMNSString+HTML.m │ ├── GTMNSString+URLArguments.h │ ├── GTMNSString+URLArguments.m │ ├── LCFSystemInfo.h │ ├── LCFSystemInfo.m │ ├── NSColorHelper.h │ ├── NSColorHelper.m │ ├── NSData+Kana.h │ ├── NSData+Kana.m │ ├── NSDataHelper.h │ ├── NSDataHelper.m │ ├── NSDateHelper.h │ ├── NSDateHelper.m │ ├── NSDictionaryHelper.h │ ├── NSDictionaryHelper.m │ ├── NSLocaleHelper.h │ ├── NSLocaleHelper.m │ ├── NSPasteboardHelper.h │ ├── NSPasteboardHelper.m │ ├── NSRectHelper.h │ ├── NSRectHelper.m │ ├── NSStringHelper.h │ ├── NSStringHelper.m │ ├── NSWindowHelper.h │ ├── NSWindowHelper.m │ ├── SoundPlayer.h │ ├── SoundPlayer.m │ ├── URLOpener.h │ ├── URLOpener.m │ ├── UnicodeHelper.h │ └── UnicodeHelper.m ├── IRC │ ├── IRC.h │ ├── IRCChannel.h │ ├── IRCChannel.m │ ├── IRCChannelConfig.h │ ├── IRCChannelConfig.m │ ├── IRCChannelMode.h │ ├── IRCChannelMode.m │ ├── IRCClient.h │ ├── IRCClient.m │ ├── IRCClientConfig.h │ ├── IRCClientConfig.m │ ├── IRCConnection.h │ ├── IRCConnection.m │ ├── IRCISupportInfo.h │ ├── IRCISupportInfo.m │ ├── IRCMessage.h │ ├── IRCMessage.m │ ├── IRCPrefix.h │ ├── IRCPrefix.m │ ├── IRCSendingMessage.h │ ├── IRCSendingMessage.m │ ├── IRCTreeItem.h │ ├── IRCTreeItem.m │ ├── IRCUser.h │ ├── IRCUser.m │ ├── IRCUserMode.h │ ├── IRCUserMode.m │ ├── IRCWorld.h │ ├── IRCWorld.m │ ├── IRCWorldConfig.h │ ├── IRCWorldConfig.m │ ├── IgnoreItem.h │ ├── IgnoreItem.m │ ├── TimerCommand.h │ └── TimerCommand.m ├── Library │ ├── AsyncSocket.h │ ├── AsyncSocket.m │ ├── CocoaOniguruma │ │ ├── OnigRegexpUtility.h │ │ ├── OnigRegexpUtility.m │ │ └── oniguruma │ │ │ └── COPYING │ ├── FileLogger.h │ ├── FileLogger.m │ ├── HostResolver.h │ ├── HostResolver.m │ ├── HotKeyManager.h │ ├── HotKeyManager.m │ ├── IconController.h │ ├── IconController.m │ ├── ImageSizeCheckClient.h │ ├── ImageSizeCheckClient.m │ ├── InputHistory.h │ ├── InputHistory.m │ ├── KeyEventHandler.h │ ├── KeyEventHandler.m │ ├── Keychain.h │ ├── Keychain.m │ ├── Regex.h │ ├── Regex.m │ ├── TCPClient.h │ ├── TCPClient.m │ ├── TCPServer.h │ ├── TCPServer.m │ ├── Timer.h │ ├── Timer.m │ └── YAML │ │ ├── README │ │ ├── SyckInput.m │ │ ├── YAML.h │ │ ├── YAMLCategories.h │ │ ├── YAMLCategories.m │ │ └── syck │ │ ├── COPYING │ │ ├── bytecode.c │ │ ├── emitter.c │ │ ├── gram.c │ │ ├── gram.h │ │ ├── handler.c │ │ ├── implicit.c │ │ ├── node.c │ │ ├── syck.c │ │ ├── syck.h │ │ ├── syck_st.c │ │ ├── syck_st.h │ │ ├── sycklex.h │ │ ├── token.c │ │ ├── yaml2byte.c │ │ └── yamlbyte.h ├── Preferences │ ├── CustomJSFile.h │ ├── CustomJSFile.m │ ├── LogTheme.h │ ├── LogTheme.m │ ├── OtherTheme.h │ ├── OtherTheme.m │ ├── Preferences.h │ ├── Preferences.m │ ├── ViewTheme.h │ └── ViewTheme.m └── Views │ ├── ChatBox.h │ ├── ChatBox.m │ ├── DialogWindow.h │ ├── DialogWindow.m │ ├── FieldEditorTextView.h │ ├── FieldEditorTextView.m │ ├── InputTextField.h │ ├── InputTextField.m │ ├── KeyRecorder │ ├── KeyCodeTranslator.h │ ├── KeyCodeTranslator.m │ ├── KeyRecorder.h │ ├── KeyRecorder.m │ ├── KeyRecorderCell.h │ └── KeyRecorderCell.m │ ├── ListView.h │ ├── ListView.m │ ├── Log │ ├── ImageURLParser.h │ ├── ImageURLParser.m │ ├── LogController.h │ ├── LogController.m │ ├── LogLine.h │ ├── LogLine.m │ ├── LogPolicy.h │ ├── LogPolicy.m │ ├── LogRenderer.h │ ├── LogRenderer.m │ ├── LogScriptEventSink.h │ ├── LogScriptEventSink.m │ ├── LogView.h │ ├── LogView.m │ ├── WebViewAutoScroll.h │ └── WebViewAutoScroll.m │ ├── MainWindow.h │ ├── MainWindow.m │ ├── MarkedScroller.h │ ├── MarkedScroller.m │ ├── MemberList │ ├── MemberListView.h │ ├── MemberListView.m │ ├── MemberListViewCell.h │ └── MemberListViewCell.m │ ├── NumericTextField.h │ ├── NumericTextField.m │ ├── ServerTreeView.h │ ├── ServerTreeView.m │ ├── SingleLineFormatter.h │ ├── SingleLineFormatter.m │ ├── TableProgressIndicator.h │ ├── TableProgressIndicator.m │ ├── TextField.h │ ├── TextField.m │ ├── TextFieldWithDisabledState.h │ ├── TextFieldWithDisabledState.m │ ├── ThinSplitView.h │ ├── ThinSplitView.m │ ├── TreeView.h │ └── TreeView.m ├── Frameworks ├── Sparkle.framework │ ├── Headers │ ├── Resources │ ├── Sparkle │ └── Versions │ │ ├── A │ │ ├── Headers │ │ │ ├── SUAppcast.h │ │ │ ├── SUAppcastItem.h │ │ │ ├── SUUpdater.h │ │ │ ├── SUVersionComparisonProtocol.h │ │ │ └── Sparkle.h │ │ ├── Resources │ │ │ ├── Info.plist │ │ │ ├── License.txt │ │ │ ├── SUModelTranslation.plist │ │ │ ├── SUStatus.nib │ │ │ ├── en.lproj │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ └── Sparkle.strings │ │ │ └── relaunch │ │ └── Sparkle │ │ └── Current └── Sparkle │ ├── SigningTools │ ├── generate_keys.rb │ └── sign_update.rb │ └── SourceCode │ ├── Configurations │ ├── ConfigCommon.xcconfig │ ├── ConfigCommonDebug.xcconfig │ ├── ConfigCommonRelease.xcconfig │ ├── ConfigFramework.xcconfig │ ├── ConfigFrameworkDebug.xcconfig │ ├── ConfigFrameworkRelease.xcconfig │ ├── ConfigFrameworkReleaseGCSupport.xcconfig │ ├── ConfigRelaunch.xcconfig │ ├── ConfigRelaunchDebug.xcconfig │ ├── ConfigRelaunchRelease.xcconfig │ ├── ConfigTestApp.xcconfig │ ├── ConfigTestAppDebug.xcconfig │ └── ConfigTestAppRelease.xcconfig │ ├── Info.plist │ ├── License.txt │ ├── Makefile │ ├── NTSynchronousTask.h │ ├── NTSynchronousTask.m │ ├── Relaunch Tool-Info.plist │ ├── SUAppcast.h │ ├── SUAppcast.m │ ├── SUAppcastItem.h │ ├── SUAppcastItem.m │ ├── SUAutomaticUpdateAlert.h │ ├── SUAutomaticUpdateAlert.m │ ├── SUAutomaticUpdateDriver.h │ ├── SUAutomaticUpdateDriver.m │ ├── SUBasicUpdateDriver.h │ ├── SUBasicUpdateDriver.m │ ├── SUConstants.h │ ├── SUConstants.m │ ├── SUDSAVerifier.h │ ├── SUDSAVerifier.m │ ├── SUDiskImageUnarchiver.h │ ├── SUDiskImageUnarchiver.m │ ├── SUHost.h │ ├── SUHost.m │ ├── SUInstaller.h │ ├── SUInstaller.m │ ├── SUModelTranslation.plist │ ├── SUPackageInstaller.h │ ├── SUPackageInstaller.m │ ├── SUPipedUnarchiver.h │ ├── SUPipedUnarchiver.m │ ├── SUPlainInstaller.h │ ├── SUPlainInstaller.m │ ├── SUPlainInstallerInternals.h │ ├── SUPlainInstallerInternals.m │ ├── SUProbingUpdateDriver.h │ ├── SUProbingUpdateDriver.m │ ├── SUScheduledUpdateDriver.h │ ├── SUScheduledUpdateDriver.m │ ├── SUStandardVersionComparator.h │ ├── SUStandardVersionComparator.m │ ├── SUStatus.nib │ ├── classes.nib │ ├── info.nib │ └── keyedobjects.nib │ ├── SUStatusController.h │ ├── SUStatusController.m │ ├── SUSystemProfiler.h │ ├── SUSystemProfiler.m │ ├── SUUIBasedUpdateDriver.h │ ├── SUUIBasedUpdateDriver.m │ ├── SUUnarchiver.h │ ├── SUUnarchiver.m │ ├── SUUnarchiver_Private.h │ ├── SUUnarchiver_Private.m │ ├── SUUpdateAlert.h │ ├── SUUpdateAlert.m │ ├── SUUpdateDriver.h │ ├── SUUpdateDriver.m │ ├── SUUpdatePermissionPrompt.h │ ├── SUUpdatePermissionPrompt.m │ ├── SUUpdater.h │ ├── SUUpdater.m │ ├── SUUserInitiatedUpdateDriver.h │ ├── SUUserInitiatedUpdateDriver.m │ ├── SUVersionComparisonProtocol.h │ ├── SUWindowController.h │ ├── SUWindowController.m │ ├── Sparkle.h │ ├── Sparkle.icns │ ├── Sparkle.pch │ ├── Sparkle.xcodeproj │ └── project.pbxproj │ ├── Test Application │ ├── English.lproj │ │ ├── InfoPlist.strings │ │ └── MainMenu.nib │ │ │ ├── classes.nib │ │ │ ├── info.nib │ │ │ └── keyedobjects.nib │ ├── Test Application-Info.plist │ ├── dsa_priv.pem │ ├── dsa_pub.pem │ └── main.m │ ├── Tests │ ├── SUVersionComparisonTest.h │ ├── SUVersionComparisonTest.m │ └── Sparkle Unit Tests-Info.plist │ ├── en.lproj │ ├── SUAutomaticUpdateAlert.nib │ │ ├── classes.nib │ │ ├── info.nib │ │ └── keyedobjects.nib │ ├── SUAutomaticUpdateAlert.strings │ ├── SUStatus.strings │ ├── SUUpdateAlert.nib │ │ ├── classes.nib │ │ ├── info.nib │ │ └── keyedobjects.nib │ ├── SUUpdateAlert.strings │ ├── SUUpdatePermissionPrompt.nib │ │ ├── classes.nib │ │ ├── info.nib │ │ └── keyedobjects.nib │ └── Sparkle.strings │ └── relaunch.m ├── GPL.txt ├── LimeChat.xcodeproj └── project.pbxproj ├── Others ├── AppStore │ ├── Info-AppStore.plist │ └── container-migration.plist ├── LimeChat_Prefix.pch ├── Normal │ ├── Info.plist │ └── container-migration.plist └── main.m ├── README.md ├── Rakefile ├── Resources ├── App.xcassets │ ├── Contents.json │ ├── eraseButton.colorset │ │ └── Contents.json │ ├── highlightedEraseButton.colorset │ │ └── Contents.json │ └── separator.colorset │ │ └── Contents.json ├── AppStore │ └── screenshot.png ├── Base.lproj │ ├── ChannelDialog.xib │ ├── DCCDialog.xib │ ├── IgnoreItemSheet.xib │ ├── InviteSheet.xib │ ├── ListDialog.xib │ ├── Localizable.strings │ ├── MainMenu.xib │ ├── ModeSheet.xib │ ├── NickSheet.xib │ ├── PasteSheet.xib │ ├── Preferences.xib │ ├── ServerDialog.xib │ ├── TopicSheet.xib │ ├── WelcomeDialog.xib │ └── WhoisDialog.xib ├── LimeChat.entitlements ├── Themes │ ├── Alternate Lines.css │ ├── Deep Ocean.css │ ├── Deep Ocean.yaml │ ├── Deep Ocean │ │ └── background.png │ ├── Limelight-README.markdown │ ├── Limelight.css │ ├── Limelight.yaml │ ├── Limelight │ │ ├── GrowlLicense.txt │ │ ├── growl.png │ │ ├── limechat.png │ │ ├── python.png │ │ ├── ruby.png │ │ ├── rubyonrails.png │ │ └── textmate.png │ ├── Sample.css │ ├── Sample.yaml │ ├── Spring Night.css │ └── Spring Night.yaml ├── icon │ └── application.iconset │ │ ├── icon_128x128.png │ │ ├── icon_128x128@2x.png │ │ ├── icon_16x16.png │ │ ├── icon_16x16@2x.png │ │ ├── icon_256x256.png │ │ ├── icon_256x256@2x.png │ │ ├── icon_32x32.png │ │ ├── icon_32x32@2x.png │ │ ├── icon_512x512.png │ │ └── icon_512x512@2x.png └── images │ ├── bluebadge.png │ ├── bluebadge@2x.png │ ├── redbadge.png │ └── redbadge@2x.png ├── etc └── dsa_pub.pem └── web ├── .htaccess ├── appcast.xml ├── images ├── deepocean.png ├── deepocean200.png ├── default.png ├── default200.png ├── default3col.png ├── default3col200.png ├── donate_button.gif ├── favicon.ico ├── feed.gif ├── limelight.png ├── limelight200.png ├── logo.png ├── springnight3col.png ├── springnight3col200.png ├── white.png └── white200.png ├── index.html ├── ja.html ├── limechat_appcast.xml ├── rss.xml └── templates ├── appcast.rxml └── rss.rxml /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | DerivedData 3 | Packages 4 | xcuserdata 5 | project.xcworkspace 6 | etc/dsa_priv.pem 7 | .DS_Store 8 | .LSOverride 9 | *.pbxuser 10 | *.mode1* 11 | *~.nib 12 | *.tmproj 13 | *.tm_build_errors 14 | -------------------------------------------------------------------------------- /Classes/Controllers/ImageDownloadManager.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCClient.h" 6 | #import "IRCChannel.h" 7 | 8 | 9 | @interface ImageDownloadManager : NSObject 10 | 11 | @property (nonatomic, weak) IRCWorld* world; 12 | 13 | + (ImageDownloadManager*)instance; 14 | + (void)disposeInstance; 15 | 16 | - (void)checkImageSize:(NSString*)url client:(IRCClient*)client channel:(IRCChannel*)channel lineNumber:(int)lineNumber imageIndex:(int)imageIndex; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Classes/Controllers/LimeChatApplication.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "HotKeyManager.h" 6 | 7 | 8 | @interface LimeChatApplication : NSApplication 9 | 10 | - (void)registerHotKey:(int)keyCode modifierFlags:(NSUInteger)modFlags; 11 | - (void)unregisterHotKey; 12 | 13 | @end 14 | 15 | 16 | @interface NSObject (LimeChatApplicationDelegate) 17 | - (void)applicationDidReceiveHotKey:(id)sender; 18 | @end 19 | -------------------------------------------------------------------------------- /Classes/Controllers/NickCompletinStatus.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NickCompletinStatus : NSObject 8 | 9 | @property (nonatomic) NSString* text; 10 | @property (nonatomic) NSRange range; 11 | 12 | - (void)clear; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Classes/Controllers/NickCompletinStatus.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NickCompletinStatus.h" 5 | 6 | 7 | @implementation NickCompletinStatus 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | [self clear]; 14 | } 15 | return self; 16 | } 17 | 18 | - (void)clear 19 | { 20 | _text = nil; 21 | _range = NSMakeRange(NSNotFound, 0); 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Classes/Controllers/Notifications/NotificationController.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | typedef enum { 8 | USER_NOTIFICATION_HIGHLIGHT, 9 | USER_NOTIFICATION_NEW_TALK, 10 | USER_NOTIFICATION_CHANNEL_MSG, 11 | USER_NOTIFICATION_CHANNEL_NOTICE, 12 | USER_NOTIFICATION_TALK_MSG, 13 | USER_NOTIFICATION_TALK_NOTICE, 14 | USER_NOTIFICATION_KICKED, 15 | USER_NOTIFICATION_INVITED, 16 | USER_NOTIFICATION_LOGIN, 17 | USER_NOTIFICATION_DISCONNECT, 18 | USER_NOTIFICATION_FILE_RECEIVE_REQUEST, 19 | USER_NOTIFICATION_FILE_RECEIVE_SUCCESS, 20 | USER_NOTIFICATION_FILE_RECEIVE_ERROR, 21 | USER_NOTIFICATION_FILE_SEND_SUCCESS, 22 | USER_NOTIFICATION_FILE_SEND_ERROR, 23 | USER_NOTIFICATION_COUNT, 24 | } UserNotificationType; 25 | 26 | 27 | #define USER_NOTIFICATION_DCC_KEY @"dcc" 28 | #define USER_NOTIFICATION_CLIENT_ID_KEY @"clientId" 29 | #define USER_NOTIFICATION_CHANNEL_ID_KEY @"channelId" 30 | #define USER_NOTIFICATION_INVITED_CHANNEL_NAME_KEY @"invitedChannelName" 31 | 32 | 33 | @protocol NotificationControllerDelegate 34 | - (void)notificationControllerDidActivateNotification:(id)context actionButtonClicked:(BOOL)actionButtonClicked; 35 | @end 36 | 37 | 38 | @protocol NotificationController 39 | @property (nonatomic, weak) id delegate; 40 | - (void)notify:(UserNotificationType)type title:(NSString*)title desc:(NSString*)desc context:(id)context; 41 | @end 42 | -------------------------------------------------------------------------------- /Classes/Controllers/Notifications/UserNotificationController.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NotificationController.h" 5 | 6 | 7 | @interface UserNotificationController : NSObject 8 | 9 | @property (nonatomic, weak) id delegate; 10 | 11 | - (void)notify:(UserNotificationType)type title:(NSString*)title desc:(NSString*)desc context:(id)context; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Dialogs/ChannelDialog.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCChannelConfig.h" 6 | 7 | 8 | @interface ChannelDialog : NSObject 9 | 10 | @property (nonatomic, weak) id delegate; 11 | @property (nonatomic, weak) NSWindow* parentWindow; 12 | @property (nonatomic) int uid; 13 | @property (nonatomic) int cid; 14 | @property (nonatomic) IRCChannelConfig* config; 15 | 16 | @property (nonatomic) IBOutlet NSWindow* window; 17 | @property (nonatomic) IBOutlet NSTextField* nameText; 18 | @property (nonatomic) IBOutlet NSTextField* passwordText; 19 | @property (nonatomic) IBOutlet NSTextField* modeText; 20 | @property (nonatomic) IBOutlet NSTextField* topicText; 21 | @property (nonatomic) IBOutlet NSButton* autoJoinCheck; 22 | @property (nonatomic) IBOutlet NSButton* consoleCheck; 23 | @property (nonatomic) IBOutlet NSButton* notifyCheck; 24 | @property (nonatomic) IBOutlet NSButton* okButton; 25 | 26 | - (void)start; 27 | - (void)startSheet; 28 | - (void)show; 29 | - (void)close; 30 | 31 | - (IBAction)ok:(id)sender; 32 | - (IBAction)cancel:(id)sender; 33 | 34 | @end 35 | 36 | 37 | @interface NSObject (ChannelDialogDelegate) 38 | - (void)channelDialogOnOK:(ChannelDialog*)sender; 39 | - (void)channelDialogWillClose:(ChannelDialog*)sender; 40 | @end 41 | -------------------------------------------------------------------------------- /Classes/Dialogs/DCC/DCCController.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "ThinSplitView.h" 6 | #import "ListView.h" 7 | #import "Timer.h" 8 | 9 | 10 | @class IRCWorld; 11 | @class IRCClient; 12 | 13 | 14 | @interface DCCController : NSWindowController 15 | 16 | @property (nonatomic, weak) id delegate; 17 | @property (nonatomic, weak) IRCWorld* world; 18 | @property (nonatomic, weak) NSWindow* mainWindow; 19 | 20 | @property (nonatomic) IBOutlet ListView* receiverTable; 21 | @property (nonatomic) IBOutlet ListView* senderTable; 22 | @property (nonatomic) IBOutlet ThinSplitView* splitter; 23 | @property (nonatomic) IBOutlet NSButton* clearButton; 24 | 25 | - (void)show:(BOOL)key; 26 | - (void)close; 27 | - (void)terminate; 28 | - (void)nickChanged:(NSString*)nick toNick:(NSString*)toNick client:(IRCClient*)client; 29 | 30 | - (void)addReceiverWithUID:(int)uid nick:(NSString*)nick host:(NSString*)host port:(int)port path:(NSString*)path fileName:(NSString*)fileName size:(long long)size; 31 | - (void)addSenderWithUID:(int)uid nick:(NSString*)nick fileName:(NSString*)fileName autoOpen:(BOOL)autoOpen; 32 | - (int)countReceivingItems; 33 | - (int)countSendingItems; 34 | 35 | - (void)clear:(id)sender; 36 | 37 | - (void)startReceiver:(id)sender; 38 | - (void)stopReceiver:(id)sender; 39 | - (void)deleteReceiver:(id)sender; 40 | - (void)openReceiver:(id)sender; 41 | - (void)revealReceivedFileInFinder:(id)sender; 42 | 43 | - (void)startSender:(id)sender; 44 | - (void)stopSender:(id)sender; 45 | - (void)deleteSender:(id)sender; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Classes/Dialogs/DCC/DCCFileTransferCell.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | typedef enum { 8 | DCC_INIT, 9 | DCC_ERROR, 10 | DCC_STOP, 11 | DCC_CONNECTING, 12 | DCC_LISTENING, 13 | DCC_RECEIVING, 14 | DCC_SENDING, 15 | DCC_COMPLETE, 16 | } DCCFileTransferStatus; 17 | 18 | 19 | @interface DCCFileTransferCell : NSCell 20 | 21 | @property (nonatomic) NSString* peerNick; 22 | @property (nonatomic) long long processedSize; 23 | @property (nonatomic) long long size; 24 | @property (nonatomic) long long speed; 25 | @property (nonatomic) long long timeRemaining; 26 | @property (nonatomic) DCCFileTransferStatus status; 27 | @property (nonatomic) NSString* error; 28 | @property (nonatomic) NSProgressIndicator* progressBar; 29 | @property (nonatomic) NSImage* icon; 30 | @property (nonatomic) BOOL sendingItem; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Classes/Dialogs/DCC/DCCReceiver.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "DCCFileTransferCell.h" 6 | #import "TCPClient.h" 7 | 8 | 9 | @interface DCCReceiver : NSObject 10 | 11 | @property (nonatomic, weak) id delegate; 12 | @property (nonatomic) int uid; 13 | @property (nonatomic) NSString* peerNick; 14 | @property (nonatomic) NSString* host; 15 | @property (nonatomic) int port; 16 | @property (nonatomic) long long size; 17 | @property (nonatomic, readonly) long long processedSize; 18 | @property (nonatomic, readonly) DCCFileTransferStatus status; 19 | @property (nonatomic, readonly) NSString* error; 20 | @property (nonatomic) NSString* path; 21 | @property (nonatomic) NSString* fileName; 22 | @property (nonatomic, readonly) NSString* downloadFileName; 23 | @property (nonatomic, readonly) NSImage* icon; 24 | @property (nonatomic) NSProgressIndicator* progressBar; 25 | @property (nonatomic, readonly) double speed; 26 | 27 | - (void)open; 28 | - (void)close; 29 | - (void)onTimer; 30 | 31 | @end 32 | 33 | 34 | @interface NSObject (DCCReceiverDelegate) 35 | - (void)dccReceiveOnOpen:(DCCReceiver*)sender; 36 | - (void)dccReceiveOnClose:(DCCReceiver*)sender; 37 | - (void)dccReceiveOnError:(DCCReceiver*)sender; 38 | - (void)dccReceiveOnComplete:(DCCReceiver*)sender; 39 | @end 40 | -------------------------------------------------------------------------------- /Classes/Dialogs/DCC/DCCSender.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "DCCFileTransferCell.h" 6 | #import "TCPServer.h" 7 | 8 | 9 | @interface DCCSender : NSObject 10 | 11 | @property (nonatomic, weak) id delegate; 12 | @property (nonatomic) int uid; 13 | @property (nonatomic) NSString* peerNick; 14 | @property (nonatomic, readonly) int port; 15 | @property (nonatomic, readonly) NSString* fileName; 16 | @property (nonatomic) NSString* fullFileName; 17 | @property (nonatomic, readonly) long long size; 18 | @property (nonatomic, readonly) long long processedSize; 19 | @property (nonatomic, readonly) DCCFileTransferStatus status; 20 | @property (nonatomic, readonly) NSString* error; 21 | @property (nonatomic, readonly) NSImage* icon; 22 | @property (nonatomic) NSProgressIndicator* progressBar; 23 | @property (nonatomic, readonly) double speed; 24 | 25 | - (BOOL)open; 26 | - (void)close; 27 | - (void)onTimer; 28 | - (void)setAddressError; 29 | 30 | @end 31 | 32 | 33 | @interface NSObject (DCCSenderDelegate) 34 | - (void)dccSenderOnListen:(DCCSender*)sender; 35 | - (void)dccSenderOnConnect:(DCCSender*)sender; 36 | - (void)dccSenderOnClose:(DCCSender*)sender; 37 | - (void)dccSenderOnError:(DCCSender*)sender; 38 | - (void)dccSenderOnComplete:(DCCSender*)sender; 39 | @end 40 | -------------------------------------------------------------------------------- /Classes/Dialogs/IgnoreItemSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | #import "IgnoreItem.h" 7 | #import "ListView.h" 8 | 9 | 10 | @interface IgnoreItemSheet : SheetBase 11 | 12 | @property (nonatomic) IgnoreItem* ignore; 13 | @property (nonatomic) BOOL newItem; 14 | 15 | @property (nonatomic) IBOutlet NSButton* nickCheck; 16 | @property (nonatomic) IBOutlet NSPopUpButton* nickPopup; 17 | @property (nonatomic) IBOutlet NSTextField* nickText; 18 | @property (nonatomic) IBOutlet NSButton* messageCheck; 19 | @property (nonatomic) IBOutlet NSPopUpButton* messagePopup; 20 | @property (nonatomic) IBOutlet NSTextField* messageText; 21 | @property (nonatomic) IBOutlet ListView* channelTable; 22 | @property (nonatomic) IBOutlet NSButton* deleteChannelButton; 23 | 24 | - (void)start; 25 | 26 | - (IBAction)addChannel:(id)sender; 27 | - (IBAction)deleteChannel:(id)sender; 28 | 29 | @end 30 | 31 | 32 | @interface NSObject (IgnoreItemSheetDelegate) 33 | - (void)ignoreItemSheetOnOK:(IgnoreItemSheet*)sender; 34 | - (void)ignoreItemSheetWillClose:(IgnoreItemSheet*)sender; 35 | @end 36 | -------------------------------------------------------------------------------- /Classes/Dialogs/InviteSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | 7 | 8 | @interface InviteSheet : SheetBase 9 | 10 | @property (nonatomic) NSArray* nicks; 11 | @property (nonatomic) int uid; 12 | 13 | @property (nonatomic) IBOutlet NSTextField* titleLabel; 14 | @property (nonatomic) IBOutlet NSPopUpButton* channelPopup; 15 | 16 | - (void)startWithChannels:(NSArray*)channels; 17 | 18 | - (IBAction)invite:(id)sender; 19 | 20 | @end 21 | 22 | 23 | @interface NSObject (InviteSheetDelegate) 24 | - (void)inviteSheet:(InviteSheet*)sender onSelectChannel:(NSString*)channelName; 25 | - (void)inviteSheetWillClose:(InviteSheet*)sender; 26 | @end 27 | -------------------------------------------------------------------------------- /Classes/Dialogs/ListDialog.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "ListView.h" 6 | 7 | 8 | @interface ListDialog : NSWindowController 9 | 10 | @property (nonatomic, weak) id delegate; 11 | @property (nonatomic, readonly) int sortKey; 12 | @property (nonatomic, readonly) NSComparisonResult sortOrder; 13 | 14 | @property (nonatomic) IBOutlet ListView* table; 15 | @property (nonatomic) IBOutlet NSSearchField* filterText; 16 | @property (nonatomic) IBOutlet NSButton* updateButton; 17 | 18 | - (void)start; 19 | - (void)show; 20 | - (void)close; 21 | - (void)clear; 22 | 23 | - (void)addChannel:(NSString*)channel count:(int)count topic:(NSString*)topic; 24 | 25 | - (IBAction)onClose:(id)sender; 26 | - (IBAction)onUpdate:(id)sender; 27 | - (IBAction)onJoin:(id)sender; 28 | - (IBAction)onSearchFieldChange:(id)sender; 29 | 30 | @end 31 | 32 | 33 | @interface NSObject (ListDialogDelegate) 34 | - (void)listDialogOnUpdate:(ListDialog*)sender; 35 | - (void)listDialogOnJoin:(ListDialog*)sender channel:(NSString*)channel; 36 | - (void)listDialogWillClose:(ListDialog*)sender; 37 | @end 38 | -------------------------------------------------------------------------------- /Classes/Dialogs/ModeSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | #import "IRCChannelMode.h" 7 | 8 | 9 | @interface ModeSheet : SheetBase 10 | 11 | @property (nonatomic) IRCChannelMode* mode; 12 | @property (nonatomic) NSString* channelName; 13 | @property (nonatomic) int uid; 14 | @property (nonatomic) int cid; 15 | 16 | @property (nonatomic) IBOutlet NSButton* sCheck; 17 | @property (nonatomic) IBOutlet NSButton* pCheck; 18 | @property (nonatomic) IBOutlet NSButton* nCheck; 19 | @property (nonatomic) IBOutlet NSButton* tCheck; 20 | @property (nonatomic) IBOutlet NSButton* iCheck; 21 | @property (nonatomic) IBOutlet NSButton* mCheck; 22 | @property (nonatomic) IBOutlet NSButton* aCheck; 23 | @property (nonatomic) IBOutlet NSButton* rCheck; 24 | @property (nonatomic) IBOutlet NSButton* kCheck; 25 | @property (nonatomic) IBOutlet NSButton* lCheck; 26 | @property (nonatomic) IBOutlet NSTextField* kText; 27 | @property (nonatomic) IBOutlet NSTextField* lText; 28 | 29 | - (void)start; 30 | 31 | - (IBAction)onChangeCheck:(id)sender; 32 | 33 | @end 34 | 35 | 36 | @interface NSObject (ModeSheetDelegate) 37 | - (void)modeSheetOnOK:(ModeSheet*)sender; 38 | - (void)modeSheetWillClose:(ModeSheet*)sender; 39 | @end 40 | -------------------------------------------------------------------------------- /Classes/Dialogs/NickSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | 7 | 8 | @interface NickSheet : SheetBase 9 | 10 | @property (nonatomic) int uid; 11 | 12 | @property (nonatomic) IBOutlet NSTextField* currentText; 13 | @property (nonatomic) IBOutlet NSTextField* nextText; 14 | 15 | - (void)start:(NSString*)nick; 16 | 17 | @end 18 | 19 | 20 | @interface NSObject (NickSheetDelegate) 21 | - (void)nickSheet:(NickSheet*)sender didInputNick:(NSString*)nick; 22 | - (void)nickSheetWillClose:(NickSheet*)sender; 23 | @end 24 | -------------------------------------------------------------------------------- /Classes/Dialogs/NickSheet.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NickSheet.h" 5 | 6 | 7 | @implementation NickSheet 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | [[NSBundle mainBundle] loadNibNamed:@"NickSheet" owner:self topLevelObjects:nil]; 14 | } 15 | return self; 16 | } 17 | 18 | - (void)start:(NSString*)nick 19 | { 20 | [_currentText setStringValue:nick]; 21 | [_nextText setStringValue:nick]; 22 | [self.sheet makeFirstResponder:_nextText]; 23 | 24 | [self startSheet]; 25 | } 26 | 27 | - (void)ok:(id)sender 28 | { 29 | if ([self.delegate respondsToSelector:@selector(nickSheet:didInputNick:)]) { 30 | [self.delegate nickSheet:self didInputNick:_nextText.stringValue]; 31 | } 32 | 33 | [super ok:sender]; 34 | } 35 | 36 | #pragma mark - NSWindow Delegate 37 | 38 | - (void)windowWillClose:(NSNotification*)note 39 | { 40 | if ([self.delegate respondsToSelector:@selector(nickSheetWillClose:)]) { 41 | [self.delegate nickSheetWillClose:self]; 42 | } 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Classes/Dialogs/PasteSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | 7 | 8 | @interface PasteSheet : SheetBase 9 | 10 | @property (nonatomic) NSString* nick; 11 | @property (nonatomic) int uid; 12 | @property (nonatomic) int cid; 13 | @property (nonatomic) NSString* originalText; 14 | @property (nonatomic) NSString* command; 15 | @property (nonatomic) NSSize size; 16 | @property (nonatomic) BOOL editMode; 17 | @property (nonatomic, readonly) BOOL isShortText; 18 | 19 | @property (nonatomic) IBOutlet NSTextView* bodyText; 20 | @property (nonatomic) IBOutlet NSButton* sendInChannelButton; 21 | @property (nonatomic) IBOutlet NSPopUpButton* commandPopup; 22 | 23 | - (void)start; 24 | 25 | - (IBAction)sendInChannel:(id)sender; 26 | 27 | @end 28 | 29 | 30 | @interface NSObject (PasteSheetDelegate) 31 | - (void)pasteSheet:(PasteSheet*)sender onPasteText:(NSString*)text; 32 | - (void)pasteSheetOnCancel:(PasteSheet*)sender; 33 | - (void)pasteSheetWillClose:(PasteSheet*)sender; 34 | @end 35 | -------------------------------------------------------------------------------- /Classes/Dialogs/Preferences/SoundWrapper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "NotificationController.h" 6 | 7 | 8 | #define EMPTY_SOUND @"-" 9 | 10 | 11 | @interface SoundWrapper : NSObject 12 | 13 | @property (nonatomic, readonly) NSString* displayName; 14 | @property (nonatomic) NSString* sound; 15 | @property (nonatomic) BOOL notification; 16 | 17 | + (SoundWrapper*)soundWrapperWithEventType:(UserNotificationType)eventType; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Classes/Dialogs/Preferences/SoundWrapper.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "SoundWrapper.h" 5 | #import "SoundPlayer.h" 6 | #import "Preferences.h" 7 | 8 | 9 | @implementation SoundWrapper 10 | { 11 | UserNotificationType _eventType; 12 | } 13 | 14 | - (id)initWithEventType:(UserNotificationType)aEventType 15 | { 16 | self = [super init]; 17 | if (self) { 18 | _eventType = aEventType; 19 | } 20 | return self; 21 | } 22 | 23 | + (SoundWrapper*)soundWrapperWithEventType:(UserNotificationType)eventType 24 | { 25 | return [[SoundWrapper alloc] initWithEventType:eventType]; 26 | } 27 | 28 | - (NSString*)displayName 29 | { 30 | return [Preferences titleForEvent:_eventType]; 31 | } 32 | 33 | - (NSString*)sound 34 | { 35 | NSString* sound = [Preferences soundForEvent:_eventType]; 36 | 37 | if (sound.length == 0) { 38 | return EMPTY_SOUND; 39 | } 40 | else { 41 | return sound; 42 | } 43 | } 44 | 45 | - (void)setSound:(NSString *)value 46 | { 47 | if ([value isEqualToString:EMPTY_SOUND]) { 48 | value = @""; 49 | } 50 | 51 | if (value.length) { 52 | [SoundPlayer play:value]; 53 | } 54 | [Preferences setSound:value forEvent:_eventType]; 55 | } 56 | 57 | - (BOOL)notification 58 | { 59 | return [Preferences userNotificationEnabledForEvent:_eventType]; 60 | } 61 | 62 | - (void)setNotification:(BOOL)value 63 | { 64 | [Preferences setUserNotificationEnabled:value forEvent:_eventType]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Classes/Dialogs/SheetBase.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "DialogWindow.h" 6 | 7 | 8 | @interface SheetBase : NSObject 9 | 10 | @property (nonatomic, weak) id delegate; 11 | @property (nonatomic, weak) NSWindow* parentWindow; 12 | 13 | @property (nonatomic) IBOutlet DialogWindow* sheet; 14 | @property (nonatomic) IBOutlet NSButton* okButton; 15 | @property (nonatomic) IBOutlet NSButton* cancelButton; 16 | 17 | - (void)startSheet; 18 | - (void)endSheet; 19 | 20 | - (IBAction)ok:(id)sender; 21 | - (IBAction)cancel:(id)sender; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Classes/Dialogs/SheetBase.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "SheetBase.h" 5 | 6 | 7 | @implementation SheetBase 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | } 14 | return self; 15 | } 16 | 17 | - (void)startSheet 18 | { 19 | [_sheet startSheetModalForWindow:_parentWindow]; 20 | } 21 | 22 | - (void)endSheet 23 | { 24 | [_sheet endSheet]; 25 | } 26 | 27 | - (void)ok:(id)sender 28 | { 29 | [self endSheet]; 30 | } 31 | 32 | - (void)cancel:(id)sender 33 | { 34 | [self endSheet]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Classes/Dialogs/TopicSheet.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "SheetBase.h" 6 | 7 | 8 | @interface TopicSheet : SheetBase 9 | 10 | @property (nonatomic) int uid; 11 | @property (nonatomic) int cid; 12 | 13 | @property (nonatomic) IBOutlet NSTextField* text; 14 | 15 | - (void)start:(NSString*)topic; 16 | 17 | @end 18 | 19 | 20 | @interface NSObject (TopicSheetDelegate) 21 | - (void)topicSheet:(TopicSheet*)sender onOK:(NSString*)topic; 22 | - (void)topicSheetWillClose:(TopicSheet*)sender; 23 | @end 24 | -------------------------------------------------------------------------------- /Classes/Dialogs/TopicSheet.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "TopicSheet.h" 5 | 6 | 7 | @implementation TopicSheet 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | [[NSBundle mainBundle] loadNibNamed:@"TopicSheet" owner:self topLevelObjects:nil]; 14 | } 15 | return self; 16 | } 17 | 18 | - (void)start:(NSString*)topic 19 | { 20 | [_text setStringValue:topic ?: @""]; 21 | [self startSheet]; 22 | } 23 | 24 | - (void)ok:(id)sender 25 | { 26 | if ([self.delegate respondsToSelector:@selector(topicSheet:onOK:)]) { 27 | [self.delegate topicSheet:self onOK:[_text stringValue]]; 28 | } 29 | 30 | [super ok:nil]; 31 | } 32 | 33 | #pragma mark - NSWindow Delegate 34 | 35 | - (void)windowWillClose:(NSNotification*)note 36 | { 37 | if ([self.delegate respondsToSelector:@selector(topicSheetWillClose:)]) { 38 | [self.delegate topicSheetWillClose:self]; 39 | } 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Classes/Dialogs/WelcomeDialog.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "ListView.h" 6 | 7 | 8 | @interface WelcomeDialog : NSWindowController 9 | 10 | @property (nonatomic, weak) id delegate; 11 | 12 | @property (nonatomic) IBOutlet NSTextField* nickText; 13 | @property (nonatomic) IBOutlet NSComboBox* hostCombo; 14 | @property (nonatomic) IBOutlet ListView* channelTable; 15 | @property (nonatomic) IBOutlet NSButton* autoConnectCheck; 16 | @property (nonatomic) IBOutlet NSButton* addChannelButton; 17 | @property (nonatomic) IBOutlet NSButton* deleteChannelButton; 18 | @property (nonatomic) IBOutlet NSButton* okButton; 19 | 20 | - (void)show; 21 | - (void)close; 22 | 23 | - (IBAction)onOK:(id)sender; 24 | - (IBAction)onCancel:(id)sender; 25 | - (IBAction)onAddChannel:(id)sender; 26 | - (IBAction)onDeleteChannel:(id)sender; 27 | 28 | - (IBAction)onHostComboChanged:(id)sender; 29 | 30 | @end 31 | 32 | 33 | @interface NSObject (WelcomeDialogDelegate) 34 | - (void)welcomeDialog:(WelcomeDialog*)sender onOK:(NSDictionary*)config; 35 | - (void)welcomeDialogWillClose:(WelcomeDialog*)sender; 36 | @end 37 | -------------------------------------------------------------------------------- /Classes/Helpers/GTMNSString+URLArguments.h: -------------------------------------------------------------------------------- 1 | // 2 | // GTMNSString+URLArguments.h 3 | // 4 | // Copyright 2006-2008 Google Inc. 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not 7 | // use this file except in compliance with the License. You may obtain a copy 8 | // of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 14 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 15 | // License for the specific language governing permissions and limitations under 16 | // the License. 17 | // 18 | 19 | #import 20 | 21 | /// Utilities for encoding and decoding URL arguments. 22 | @interface NSString (GTMNSStringURLArgumentsAdditions) 23 | 24 | /// Returns a string that is escaped properly to be a URL argument. 25 | // 26 | /// This differs from stringByAddingPercentEscapesUsingEncoding: in that it 27 | /// will escape all the reserved characters (per RFC 3986 28 | /// ) which 29 | /// stringByAddingPercentEscapesUsingEncoding would leave. 30 | /// 31 | /// This will also escape '%', so this should not be used on a string that has 32 | /// already been escaped unless double-escaping is the desired result. 33 | - (NSString*)gtm_stringByEscapingForURLArgument; 34 | 35 | /// Returns the unescaped version of a URL argument 36 | // 37 | /// This has the same behavior as stringByReplacingPercentEscapesUsingEncoding:, 38 | /// except that it will also convert '+' to space. 39 | - (NSString*)gtm_stringByUnescapingFromURLArgument; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Classes/Helpers/GTMNSString+URLArguments.m: -------------------------------------------------------------------------------- 1 | // 2 | // GTMNSString+URLArguments.m 3 | // 4 | // Copyright 2006-2008 Google Inc. 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not 7 | // use this file except in compliance with the License. You may obtain a copy 8 | // of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 14 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 15 | // License for the specific language governing permissions and limitations under 16 | // the License. 17 | // 18 | 19 | #import "GTMNSString+URLArguments.h" 20 | #import "GTMGarbageCollection.h" 21 | 22 | @implementation NSString (GTMNSStringURLArgumentsAdditions) 23 | 24 | - (NSString*)gtm_stringByEscapingForURLArgument 25 | { 26 | return [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 27 | } 28 | 29 | - (NSString*)gtm_stringByUnescapingFromURLArgument 30 | { 31 | NSMutableString *resultString = [NSMutableString stringWithString:self]; 32 | [resultString replaceOccurrencesOfString:@"+" 33 | withString:@" " 34 | options:NSLiteralSearch 35 | range:NSMakeRange(0, resultString.length)]; 36 | return [self stringByRemovingPercentEncoding]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Classes/Helpers/LCFSystemInfo.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | @interface LCFSystemInfo : NSObject 7 | 8 | + (BOOL)isMarvericksOrLater; 9 | 10 | @end 11 | -------------------------------------------------------------------------------- /Classes/Helpers/LCFSystemInfo.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "LCFSystemInfo.h" 5 | 6 | static BOOL initialized; 7 | static SInt32 major; 8 | static SInt32 minor; 9 | static SInt32 bugFix; 10 | static BOOL isMarvericksOrLater; 11 | 12 | @implementation LCFSystemInfo 13 | 14 | + (void)_initializeVersionInfo 15 | { 16 | if (initialized) { 17 | return; 18 | } 19 | 20 | initialized = YES; 21 | 22 | #pragma clang diagnostic push 23 | #pragma clang diagnostic ignored "-Wdeprecated-declarations" 24 | Gestalt(gestaltSystemVersionMajor, &major); 25 | Gestalt(gestaltSystemVersionMinor, &minor); 26 | Gestalt(gestaltSystemVersionBugFix, &bugFix); 27 | #pragma clang diagnostic pop 28 | 29 | isMarvericksOrLater = (major > 10) || (major == 10 && minor >= 9); 30 | } 31 | 32 | + (BOOL)isMarvericksOrLater 33 | { 34 | [self _initializeVersionInfo]; 35 | return isMarvericksOrLater; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Classes/Helpers/NSColorHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | #define RGB(r,g,b) [NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] 8 | #define RGBA(r,g,b,a) [NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] 9 | #define DEVICE_RGB(r,g,b) [NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] 10 | #define DEVICE_RGBA(r,g,b,a) [NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] 11 | 12 | 13 | @interface NSColor (NSColorHelper) 14 | 15 | + (NSColor*)fromCSS:(NSString*)str; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/Helpers/NSData+Kana.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NSData (Kana) 8 | 9 | - (NSData*)convertKanaFromISO2022ToNative; 10 | - (NSData*)convertKanaFromNativeToISO2022; 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /Classes/Helpers/NSDataHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NSData (NSDataHelper) 8 | 9 | - (BOOL)isValidUTF8; 10 | - (NSString*)validateUTF8; 11 | - (NSString*)validateUTF8WithCharacter:(UniChar)malformChar; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Helpers/NSDateHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | @interface NSDate (NSDateHelper) 7 | 8 | /** 9 | Returns a new date represented by an ISO8601 string. 10 | 11 | Copied from https://github.com/soffes/sstoolkit 12 | 13 | @param iso8601String An ISO8601 string 14 | 15 | @return Date represented by the ISO8601 string 16 | */ 17 | 18 | + (NSDate *)dateFromISO8601String:(NSString *)iso8601String; 19 | + (time_t)timeIntervalFromISO8601String:(NSString *)iso8601String; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Classes/Helpers/NSDictionaryHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | @interface NSDictionary (NSDictionaryHelper) 7 | 8 | - (BOOL)boolForKey:(NSString*)key; 9 | - (int)intForKey:(NSString*)key; 10 | - (long long)longLongForKey:(NSString*)key; 11 | - (double)doubleForKey:(NSString*)key; 12 | - (NSString*)stringForKey:(NSString*)key; 13 | - (NSDictionary*)dictionaryForKey:(NSString*)key; 14 | - (NSArray*)arrayForKey:(NSString*)key; 15 | 16 | @end 17 | 18 | 19 | @interface NSMutableDictionary (NSMutableDictionaryHelper) 20 | 21 | - (void)setBool:(BOOL)value forKey:(NSString*)key; 22 | - (void)setInt:(int)value forKey:(NSString*)key; 23 | - (void)setLongLong:(long long)value forKey:(NSString*)key; 24 | - (void)setDouble:(double)value forKey:(NSString*)key; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Classes/Helpers/NSLocaleHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NSLocale (NSLocaleHelper) 8 | 9 | + (BOOL)prefersJapaneseLanguage; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Helpers/NSLocaleHelper.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NSLocaleHelper.h" 5 | 6 | 7 | @implementation NSLocale (NSLocaleHelper) 8 | 9 | + (BOOL)prefersJapaneseLanguage 10 | { 11 | NSArray* langs = [self preferredLanguages]; 12 | if (langs.count) { 13 | NSString* primary = [langs objectAtIndex:0]; 14 | if ([primary isEqualToString:@"ja"]) { 15 | return YES; 16 | } 17 | } 18 | return NO; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Classes/Helpers/NSPasteboardHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NSPasteboard (NSPasteboardHelper) 8 | 9 | - (BOOL)hasStringContent; 10 | - (NSString*)stringContent; 11 | - (void)setStringContent:(NSString*)s; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Helpers/NSPasteboardHelper.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NSPasteboardHelper.h" 5 | 6 | 7 | @implementation NSPasteboard (NSPasteboardHelper) 8 | 9 | - (BOOL)hasStringContent 10 | { 11 | return [self availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]] != nil; 12 | } 13 | 14 | - (NSString*)stringContent 15 | { 16 | return [self stringForType:NSStringPboardType]; 17 | } 18 | 19 | - (void)setStringContent:(NSString*)s 20 | { 21 | [self declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; 22 | [self setString:s forType:NSStringPboardType]; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Classes/Helpers/NSRectHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | NSPoint NSRectCenter(NSRect rect); 8 | NSRect NSRectAdjustInRect(NSRect r, NSRect bounds); 9 | -------------------------------------------------------------------------------- /Classes/Helpers/NSRectHelper.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NSRectHelper.h" 5 | 6 | 7 | NSPoint NSRectCenter(NSRect rect) 8 | { 9 | return NSMakePoint(rect.origin.x + rect.size.width/2, rect.origin.y + rect.size.height/2); 10 | } 11 | 12 | NSRect NSRectAdjustInRect(NSRect r, NSRect bounds) 13 | { 14 | if (NSMaxX(bounds) < NSMaxX(r)) { 15 | r.origin.x = NSMaxX(bounds) - r.size.width; 16 | } 17 | if (NSMaxY(bounds) < NSMaxY(r)) { 18 | r.origin.y = NSMaxY(bounds) - r.size.height; 19 | } 20 | if (r.origin.x < bounds.origin.x) { 21 | r.origin.x = bounds.origin.x; 22 | } 23 | if (r.origin.y < bounds.origin.y) { 24 | r.origin.y = bounds.origin.y; 25 | } 26 | return r; 27 | } 28 | -------------------------------------------------------------------------------- /Classes/Helpers/NSWindowHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NSWindow (NSWindowHelper) 8 | 9 | - (void)centerOfWindow:(NSWindow*)window; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Helpers/NSWindowHelper.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NSWindowHelper.h" 5 | #import "NSRectHelper.h" 6 | 7 | 8 | @implementation NSWindow (NSWindowHelper) 9 | 10 | - (void)centerOfWindow:(NSWindow*)window 11 | { 12 | NSPoint p = NSRectCenter(window.frame); 13 | NSRect frame = self.frame; 14 | NSSize size = frame.size; 15 | p.x -= size.width/2; 16 | p.y -= size.height/2; 17 | 18 | NSScreen* screen = window.screen; 19 | if (screen) { 20 | NSRect screenFrame = [screen visibleFrame]; 21 | NSRect r = frame; 22 | r.origin = p; 23 | if (!NSContainsRect(screenFrame, r)) { 24 | r = NSRectAdjustInRect(r, screenFrame); 25 | p = r.origin; 26 | } 27 | } 28 | 29 | [self setFrameOrigin:p]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Classes/Helpers/SoundPlayer.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface SoundPlayer : NSObject 8 | 9 | + (void)play:(NSString*)name; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Helpers/SoundPlayer.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "SoundPlayer.h" 5 | 6 | 7 | @implementation SoundPlayer 8 | 9 | + (void)play:(NSString*)name 10 | { 11 | if (!name.length) { 12 | return; 13 | } 14 | 15 | if ([name isEqualToString:@"Beep"]) { 16 | NSBeep(); 17 | } 18 | else { 19 | NSSound* sound = [NSSound soundNamed:name]; 20 | if (sound) { 21 | [sound play]; 22 | } 23 | } 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Classes/Helpers/URLOpener.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface URLOpener : NSObject 8 | 9 | + (void)open:(NSURL*)url; 10 | + (void)openAndActivate:(NSURL*)url; 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /Classes/Helpers/URLOpener.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "URLOpener.h" 5 | #import "Preferences.h" 6 | 7 | 8 | @implementation URLOpener 9 | 10 | + (void)open:(NSURL*)url 11 | { 12 | NSWorkspace* ws = [NSWorkspace sharedWorkspace]; 13 | 14 | if ([Preferences openBrowserInBackground]) { 15 | [ws openURLs:[NSArray arrayWithObject:url] withAppBundleIdentifier:nil options:NSWorkspaceLaunchWithoutActivation additionalEventParamDescriptor:nil launchIdentifiers:nil]; 16 | } 17 | else { 18 | [ws openURL:url]; 19 | } 20 | } 21 | 22 | + (void)openAndActivate:(NSURL*)url 23 | { 24 | [[NSWorkspace sharedWorkspace] openURL:url]; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Classes/Helpers/UnicodeHelper.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | #define UnicodeIsRTLCharacter(c) ({ __typeof__(c) __c = (c); (0x0590 <= (__c) && (__c) <= 0x08FF || 0xFB1D <= (__c) && (__c) <= 0xFDFD || 0xFE70 <= (__c) && (__c) <= 0xFEFC); }) 7 | 8 | @interface UnicodeHelper : NSObject 9 | 10 | + (BOOL)isAlphabeticalCodePoint:(int)c; 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /Classes/IRC/IRCChannelConfig.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | typedef enum { 8 | CHANNEL_TYPE_CHANNEL, 9 | CHANNEL_TYPE_TALK, 10 | } ChannelType; 11 | 12 | 13 | @interface IRCChannelConfig : NSObject 14 | 15 | @property (nonatomic) ChannelType type; 16 | 17 | @property (nonatomic) NSString* name; 18 | @property (nonatomic) NSString* password; 19 | 20 | @property (nonatomic) BOOL autoJoin; 21 | @property (nonatomic) BOOL logToConsole; 22 | @property (nonatomic) BOOL notify; 23 | 24 | @property (nonatomic) NSString* mode; 25 | @property (nonatomic) NSString* topic; 26 | 27 | @property (nonatomic, readonly) NSMutableArray* autoOp; 28 | 29 | - (id)initWithDictionary:(NSDictionary*)dic; 30 | - (NSMutableDictionary*)dictionaryValueSavingToKeychain:(BOOL)saveToKeychain; 31 | 32 | - (void)deletePasswordsFromKeychain; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Classes/IRC/IRCChannelMode.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCISupportInfo.h" 6 | 7 | 8 | @interface IRCChannelMode : NSObject 9 | 10 | @property (nonatomic) IRCISupportInfo* isupport; 11 | @property (nonatomic) BOOL a; 12 | @property (nonatomic) BOOL i; 13 | @property (nonatomic) BOOL m; 14 | @property (nonatomic) BOOL n; 15 | @property (nonatomic) BOOL p; 16 | @property (nonatomic) BOOL q; 17 | @property (nonatomic) BOOL r; 18 | @property (nonatomic) BOOL s; 19 | @property (nonatomic) BOOL t; 20 | @property (nonatomic) int l; 21 | @property (nonatomic) NSString* k; 22 | 23 | - (void)clear; 24 | - (NSArray*)update:(NSString*)str; 25 | 26 | - (NSString*)getChangeCommand:(IRCChannelMode*)mode; 27 | 28 | - (NSString*)string; 29 | - (NSString*)titleString; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Classes/IRC/IRCISupportInfo.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | #define MODES_SIZE 52 8 | #define INVALID_MODE_CHAR ' ' 9 | #define INVALID_MARK_CHAR ' ' 10 | 11 | 12 | @interface IRCISupportInfo : NSObject 13 | 14 | @property (nonatomic, readonly) int nickLen; 15 | @property (nonatomic, readonly) int modesCount; 16 | @property (nonatomic, readonly) NSMutableDictionary* markMap; 17 | @property (nonatomic, readonly) NSMutableDictionary* modeMap; 18 | 19 | - (void)reset; 20 | - (void)update:(NSString*)s; 21 | - (NSArray*)parseMode:(NSString*)s; 22 | - (char)modeForMark:(char)mark; 23 | - (char)markForMode:(char)mode; 24 | 25 | @end 26 | 27 | 28 | @interface IRCModeInfo : NSObject 29 | 30 | @property (nonatomic) unsigned char mode; 31 | @property (nonatomic) BOOL plus; 32 | @property (nonatomic) BOOL op; 33 | @property (nonatomic) BOOL simpleMode; 34 | @property (nonatomic) NSString* param; 35 | 36 | + (IRCModeInfo*)modeInfo; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /Classes/IRC/IRCMessage.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCPrefix.h" 6 | 7 | 8 | @interface IRCMessage : NSObject 9 | 10 | @property (nonatomic) time_t timestamp; 11 | @property (nonatomic) IRCPrefix* sender; 12 | @property (nonatomic) NSString* command; 13 | @property (nonatomic) int numericReply; 14 | @property (nonatomic) NSMutableArray* params; 15 | 16 | - (id)initWithLine:(NSString*)line; 17 | 18 | - (NSString*)paramAt:(int)index; 19 | - (NSString*)sequence; 20 | - (NSString*)sequence:(int)index; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/IRC/IRCPrefix.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IRCPrefix : NSObject 8 | 9 | @property (nonatomic) NSString* raw; 10 | @property (nonatomic) NSString* nick; 11 | @property (nonatomic) NSString* user; 12 | @property (nonatomic) NSString* address; 13 | @property (nonatomic) BOOL isServer; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/IRC/IRCPrefix.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "IRCPrefix.h" 5 | 6 | 7 | @implementation IRCPrefix 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | _raw = @""; 14 | _nick = @""; 15 | _user = @""; 16 | _address = @""; 17 | } 18 | return self; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Classes/IRC/IRCSendingMessage.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IRCSendingMessage : NSObject 8 | 9 | @property (nonatomic, readonly) NSString* command; 10 | @property (nonatomic, readonly) NSMutableArray* params; 11 | @property (nonatomic) int penalty; 12 | @property (nonatomic) BOOL completeColon; 13 | @property (nonatomic, readonly) NSString* string; 14 | 15 | - (id)initWithCommand:(NSString*)aCommand; 16 | - (void)addParameter:(NSString*)parameter; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Classes/IRC/IRCTreeItem.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @class IRCClient; 8 | @class LogController; 9 | 10 | 11 | @interface IRCTreeItem : NSObject 12 | 13 | @property (nonatomic) int uid; 14 | @property (nonatomic) LogController* log; 15 | @property (nonatomic) BOOL isKeyword; 16 | @property (nonatomic) BOOL isUnread; 17 | @property (nonatomic) BOOL isNewTalk; 18 | @property (nonatomic) BOOL isActive; 19 | @property (nonatomic, readonly) BOOL isClient; 20 | @property (nonatomic, readonly) IRCClient* client; 21 | @property (nonatomic, readonly) NSString* label; 22 | @property (nonatomic, readonly) NSString* name; 23 | 24 | - (void)resetState; 25 | - (int)numberOfChildren; 26 | - (IRCTreeItem*)childAtIndex:(int)index; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Classes/IRC/IRCTreeItem.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "IRCTreeItem.h" 5 | 6 | 7 | @implementation IRCTreeItem 8 | 9 | - (IRCClient*)client 10 | { 11 | return nil; 12 | } 13 | 14 | - (BOOL)isClient 15 | { 16 | return NO; 17 | } 18 | 19 | - (void)resetState 20 | { 21 | _isKeyword = _isUnread = _isNewTalk = NO; 22 | } 23 | 24 | - (int)numberOfChildren 25 | { 26 | return 0; 27 | } 28 | 29 | - (IRCTreeItem*)childAtIndex:(int)index 30 | { 31 | return nil; 32 | } 33 | 34 | - (NSString*)label 35 | { 36 | return @""; 37 | } 38 | 39 | - (NSString*)name 40 | { 41 | return @""; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Classes/IRC/IRCUser.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCISupportInfo.h" 6 | 7 | 8 | @interface IRCUser : NSObject 9 | 10 | @property (nonatomic) NSString* nick; 11 | @property (nonatomic, readonly) NSString* canonicalNick; 12 | @property (nonatomic) NSString* username; 13 | @property (nonatomic) NSString* address; 14 | @property (nonatomic) BOOL q; 15 | @property (nonatomic) BOOL a; 16 | @property (nonatomic) BOOL o; 17 | @property (nonatomic) BOOL h; 18 | @property (nonatomic) BOOL v; 19 | @property (nonatomic) BOOL isMyself; 20 | @property (nonatomic, readonly) char mark; 21 | @property (nonatomic, readonly) BOOL isOp; 22 | @property (nonatomic, readonly) int colorNumber; 23 | @property (nonatomic, readonly) CGFloat weight; 24 | @property (nonatomic, readonly) CGFloat incomingWeight; 25 | @property (nonatomic, readonly) CGFloat outgoingWeight; 26 | @property (nonatomic) IRCISupportInfo* isupport; 27 | 28 | - (BOOL)hasMode:(char)mode; 29 | 30 | - (void)outgoingConversation; 31 | - (void)incomingConversation; 32 | - (void)conversation; 33 | 34 | - (NSComparisonResult)compare:(IRCUser*)other; 35 | - (NSComparisonResult)compareUsingWeights:(IRCUser*)other; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Classes/IRC/IRCUserMode.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IRCUserMode : NSObject 8 | 9 | @property (nonatomic) BOOL a; 10 | @property (nonatomic) BOOL i; 11 | @property (nonatomic) BOOL r; 12 | @property (nonatomic) BOOL s; 13 | @property (nonatomic) BOOL w; 14 | @property (nonatomic) BOOL o; 15 | @property (nonatomic) BOOL O; 16 | 17 | - (void)clear; 18 | - (void)update:(NSString*)str; 19 | 20 | - (NSString*)string; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/IRC/IRCWorldConfig.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IRCWorldConfig : NSObject 8 | 9 | @property (nonatomic, readonly) NSMutableArray* clients; 10 | @property (nonatomic, readonly) NSMutableArray* autoOp; 11 | 12 | - (id)initWithDictionary:(NSDictionary*)dic; 13 | - (NSMutableDictionary*)dictionaryValueSavingToKeychain:(BOOL)saveToKeychain includingChildren:(BOOL)includingChildren; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/IRC/IgnoreItem.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IgnoreItem : NSObject 8 | 9 | @property (nonatomic) NSString* nick; 10 | @property (nonatomic) NSString* text; 11 | @property (nonatomic) BOOL useRegexForNick; 12 | @property (nonatomic) BOOL useRegexForText; 13 | @property (nonatomic) NSArray* channels; 14 | 15 | @property (nonatomic, readonly) BOOL isValid; 16 | @property (nonatomic, readonly) NSString* displayNick; 17 | @property (nonatomic, readonly) NSString* displayText; 18 | 19 | - (id)initWithDictionary:(NSDictionary*)dic; 20 | - (NSDictionary*)dictionaryValue; 21 | - (BOOL)isEqual:(id)other; 22 | 23 | - (BOOL)checkIgnore:(NSString*)inputText nick:(NSString*)inputNick channel:(NSString*)channel; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Classes/IRC/TimerCommand.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface TimerCommand : NSObject 8 | 9 | @property (nonatomic) CFAbsoluteTime time; 10 | @property (nonatomic) int cid; 11 | @property (nonatomic, copy) NSString* input; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/IRC/TimerCommand.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "TimerCommand.h" 5 | 6 | 7 | @implementation TimerCommand 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Classes/Library/CocoaOniguruma/oniguruma/COPYING: -------------------------------------------------------------------------------- 1 | Oniguruma LICENSE 2 | ----------------- 3 | 4 | /*- 5 | * Copyright (c) 2002-2007 K.Kosako 6 | * All rights reserved. 7 | * 8 | * Redistribution and use in source and binary forms, with or without 9 | * modification, are permitted provided that the following conditions 10 | * are met: 11 | * 1. Redistributions of source code must retain the above copyright 12 | * notice, this list of conditions and the following disclaimer. 13 | * 2. Redistributions in binary form must reproduce the above copyright 14 | * notice, this list of conditions and the following disclaimer in the 15 | * documentation and/or other materials provided with the distribution. 16 | * 17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 | * SUCH DAMAGE. 28 | */ 29 | -------------------------------------------------------------------------------- /Classes/Library/FileLogger.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @class IRCClient; 8 | @class IRCChannel; 9 | 10 | 11 | @interface FileLogger : NSObject 12 | 13 | @property (nonatomic, weak) IRCClient* client; 14 | @property (nonatomic, weak) IRCChannel* channel; 15 | 16 | - (void)open; 17 | - (void)close; 18 | - (void)reopenIfNeeded; 19 | 20 | - (void)writeLine:(NSString*)s; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/Library/HostResolver.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | @protocol HostResolverDelegate; 7 | 8 | @interface HostResolver : NSObject 9 | 10 | @property (nonatomic, weak) id delegate; 11 | 12 | - (instancetype)initWithDelegate:(id)delegate; 13 | - (void)resolve:(NSString *)hostname; 14 | 15 | @end 16 | 17 | 18 | @protocol HostResolverDelegate 19 | @optional 20 | - (void)hostResolver:(HostResolver *)sender didResolve:(NSHost *)host; 21 | - (void)hostResolver:(HostResolver *)sender didNotResolve:(NSString *)hostname; 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/Library/HotKeyManager.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import 6 | 7 | 8 | @interface HotKeyManager : NSObject 9 | 10 | @property (nonatomic, readonly) EventHotKeyRef handle; 11 | 12 | - (BOOL)enabled; 13 | - (BOOL)registerHotKeyCode:(int)keyCode withModifier:(NSUInteger)modifier; 14 | - (void)unregisterHotKey; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Library/HotKeyManager.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "HotKeyManager.h" 5 | 6 | 7 | @implementation HotKeyManager 8 | 9 | - (void)dealloc 10 | { 11 | [self unregisterHotKey]; 12 | } 13 | 14 | - (BOOL)enabled 15 | { 16 | return _handle != 0; 17 | } 18 | 19 | - (BOOL)registerHotKeyCode:(int)keyCode withModifier:(NSUInteger)modifier 20 | { 21 | static UInt32 serial = 0; 22 | 23 | [self unregisterHotKey]; 24 | 25 | UInt32 mod = 0; 26 | if (modifier & NSEventModifierFlagShift) { mod |= shiftKey; } 27 | if (modifier & NSEventModifierFlagControl) { mod |= controlKey; } 28 | if (modifier & NSEventModifierFlagCommand) { mod |= cmdKey; } 29 | if (modifier & NSEventModifierFlagOption) { mod |= optionKey; } 30 | 31 | EventHotKeyID keyId = {'LmCt', serial++}; 32 | 33 | OSStatus status = RegisterEventHotKey(keyCode, mod, keyId, GetApplicationEventTarget(), 0, &_handle); 34 | return status == noErr; 35 | } 36 | 37 | - (void)unregisterHotKey 38 | { 39 | if (_handle) { 40 | UnregisterEventHotKey(_handle); 41 | _handle = 0; 42 | } 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Classes/Library/IconController.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface IconController : NSObject 8 | 9 | - (void)setHighlight:(BOOL)aHighlight newTalk:(BOOL)aNewTalk; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Library/IconController.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "IconController.h" 5 | 6 | 7 | @implementation IconController 8 | { 9 | BOOL _highlight; 10 | BOOL _newTalk; 11 | } 12 | 13 | - (void)setHighlight:(BOOL)aHighlight newTalk:(BOOL)aNewTalk 14 | { 15 | if (_highlight == aHighlight && _newTalk == aNewTalk) { 16 | return; 17 | } 18 | 19 | _highlight = aHighlight; 20 | _newTalk = aNewTalk; 21 | 22 | NSImage* icon = [NSImage imageNamed:@"NSApplicationIcon"]; 23 | 24 | if (_highlight || _newTalk) { 25 | NSSize iconSize = icon.size; 26 | NSImage* badge = _highlight ? [NSImage imageNamed:@"redbadge"] : [NSImage imageNamed:@"bluebadge"]; 27 | if (badge) { 28 | NSSize size = badge.size; 29 | int w = size.width; 30 | int h = size.height; 31 | int x = iconSize.width - w; 32 | int y = iconSize.height - h; 33 | NSRect rect = NSMakeRect(x, y, w, h); 34 | NSRect sourceRect = NSMakeRect(0, 0, size.width, size.height); 35 | NSDictionary* hints = @{NSImageHintInterpolation:@(NSImageInterpolationHigh)}; 36 | 37 | icon = [icon copy]; 38 | [icon lockFocus]; 39 | [badge drawInRect:rect fromRect:sourceRect operation:NSCompositingOperationSourceOver fraction:1 respectFlipped:YES hints:hints]; 40 | [icon unlockFocus]; 41 | } 42 | } 43 | 44 | [NSApp setApplicationIconImage:icon]; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Classes/Library/ImageSizeCheckClient.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "IRCClient.h" 6 | #import "IRCChannel.h" 7 | 8 | 9 | @interface ImageSizeCheckClient : NSObject 10 | 11 | @property (nonatomic, weak) id delegate; 12 | @property (nonatomic) NSString* url; 13 | @property (nonatomic) int uid; 14 | @property (nonatomic) int cid; 15 | @property (nonatomic) int lineNumber; 16 | @property (nonatomic) int imageIndex; 17 | 18 | - (void)cancel; 19 | - (void)checkSize; 20 | 21 | @end 22 | 23 | 24 | @interface NSObject (ImageSizeCheckClientDelegate) 25 | - (void)imageSizeCheckClient:(ImageSizeCheckClient*)sender 26 | didReceiveContentLength:(long long)contentLength 27 | andType:(NSString*)contentType; 28 | - (void)imageSizeCheckClient:(ImageSizeCheckClient*)sender didFailWithError:(NSError*)error statusCode:(int)statusCode; 29 | @end 30 | -------------------------------------------------------------------------------- /Classes/Library/InputHistory.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface InputHistory : NSObject 8 | 9 | - (void)add:(NSString*)s; 10 | - (NSString*)up:(NSString*)s; 11 | - (NSString*)down:(NSString*)s; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Library/KeyEventHandler.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | #define KEY_RETURN 0x24 7 | #define KEY_TAB 0x30 8 | #define KEY_SPACE 0x31 9 | #define KEY_BACKSPACE 0x33 10 | #define KEY_ESCAPE 0x35 11 | #define KEY_ENTER 0x4C 12 | #define KEY_HOME 0x73 13 | #define KEY_PAGE_UP 0x74 14 | #define KEY_DELETE 0x75 15 | #define KEY_END 0x77 16 | #define KEY_PAGE_DOWN 0x79 17 | #define KEY_LEFT 0x7B 18 | #define KEY_RIGHT 0x7C 19 | #define KEY_DOWN 0x7D 20 | #define KEY_UP 0x7E 21 | 22 | 23 | @interface KeyEventHandler : NSObject 24 | 25 | @property (nonatomic, weak) id target; 26 | 27 | - (void)registerSelector:(SEL)selector key:(int)code modifiers:(NSUInteger)mods; 28 | - (void)registerSelector:(SEL)selector character:(UniChar)c modifiers:(NSUInteger)mods; 29 | - (void)registerSelector:(SEL)selector characters:(NSRange)characterRange modifiers:(NSUInteger)mods; 30 | 31 | - (BOOL)processKeyEvent:(NSEvent*)e; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Classes/Library/Keychain.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface Keychain : NSObject 8 | 9 | #pragma mark - Internet Keychain 10 | 11 | + (BOOL)testInternetPasswordWithName:(NSString*)name url:(NSURL*)url; 12 | + (NSString*)internetPasswordWithName:(NSString*)name url:(NSURL*)url; 13 | + (void)setInternetPassword:(NSString*)password name:(NSString*)name url:(NSURL*)url; 14 | + (void)addInternetPassword:(NSString*)password name:(NSString*)name url:(NSURL*)url; 15 | + (void)deleteInternetPasswordWithName:(NSString*)name url:(NSURL*)url; 16 | 17 | #pragma mark - Generic Keychain 18 | 19 | + (BOOL)testGenericPasswordWithAccountName:(NSString*)accountName serviceName:(NSString*)serviceName; 20 | + (NSString*)genericPasswordWithAccountName:(NSString*)accountName serviceName:(NSString*)serviceName; 21 | + (void)setGenericPassword:(NSString*)password accountName:(NSString*)accountName serviceName:(NSString*)serviceName; 22 | + (void)addGenericPassword:(NSString*)password accountName:(NSString*)accountName serviceName:(NSString*)serviceName; 23 | + (void)deleteGenericPasswordWithAccountName:(NSString*)accountName serviceName:(NSString*)serviceName; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Classes/Library/Regex.h: -------------------------------------------------------------------------------- 1 | // Created by Satoshi Nakagawa. 2 | // You can redistribute it and/or modify it under the Ruby's license or the GPL2. 3 | 4 | #import 5 | 6 | 7 | typedef struct URegularExpression URegularExpression; 8 | 9 | typedef enum { 10 | UREGEX_UNIX_LINES = 1, 11 | UREGEX_CASE_INSENSITIVE = 2, 12 | UREGEX_COMMENTS = 4, 13 | UREGEX_MULTILINE = 8, 14 | UREGEX_LITERAL = 16, 15 | UREGEX_DOTALL = 32, 16 | UREGEX_CANON_EQ = 128, 17 | UREGEX_UWORD = 256, 18 | UREGEX_ERROR_ON_UNKNOWN_ESCAPES = 512, 19 | } URegexOption; 20 | 21 | 22 | @interface Regex : NSObject 23 | { 24 | URegularExpression* regex; 25 | } 26 | 27 | - (id)initWithString:(NSString*)pattern; 28 | - (id)initWithStringNoCase:(NSString*)pattern; 29 | - (id)initWithString:(NSString*)pattern options:(URegexOption)options; 30 | 31 | - (NSRange)match:(NSString*)string; 32 | - (NSRange)match:(NSString*)string start:(int)start; 33 | 34 | - (int)groupCount; 35 | - (NSRange)groupAt:(int)groupNum; 36 | 37 | - (void)reset; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Classes/Library/TCPClient.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "AsyncSocket.h" 6 | 7 | 8 | @interface TCPClient : NSObject 9 | 10 | @property (nonatomic, weak) id delegate; 11 | @property (nonatomic) NSString* host; 12 | @property (nonatomic) int port; 13 | @property (nonatomic) BOOL useSSL; 14 | @property (nonatomic) BOOL useSSLCertificateVerification; 15 | 16 | @property (nonatomic) BOOL useSystemSocks; 17 | @property (nonatomic) BOOL useSocks; 18 | @property (nonatomic) int socksVersion; 19 | @property (nonatomic) NSString* proxyHost; 20 | @property (nonatomic) int proxyPort; 21 | @property (nonatomic) NSString* proxyUser; 22 | @property (nonatomic) NSString* proxyPassword; 23 | @property (nonatomic, readonly) int sendQueueSize; 24 | 25 | @property (nonatomic, readonly) BOOL active; 26 | @property (nonatomic, readonly) BOOL connecting; 27 | @property (nonatomic, readonly) BOOL connected; 28 | 29 | - (id)initWithExistingConnection:(AsyncSocket*)socket; 30 | 31 | - (void)open; 32 | - (void)close; 33 | 34 | - (NSData*)read; 35 | - (NSData*)readLine; 36 | - (void)write:(NSData*)data; 37 | 38 | @end 39 | 40 | 41 | @interface NSObject (TCPClientDelegate) 42 | - (void)tcpClientDidConnect:(TCPClient*)sender; 43 | - (void)tcpClientDidDisconnect:(TCPClient*)sender; 44 | - (void)tcpClient:(TCPClient*)sender error:(NSString*)error; 45 | - (void)tcpClientDidReceiveData:(TCPClient*)sender; 46 | - (void)tcpClientDidSendData:(TCPClient*)sender; 47 | @end 48 | -------------------------------------------------------------------------------- /Classes/Library/TCPServer.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "TCPClient.h" 6 | 7 | 8 | @interface TCPServer : NSObject 9 | 10 | @property (nonatomic, weak) id delegate; 11 | @property (nonatomic, readonly) NSArray* clients; 12 | @property (nonatomic, readonly) BOOL isActive; 13 | @property (nonatomic) int port; 14 | 15 | - (BOOL)open; 16 | - (void)close; 17 | 18 | - (void)closeClient:(TCPClient*)client; 19 | - (void)closeAllClients; 20 | 21 | @end 22 | 23 | 24 | @interface NSObject (TCPServerDelegate) 25 | - (void)tcpServer:(TCPServer*)sender didAccept:(TCPClient*)client; 26 | - (void)tcpServer:(TCPServer*)sender didConnect:(TCPClient*)client; 27 | - (void)tcpServer:(TCPServer*)sender client:(TCPClient*)client error:(NSString*)error; 28 | - (void)tcpServer:(TCPServer*)sender didDisconnect:(TCPClient*)client; 29 | - (void)tcpServer:(TCPServer*)sender didReceiveData:(TCPClient*)client; 30 | - (void)tcpServer:(TCPServer*)sender didSendData:(TCPClient*)client; 31 | @end 32 | -------------------------------------------------------------------------------- /Classes/Library/Timer.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface Timer : NSObject 8 | 9 | @property (nonatomic, weak) id delegate; 10 | @property (nonatomic) BOOL reqeat; 11 | @property (nonatomic) SEL selector; 12 | @property (nonatomic, readonly) BOOL isActive; 13 | 14 | - (void)start:(NSTimeInterval)interval; 15 | - (void)stop; 16 | 17 | @end 18 | 19 | 20 | @interface NSObject (TimerDelegate) 21 | - (void)timerOnTimer:(Timer*)sender; 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/Library/Timer.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "Timer.h" 5 | 6 | 7 | @implementation Timer 8 | { 9 | NSTimer* _timer; 10 | } 11 | 12 | - (id)init 13 | { 14 | self = [super init]; 15 | if (self) { 16 | _reqeat = YES; 17 | _selector = @selector(timerOnTimer:); 18 | } 19 | return self; 20 | } 21 | 22 | - (BOOL)isActive 23 | { 24 | return _timer != nil; 25 | } 26 | 27 | - (void)start:(NSTimeInterval)interval 28 | { 29 | [self stop]; 30 | 31 | _timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(onTimer:) userInfo:nil repeats:_reqeat]; 32 | [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSEventTrackingRunLoopMode]; 33 | } 34 | 35 | - (void)stop 36 | { 37 | [_timer invalidate]; 38 | _timer = nil; 39 | } 40 | 41 | - (void)onTimer:(id)sender 42 | { 43 | if (!self.isActive) return; 44 | 45 | if (!_reqeat) { 46 | [self stop]; 47 | } 48 | 49 | if ([_delegate respondsToSelector:_selector]) { 50 | #pragma clang diagnostic push 51 | #pragma clang diagnostic ignored "-Warc-performSelector-leaks" 52 | [_delegate performSelector:_selector withObject:self]; 53 | #pragma clang diagnostic pop 54 | } 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Classes/Library/YAML/README: -------------------------------------------------------------------------------- 1 | Syck cocoa 0.1 2 | 3 | The YAML project should work in XCode without any alterations. It builds a statically linked framework to syck. The header files should explain everything. Currently syck is not used for output, due to encoding constraints, and a slightly quirky method is used. This might/should be replaced with something that works in a similar way to Apple's keyed archivers. 4 | 5 | Included is Kyle Hammond's very good Base64 code to handle data in YAML. Currently Altivec is disabled in his code, if you want to enable it change the COMPILE_FOR_ALTIVEC define at the top of GSNSDataExtensions.m. 6 | 7 | If you have any problems/queries contact will@thimbleby.net -------------------------------------------------------------------------------- /Classes/Library/YAML/YAML.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "YAMLCategories.h" 3 | 4 | extern id yaml_parse_raw_utf8(const char *str, long len); 5 | 6 | @interface NSObject (PublicYAMLAdditions) 7 | 8 | // -toYAML and +fromYAML are the methods you will need to override for your classes 9 | // overide -toYAML to return a NSArray, NSDictionary, NSString or NSNumber 10 | - (id)toYAML; 11 | 12 | // overide +fromYAML to read the same back in 13 | // [MyClass fromYAML:[me toYAML]] should give a copy of me 14 | + (id)fromYAML:(id)data; 15 | 16 | // -yamlData is a sibling of -toYAML 17 | // it wraps up the -toYAML data in a wrapper that also contains the Class 18 | - (id)yamlData; 19 | 20 | // -yamlParse is the opposite of -yamlData 21 | // it will decode the wrapped up data of -yamlData 22 | // [[me yamlData] yamlParse] should give a copy of me 23 | - (id)yamlParse; 24 | 25 | // yamlDescription provides the actual yaml text that you can write out to a file 26 | - (NSString*)yamlDescription; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Classes/Library/YAML/YAMLCategories.h: -------------------------------------------------------------------------------- 1 | // 2 | // YAMLCategories.h 3 | // YAML 4 | // 5 | // Created by William Thimbleby on Sat Sep 25 2004. 6 | // Copyright (c) 2004 William Thimbleby. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YAMLWrapper : NSObject 12 | + (id)wrapperWithData:(id)d tag:(Class)cn; 13 | - (id)initWrapperWithData:(id)d tag:(Class)cn; 14 | - (id)data; 15 | - (Class)tag; 16 | @end 17 | 18 | @interface NSString (YAMLAdditions) 19 | + (id)yamlStringWithUTF8String:(const char *)bytes length:(unsigned)length; 20 | - (int)yamlIndent; 21 | - (NSString*)yamlIndented:(int)indent; 22 | - (NSString*)yamlDescriptionWithIndent:(int)indent; 23 | @end 24 | 25 | @interface NSArray (YAMLAdditions) 26 | - (NSString*)yamlDescriptionWithIndent:(int)indent; 27 | - (NSArray*)yamlCollectWithSelector:(SEL)aSelector withObject:(id)anObject; 28 | - (NSArray*)yamlCollectWithSelector:(SEL)aSelector; 29 | @end 30 | 31 | @interface NSDictionary (YAMLAdditions) 32 | - (NSString*)yamlDescriptionWithIndent:(int)indent; 33 | - (NSDictionary*)yamlCollectWithSelector:(SEL)aSelector withObject:(id)anObject; 34 | - (NSDictionary*)yamlCollectWithSelector:(SEL)aSelector; 35 | @end 36 | 37 | @interface NSObject (YAMLAdditions) 38 | - (id)yamlData; 39 | - (id)toYAML; 40 | - (NSString*)yamlDescription; 41 | - (NSString*)yamlDescriptionWithIndent:(int)indent; 42 | - (void)yamlPerformSelector:(SEL)sel withEachObjectInArray:(NSArray *)array; 43 | - (void)yamlPerformSelector:(SEL)sel withEachObjectInSet:(NSSet *)set; 44 | @end 45 | 46 | @interface NSData (YAMLAdditions) 47 | - (id)yamlDescriptionWithIndent:(int)indent; 48 | - (id)toYAML; 49 | @end 50 | -------------------------------------------------------------------------------- /Classes/Library/YAML/syck/syck_st.h: -------------------------------------------------------------------------------- 1 | /* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ 2 | 3 | /* @(#) st.h 5.1 89/12/14 */ 4 | 5 | #ifndef ST_INCLUDED 6 | 7 | #define ST_INCLUDED 8 | 9 | typedef struct st_table st_table; 10 | 11 | struct st_hash_type { 12 | int (*compare)(); 13 | int (*hash)(); 14 | }; 15 | 16 | struct st_table { 17 | struct st_hash_type *type; 18 | int num_bins; 19 | int num_entries; 20 | struct st_table_entry **bins; 21 | }; 22 | 23 | #define st_is_member(table,key) st_lookup(table,key,(char **)0) 24 | 25 | enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE}; 26 | 27 | st_table *st_init_table(); 28 | st_table *st_init_table_with_size(); 29 | st_table *st_init_numtable(); 30 | st_table *st_init_numtable_with_size(); 31 | st_table *st_init_strtable(); 32 | st_table *st_init_strtable_with_size(); 33 | int st_delete(), st_delete_safe(); 34 | int st_insert(), st_lookup(); 35 | void st_foreach(), st_add_direct(), st_free_table(), st_cleanup_safe(); 36 | st_table *st_copy(); 37 | 38 | #define ST_NUMCMP ((int (*)()) 0) 39 | #define ST_NUMHASH ((int (*)()) -2) 40 | 41 | #define st_numcmp ST_NUMCMP 42 | #define st_numhash ST_NUMHASH 43 | 44 | int st_strhash(); 45 | 46 | #endif /* ST_INCLUDED */ 47 | -------------------------------------------------------------------------------- /Classes/Library/YAML/syck/sycklex.h: -------------------------------------------------------------------------------- 1 | #if GRAM_FILES_HAVE_TAB_SUFFIX 2 | #include "gram.tab.h" 3 | #else 4 | #include "gram.h" 5 | #endif 6 | 7 | int sycklex( YYSTYPE *sycklval, SyckParser *parser ); 8 | -------------------------------------------------------------------------------- /Classes/Preferences/CustomJSFile.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface CustomJSFile : NSObject 8 | 9 | @property (nonatomic) NSString* fileName; 10 | @property (nonatomic, readonly) NSString* content; 11 | 12 | - (void)reload; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Classes/Preferences/CustomJSFile.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "CustomJSFile.h" 5 | 6 | 7 | @implementation CustomJSFile 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | } 14 | return self; 15 | } 16 | 17 | - (void)setFileName:(NSString *)value 18 | { 19 | _fileName = value; 20 | [self reload]; 21 | } 22 | 23 | - (void)reload 24 | { 25 | NSData* data = [NSData dataWithContentsOfFile:_fileName]; 26 | _content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Classes/Preferences/LogTheme.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface LogTheme : NSObject 8 | 9 | @property (nonatomic) NSString* fileName; 10 | @property (nonatomic, readonly) NSURL* baseUrl; 11 | @property (nonatomic) NSString* content; 12 | 13 | - (void)reload; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/Preferences/LogTheme.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "LogTheme.h" 5 | 6 | 7 | @implementation LogTheme 8 | 9 | - (id)init 10 | { 11 | self = [super init]; 12 | if (self) { 13 | } 14 | return self; 15 | } 16 | 17 | - (void)setFileName:(NSString *)value 18 | { 19 | if (_fileName != value) { 20 | _fileName = value; 21 | _baseUrl = nil; 22 | 23 | if (_fileName) { 24 | _baseUrl = [NSURL fileURLWithPath:[_fileName stringByDeletingLastPathComponent]]; 25 | } 26 | } 27 | 28 | [self reload]; 29 | } 30 | 31 | - (void)reload 32 | { 33 | _content = nil; 34 | 35 | if (_fileName) { 36 | _content = [NSString stringWithContentsOfFile:_fileName encoding:NSUTF8StringEncoding error:NULL]; 37 | } 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Classes/Preferences/ViewTheme.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "LogTheme.h" 6 | #import "OtherTheme.h" 7 | #import "CustomJSFile.h" 8 | 9 | 10 | @interface ViewTheme : NSObject 11 | 12 | @property (nonatomic) NSString* name; 13 | @property (nonatomic, readonly) LogTheme* log; 14 | @property (nonatomic, readonly) OtherTheme* other; 15 | @property (nonatomic, readonly) CustomJSFile* js; 16 | 17 | - (void)reload; 18 | 19 | + (void)createUserDirectory; 20 | 21 | + (NSString*)buildResourceFileName:(NSString*)name; 22 | + (NSString*)buildUserFileName:(NSString*)name; 23 | + (NSArray*)extractFileName:(NSString*)source; 24 | 25 | + (NSString*)resourceBasePath; 26 | + (NSString*)userBasePath; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Classes/Views/ChatBox.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface ChatBox : NSBox 8 | 9 | - (void)setInputTextFont:(NSFont*)font; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Views/DialogWindow.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface DialogWindow : NSWindow 8 | 9 | - (void)startSheetModalForWindow:(NSWindow *)parentWindow; 10 | - (void)endSheet; 11 | - (void)closeWindowOrSheet; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Views/FieldEditorTextView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "KeyEventHandler.h" 6 | 7 | 8 | @interface FieldEditorTextView : NSTextView 9 | 10 | @property (nonatomic, weak) id pasteDelegate; 11 | 12 | - (void)paste:(id)sender; 13 | 14 | - (void)setKeyHandlerTarget:(id)target; 15 | - (void)registerKeyHandler:(SEL)selector key:(int)code modifiers:(NSUInteger)mods; 16 | - (void)registerKeyHandler:(SEL)selector character:(UniChar)c modifiers:(NSUInteger)mods; 17 | 18 | @end 19 | 20 | 21 | @interface NSObject (FieldEditorTextViewDelegate) 22 | - (BOOL)fieldEditorTextViewPaste:(id)sender; 23 | @end 24 | -------------------------------------------------------------------------------- /Classes/Views/FieldEditorTextView.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "FieldEditorTextView.h" 5 | 6 | 7 | @implementation FieldEditorTextView 8 | { 9 | KeyEventHandler* _keyHandler; 10 | } 11 | 12 | - (id)initWithFrame:(NSRect)frameRect textContainer:(NSTextContainer *)aTextContainer 13 | { 14 | self = [super initWithFrame:frameRect textContainer:aTextContainer]; 15 | if (self) { 16 | _keyHandler = [KeyEventHandler new]; 17 | } 18 | return self; 19 | } 20 | 21 | - (void)paste:(id)sender 22 | { 23 | if (_pasteDelegate) { 24 | BOOL result = [_pasteDelegate fieldEditorTextViewPaste:self]; 25 | if (result) { 26 | return; 27 | } 28 | } 29 | 30 | [super paste:sender]; 31 | } 32 | 33 | - (void)setKeyHandlerTarget:(id)target 34 | { 35 | [_keyHandler setTarget:target]; 36 | } 37 | 38 | - (void)registerKeyHandler:(SEL)selector key:(int)code modifiers:(NSUInteger)mods 39 | { 40 | [_keyHandler registerSelector:selector key:code modifiers:mods]; 41 | } 42 | 43 | - (void)registerKeyHandler:(SEL)selector character:(UniChar)c modifiers:(NSUInteger)mods 44 | { 45 | [_keyHandler registerSelector:selector character:c modifiers:mods]; 46 | } 47 | 48 | - (void)keyDown:(NSEvent *)e 49 | { 50 | if ([_keyHandler processKeyEvent:e]) { 51 | return; 52 | } 53 | 54 | [super keyDown:e]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Classes/Views/InputTextField.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "TextField.h" 6 | 7 | 8 | @interface InputTextField : TextField 9 | @end 10 | -------------------------------------------------------------------------------- /Classes/Views/KeyRecorder/KeyCodeTranslator.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import 6 | 7 | 8 | @interface KeyCodeTranslator : NSObject 9 | 10 | + (id)sharedInstance; 11 | - (TISInputSourceRef)keyboardLayout; 12 | 13 | - (NSString *)translateKeyCode:(short)keyCode; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/Views/KeyRecorder/KeyRecorder.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "KeyRecorderCell.h" 6 | 7 | 8 | @interface KeyRecorder : NSControl 9 | 10 | @property (nonatomic, weak) IBOutlet id delegate; 11 | @property (nonatomic) int keyCode; 12 | @property (nonatomic) NSUInteger modifierFlags; 13 | @property (nonatomic, readonly) BOOL valid; 14 | 15 | @end 16 | 17 | 18 | @interface NSObject (KeyRecorder) 19 | - (void)keyRecorderDidChangeKey:(KeyRecorder*)sender; 20 | @end 21 | -------------------------------------------------------------------------------- /Classes/Views/KeyRecorder/KeyRecorderCell.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface KeyRecorderCell : NSCell 8 | @end 9 | -------------------------------------------------------------------------------- /Classes/Views/KeyRecorder/KeyRecorderCell.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "KeyRecorderCell.h" 5 | #import "KeyRecorder.h" 6 | 7 | 8 | @implementation KeyRecorderCell 9 | 10 | - (id)init 11 | { 12 | self = [super init]; 13 | if (self) { 14 | } 15 | return self; 16 | } 17 | 18 | - (NSBezierPath*)borderPathForBounds:(NSRect)r 19 | { 20 | //r = NSInsetRect(r, 0.5, 0.5); 21 | CGFloat radius = r.size.height / 2; 22 | return [NSBezierPath bezierPathWithRoundedRect:r xRadius:radius yRadius:radius]; 23 | } 24 | 25 | - (void)drawInteriorWithFrame:(NSRect)rect inView:(NSView*)contentView 26 | { 27 | [NSGraphicsContext saveGraphicsState]; 28 | 29 | if ([self showsFirstResponder]) { 30 | NSSetFocusRingStyle(NSFocusRingOnly); 31 | [[self borderPathForBounds:rect] fill]; 32 | } 33 | 34 | [NSGraphicsContext restoreGraphicsState]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Classes/Views/ListView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface ListView : NSTableView 8 | 9 | @property (nonatomic, weak) id keyDelegate; 10 | @property (nonatomic, weak) id textDelegate; 11 | 12 | - (int)countSelectedRows; 13 | - (void)selectItemAtIndex:(int)index; 14 | - (void)selectRows:(NSArray*)indices; 15 | - (void)selectRows:(NSArray*)indices extendSelection:(BOOL)extend; 16 | 17 | @end 18 | 19 | 20 | @interface NSObject (ListViewDelegate) 21 | - (void)listViewDelete; 22 | - (void)listViewMoveUp; 23 | - (void)listViewKeyDown:(NSEvent*)e; 24 | @end 25 | -------------------------------------------------------------------------------- /Classes/Views/Log/ImageURLParser.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface ImageURLParser : NSObject 8 | 9 | + (BOOL)isImageFileURL:(NSString*)url; 10 | + (BOOL)isImageContent:(NSString*)contentType; 11 | + (NSString*)serviceImageURLForURL:(NSString*)url; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Classes/Views/Log/LogLine.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | typedef enum { 8 | LINE_TYPE_SYSTEM, 9 | LINE_TYPE_ERROR, 10 | LINE_TYPE_REPLY, 11 | LINE_TYPE_ERROR_REPLY, 12 | LINE_TYPE_DCC_SEND_SEND, 13 | LINE_TYPE_DCC_SEND_RECEIVE, 14 | LINE_TYPE_PRIVMSG, 15 | LINE_TYPE_NOTICE, 16 | LINE_TYPE_ACTION, 17 | LINE_TYPE_JOIN, 18 | LINE_TYPE_PART, 19 | LINE_TYPE_KICK, 20 | LINE_TYPE_QUIT, 21 | LINE_TYPE_KILL, 22 | LINE_TYPE_NICK, 23 | LINE_TYPE_MODE, 24 | LINE_TYPE_TOPIC, 25 | LINE_TYPE_INVITE, 26 | LINE_TYPE_WALLOPS, 27 | LINE_TYPE_DEBUG_SEND, 28 | LINE_TYPE_DEBUG_RECEIVE, 29 | } LogLineType; 30 | 31 | typedef enum { 32 | MEMBER_TYPE_NORMAL, 33 | MEMBER_TYPE_MYSELF, 34 | } LogMemberType; 35 | 36 | 37 | @interface LogLine : NSObject 38 | 39 | @property (nonatomic) NSString* time; 40 | @property (nonatomic) NSString* place; 41 | @property (nonatomic) NSString* nick; 42 | @property (nonatomic) NSString* body; 43 | @property (nonatomic) LogLineType lineType; 44 | @property (nonatomic) LogMemberType memberType; 45 | @property (nonatomic) NSString* nickInfo; 46 | @property (nonatomic) NSString* clickInfo; 47 | @property (nonatomic) BOOL identified; 48 | @property (nonatomic) int nickColorNumber; 49 | @property (nonatomic) NSArray* keywords; 50 | @property (nonatomic) NSArray* excludeWords; 51 | 52 | + (NSString*)lineTypeString:(LogLineType)type; 53 | + (NSString*)memberTypeString:(LogMemberType)type; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Classes/Views/Log/LogPolicy.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import 6 | 7 | 8 | @class MenuController; 9 | 10 | 11 | @interface LogPolicy : NSObject 12 | 13 | @property (nonatomic, weak) MenuController* menuController; 14 | @property (nonatomic) NSMenu* menu; 15 | @property (nonatomic) NSMenu* urlMenu; 16 | @property (nonatomic) NSMenu* addrMenu; 17 | @property (nonatomic) NSMenu* memberMenu; 18 | @property (nonatomic) NSMenu* chanMenu; 19 | @property (nonatomic) NSString* url; 20 | @property (nonatomic) NSString* addr; 21 | @property (nonatomic) NSString* nick; 22 | @property (nonatomic) NSString* chan; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Classes/Views/Log/LogRenderer.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | NSString* logEscape(NSString* s); 8 | NSString* tagEscape(NSString* s); 9 | 10 | 11 | @interface LogRenderer : NSObject 12 | 13 | + (void)setUp; 14 | + (NSString*)renderBody:(NSString*)body keywords:(NSArray*)keywords excludeWords:(NSArray*)excludeWords highlightWholeLine:(BOOL)highlightWholeLine exactWordMatch:(BOOL)exactWordMatch highlighted:(BOOL*)highlighted URLRanges:(NSArray**)urlRanges; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Views/Log/LogScriptEventSink.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @class LogController; 8 | @class LogPolicy; 9 | 10 | 11 | @interface LogScriptEventSink : NSObject 12 | 13 | @property (nonatomic, weak) id owner; 14 | @property (nonatomic) LogPolicy* policy; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Views/Log/LogView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import 6 | 7 | 8 | @interface LogView : WebView 9 | 10 | @property (nonatomic, weak) id keyDelegate; 11 | @property (nonatomic, weak) id resizeDelegate; 12 | 13 | - (NSString*)contentString; 14 | 15 | - (void)clearSelection; 16 | - (BOOL)hasSelection; 17 | - (NSString*)selection; 18 | 19 | @end 20 | 21 | 22 | @interface NSObject (LogViewDelegate) 23 | - (void)logViewKeyDown:(NSEvent*)e; 24 | - (void)logViewWillResize; 25 | - (void)logViewDidResize; 26 | @end 27 | -------------------------------------------------------------------------------- /Classes/Views/Log/WebViewAutoScroll.h: -------------------------------------------------------------------------------- 1 | // Created by Allan Odgaard. 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import 6 | #import "MarkedScroller.h" 7 | 8 | 9 | @interface WebViewAutoScroll : NSObject 10 | 11 | @property (nonatomic, weak) WebFrameView* webFrame; 12 | @property (nonatomic) MarkedScroller* scroller; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Classes/Views/MainWindow.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "KeyEventHandler.h" 6 | 7 | 8 | @interface MainWindow : NSWindow 9 | 10 | - (void)setKeyHandlerTarget:(id)target; 11 | - (void)registerKeyHandler:(SEL)selector key:(int)code modifiers:(NSUInteger)mods; 12 | - (void)registerKeyHandler:(SEL)selector character:(UniChar)c modifiers:(NSUInteger)mods; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Classes/Views/MainWindow.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "MainWindow.h" 5 | 6 | 7 | @implementation MainWindow 8 | { 9 | KeyEventHandler* _keyHandler; 10 | } 11 | 12 | - (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation 13 | { 14 | self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation]; 15 | if (self) { 16 | _keyHandler = [KeyEventHandler new]; 17 | } 18 | return self; 19 | } 20 | 21 | - (void)setKeyHandlerTarget:(id)target 22 | { 23 | [_keyHandler setTarget:target]; 24 | } 25 | 26 | - (void)registerKeyHandler:(SEL)selector key:(int)code modifiers:(NSUInteger)mods 27 | { 28 | [_keyHandler registerSelector:selector key:code modifiers:mods]; 29 | } 30 | 31 | - (void)registerKeyHandler:(SEL)selector character:(UniChar)c modifiers:(NSUInteger)mods 32 | { 33 | [_keyHandler registerSelector:selector character:c modifiers:mods]; 34 | } 35 | 36 | - (void)sendEvent:(NSEvent *)e 37 | { 38 | if ([e type] == NSEventTypeKeyDown) { 39 | if ([_keyHandler processKeyEvent:e]) { 40 | return; 41 | } 42 | } 43 | 44 | [super sendEvent:e]; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Classes/Views/MarkedScroller.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface MarkedScroller : NSScroller 8 | 9 | @property (nonatomic, weak) id dataSource; 10 | @property (nonatomic, copy) NSArray* markData; 11 | 12 | - (void)updateScroller; 13 | 14 | @end 15 | 16 | 17 | @interface NSObject (MarkedScrollerDataSource) 18 | - (NSArray*)markedScrollerPositions:(MarkedScroller*)sender; 19 | - (NSColor*)markedScrollerColor:(MarkedScroller*)sender; 20 | @end 21 | -------------------------------------------------------------------------------- /Classes/Views/MemberList/MemberListView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "ListView.h" 6 | #import "OtherTheme.h" 7 | 8 | 9 | @interface MemberListView : ListView 10 | 11 | @property (nonatomic, weak) id dropDelegate; 12 | @property (nonatomic) OtherTheme* theme; 13 | 14 | - (void)themeChanged; 15 | 16 | @end 17 | 18 | 19 | @interface NSObject (MemberListView) 20 | - (void)memberListViewKeyDown:(NSEvent*)e; 21 | - (void)memberListViewDropFiles:(NSArray*)files row:(NSNumber*)row; 22 | @end 23 | -------------------------------------------------------------------------------- /Classes/Views/MemberList/MemberListViewCell.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "OtherTheme.h" 6 | #import "IRCUser.h" 7 | 8 | 9 | @interface MemberListViewCell : NSCell 10 | 11 | @property (nonatomic) IRCUser* member; 12 | 13 | - (void)setup:(OtherTheme*)theme; 14 | - (void)themeChanged; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Classes/Views/NumericTextField.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface NumericTextField : NSTextField 8 | @end 9 | -------------------------------------------------------------------------------- /Classes/Views/NumericTextField.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "NumericTextField.h" 5 | 6 | 7 | @implementation NumericTextField 8 | 9 | - (id)initWithFrame:(NSRect)frame 10 | { 11 | self = [super initWithFrame:frame]; 12 | if (self) { 13 | [self setUpNumberFormatter]; 14 | } 15 | return self; 16 | } 17 | 18 | - (id)initWithCoder:(NSCoder *)coder 19 | { 20 | self = [super initWithCoder:coder]; 21 | if (self) { 22 | [self setUpNumberFormatter]; 23 | } 24 | return self; 25 | } 26 | 27 | - (void)setUpNumberFormatter 28 | { 29 | NSNumberFormatter *numberFormatter = [NSNumberFormatter new]; 30 | [numberFormatter setNumberStyle:NSNumberFormatterNoStyle]; 31 | [[self cell] setFormatter:numberFormatter]; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Classes/Views/ServerTreeView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | #import "TreeView.h" 6 | #import "OtherTheme.h" 7 | 8 | 9 | @interface ServerTreeView : TreeView 10 | 11 | @property (nonatomic, weak) id responderDelegate; 12 | @property (nonatomic) OtherTheme* theme; 13 | 14 | - (void)themeChanged; 15 | 16 | @end 17 | 18 | 19 | @interface NSObject (ServerTreeViewDelegate) 20 | - (void)serverTreeViewAcceptsFirstResponder; 21 | @end 22 | -------------------------------------------------------------------------------- /Classes/Views/SingleLineFormatter.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface SingleLineFormatter : NSFormatter 8 | @end 9 | -------------------------------------------------------------------------------- /Classes/Views/SingleLineFormatter.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "SingleLineFormatter.h" 5 | 6 | 7 | @implementation SingleLineFormatter 8 | 9 | - (NSString*)stringForObjectValue:(id)str 10 | { 11 | str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@" "]; 12 | return [str stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; 13 | } 14 | 15 | - (BOOL)getObjectValue:(id*)obj forString:(NSString*)str errorDescription:(NSString**)err 16 | { 17 | str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@" "]; 18 | str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; 19 | *obj = str; 20 | return YES; 21 | } 22 | 23 | - (BOOL)isPartialStringValid:(NSString *)str newEditingString:(NSString **)newString errorDescription:(NSString **)err 24 | { 25 | NSRange r = [str rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]]; 26 | if (r.location == NSNotFound) return YES; 27 | 28 | str = [str stringByReplacingOccurrencesOfString:@"\r" withString:@" "]; 29 | str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; 30 | *newString = str; 31 | return NO; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Classes/Views/TableProgressIndicator.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface TableProgressIndicator : NSProgressIndicator 8 | @end 9 | -------------------------------------------------------------------------------- /Classes/Views/TableProgressIndicator.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "TableProgressIndicator.h" 5 | 6 | 7 | @implementation TableProgressIndicator 8 | 9 | - (void)mouseDown:(NSEvent *)e 10 | { 11 | [[self superview] mouseDown:e]; 12 | } 13 | 14 | - (void)rightMouseDown:(NSEvent *)e 15 | { 16 | [[self superview] rightMouseDown:e]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Classes/Views/TextField.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface TextField : NSTextField 8 | 9 | - (void)focus; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Classes/Views/TextField.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "TextField.h" 5 | 6 | 7 | @implementation TextField 8 | 9 | - (void)focus 10 | { 11 | [self.window makeFirstResponder:self]; 12 | NSText* e = [self currentEditor]; 13 | [e setSelectedRange:NSMakeRange([[self stringValue] length], 0)]; 14 | [e scrollRangeToVisible:[e selectedRange]]; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Classes/Views/TextFieldWithDisabledState.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface TextFieldWithDisabledState : NSTextField 8 | @end 9 | -------------------------------------------------------------------------------- /Classes/Views/TextFieldWithDisabledState.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import "TextFieldWithDisabledState.h" 5 | 6 | 7 | @implementation TextFieldWithDisabledState 8 | 9 | - (void)setEnabled:(BOOL)value 10 | { 11 | [super setEnabled:value]; 12 | [self setTextColor:value ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]]; 13 | } 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Classes/Views/ThinSplitView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface ThinSplitView : NSSplitView 8 | 9 | @property (nonatomic) int fixedViewIndex; 10 | @property (nonatomic) int position; 11 | @property (nonatomic) BOOL inverted; 12 | @property (nonatomic) BOOL splitterHidden; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Classes/Views/TreeView.h: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #import 5 | 6 | 7 | @interface TreeView : NSOutlineView 8 | 9 | @property (nonatomic, weak) id keyDelegate; 10 | 11 | - (int)countSelectedRows; 12 | - (void)selectItemAtIndex:(int)index; 13 | 14 | @end 15 | 16 | 17 | @interface NSObject (TreeViewDelegate) 18 | - (void)treeViewKeyDown:(NSEvent*)e; 19 | @end 20 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 13A603 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.andymatuschak.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.5 Beta (bzr) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.5 25 | DTCompiler 26 | com.apple.compilers.llvm.clang.1_0 27 | DTPlatformBuild 28 | 5A2053 29 | DTPlatformVersion 30 | GM 31 | DTSDKBuild 32 | 13A595 33 | DTSDKName 34 | macosx10.9 35 | DTXcode 36 | 0501 37 | DTXcodeBuild 38 | 5A2053 39 | 40 | 41 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/relaunch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Frameworks/Sparkle/SigningTools/generate_keys.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | ["dsaparam.pem", "dsa_priv.pem", "dsa_pub.pem"].each do |file| 3 | if File.exist? file 4 | puts "There's already a #{file} here! Move it aside or be more careful!" 5 | end 6 | end 7 | `openssl dsaparam 2048 < /dev/urandom > dsaparam.pem` 8 | `openssl gendsa dsaparam.pem -out dsa_priv.pem` 9 | `openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem` 10 | `rm dsaparam.pem` 11 | puts "\nGenerated private and public keys: dsa_priv.pem and dsa_pub.pem.\n 12 | BACK UP YOUR PRIVATE KEY AND KEEP IT SAFE!\n 13 | If you lose it, your users will be unable to upgrade!\n" -------------------------------------------------------------------------------- /Frameworks/Sparkle/SigningTools/sign_update.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | if ARGV.length < 2 3 | puts "Usage: ruby sign_update.rb update_archive private_key" 4 | exit 5 | end 6 | 7 | puts `openssl dgst -sha1 -binary < "#{ARGV[0]}" | openssl dgst -dss1 -sign "#{ARGV[1]}" | openssl enc -base64` -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigCommon.xcconfig: -------------------------------------------------------------------------------- 1 | // Common 2 | 3 | PREBINDING = NO 4 | ZERO_LINK = NO 5 | CURRENT_PROJECT_VERSION = 1.5 6 | MACOSX_DEPLOYMENT_TARGET = 10.8 7 | GCC_C_LANGUAGE_STANDARD = c99 8 | GCC_ENABLE_OBJC_EXCEPTIONS = YES 9 | GCC_DEBUGGING_SYMBOLS = full 10 | GCC_PRECOMPILE_PREFIX_HEADER = YES 11 | GCC_PREFIX_HEADER = $(SDKROOT)/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h 12 | GCC_FAST_OBJC_DISPATCH = YES 13 | 14 | // Enable warnings 15 | GCC_WARN_CHECK_SWITCH_STATEMENTS = YES 16 | GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES 17 | GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES 18 | GCC_WARN_SHADOW = YES 19 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES 20 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES 21 | GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES 22 | GCC_WARN_ABOUT_RETURN_TYPE = YES 23 | GCC_WARN_MISSING_PARENTHESES = YES 24 | GCC_WARN_ABOUT_MISSING_NEWLINE = YES 25 | GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES 26 | GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES 27 | GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES 28 | GCC_WARN_SIGN_COMPARE = YES 29 | GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES 30 | GCC_WARN_UNKNOWN_PRAGMAS = YES 31 | GCC_WARN_UNUSED_VARIABLE = YES 32 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES 33 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES 34 | WARNING_CFLAGS = -Wall 35 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigCommonDebug.xcconfig: -------------------------------------------------------------------------------- 1 | // Debug only 2 | 3 | GCC_OPTIMIZATION_LEVEL = 0 4 | DEBUG_INFORMATION_FORMAT = dwarf 5 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES 6 | SPARKLE_EXTRA_DEBUG = -DDEBUG -fstack-protector -D_FORTIFY_SOURCE=2 7 | OTHER_CFLAGS = $(SPARKLE_EXTRA_DEBUG) 8 | ARCHS = $(NATIVE_ARCH_ACTUAL) 9 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigCommonRelease.xcconfig: -------------------------------------------------------------------------------- 1 | // Release only 2 | 3 | GCC_OPTIMIZATION_LEVEL = s 4 | DEBUG_INFORMATION_FORMAT = dwarf-with-dsym 5 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO 6 | DEAD_CODE_STRIPPING = YES 7 | GCC_WARN_UNINITIALIZED_AUTOS = YES 8 | ARCHS = x86_64 9 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigFramework.xcconfig: -------------------------------------------------------------------------------- 1 | // Framework only 2 | 3 | INSTALL_PATH = @loader_path/../Frameworks 4 | DYLIB_COMPATIBILITY_VERSION = 1.5 5 | DYLIB_CURRENT_VERSION = 1.5 6 | PRODUCT_NAME = Sparkle 7 | WRAPPER_EXTENSION = framework 8 | OTHER_LDFLAGS = -lcrypto 9 | FRAMEWORK_VERSION = A 10 | INFOPLIST_FILE = Info.plist 11 | GCC_PREFIX_HEADER = Sparkle.pch 12 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigFrameworkDebug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonDebug.xcconfig" 3 | #include "ConfigFramework.xcconfig" 4 | 5 | OTHER_CFLAGS = -fsingle-precision-constant -DDEBUG 6 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigFrameworkRelease.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonRelease.xcconfig" 3 | #include "ConfigFramework.xcconfig" 4 | 5 | STRIP_INSTALLED_PRODUCT = YES 6 | DEPLOYMENT_POSTPROCESSING = YES 7 | STRIPFLAGS = -u -r 8 | STRIP_STYLE = non-global 9 | SEPARATE_STRIP = YES 10 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigFrameworkReleaseGCSupport.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigFrameworkRelease.xcconfig" 2 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigRelaunch.xcconfig: -------------------------------------------------------------------------------- 1 | // Relaunch Tool only 2 | 3 | PRODUCT_NAME = relaunch 4 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigRelaunchDebug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonDebug.xcconfig" 3 | #include "ConfigRelaunch.xcconfig" 4 | 5 | OTHER_CFLAGS = -fsingle-precision-constant -DDEBUG 6 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigRelaunchRelease.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonRelease.xcconfig" 3 | #include "ConfigRelaunch.xcconfig" 4 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigTestApp.xcconfig: -------------------------------------------------------------------------------- 1 | // Test Application only 2 | 3 | INFOPLIST_FILE = Test Application/Test Application-Info.plist 4 | PRODUCT_NAME = Sparkle Test App 5 | WRAPPER_EXTENSION = app 6 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigTestAppDebug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonDebug.xcconfig" 3 | #include "ConfigTestApp.xcconfig" 4 | 5 | OTHER_CFLAGS = -fsingle-precision-constant -DDEBUG 6 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Configurations/ConfigTestAppRelease.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ConfigCommon.xcconfig" 2 | #include "ConfigCommonRelease.xcconfig" 3 | #include "ConfigTestApp.xcconfig" 4 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleName 10 | ${PRODUCT_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | org.andymatuschak.Sparkle 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.5 23 | CFBundleShortVersionString 24 | 1.5 Beta (bzr) 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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. -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all localizable-strings 2 | 3 | localizable-strings: 4 | rm en.lproj/Sparkle.strings || TRUE 5 | genstrings -o en.lproj -s SULocalizedString *.m *.h 6 | mv en.lproj/Localizable.strings en.lproj/Sparkle.strings 7 | 8 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/NTSynchronousTask.h: -------------------------------------------------------------------------------- 1 | // 2 | // NTSynchronousTask.h 3 | // CocoatechCore 4 | // 5 | // Created by Steve Gehrman on 9/29/05. 6 | // Copyright 2005 Steve Gehrman. All rights reserved. 7 | // 8 | 9 | #ifndef NTSYNCHRONOUSTASK_H 10 | #define NTSYNCHRONOUSTASK_H 11 | 12 | @interface NTSynchronousTask : NSObject 13 | { 14 | NSTask *mv_task; 15 | NSPipe *mv_outputPipe; 16 | NSPipe *mv_inputPipe; 17 | 18 | NSData* mv_output; 19 | BOOL mv_done; 20 | int mv_result; 21 | } 22 | 23 | // pass nil for directory if not needed 24 | // returns the result 25 | + (NSData*)task:(NSString*)toolPath directory:(NSString*)currentDirectory withArgs:(NSArray*)args input:(NSData*)input; 26 | 27 | @end 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Relaunch Tool-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | org.andymatuschak.Sparkle.relaunch 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.5 19 | NSPrincipalClass 20 | NSApplication 21 | NSUIElement 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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/SourceCode/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 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUAutomaticUpdateAlert.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAutomaticUpdateAlert.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/18/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAUTOMATICUPDATEALERT_H 10 | #define SUAUTOMATICUPDATEALERT_H 11 | 12 | #import "SUWindowController.h" 13 | 14 | typedef enum 15 | { 16 | SUInstallNowChoice, 17 | SUInstallLaterChoice, 18 | SUDoNotInstallChoice 19 | } SUAutomaticInstallationChoice; 20 | 21 | @class SUAppcastItem, SUHost; 22 | @interface SUAutomaticUpdateAlert : SUWindowController { 23 | SUAppcastItem *updateItem; 24 | id delegate; 25 | SUHost *host; 26 | } 27 | 28 | - (id)initWithAppcastItem:(SUAppcastItem *)item host:(SUHost *)hostBundle delegate:delegate; 29 | - (IBAction)installNow:sender; 30 | - (IBAction)installLater:sender; 31 | - (IBAction)doNotInstall:sender; 32 | 33 | @end 34 | 35 | @interface NSObject (SUAutomaticUpdateAlertDelegateProtocol) 36 | - (void)automaticUpdateAlert:(SUAutomaticUpdateAlert *)aua finishedWithChoice:(SUAutomaticInstallationChoice)choice; 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUAutomaticUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAutomaticUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/6/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAUTOMATICUPDATEDRIVER_H 10 | #define SUAUTOMATICUPDATEDRIVER_H 11 | 12 | #import 13 | #import "SUBasicUpdateDriver.h" 14 | 15 | @class SUAutomaticUpdateAlert; 16 | @interface SUAutomaticUpdateDriver : SUBasicUpdateDriver { 17 | BOOL postponingInstallation, showErrors; 18 | SUAutomaticUpdateAlert *alert; 19 | } 20 | 21 | @end 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUDSAVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUDSAVerifier.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUDSAVERIFIER_H 10 | #define SUDSAVERIFIER_H 11 | 12 | // For the paranoid folks! 13 | @interface SUDSAVerifier : NSObject {} 14 | + (BOOL)validatePath:(NSString *)path withEncodedDSASignature:(NSString *)encodedSignature withPublicDSAKey:(NSString *)pkeyString; 15 | @end 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUDiskImageUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUDiskImageUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 6/16/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUDISKIMAGEUNARCHIVER_H 10 | #define SUDISKIMAGEUNARCHIVER_H 11 | 12 | #import 13 | #import "SUUnarchiver.h" 14 | 15 | @interface SUDiskImageUnarchiver : SUUnarchiver { 16 | } 17 | 18 | @end 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUHost.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUHost.h 3 | // Sparkle 4 | // 5 | // Copyright 2008 Andy Matuschak. All rights reserved. 6 | // 7 | 8 | #import "Sparkle.h" 9 | 10 | @interface SUHost : NSObject 11 | { 12 | NSBundle *bundle; 13 | } 14 | 15 | + (NSString *)systemVersionString; 16 | 17 | - (id)initWithBundle:(NSBundle *)aBundle; 18 | - (NSBundle *)bundle; 19 | - (NSString *)bundlePath; 20 | - (NSString *)name; 21 | - (NSString *)version; 22 | - (NSString *)displayVersion; 23 | - (NSImage *)icon; 24 | - (BOOL)isRunningOnReadOnlyVolume; 25 | - (BOOL)isBackgroundApplication; 26 | - (NSString *)publicDSAKey; 27 | - (NSArray *)systemProfile; 28 | 29 | - (id)objectForInfoDictionaryKey:(NSString *)key; 30 | - (BOOL)boolForInfoDictionaryKey:(NSString *)key; 31 | - (id)objectForUserDefaultsKey:(NSString *)defaultName; 32 | - (void)setObject:(id)value forUserDefaultsKey:(NSString *)defaultName; 33 | - (BOOL)boolForUserDefaultsKey:(NSString *)defaultName; 34 | - (void)setBool:(BOOL)value forUserDefaultsKey:(NSString *)defaultName; 35 | - (id)objectForKey:(NSString *)key; 36 | - (BOOL)boolForKey:(NSString *)key; 37 | @end 38 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUInstaller.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUInstaller.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/10/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUINSTALLER_H 10 | #define SUINSTALLER_H 11 | 12 | #import 13 | #import "SUVersionComparisonProtocol.h" 14 | 15 | @class SUHost; 16 | @interface SUInstaller : NSObject { } 17 | + (void)installFromUpdateFolder:(NSString *)updateFolder overHost:(SUHost *)host delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id )comparator; 18 | + (void)_finishInstallationWithResult:(BOOL)result host:(SUHost *)host error:(NSError *)error delegate:delegate; 19 | @end 20 | 21 | @interface NSObject (SUInstallerDelegateInformalProtocol) 22 | - (void)installerFinishedForHost:(SUHost *)host; 23 | - (void)installerForHost:(SUHost *)host failedWithError:(NSError *)error; 24 | @end 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUPackageInstaller.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUPackageInstaller.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/10/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUPACKAGEINSTALLER_H 10 | #define SUPACKAGEINSTALLER_H 11 | 12 | #import "Sparkle.h" 13 | #import "SUPlainInstaller.h" 14 | 15 | @interface SUPackageInstaller : SUPlainInstaller { } 16 | @end 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUPackageInstaller.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUPackageInstaller.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/10/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUPackageInstaller.h" 10 | 11 | 12 | @implementation SUPackageInstaller 13 | 14 | + (void)performInstallationWithPath:(NSString *)path host:(SUHost *)host delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id )comparator; 15 | { 16 | NSError *error = nil; 17 | BOOL result = YES; 18 | 19 | NSString *installerPath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.installer"]; 20 | installerPath = [installerPath stringByAppendingString:@"/Contents/MacOS/Installer"]; 21 | if (![[NSFileManager defaultManager] fileExistsAtPath:installerPath]) 22 | { 23 | error = [NSError errorWithDomain:SUSparkleErrorDomain code:SUMissingInstallerToolError userInfo:[NSDictionary dictionaryWithObject:@"Couldn't find Apple's installer tool!" forKey:NSLocalizedDescriptionKey]]; 24 | result = NO; 25 | } 26 | NSTask *installer = [NSTask launchedTaskWithLaunchPath:installerPath arguments:[NSArray arrayWithObjects:path, nil]]; 27 | [installer waitUntilExit]; 28 | // Known bug: if the installation fails or is canceled, Sparkle goes ahead and restarts, thinking everything is fine. 29 | [self _finishInstallationWithResult:result host:host error:error delegate:delegate]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUPipedUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUPipedUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 6/16/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUPIPEDUNARCHIVER_H 10 | #define SUPIPEDUNARCHIVER_H 11 | 12 | #import 13 | #import "SUUnarchiver.h" 14 | 15 | @interface SUPipedUnarchiver : SUUnarchiver { 16 | 17 | } 18 | 19 | @end 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUPlainInstaller.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUPlainInstaller.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/10/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUPLAININSTALLER_H 10 | #define SUPLAININSTALLER_H 11 | 12 | #import "Sparkle.h" 13 | #import "SUInstaller.h" 14 | #import "SUVersionComparisonProtocol.h" 15 | 16 | @interface SUPlainInstaller : SUInstaller { } 17 | + (void)performInstallationWithPath:(NSString *)path host:(SUHost *)host delegate:delegate synchronously:(BOOL)synchronously versionComparator:(id )comparator; 18 | @end 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUPlainInstallerInternals.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUPlainInstallerInternals.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/9/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUPLAININSTALLERINTERNALS_H 10 | #define SUPLAININSTALLERINTERNALS_H 11 | 12 | #import "SUPlainInstaller.h" 13 | 14 | @interface SUPlainInstaller (Internals) 15 | + (BOOL)copyPathWithAuthentication:(NSString *)src overPath:(NSString *)dst error:(NSError **)error; 16 | @end 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUProbingUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUProbingUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/7/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUPROBINGUPDATEDRIVER_H 10 | #define SUPROBINGUPDATEDRIVER_H 11 | 12 | #import 13 | #import "SUBasicUpdateDriver.h" 14 | 15 | // This replaces the old SUStatusChecker. 16 | @interface SUProbingUpdateDriver : SUBasicUpdateDriver { } 17 | @end 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUProbingUpdateDriver.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUProbingUpdateDriver.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/7/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUProbingUpdateDriver.h" 10 | #import "SUUpdater.h" 11 | 12 | @implementation SUProbingUpdateDriver 13 | 14 | // Stop as soon as we have an answer! Since the superclass implementations are not called, we are responsible for notifying the delegate. 15 | 16 | - (void)didFindValidUpdate 17 | { 18 | if ([[updater delegate] respondsToSelector:@selector(updater:didFindValidUpdate:)]) 19 | [[updater delegate] updater:updater didFindValidUpdate:updateItem]; 20 | [self abortUpdate]; 21 | } 22 | 23 | - (void)didNotFindUpdate 24 | { 25 | if ([[updater delegate] respondsToSelector:@selector(updaterDidNotFindUpdate:)]) 26 | [[updater delegate] updaterDidNotFindUpdate:updater]; 27 | [self abortUpdate]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUScheduledUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUScheduledUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/6/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSCHEDULEDUPDATEDRIVER_H 10 | #define SUSCHEDULEDUPDATEDRIVER_H 11 | 12 | #import 13 | #import "SUUIBasedUpdateDriver.h" 14 | 15 | @interface SUScheduledUpdateDriver : SUUIBasedUpdateDriver { 16 | BOOL showErrors; 17 | } 18 | 19 | @end 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUScheduledUpdateDriver.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUScheduledUpdateDriver.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/6/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUScheduledUpdateDriver.h" 10 | #import "Sparkle.h" 11 | 12 | @implementation SUScheduledUpdateDriver 13 | 14 | - (void)didFindValidUpdate 15 | { 16 | showErrors = YES; // We only start showing errors after we present the UI for the first time. 17 | [super didFindValidUpdate]; 18 | } 19 | 20 | - (void)didNotFindUpdate 21 | { 22 | [self abortUpdate]; // Don't tell the user that no update was found; this was a scheduled update. 23 | } 24 | 25 | - (void)abortUpdateWithError:(NSError *)error 26 | { 27 | if (showErrors) 28 | [super abortUpdateWithError:error]; 29 | else 30 | [self abortUpdate]; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUStandardVersionComparator.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStandardVersionComparator.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 SUSTANDARDVERSIONCOMPARATOR_H 10 | #define SUSTANDARDVERSIONCOMPARATOR_H 11 | 12 | 13 | #import "SUVersionComparisonProtocol.h" 14 | 15 | /*! 16 | @class 17 | @abstract Sparkle's default version comparator. 18 | @discussion This comparator is adapted from MacPAD, by Kevin Ballard. It's "dumb" in that it does essentially string comparison, in components split by character type. 19 | */ 20 | @interface SUStandardVersionComparator : NSObject { } 21 | 22 | /*! 23 | @method 24 | @abstract Returns a singleton instance of the comparator. 25 | */ 26 | + (SUStandardVersionComparator *)defaultComparator; 27 | 28 | /*! 29 | @method 30 | @abstract Compares version strings through textual analysis. 31 | @discussion See the implementation for more details. 32 | */ 33 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 34 | @end 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUStatus.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/SUStatus.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUStatusController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStatusController.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/14/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSTATUSCONTROLLER_H 10 | #define SUSTATUSCONTROLLER_H 11 | 12 | #import "SUWindowController.h" 13 | 14 | @class SUHost; 15 | @interface SUStatusController : SUWindowController { 16 | double progressValue, maxProgressValue; 17 | NSString *title, *statusText, *buttonTitle; 18 | IBOutlet NSButton *actionButton; 19 | IBOutlet NSProgressIndicator* progressBar; 20 | SUHost *host; 21 | } 22 | 23 | - (id)initWithHost:(SUHost *)host; 24 | 25 | // Pass 0 for the max progress value to get an indeterminate progress bar. 26 | // Pass nil for the status text to not show it. 27 | - (void)beginActionWithTitle:(NSString *)title maxProgressValue:(double)maxProgressValue statusText:(NSString *)statusText; 28 | 29 | // If isDefault is YES, the button's key equivalent will be \r. 30 | - (void)setButtonTitle:(NSString *)buttonTitle target:target action:(SEL)action isDefault:(BOOL)isDefault; 31 | - (void)setButtonEnabled:(BOOL)enabled; 32 | 33 | - (double)progressValue; 34 | - (void)setProgressValue:(double)value; 35 | - (double)maxProgressValue; 36 | - (void)setMaxProgressValue:(double)value; 37 | 38 | - (void)setStatusText:(NSString *)statusText; 39 | 40 | @end 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUSystemProfiler.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUSystemProfiler.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/22/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSYSTEMPROFILER_H 10 | #define SUSYSTEMPROFILER_H 11 | 12 | @class SUHost; 13 | @interface SUSystemProfiler : NSObject {} 14 | + (SUSystemProfiler *)sharedSystemProfiler; 15 | - (NSMutableArray *)systemProfileArrayForHost:(SUHost *)host; 16 | @end 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUIBasedUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUIBasedUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/5/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUIBASEDUPDATEDRIVER_H 10 | #define SUUIBASEDUPDATEDRIVER_H 11 | 12 | #import 13 | #import "SUBasicUpdateDriver.h" 14 | 15 | @class SUStatusController, SUUpdateAlert; 16 | @interface SUUIBasedUpdateDriver : SUBasicUpdateDriver { 17 | SUStatusController *statusController; 18 | SUUpdateAlert *updateAlert; 19 | } 20 | 21 | - (void)showModalAlert:(NSAlert *)alert; 22 | 23 | @end 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUNARCHIVER_H 10 | #define SUUNARCHIVER_H 11 | 12 | @interface SUUnarchiver : NSObject { 13 | id delegate; 14 | NSString *archivePath; 15 | } 16 | 17 | + (SUUnarchiver *)unarchiverForPath:(NSString *)path; 18 | - (void)setDelegate:delegate; 19 | 20 | - (void)start; 21 | 22 | @end 23 | 24 | @interface NSObject (SUUnarchiverDelegate) 25 | - (void)unarchiver:(SUUnarchiver *)unarchiver extractedLength:(long)length; 26 | - (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; 27 | - (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUnarchiver.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | 10 | #import "Sparkle.h" 11 | #import "SUUnarchiver.h" 12 | #import "SUUnarchiver_Private.h" 13 | 14 | @implementation SUUnarchiver 15 | 16 | extern NSMutableArray *__unarchiverImplementations; 17 | 18 | + (SUUnarchiver *)unarchiverForPath:(NSString *)path 19 | { 20 | NSEnumerator *implementationEnumerator = [[self _unarchiverImplementations] objectEnumerator]; 21 | id current; 22 | while ((current = [implementationEnumerator nextObject])) 23 | { 24 | if ([current _canUnarchivePath:path]) 25 | return [[[current alloc] _initWithPath:path] autorelease]; 26 | } 27 | return nil; 28 | } 29 | 30 | - (NSString *)description { return [NSString stringWithFormat:@"%@ <%@>", [self class], archivePath]; } 31 | 32 | - (void)setDelegate:del 33 | { 34 | delegate = del; 35 | } 36 | 37 | - (void)start 38 | { 39 | // No-op 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUnarchiver_Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver_Private.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 6/17/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUNARCHIVER_PRIVATE_H 10 | #define SUUNARCHIVER_PRIVATE_H 11 | 12 | #import 13 | #import "SUUnarchiver.h" 14 | 15 | @interface SUUnarchiver (Private) 16 | + (void)_registerImplementation:(Class)implementation; 17 | + (NSArray *)_unarchiverImplementations; 18 | + (BOOL)_canUnarchivePath:(NSString *)path; 19 | - _initWithPath:(NSString *)path; 20 | 21 | - (void)_notifyDelegateOfExtractedLength:(long)length; 22 | - (void)_notifyDelegateOfSuccess; 23 | - (void)_notifyDelegateOfFailure; 24 | @end 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUnarchiver_Private.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver_Private.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 6/17/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUUnarchiver_Private.h" 10 | 11 | @implementation SUUnarchiver (Private) 12 | 13 | - _initWithPath:(NSString *)path 14 | { 15 | if ((self = [super init])) 16 | archivePath = [path copy]; 17 | return self; 18 | } 19 | 20 | - (void)dealloc 21 | { 22 | [archivePath release]; 23 | [super dealloc]; 24 | } 25 | 26 | + (BOOL)_canUnarchivePath:(NSString *)path 27 | { 28 | return NO; 29 | } 30 | 31 | - (void)_notifyDelegateOfExtractedLength:(long)length 32 | { 33 | if ([delegate respondsToSelector:@selector(unarchiver:extractedLength:)]) 34 | [delegate unarchiver:self extractedLength:length]; 35 | } 36 | 37 | - (void)_notifyDelegateOfSuccess 38 | { 39 | if ([delegate respondsToSelector:@selector(unarchiverDidFinish:)]) 40 | [delegate performSelector:@selector(unarchiverDidFinish:) withObject:self]; 41 | } 42 | 43 | - (void)_notifyDelegateOfFailure 44 | { 45 | if ([delegate respondsToSelector:@selector(unarchiverDidFail:)]) 46 | [delegate performSelector:@selector(unarchiverDidFail:) withObject:self]; 47 | } 48 | 49 | static NSMutableArray *__unarchiverImplementations; 50 | 51 | + (void)_registerImplementation:(Class)implementation 52 | { 53 | if (!__unarchiverImplementations) 54 | __unarchiverImplementations = [[NSMutableArray alloc] init]; 55 | [__unarchiverImplementations addObject:implementation]; 56 | } 57 | 58 | + (NSArray *)_unarchiverImplementations 59 | { 60 | return [NSArray arrayWithArray:__unarchiverImplementations]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUpdateAlert.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdateAlert.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 SUUPDATEALERT_H 10 | #define SUUPDATEALERT_H 11 | 12 | #import "SUWindowController.h" 13 | 14 | typedef enum 15 | { 16 | SUInstallUpdateChoice, 17 | SURemindMeLaterChoice, 18 | SUSkipThisVersionChoice 19 | } SUUpdateAlertChoice; 20 | 21 | @class WebView, SUAppcastItem, SUHost; 22 | @interface SUUpdateAlert : SUWindowController { 23 | SUAppcastItem *updateItem; 24 | SUHost *host; 25 | id delegate; 26 | 27 | IBOutlet WebView *releaseNotesView; 28 | IBOutlet NSTextField *description; 29 | NSProgressIndicator *releaseNotesSpinner; 30 | BOOL webViewFinishedLoading; 31 | } 32 | 33 | - (id)initWithAppcastItem:(SUAppcastItem *)item host:(SUHost *)host; 34 | - (void)setDelegate:delegate; 35 | 36 | - (IBAction)installUpdate:sender; 37 | - (IBAction)skipThisVersion:sender; 38 | - (IBAction)remindMeLater:sender; 39 | 40 | @end 41 | 42 | @interface NSObject (SUUpdateAlertDelegate) 43 | - (void)updateAlert:(SUUpdateAlert *)updateAlert finishedWithChoice:(SUUpdateAlertChoice)updateChoice; 44 | @end 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/7/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUPDATEDRIVER_H 10 | #define SUUPDATEDRIVER_H 11 | 12 | #import 13 | 14 | extern NSString *SUUpdateDriverFinishedNotification; 15 | 16 | @class SUHost, SUUpdater; 17 | @interface SUUpdateDriver : NSObject 18 | { 19 | SUHost *host; 20 | SUUpdater *updater; 21 | NSURL *appcastURL; 22 | 23 | BOOL finished; 24 | } 25 | 26 | - initWithUpdater:(SUUpdater *)updater; 27 | - (void)checkForUpdatesAtURL:(NSURL *)URL host:(SUHost *)host; 28 | - (void)abortUpdate; 29 | - (BOOL)finished; 30 | 31 | @end 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUpdateDriver.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdateDriver.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/7/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUUpdateDriver.h" 10 | 11 | NSString *SUUpdateDriverFinishedNotification = @"SUUpdateDriverFinished"; 12 | 13 | @implementation SUUpdateDriver 14 | - initWithUpdater:(SUUpdater *)anUpdater 15 | { 16 | if ((self = [super init])) 17 | updater = anUpdater; 18 | return self; 19 | } 20 | 21 | - (NSString *)description { return [NSString stringWithFormat:@"%@ <%@>", [self class], [host bundlePath]]; } 22 | 23 | - (void)checkForUpdatesAtURL:(NSURL *)URL host:(SUHost *)h 24 | { 25 | appcastURL = [URL copy]; 26 | host = [h retain]; 27 | } 28 | 29 | - (void)abortUpdate 30 | { 31 | [self setValue:[NSNumber numberWithBool:YES] forKey:@"finished"]; 32 | [[NSNotificationCenter defaultCenter] postNotificationName:SUUpdateDriverFinishedNotification object:self]; 33 | } 34 | 35 | - (BOOL)finished { return finished; } 36 | 37 | - (void)dealloc 38 | { 39 | [host release]; 40 | [appcastURL release]; 41 | [super dealloc]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUpdatePermissionPrompt.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdatePermissionPrompt.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 1/24/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUPDATEPERMISSIONPROMPT_H 10 | #define SUUPDATEPERMISSIONPROMPT_H 11 | 12 | #import "SUWindowController.h" 13 | 14 | typedef enum { 15 | SUAutomaticallyCheck, 16 | SUDoNotAutomaticallyCheck 17 | } SUPermissionPromptResult; 18 | 19 | @class SUHost; 20 | @interface SUUpdatePermissionPrompt : SUWindowController { 21 | SUHost *host; 22 | NSArray *systemProfileInformationArray; 23 | id delegate; 24 | IBOutlet NSTextField *descriptionTextField; 25 | IBOutlet NSView *moreInfoView; 26 | IBOutlet NSButton *moreInfoButton; 27 | BOOL isShowingMoreInfo, shouldSendProfile; 28 | } 29 | + (void)promptWithHost:(SUHost *)aHost systemProfile:(NSArray *)profile delegate:(id)d; 30 | - (IBAction)toggleMoreInfo:(id)sender; 31 | - (IBAction)finishPrompt:(id)sender; 32 | @end 33 | 34 | @interface NSObject (SUUpdatePermissionPromptDelegateInformalProtocol) 35 | - (void)updatePermissionPromptFinishedWithResult:(SUPermissionPromptResult)result; 36 | @end 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUUserInitiatedUpdateDriver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUserInitiatedUpdateDriver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 5/30/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUSERINITIATEDUPDATEDRIVER_H 10 | #define SUUSERINITIATEDUPDATEDRIVER_H 11 | 12 | #import 13 | #import "SUUIBasedUpdateDriver.h" 14 | 15 | @interface SUUserInitiatedUpdateDriver : SUUIBasedUpdateDriver { 16 | SUStatusController *checkingController; 17 | BOOL isCanceled; 18 | } 19 | 20 | @end 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUWindowController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUWindowController.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 2/13/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUWINDOWCONTROLLER_H 10 | #define SUWINDOWCONTROLLER_H 11 | 12 | #import 13 | 14 | @class SUHost; 15 | @interface SUWindowController : NSWindowController { } 16 | // We use this instead of plain old NSWindowController initWithWindowNibName so that we'll be able to find the right path when running in a bundle loaded from another app. 17 | - (id)initWithHost:(SUHost *)host windowNibName:(NSString *)nibName; 18 | @end 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/SUWindowController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUWindowController.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 2/13/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUWindowController.h" 10 | 11 | @implementation SUWindowController 12 | 13 | - (id)initWithHost:(SUHost *)host windowNibName:(NSString *)nibName 14 | { 15 | NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:nibName ofType:@"nib"]; 16 | if (path == nil) // Slight hack to resolve issues with running Sparkle in debug configurations. 17 | { 18 | NSString *frameworkPath = [[host sharedFrameworksPath] stringByAppendingPathComponent:@"Sparkle.framework"]; 19 | NSBundle *framework = [NSBundle bundleWithPath:frameworkPath]; 20 | path = [framework pathForResource:nibName ofType:@"nib"]; 21 | } 22 | return [super initWithWindowNibPath:path owner:self]; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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/SourceCode/Sparkle.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/Sparkle.icns -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Sparkle.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.pch 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 7/23/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #define SPARKLE_BUNDLE [NSBundle bundleWithIdentifier:@"org.andymatuschak.Sparkle"] 10 | #define SULocalizedString(key,comment) NSLocalizedStringFromTableInBundle(key, @"Sparkle", SPARKLE_BUNDLE, comment) 11 | #define SUAbstractFail() NSAssert2(nil, @"Can't call %@ on an instance of %@; this is an abstract method!", __PRETTY_FUNCTION__, [self class]); 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import "SUConstants.h" 16 | #endif 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/Test Application/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/English.lproj/MainMenu.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | FirstResponder 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSObject 14 | 15 | 16 | CLASS 17 | NSObject 18 | LANGUAGE 19 | ObjC 20 | 21 | 22 | ACTIONS 23 | 24 | checkForUpdates 25 | id 26 | 27 | CLASS 28 | SUUpdater 29 | LANGUAGE 30 | ObjC 31 | OUTLETS 32 | 33 | delegate 34 | id 35 | 36 | SUPERCLASS 37 | NSObject 38 | 39 | 40 | IBVersion 41 | 1 42 | 43 | 44 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/English.lproj/MainMenu.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 | 2 14 | 57 15 | 16 | IBSystem Version 17 | 9D34 18 | targetFramework 19 | IBCocoaFramework 20 | 21 | 22 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/English.lproj/MainMenu.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/Test Application/English.lproj/MainMenu.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/Test Application-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | Sparkle 11 | CFBundleName 12 | Sparkle Test App 13 | CFBundleIdentifier 14 | org.andymatuschak.SparkleTestApp 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.5 23 | NSMainNibFile 24 | MainMenu 25 | NSPrincipalClass 26 | NSApplication 27 | SUFeedURL 28 | http://www.andymatuschak.org/files/sparkletestcast.xml 29 | SUEnableSystemProfiling 30 | 31 | SUPublicDSAKeyFile 32 | dsa_pub.pem 33 | 34 | 35 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/dsa_priv.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIDPgIBAAKCAQEA9lmy8fAXdW9b6fBXQ6Us5B2dLZV+cR685tFlhPSKJDpicP1F 3 | pNRkGESZwPFJbnxUyVeHWVS9yLeMcKqllhcjd+i1oEFKX7LPXk5+zO745OwVWHIe 4 | 0DLOIxhJ0mJHm7mH1YVGZYOVVYkPt+0Y/hDbQVK5DycSGAhgDiCZ+Obl+aDSD2xJ 5 | RZGnVOpu83dYJ/CoUYCHqWtpN4gW5Bbgm8Uz0/2qiyPjFvJEeI1yE04AZA3sOg1y 6 | 1S/UrCbqeC3gBIs0xsskwWOW3zCWjvDWgfPrj65At0mVfq/yyGgXJlN71X5sONxR 7 | swZSbRn5T2i/BJPZUStWks5Nxq+7T3WmnaPbTwIVAJp+BByoy95V3x8wZg0q66eR 8 | ufiJAoIBABbxkX6C9Lt8zeDvvIpk8X4kmHBVIwVJcuICJTVzOAIBZsvFhPnYmUYe 9 | v93oPgjtAdYqPrYZlNrExQG1e7B1bhmgaT8hbXL6whxhqRHKlsJsboVHNQs3qAbx 10 | sOLvJnwgb3FD4xX4ZZSSRXSIGk62FxcaoLG+mSlirGM/SY4yZDpURSJUX6MHdUZa 11 | qHWWGL3b31pz3d9h6SPYv6H4T3ZReVtn+dXYh/41SWkQqEyhAsHGBvqpDwuYJCCI 12 | Mwuvwz0U/KcwiydDaFo900MC9S33zEpk/YUxgA9YsiY5+UvWSy5M/yvkKBkvkb+I 13 | G6DAMWtApWu0fDcLV6jA9JKXmcAwAIECggEBAPC0OJEnLkOwU1Ehop7o2XJbWDKN 14 | giFt44IO3l9gx1fu05HrieDbwAJTkRK7qNEA0yk1iMT2hMHHbwLRNddEsOJuUd7o 15 | iyKwqwkmCQ2Q1zYPBR09wag9NEr8xLSTQJCw9CpxTRSH+9hc1DeuwkwAnTEn7JiW 16 | WbcxVCRtmtaUlN7+dTozxqGJHpYF6WsqHMeuG7Ixnyf6he8Fz8mjxnrc7/l73gFL 17 | Q+IZvUSjzh2zqtqaejtcmlNcT+fGmEFKxpcLB3JP3uu8PN8MbS/R6j191f1ovuM9 18 | U4MO3RuT4xJF0OlwyWAnOEik1S1p+tNQciQ/Ipv8Ff3DDBct9YZPPlNGi+ICFHHD 19 | tP5yX7hMTJIykGaMuM44KJMM 20 | -----END DSA PRIVATE KEY----- 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIDOzCCAi0GByqGSM44BAEwggIgAoIBAQD2WbLx8Bd1b1vp8FdDpSzkHZ0tlX5x 3 | Hrzm0WWE9IokOmJw/UWk1GQYRJnA8UlufFTJV4dZVL3It4xwqqWWFyN36LWgQUpf 4 | ss9eTn7M7vjk7BVYch7QMs4jGEnSYkebuYfVhUZlg5VViQ+37Rj+ENtBUrkPJxIY 5 | CGAOIJn45uX5oNIPbElFkadU6m7zd1gn8KhRgIepa2k3iBbkFuCbxTPT/aqLI+MW 6 | 8kR4jXITTgBkDew6DXLVL9SsJup4LeAEizTGyyTBY5bfMJaO8NaB8+uPrkC3SZV+ 7 | r/LIaBcmU3vVfmw43FGzBlJtGflPaL8Ek9lRK1aSzk3Gr7tPdaado9tPAhUAmn4E 8 | HKjL3lXfHzBmDSrrp5G5+IkCggEAFvGRfoL0u3zN4O+8imTxfiSYcFUjBUly4gIl 9 | NXM4AgFmy8WE+diZRh6/3eg+CO0B1io+thmU2sTFAbV7sHVuGaBpPyFtcvrCHGGp 10 | EcqWwmxuhUc1CzeoBvGw4u8mfCBvcUPjFfhllJJFdIgaTrYXFxqgsb6ZKWKsYz9J 11 | jjJkOlRFIlRfowd1RlqodZYYvdvfWnPd32HpI9i/ofhPdlF5W2f51diH/jVJaRCo 12 | TKECwcYG+qkPC5gkIIgzC6/DPRT8pzCLJ0NoWj3TQwL1LffMSmT9hTGAD1iyJjn5 13 | S9ZLLkz/K+QoGS+Rv4gboMAxa0Cla7R8NwtXqMD0kpeZwDAAgQOCAQYAAoIBAQDw 14 | tDiRJy5DsFNRIaKe6NlyW1gyjYIhbeOCDt5fYMdX7tOR64ng28ACU5ESu6jRANMp 15 | NYjE9oTBx28C0TXXRLDiblHe6IsisKsJJgkNkNc2DwUdPcGoPTRK/MS0k0CQsPQq 16 | cU0Uh/vYXNQ3rsJMAJ0xJ+yYllm3MVQkbZrWlJTe/nU6M8ahiR6WBelrKhzHrhuy 17 | MZ8n+oXvBc/Jo8Z63O/5e94BS0PiGb1Eo84ds6ramno7XJpTXE/nxphBSsaXCwdy 18 | T97rvDzfDG0v0eo9fdX9aL7jPVODDt0bk+MSRdDpcMlgJzhIpNUtafrTUHIkPyKb 19 | /BX9wwwXLfWGTz5TRovi 20 | -----END PUBLIC KEY----- 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Test Application/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright Andy Matuschak 2006. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | return NSApplicationMain(argc, (const char **) argv); 14 | } 15 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Tests/SUVersionComparisonTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonTest.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/15/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface SUVersionComparisonTest : SenTestCase { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Tests/SUVersionComparisonTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonTest.m 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 4/15/08. 6 | // Copyright 2008 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #import "SUVersionComparisonTest.h" 10 | #import "SUStandardVersionComparator.h" 11 | 12 | @implementation SUVersionComparisonTest 13 | 14 | #define SUAssertOrder(a,b,c) STAssertTrue([[SUStandardVersionComparator defaultComparator] compareVersion:a toVersion:b] == c, @"b should be newer than a!") 15 | #define SUAssertAscending(a, b) SUAssertOrder(a,b,NSOrderedAscending) 16 | #define SUAssertDescending(a, b) SUAssertOrder(a,b,NSOrderedDescending) 17 | #define SUAssertEqual(a, b) SUAssertOrder(a,b,NSOrderedSame) 18 | 19 | - (void)testNumbers 20 | { 21 | SUAssertAscending(@"1.0", @"1.1"); 22 | SUAssertEqual(@"1.0", @"1.0"); 23 | SUAssertDescending(@"2.0", @"1.1"); 24 | SUAssertDescending(@"0.1", @"0.0.1"); 25 | //SUAssertDescending(@".1", @"0.0.1"); Known bug, but I'm not sure I care. 26 | SUAssertAscending(@"0.1", @"0.1.2"); 27 | } 28 | 29 | - (void)testPrereleases 30 | { 31 | SUAssertAscending(@"1.0a1", @"1.0b1"); 32 | SUAssertAscending(@"1.0b1", @"1.0"); 33 | SUAssertAscending(@"0.9", @"1.0a1"); 34 | SUAssertAscending(@"1.0b", @"1.0b2"); 35 | SUAssertAscending(@"1.0b10", @"1.0b11"); 36 | SUAssertAscending(@"1.0b9", @"1.0b10"); 37 | SUAssertAscending(@"1.0rc", @"1.0"); 38 | SUAssertAscending(@"1.0b", @"1.0"); 39 | SUAssertAscending(@"1.0pre1", @"1.0"); 40 | SUAssertAscending(@"1.0 beta", @"1.0"); 41 | SUAssertAscending(@"1.0 alpha", @"1.0 beta"); 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/Tests/Sparkle Unit Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.${PRODUCT_NAME:identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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/SourceCode/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/SourceCode/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/en.lproj/SUAutomaticUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUAutomaticUpdateAlert.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/en.lproj/SUStatus.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUStatus.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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/SourceCode/en.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/en.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/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/SourceCode/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 | -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle/SourceCode/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Frameworks/Sparkle/SourceCode/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Others/AppStore/container-migration.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Move 6 | 7 | 8 | ${ApplicationSupport}/net.limechat.LimeChat-AppStore 9 | ${ApplicationSupport}/LimeChat 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Others/LimeChat_Prefix.pch: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | #ifdef __OBJC__ 5 | #import 6 | #import 7 | #import 8 | #endif 9 | 10 | #ifdef DEBUG_BUILD 11 | #define LOG(...) NSLog(__VA_ARGS__); 12 | #define LOG_METHOD NSLog(@"%s", __func__); 13 | #else 14 | #define LOG(...) ; 15 | #define LOG_METHOD ; 16 | #endif 17 | -------------------------------------------------------------------------------- /Others/Normal/container-migration.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Move 6 | 7 | ${ApplicationSupport}/LimeChat 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Others/main.m: -------------------------------------------------------------------------------- 1 | // LimeChat is copyrighted free software by Satoshi Nakagawa . 2 | // You can redistribute it and/or modify it under the terms of the GPL version 2 (see the file GPL.txt). 3 | 4 | 5 | int main(int argc, const char* argv[]) 6 | { 7 | return NSApplicationMain(argc, argv); 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LimeChat 2 | 3 | LimeChat is an IRC client for Mac OS X. 4 | 5 | * One window for multiple servers. 6 | * Rich keyboard shortcuts for your comfortable operations. 7 | * Fast and stable. 8 | 9 | ## Author 10 | 11 | * Satoshi Nakagawa http://github.com/psychs 12 | * ##limechat on chat.freenode.net 13 | 14 | ## Thanks To 15 | 16 | * Allan Odgaard (WebViewAutoScroll and TextMate logo) 17 | * Atsuhisa Shimazawa (Badge images) 18 | * Dustin Voss (AsyncSocket) 19 | * Eloy Duran (RubyCocoa, crash reporter, Growl notifier, preferences patches) 20 | * Evan Phoenix (Inline images support) 21 | * Fujimoto Hisa (RubyCocoa) 22 | * Josh Goebel (CocoaSheet, many improvements on code and UIs) 23 | * Jun Morimoto (Bug fixes) 24 | * Keiji Yoshimi (Growl notifier patches, hot key patches) 25 | * Kevin Ballard (Theme support patches) 26 | * Laurent Sansonetti (RubyCocoa, many requests and suggestions) 27 | * Peter Haza (Channel name context menu patch) 28 | * Python Software Foundation (Python logo) 29 | * Rails team (Ruby on Rails logo) 30 | * Shingo Morita (Badge images) 31 | * Stanley Rost (Limelight theme) 32 | * Stefan Rusterholz (Many suggestions and patches) 33 | * Takashi Tsugo (Deep Ocean theme) 34 | * The Growl Project (Growl framework and logo) 35 | * why the lucky stiff (Syck) 36 | * William Thimbleby (Syck Cocoa) 37 | * Yohei Endo (Application icons) 38 | * Yukihiro Matsumoto (Ruby logo) 39 | 40 | ## License 41 | 42 | LimeChat is copyrighted free software by Satoshi Nakagawa (psychs AT limechat DOT net). 43 | You can redistribute it and/or modify it under the terms of [the GPL version 2](https://github.com/psychs/limechat/blob/master/GPL.txt). 44 | -------------------------------------------------------------------------------- /Resources/App.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Resources/App.xcassets/eraseButton.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "gray-gamma-22", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "white" : "0.700" 9 | } 10 | }, 11 | "idiom" : "universal" 12 | }, 13 | { 14 | "appearances" : [ 15 | { 16 | "appearance" : "luminosity", 17 | "value" : "dark" 18 | } 19 | ], 20 | "color" : { 21 | "color-space" : "gray-gamma-22", 22 | "components" : { 23 | "alpha" : "1.000", 24 | "white" : "0.700" 25 | } 26 | }, 27 | "idiom" : "universal" 28 | } 29 | ], 30 | "info" : { 31 | "author" : "xcode", 32 | "version" : 1 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Resources/App.xcassets/highlightedEraseButton.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "gray-gamma-22", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "white" : "0.500" 9 | } 10 | }, 11 | "idiom" : "universal" 12 | }, 13 | { 14 | "appearances" : [ 15 | { 16 | "appearance" : "luminosity", 17 | "value" : "dark" 18 | } 19 | ], 20 | "color" : { 21 | "color-space" : "gray-gamma-22", 22 | "components" : { 23 | "alpha" : "1.000", 24 | "white" : "0.500" 25 | } 26 | }, 27 | "idiom" : "universal" 28 | } 29 | ], 30 | "info" : { 31 | "author" : "xcode", 32 | "version" : 1 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Resources/App.xcassets/separator.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "gray-gamma-22", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "white" : "0.650" 9 | } 10 | }, 11 | "idiom" : "universal" 12 | }, 13 | { 14 | "appearances" : [ 15 | { 16 | "appearance" : "luminosity", 17 | "value" : "dark" 18 | } 19 | ], 20 | "color" : { 21 | "color-space" : "gray-gamma-22", 22 | "components" : { 23 | "alpha" : "1.000", 24 | "white" : "0.300" 25 | } 26 | }, 27 | "idiom" : "universal" 28 | } 29 | ], 30 | "info" : { 31 | "author" : "xcode", 32 | "version" : 1 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Resources/AppStore/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/AppStore/screenshot.png -------------------------------------------------------------------------------- /Resources/Base.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "CTCPClientInfo" = "DCC VERSION CLIENTINFO USERINFO PING TIME"; 2 | "CloseWindowMenuTitle" = "Close Window"; 3 | "CloseCurrentPanelMenuTitle" = "Close Current Panel…"; 4 | -------------------------------------------------------------------------------- /Resources/LimeChat.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.downloads.read-write 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.network.client 12 | 13 | com.apple.security.network.server 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Resources/Themes/Alternate Lines.css: -------------------------------------------------------------------------------- 1 | .line[alternate=even] { background-color: #fff; } 2 | .line[alternate=odd] { background-color: #eef; } 3 | .line[alternate=even], .line[alternate=odd] { padding-top: 1px; padding-bottom: 1px; } 4 | -------------------------------------------------------------------------------- /Resources/Themes/Deep Ocean.yaml: -------------------------------------------------------------------------------- 1 | # All colors must be in the form of '#rrggbb' or '#rgb'. 2 | # You cannot use color names. 3 | 4 | log-view: 5 | nickname-format: '%n: ' 6 | scroller-highlight-color: '#dcdc78' 7 | input-text: 8 | font-family: 'Lucida Grande' 9 | font-size: 13.0 10 | background-color: '#000015' 11 | color: '#d4d4d4' 12 | member-list: 13 | font-family: 'Lucida Grande' 14 | font-size: 11.0 15 | color: '#aaa' 16 | background-color: '#000015' 17 | operator: 18 | color: '#eee' 19 | selected: 20 | color: '#eee' 21 | background: 22 | # gradient 23 | top-line-color: '#000040' 24 | bottom-line-color: '#000040' 25 | top-color: '#000040' 26 | bottom-color: '#000040' 27 | server-tree: 28 | font-family: 'Lucida Grande' 29 | font-size: 12.0 30 | background-color: '#000015' 31 | highlight: 32 | color: '#dcdc78' 33 | newtalk: 34 | color: '#d5aad5' 35 | unread: 36 | color: '#5795d2' 37 | normal: 38 | active: 39 | color: '#888' 40 | inactive: 41 | color: '#6a6a6a' 42 | selected: 43 | active: 44 | color: '#f5f5f5' 45 | inactive: 46 | color: '#aaa' 47 | background: 48 | # gradient 49 | top-line-color: '#000035' 50 | bottom-line-color: '#000050' 51 | top-color: '#000030' 52 | bottom-color: '#000060' 53 | -------------------------------------------------------------------------------- /Resources/Themes/Deep Ocean/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Deep Ocean/background.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight-README.markdown: -------------------------------------------------------------------------------- 1 | Limelight — A LimeChat theme 2 | 3 | LimeChat: http://limechat.net/mac/ 4 | 5 | ![Preview image](http://cloud.github.com/downloads/Soryu/Limelight/limelight.png) -------------------------------------------------------------------------------- /Resources/Themes/Limelight.yaml: -------------------------------------------------------------------------------- 1 | # All colors must be in the form of '#rrggbb' or '#rgb'. 2 | # You cannot use color names. 3 | 4 | log-view: 5 | nickname-format: '%n' 6 | input-text: 7 | font-family: 'Monaco' 8 | font-size: 11.0 9 | background-color: '#181818' 10 | color: '#ffffff' 11 | member-list: 12 | font-family: 'Monaco' 13 | font-size: 9.0 14 | color: '#bbb' 15 | background-color: '#000000' 16 | operator: 17 | color: '#CF7D34' 18 | selected: 19 | color: '#E9C062' 20 | background: 21 | # gradient 22 | top-line-color: '#222' 23 | bottom-line-color: '#222' 24 | top-color: '#222' 25 | bottom-color: '#222' 26 | server-tree: 27 | font-family: 'Monaco' 28 | font-size: 9.0 29 | background-color: '#000000' 30 | highlight: 31 | color: '#E9C062' 32 | newtalk: 33 | color: '#CF7D34' 34 | unread: 35 | color: '#CF7D34' 36 | normal: 37 | active: 38 | color: '#888' 39 | inactive: 40 | color: '#5e5960' 41 | selected: 42 | active: 43 | color: '#C0C0C0' 44 | inactive: 45 | color: '#7c767e' 46 | background: 47 | # gradient 48 | top-line-color: '#222' 49 | bottom-line-color: '#222' 50 | top-color: '#222' 51 | bottom-color: '#222' 52 | -------------------------------------------------------------------------------- /Resources/Themes/Limelight/GrowlLicense.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) The Growl Project, 2004-2009 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | 2. Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | 3. Neither the name of Growl nor the names of its contributors 12 | may be used to endorse or promote products derived from this software 13 | without specific prior written permission. 14 | 15 | 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 OWNER 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. 16 | -------------------------------------------------------------------------------- /Resources/Themes/Limelight/growl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/growl.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight/limechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/limechat.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/python.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight/ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/ruby.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight/rubyonrails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/rubyonrails.png -------------------------------------------------------------------------------- /Resources/Themes/Limelight/textmate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/Themes/Limelight/textmate.png -------------------------------------------------------------------------------- /Resources/Themes/Sample.yaml: -------------------------------------------------------------------------------- 1 | # All colors must be in the form of '#rrggbb' or '#rgb'. 2 | # You cannot use color names. 3 | 4 | log-view: 5 | nickname-format: '(%n) ' 6 | scroller-highlight-color: '#f0f' 7 | input-text: 8 | font-family: 'Lucida Grande' 9 | font-size: 13.0 10 | background-color: '#fff' 11 | color: '#000' 12 | selected: 13 | background-color: '#ccc' 14 | member-list: 15 | font-family: 'Lucida Grande' 16 | font-size: 13.0 17 | color: '#000' 18 | background-color: '#fff' 19 | operator: 20 | color: '#000' 21 | selected: 22 | color: '#fff' 23 | background: 24 | # gradient 25 | top-line-color: '#888' 26 | bottom-line-color: '#888' 27 | top-color: '#888' 28 | bottom-color: '#888' 29 | server-tree: 30 | font-family: 'Lucida Grande' 31 | font-size: 13.0 32 | background-color: '#e5edf7' 33 | highlight: 34 | color: '#f0f' 35 | newtalk: 36 | color: '#f00' 37 | unread: 38 | color: '#00f' 39 | normal: 40 | active: 41 | color: '#000' 42 | inactive: 43 | color: '#ccc' 44 | selected: 45 | active: 46 | color: '#000' 47 | inactive: 48 | color: '#888' 49 | background: 50 | # gradient 51 | top-line-color: '#adbbd0' 52 | bottom-line-color: '#8c98b0' 53 | top-color: '#adbbd0' 54 | bottom-color: '#98aac4' 55 | -------------------------------------------------------------------------------- /Resources/Themes/Spring Night.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: 'Monaco'; 3 | font-size: 9pt; 4 | background-color: #000; 5 | color: #f0f0f0; 6 | } 7 | body {} 8 | 9 | .url { color: #99cf50; } 10 | .address {} 11 | .highlight { 12 | font-size: 160%; 13 | font-weight: normal; 14 | padding: 0 3px; 15 | color: #e28964; 16 | } 17 | 18 | .line {} 19 | .line[alternate=even] {} 20 | .line[alternate=odd] {} 21 | .line[highlight=true] {} 22 | 23 | .time { color: #3387bc; } 24 | .place { color: #3387bc; } 25 | 26 | .sender[type=normal] { color: #3e87e3; } 27 | .sender[type=myself] { color: #89bdff; } 28 | 29 | .message[type=privmsg] {} 30 | .message[type=notice] { color: #888; } 31 | .message[type=action] { color: #8f9d6a;} 32 | 33 | .message[type=system], .message[type=join], .message[type=part], .message[type=kick], 34 | .message[type=quit], .message[type=kill], .message[type=nick], .message[type=mode], 35 | .message[type=topic], .message[type=invite], .message[type=wallops] { 36 | color: #65b042; 37 | } 38 | .message[type=reply] { color: #509036; } 39 | 40 | .message[type=error], .message[type=error_reply] { color: #f67b37; } 41 | .message[type=dcc_send_send] { color: #c5af75; } 42 | .message[type=dcc_send_receive] { color: #f9ee98; } 43 | .message[type=debug_send] { color: #8996a8; } 44 | .message[type=debug_receive] { color: #afc4db; } 45 | -------------------------------------------------------------------------------- /Resources/Themes/Spring Night.yaml: -------------------------------------------------------------------------------- 1 | # All colors must be in the form of '#rrggbb' or '#rgb'. 2 | # You cannot use color names. 3 | 4 | log-view: 5 | nickname-format: '%n: ' 6 | scroller-highlight-color: '#e28964' 7 | input-text: 8 | font-family: 'Lucida Grande' 9 | font-size: 13.0 10 | background-color: '#000' 11 | color: '#f0f0f0' 12 | member-list: 13 | font-family: 'Lucida Grande' 14 | font-size: 13.0 15 | color: '#aaa' 16 | background-color: '#000' 17 | operator: 18 | color: '#f0f0f0' 19 | selected: 20 | color: '#fff' 21 | background: 22 | top-line-color: '#464646' 23 | bottom-line-color: '#464646' 24 | top-color: '#464646' 25 | bottom-color: '#464646' 26 | server-tree: 27 | font-family: 'Lucida Grande' 28 | font-size: 13.0 29 | background-color: '#000' 30 | highlight: 31 | color: '#e28964' 32 | newtalk: 33 | color: '#f9ee98' 34 | unread: 35 | color: '#99cf50' 36 | normal: 37 | active: 38 | color: '#ccc' 39 | inactive: 40 | color: '#666' 41 | selected: 42 | active: 43 | color: '#fff' 44 | inactive: 45 | color: '#ccc' 46 | background: 47 | top-line-color: '#4b4b4b' 48 | bottom-line-color: '#444444' 49 | top-color: '#5a5a5a' 50 | bottom-color: '#464646' 51 | -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_128x128.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_16x16.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_256x256.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_32x32.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_512x512.png -------------------------------------------------------------------------------- /Resources/icon/application.iconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/icon/application.iconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Resources/images/bluebadge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/images/bluebadge.png -------------------------------------------------------------------------------- /Resources/images/bluebadge@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/images/bluebadge@2x.png -------------------------------------------------------------------------------- /Resources/images/redbadge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/images/redbadge.png -------------------------------------------------------------------------------- /Resources/images/redbadge@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/Resources/images/redbadge@2x.png -------------------------------------------------------------------------------- /etc/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCIS0CViqOSlD02XhFdeUK3+8z+fwss 3 | 5odNxN10erMJdNhTeftZr0hA5SVjNp3ryaUJ1DAuDrWvbs+OV5hrOFMmVzhug0kx 4 | eIGAIufERZVXHgJAPYqQcvNd1shsLgXXpFZ+vh7CGAngarMAyMV0wE1qc+JApU7W 5 | 83mTBBcpATlo+EYC7KT8YEkN87471iJH8N0J9WHWdb7wtxMx5TGJCOlIZ0Iy/k9f 6 | gK8oRAmDs6j79dM3opJ4T3PZ0a2DsR/3fH92zm3N77pTB4kSfxwVAChBJuYFx0DT 7 | gHjTGG+Suwm05FNiwRBycqXjHDf8gdg8UG8wKLOJQ0IKl05g6G6Bow+fAhUA/r4P 8 | pDgmvSd9Y6meN8Vn7Gm7Nq8CggEAKr3mH1KOAnfqRsKfUR6iO6YFxXozOdezHJeR 9 | MY67yHuMLKjYrb6EBkQ1ZhcKQSL2zYvKMQoJVKP/YDq36rerp+CfaZedIqZZkk+g 10 | Yh92ziLvKtbPUNQvpx7HxLCv4pOF+4D44/EL8aYTRdOwvjEHk75bfjNELZTrK1eh 11 | 1Z8Z+oLRcekbihMAngdmMZh0uCzg7DaMg1UlTL7x5olmrp2U+mhmPTpeVzMh2Mz8 12 | ePSFeBdfisM/m+RjJMwzhBMOcVuJcKUhjdfsYCNSF0tjKihdsFnNGBWQF7Uezs9x 13 | 5DNNx4ow5oBaLwYlJzpKIBBpxympGji+FUA/aa6pZRuqvca9AAOCAQUAAoIBADyb 14 | rcDaAh+64TF0eafkiqcZxDoZVT/EKF/P7X6TyiyE+GrAu6kOvUWG86vlyCXULbdy 15 | zepmhk8wp/kx86uKj4MkWhlJffp8tgCs/fHU5z6bbRNIOr+6kcoMdbfHdemJvPm2 16 | roUqe5vdIiX8XmrbXeajOzR40qdpSv7qiLY3u5k074kXL35WnpTaHAycZ1umcXIP 17 | E9XeuD0FsH594GihJWLH1VeRuoI+4aFAlQZx0QqT6aAvS543r3D2hPNKvt7e7L4x 18 | 4lNG37+SG4T29hgWNxsiSZcZgxMyqohHV16DxbEN2ZhkqI5UkFMwWqYJZaMCvnnk 19 | i1GLAQIRcrPw15CyvzM= 20 | -----END PUBLIC KEY----- 21 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | Redirect 301 /mac/index_ja.html http://limechat.net/mac/ja.html 2 | Redirect 301 /mac/rss_ja.xml http://limechat.net/mac/rss.xml 3 | -------------------------------------------------------------------------------- /web/images/deepocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/deepocean.png -------------------------------------------------------------------------------- /web/images/deepocean200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/deepocean200.png -------------------------------------------------------------------------------- /web/images/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/default.png -------------------------------------------------------------------------------- /web/images/default200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/default200.png -------------------------------------------------------------------------------- /web/images/default3col.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/default3col.png -------------------------------------------------------------------------------- /web/images/default3col200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/default3col200.png -------------------------------------------------------------------------------- /web/images/donate_button.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/donate_button.gif -------------------------------------------------------------------------------- /web/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/favicon.ico -------------------------------------------------------------------------------- /web/images/feed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/feed.gif -------------------------------------------------------------------------------- /web/images/limelight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/limelight.png -------------------------------------------------------------------------------- /web/images/limelight200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/limelight200.png -------------------------------------------------------------------------------- /web/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/logo.png -------------------------------------------------------------------------------- /web/images/springnight3col.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/springnight3col.png -------------------------------------------------------------------------------- /web/images/springnight3col200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/springnight3col200.png -------------------------------------------------------------------------------- /web/images/white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/white.png -------------------------------------------------------------------------------- /web/images/white200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psychs/limechat/ceee3d1d8972ee484ed2971099926ebf9c752a84/web/images/white200.png -------------------------------------------------------------------------------- /web/rss.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | LimeChat 5 | http://limechat.net/mac/ 6 | Change Log of LimeChat 7 | en-us 8 | 9 | 10 | 2.42 11 | http://limechat.net/mac/#v2.42 12 | Sun, 22 Jun 2014 23:34:27 -0700 13 | 15 |
  • Use nickname in settings when disconnected from menu.
  • 16 |
  • Improve passwords serialization.
  • 17 | 18 | ]]>
    19 |
    20 | 21 |
    22 |
    23 | -------------------------------------------------------------------------------- /web/templates/rss.rxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | LimeChat 5 | http://limechat.net/mac/ 6 | Change Log of LimeChat 7 | en-us 8 | 9 | 10 | <%= version %> 11 | http://limechat.net/mac/#v<%= version %> 12 | <%= pubdate %> 13 | 15 | ]]> 16 | 17 | 18 | 19 | 20 | --------------------------------------------------------------------------------