diff --git a/Classes/DialerViewController.h b/Classes/DialerViewController.h index 49e6d857c..d97d612df 100644 --- a/Classes/DialerViewController.h +++ b/Classes/DialerViewController.h @@ -27,7 +27,7 @@ #import "UITransferButton.h" #import "UIDigitButton.h" -@interface DialerViewController : UIViewController { +@interface DialerViewController : UIViewController { } - (void)setAddress:(NSString*)address; diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m index 652e42947..c9480b922 100644 --- a/Classes/DialerViewController.m +++ b/Classes/DialerViewController.m @@ -22,6 +22,7 @@ #import "DialerViewController.h" #import "IncallViewController.h" +#import "DTAlertView.h" #import "LinphoneManager.h" #import "PhoneMainView.h" #import "Utils.h" @@ -276,6 +277,89 @@ static UICompositeViewDescription *compositeDescription = nil; } } +#pragma mark - Debug Functions +-(void)presentMailViewWithTitle:(NSString*)subject forRecipients:(NSArray*)recipients attachLogs:(BOOL)attachLogs { + if( [MFMailComposeViewController canSendMail] ){ + MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; + if( controller ){ + controller.mailComposeDelegate = self; + [controller setSubject:subject]; + [controller setToRecipients:recipients]; + + if( attachLogs ){ + char * filepath = linphone_core_compress_log_collection([LinphoneManager getLc]); + if (filepath == NULL) { + Linphone_err(@"Cannot sent logs: file is NULL"); + return; + } + NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + NSString *filename = [appName stringByAppendingString:@".gz"]; + NSString *mimeType = @"text/plain"; + + if ([filename hasSuffix:@".gz"]) { + mimeType = @"application/gzip"; + filename = [appName stringByAppendingString:@".gz"]; + } else { + Linphone_err(@"Unknown extension type: %@, cancelling email", filename); + return; + } + [controller setMessageBody:NSLocalizedString(@"Application logs", nil) isHTML:NO]; + [controller addAttachmentData:[NSData dataWithContentsOfFile:[NSString stringWithUTF8String:filepath]] mimeType:mimeType fileName:filename]; + + ms_free(filepath); + + } + self.modalPresentationStyle = UIModalPresentationPageSheet; + [self.view.window.rootViewController presentViewController:controller animated:TRUE completion:^{}]; + [controller release]; + } + + } else { + UIAlertView* alert = [[UIAlertView alloc] initWithTitle:subject + message:NSLocalizedString(@"Error: no mail account configured", nil) + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", nil) + otherButtonTitles: nil]; + [alert show]; + [alert release]; + } +} + + +- (BOOL)displayDebugPopup:(NSString*)address { + LinphoneManager* mgr = [LinphoneManager instance]; + NSString* debugAddress = [mgr lpConfigStringForKey:@"debug_popup_magic" withDefault:@""]; + if( ![debugAddress isEqualToString:@""] && [address isEqualToString:debugAddress]){ + + + DTAlertView* alertView = [[DTAlertView alloc] initWithTitle:NSLocalizedString(@"Debug", nil) + message:NSLocalizedString(@"Choose an action", nil)]; + + [alertView addCancelButtonWithTitle:NSLocalizedString(@"Cancel", nil) block:nil]; + + [alertView addButtonWithTitle:NSLocalizedString(@"Send logs", nil) block:^{ + NSString* appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; + NSString* logsAddress = [mgr lpConfigStringForKey:@"debug_popup_email" withDefault:@"linphone-ios@linphone.org"]; + [self presentMailViewWithTitle:appName forRecipients:@[logsAddress] attachLogs:true]; + }]; + + BOOL debugEnabled = [[LinphoneManager instance] lpConfigBoolForKey:@"debugenable_preference"]; + NSString* actionLog = (debugEnabled ? NSLocalizedString(@"Disable logs", nil) : NSLocalizedString(@"Enable logs", nil)); + [alertView addButtonWithTitle:actionLog block:^{ + // enable / disable + BOOL enableDebug = ![mgr lpConfigBoolForKey:@"debugenable_preference"]; + [mgr lpConfigSetBool:enableDebug forKey:@"debugenable_preference"]; + [mgr setLogsEnabled:enableDebug]; + }]; + + [alertView show]; + [alertView release]; + return true; + } + return false; +} + + #pragma mark - - (void)callUpdate:(LinphoneCall*)call state:(LinphoneCallState)state { @@ -339,6 +423,13 @@ static UICompositeViewDescription *compositeDescription = nil; return YES; } +#pragma mark - MFComposeMailDelegate + +-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { + [controller dismissViewControllerAnimated:TRUE completion:^{}]; + [self.navigationController setNavigationBarHidden:TRUE animated:FALSE]; +} + #pragma mark - Action Functions @@ -359,6 +450,9 @@ static UICompositeViewDescription *compositeDescription = nil; } - (IBAction)onAddressChange: (id)sender { + if( [self displayDebugPopup:self.addressField.text] ){ + self.addressField.text = @""; + } if([[addressField text] length] > 0) { [addContactButton setEnabled:TRUE]; [eraseButton setEnabled:TRUE]; diff --git a/Classes/LinphoneManager.h b/Classes/LinphoneManager.h index 5bd91a667..daa3c4779 100644 --- a/Classes/LinphoneManager.h +++ b/Classes/LinphoneManager.h @@ -157,6 +157,7 @@ typedef struct _LinphoneManagerSounds { + (BOOL)copyFile:(NSString*)src destination:(NSString*)dst override:(BOOL)override; + (NSString*)bundleFile:(NSString*)file; + (NSString*)documentFile:(NSString*)file; ++ (NSString*)cacheDirectory; - (void)acceptCall:(LinphoneCall *)call; - (void)call:(NSString *)address displayName:(NSString*)displayName transfer:(BOOL)transfer; diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index a43b03775..2f5606027 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -1459,14 +1459,8 @@ static BOOL libStarted = FALSE; libmsbcg729_init(); // load g729 plugin #endif - /*to make sure we don't loose debug trace*/ - if ([self lpConfigBoolForKey:@"debugenable_preference"]) { - linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler); - ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); - /*must be done before creating linphone core to get its traces too*/ - } linphone_core_set_log_collection_path([[LinphoneManager cacheDirectory] UTF8String]); - linphone_core_enable_log_collection([self lpConfigBoolForKey:@"debugenable_preference"]); + [self setLogsEnabled:[self lpConfigBoolForKey:@"debugenable_preference"]]; theLinphoneCore = linphone_core_new_with_config (&linphonec_vtable @@ -2080,10 +2074,12 @@ static void audioRouteChangeListenerCallback ( -(void)setLogsEnabled:(BOOL)enabled { if (enabled) { + NSLog(@"Enabling debug logs"); linphone_core_enable_logs_with_cb((OrtpLogFunc)linphone_iphone_log_handler); ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); linphone_core_enable_log_collection(enabled); } else { + NSLog(@"Disabling debug logs"); linphone_core_enable_log_collection(enabled); linphone_core_disable_logs(); }