blob: 355ba5cdb94c2a2be0b837b3f5c60fb2b075ff2e [file] [log] [blame]
Alexandre Lision8521baa2015-03-13 11:08:00 -04001/*
2 * Copyright (C) 2004-2015 Savoir-Faire Linux Inc.
3 * Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Additional permission under GNU GPL version 3 section 7:
20 *
21 * If you modify this program, or any covered work, by linking or
22 * combining it with the OpenSSL project's OpenSSL library (or a
23 * modified version of that library), containing parts covered by the
24 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
25 * grants you additional permission to convey the resulting work.
26 * Corresponding Source for a non-source form of such a combination
27 * shall include the source code for the parts of OpenSSL used as well
28 * as that of the covered work.
29 */
Alexandre Lision5855b6a2015-02-03 11:31:05 -050030#import "AppDelegate.h"
31
Alexandre Lisione4041492015-03-20 18:20:43 -040032#import <callmodel.h>
Alexandre Lision5855b6a2015-02-03 11:31:05 -050033
Alexandre Lision745e4d62015-03-22 20:03:10 -040034#import <accountmodel.h>
35#import <protocolmodel.h>
36#import <QItemSelectionModel>
37#import <account.h>
38
Alexandre Lisionc65310c2015-04-23 16:44:23 -040039#import "Constants.h"
Alexandre Lision745e4d62015-03-22 20:03:10 -040040#import "RingWizardWC.h"
41
42@interface AppDelegate()
43
44@property RingWindowController* ringWindowController;
45@property RingWizardWC* wizard;
46
47@end
48
Alexandre Lision5855b6a2015-02-03 11:31:05 -050049@implementation AppDelegate
50
51- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
Alexandre Lision4a7b95e2015-02-20 10:06:43 -050052 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints"];
53
Alexandre Lision745e4d62015-03-22 20:03:10 -040054
Alexandre Lisione4041492015-03-20 18:20:43 -040055 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
56
Alexandre Lision745e4d62015-03-22 20:03:10 -040057 if([self checkForRingAccount]) {
58 [self showMainWindow];
59 } else {
60 [self showWizard];
61 }
Alexandre Lisione4041492015-03-20 18:20:43 -040062 [self connect];
63}
64
65- (void) connect
66{
67 QObject::connect(CallModel::instance(),
68 &CallModel::incomingCall,
69 [=](Call* call) {
Alexandre Lisionc65310c2015-04-23 16:44:23 -040070 BOOL shouldComeToForeground = [[NSUserDefaults standardUserDefaults] boolForKey:Preferences::WindowBehaviour];
71 BOOL shouldNotify = [[NSUserDefaults standardUserDefaults] boolForKey:Preferences::Notifications];
Alexandre Lisione4041492015-03-20 18:20:43 -040072 if(shouldComeToForeground)
73 [NSApp activateIgnoringOtherApps:YES];
74
75 if(shouldNotify) {
76 [self showIncomingNotification:call];
77 }
78 });
79}
80
81- (void) showIncomingNotification:(Call*) call{
82 NSUserNotification *notification = [[NSUserNotification alloc] init];
83 notification.title = @"Incoming call", call->peerName();
84 //notification.informativeText = @"A notification";
85 notification.soundName = NSUserNotificationDefaultSoundName;
86
87 [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
Alexandre Lision5855b6a2015-02-03 11:31:05 -050088}
89
Alexandre Lision745e4d62015-03-22 20:03:10 -040090/**
91 * click in MainMenu "Setup Ring"
92 */
93- (IBAction)showWizard:(id)sender {
94 [self showWizard];
95}
96
97- (void) showWizard
98{
99 NSLog(@"Showing wizard");
100 if(self.wizard == nil) {
101 self.wizard = [[RingWizardWC alloc] initWithWindowNibName:@"RingWizard"];
102 }
103 [self.wizard.window orderFront:self];
104}
105
106- (void) showMainWindow
107{
108 if(self.ringWindowController == nil)
109 self.ringWindowController = [[RingWindowController alloc] initWithWindowNibName:@"RingWindow"];
110
111 [self.ringWindowController.window makeKeyAndOrderFront:self];
112}
113
114- (BOOL) checkForRingAccount
115{
116 for (int i = 0 ; i < AccountModel::instance()->rowCount() ; ++i) {
117 QModelIndex idx = AccountModel::instance()->index(i);
118 Account* acc = AccountModel::instance()->getAccountByModelIndex(idx);
119 if(acc->protocol() == Account::Protocol::RING) {
120 return YES;
121 }
122 }
123 return FALSE;
124}
125
126- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
127{
128 if([self checkForRingAccount]) {
129 [self showMainWindow];
130 } else {
131 [self showWizard];
132 }
133 return YES;
134}
135
Alexandre Lision5855b6a2015-02-03 11:31:05 -0500136@end