Ivar ivar = object_getInstanceVariable(backend, "_flags", NULL);
_LF_flags *_flags = (_LF_flags *)((char *)backend + ivar_getOffset(ivar));
_flags->encodingHint = encoding;
- } else if ([app ver] == LF_Yosemite) {
+ } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan) {
[backend setEncodingHint: encoding];
}
-
- //[backend setPreferredEncoding:LF_Encoding_ISO2022JP];
}
static unsigned long long backendGetPreferredEncoding(id backend)
Ivar ivar = object_getInstanceVariable(backend, "_flags", NULL);
_LF_flags *_flags = (_LF_flags *)((char *)backend + ivar_getOffset(ivar));
return _flags->encodingHint; //FIXME: [backend _encodingHint] return wrong value?
- } else if ([app ver] == LF_Yosemite) {
+ } else if ([app ver] == LF_Yosemite || [app ver] == LF_ElCapitan) {
return [backend encodingHint];
}
return LF_Encoding_Auto;
- //return [backend preferredEncoding];
}
int fixTextNode(DOMText *node, DOMRange *range, BOOL isCheck, BOOL isOpen)
return result;
}
+void _LF_IMP_finishLoadingEditor(id self, SEL _cmd)
+{
+ [self _LF_finishLoadingEditor];
+
+ if ([app isActive] == NO) {
+ return;
+ }
+
+ @try {
+ id composeView = [self composeWebView];
+ if ((composeView==NULL) || ([(WebView *)composeView isLoading]==YES) || ([(WebView *)composeView isEditable]==NO)) {
+ NSLog(@"composeView NULL!!");
+ return;
+ }
+
+ switch ([self messageType]) {
+ case 1: // 返信
+ case 2: // 全員に返信
+ case 3: // 転送
+ case 4: // 下書きを開く
+ case 7: // リダイレクト
+ case 8: // 差出人に返信
+ break;
+ case 5: // 新規メッセージ
+ case 14:// 添付ファイルとして返信
+ return;
+ default:
+ NSLog(@"Unknown MessageType: %d", [self messageType]);
+ return;
+ }
+
+ if (0 < fixLetter(self, composeView, TRUE, TRUE) || checkSubjectOnLoad(self)) {
+ if ([app operationAtOpen] == 0) {
+ NSAlert *alert = [[[NSAlert alloc] init] autorelease];
+ [alert addButtonWithTitle:@"変換"];
+ [alert addButtonWithTitle:@"変換しない"];
+ [alert setShowsSuppressionButton:TRUE];
+ [alert setMessageText:@"編集前にメッセージを変換しますか?"];
+ [alert setInformativeText:@"このメッセージには ISO 2022-JP でエンコードできない文字が含まれています。"];
+ [alert setAlertStyle:NSInformationalAlertStyle];
+ [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode){
+ }];
+// [alert runModal];
+ } else if ([app operationAtOpen] == 1) {
+ fixSubjectOnLoad(self);
+ fixLetter(self, composeView, FALSE, TRUE);
+ [[self backEnd] setHasChanges:FALSE];
+ }
+ }
+ }
+ @catch (NSException * exception) {
+ NSLog(@"LetterFix: caught %@ %@", [exception name], [exception reason]);
+ }
+
+ return;
+}
+
void alert0DidEnd_returnCode_contextInfo_(id self, SEL _cmd, id alert, int returnCode, void* arg1)
{
if (returnCode == NSAlertFirstButtonReturn) {
fixSubjectOnLoad(self);
- fixLetter(self, [self webView], FALSE, TRUE);
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ fixLetter(self, [self webView], FALSE, TRUE);
+ } else if ([app ver] == LF_ElCapitan) {
+ fixLetter(self, [self composeWebView], FALSE, TRUE);
+ }
//[[self backEnd] setHasChanges:FALSE];
} else if (returnCode == NSAlertSecondButtonReturn) {
}
[self _LF_send: arg1];
return;
}
+
+ id composeView;
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ composeView = [self webView];
+ } else if ([app ver] == LF_ElCapitan) {
+ composeView = [self composeWebView];
+ } else {
+ [self _LF_send: arg1];
+ return;
+ }
backendSetPreferredEncoding([self backEnd], LF_Encoding_ISO2022JP);
- if (0 < fixLetter(self, [self webView], TRUE, FALSE)) {
+ if (0 < fixLetter(self, composeView, TRUE, FALSE)) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換して送信"];
[alert addButtonWithTitle:@"キャンセル"];
void alert1DidEnd_returnCode_contextInfo_(id self, SEL _cmd, id alert, int returnCode, void* arg1)
{
if (returnCode == NSAlertFirstButtonReturn) {
- fixLetter(self, [self webView], FALSE, FALSE);
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ fixLetter(self, [self webView], FALSE, FALSE);
+ } else if ([app ver] == LF_ElCapitan) {
+ fixLetter(self, [self composeWebView], FALSE, FALSE);
+ }
if (backendGetPreferredEncoding([self backEnd]) != LF_Encoding_ISO2022JP) backendSetPreferredEncoding([self backEnd], LF_Encoding_ISO2022JP);
[[alert window] orderOut:arg1];
if (([app isCheckSubject] != NO) && checkSubject(self)) _LF_alertSubject(self, _cmd, arg1);
[[alert window] orderOut:arg1];
[self _LF_send: arg1];
} else if (returnCode == (NSAlertThirdButtonReturn + 1)) { // 変換のみ
- fixLetter(self, [self webView], FALSE, FALSE);
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ fixLetter(self, [self webView], FALSE, FALSE);
+ } else if ([app ver] == LF_ElCapitan) {
+ fixLetter(self, [self composeWebView], FALSE, FALSE);
+ }
if (backendGetPreferredEncoding([self backEnd]) != LF_Encoding_ISO2022JP) backendSetPreferredEncoding([self backEnd], LF_Encoding_ISO2022JP);
}
}
void _LF_IMP_saveDocument_(id self, SEL _cmd, id arg1)
{
- if (([app isActive] != NO) && ([check_at_save containsObject:self]==NO) &&(0 < fixLetter(self, [self webView], TRUE, FALSE)) && (backendGetPreferredEncoding([self backEnd]) == LF_Encoding_ISO2022JP)) {
+ id composeView;
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ composeView = [self webView];
+ } else if ([app ver] == LF_ElCapitan) {
+ composeView = [self composeWebView];
+ } else {
+ [self _LF_saveDocument: arg1];
+ return;
+ }
+
+ if (([app isActive] != NO) && ([check_at_save containsObject:self]==NO) &&(0 < fixLetter(self, composeView, TRUE, FALSE)) && (backendGetPreferredEncoding([self backEnd]) == LF_Encoding_ISO2022JP)) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert addButtonWithTitle:@"変換"];
[alert addButtonWithTitle:@"変換しない"];
void alert2DidEnd_returnCode_contextInfo_(id self, SEL _cmd, id alert, int returnCode, void* arg1)
{
if (returnCode == NSAlertFirstButtonReturn) {
- fixLetter(self, [self webView], FALSE, FALSE);
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ fixLetter(self, [self webView], FALSE, FALSE);
+ } else if ([app ver] == LF_ElCapitan) {
+ fixLetter(self, [self composeWebView], FALSE, FALSE);
+ }
} else if (returnCode == NSAlertSecondButtonReturn) {
[check_at_save addObject:self];
}
}
#define MVMailBundle (NSClassFromString(@"MVMailBundle"))
-#define LFDocumentEditor (NSClassFromString(@"DocumentEditor"))
@implementation LetterFix
+ (void) initialize
app = [[LFApp alloc] init];
+ Class editorClass = nil;
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ editorClass = NSClassFromString(@"DocumentEditor");
+ } else if ([app ver] == LF_ElCapitan) {
+ editorClass = NSClassFromString(@"ComposeViewController");
+ } else {
+ return;
+ }
//
// swizzling method
//
- swizzlingMethod(LFDocumentEditor, @selector(isLoaded), @selector(_LF_isLoaded), (IMP)_LF_IMP_isLoaded);
- swizzlingMethod(LFDocumentEditor, @selector(send:), @selector(_LF_send:), (IMP)_LF_IMP_send_);
- swizzlingMethod(LFDocumentEditor, @selector(saveDocument:), @selector(_LF_saveDocument:), (IMP)_LF_IMP_saveDocument_);
- swizzlingMethod(LFDocumentEditor, @selector(_animationCompleted), @selector(_LF_animationCompleted), (IMP)_LF_IMP_animationCompleted);
- class_addMethod(LFDocumentEditor, @selector(_LF_alert0DidEnd:returnCode:contextInfo:), (IMP)alert0DidEnd_returnCode_contextInfo_, "v@:@i^v");
- class_addMethod(LFDocumentEditor, @selector(_LF_alert1DidEnd:returnCode:contextInfo:), (IMP)alert1DidEnd_returnCode_contextInfo_, "v@:@i^v");
- class_addMethod(LFDocumentEditor, @selector(_LF_alert2DidEnd:returnCode:contextInfo:), (IMP)alert2DidEnd_returnCode_contextInfo_, "v@:@i^v");
- class_addMethod(LFDocumentEditor, @selector(_LF_alert3DidEnd:returnCode:contextInfo:), (IMP)alert3DidEnd_returnCode_contextInfo_, "v@:@i^v");
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ swizzlingMethod(editorClass, @selector(isLoaded), @selector(_LF_isLoaded), (IMP)_LF_IMP_isLoaded);
+ } else if ([app ver] == LF_ElCapitan) {
+ swizzlingMethod(editorClass, @selector(finishLoadingEditor), @selector(_LF_finishLoadingEditor), (IMP)_LF_IMP_finishLoadingEditor);
+ }
+ swizzlingMethod(editorClass, @selector(send:), @selector(_LF_send:), (IMP)_LF_IMP_send_);
+ swizzlingMethod(editorClass, @selector(saveDocument:), @selector(_LF_saveDocument:), (IMP)_LF_IMP_saveDocument_);
+ if ([app ver] == LF_Mavericks || [app ver] == LF_Yosemite) {
+ swizzlingMethod(editorClass, @selector(_animationCompleted), @selector(_LF_animationCompleted), (IMP)_LF_IMP_animationCompleted);
+ }
+ class_addMethod(editorClass, @selector(_LF_alert0DidEnd:returnCode:contextInfo:), (IMP)alert0DidEnd_returnCode_contextInfo_, "v@:@i^v");
+ class_addMethod(editorClass, @selector(_LF_alert1DidEnd:returnCode:contextInfo:), (IMP)alert1DidEnd_returnCode_contextInfo_, "v@:@i^v");
+ class_addMethod(editorClass, @selector(_LF_alert2DidEnd:returnCode:contextInfo:), (IMP)alert2DidEnd_returnCode_contextInfo_, "v@:@i^v");
+ class_addMethod(editorClass, @selector(_LF_alert3DidEnd:returnCode:contextInfo:), (IMP)alert3DidEnd_returnCode_contextInfo_, "v@:@i^v");
//
// end of swizzling method
//