blob: b73e0e551d80fe78d3a9e3e6d96742035d017972 [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
39#import "RingWizardWC.h"
40
41@interface AppDelegate()
42
43@property RingWindowController* ringWindowController;
44@property RingWizardWC* wizard;
45
46@end
47
Alexandre Lision5855b6a2015-02-03 11:31:05 -050048@implementation AppDelegate
49
50- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
Alexandre Lision4a7b95e2015-02-20 10:06:43 -050051 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints"];
52
Alexandre Lision745e4d62015-03-22 20:03:10 -040053
Alexandre Lisione4041492015-03-20 18:20:43 -040054 [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
55
Alexandre Lision745e4d62015-03-22 20:03:10 -040056 if([self checkForRingAccount]) {
57 [self showMainWindow];
58 } else {
59 [self showWizard];
60 }
Alexandre Lisione4041492015-03-20 18:20:43 -040061 [self connect];
62}
63
64- (void) connect
65{
66 QObject::connect(CallModel::instance(),
67 &CallModel::incomingCall,
68 [=](Call* call) {
69 BOOL shouldComeToForeground = [[NSUserDefaults standardUserDefaults] boolForKey:@"window_behaviour"];
70 BOOL shouldNotify = [[NSUserDefaults standardUserDefaults] boolForKey:@"enable_notifications"];
71 if(shouldComeToForeground)
72 [NSApp activateIgnoringOtherApps:YES];
73
74 if(shouldNotify) {
75 [self showIncomingNotification:call];
76 }
77 });
78}
79
80- (void) showIncomingNotification:(Call*) call{
81 NSUserNotification *notification = [[NSUserNotification alloc] init];
82 notification.title = @"Incoming call", call->peerName();
83 //notification.informativeText = @"A notification";
84 notification.soundName = NSUserNotificationDefaultSoundName;
85
86 [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
Alexandre Lision5855b6a2015-02-03 11:31:05 -050087}
88
Alexandre Lision745e4d62015-03-22 20:03:10 -040089/**
90 * click in MainMenu "Setup Ring"
91 */
92- (IBAction)showWizard:(id)sender {
93 [self showWizard];
94}
95
96- (void) showWizard
97{
98 NSLog(@"Showing wizard");
99 if(self.wizard == nil) {
100 self.wizard = [[RingWizardWC alloc] initWithWindowNibName:@"RingWizard"];
101 }
102 [self.wizard.window orderFront:self];
103}
104
105- (void) showMainWindow
106{
107 if(self.ringWindowController == nil)
108 self.ringWindowController = [[RingWindowController alloc] initWithWindowNibName:@"RingWindow"];
109
110 [self.ringWindowController.window makeKeyAndOrderFront:self];
111}
112
113- (BOOL) checkForRingAccount
114{
115 for (int i = 0 ; i < AccountModel::instance()->rowCount() ; ++i) {
116 QModelIndex idx = AccountModel::instance()->index(i);
117 Account* acc = AccountModel::instance()->getAccountByModelIndex(idx);
118 if(acc->protocol() == Account::Protocol::RING) {
119 return YES;
120 }
121 }
122 return FALSE;
123}
124
125- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
126{
127 if([self checkForRingAccount]) {
128 [self showMainWindow];
129 } else {
130 [self showWizard];
131 }
132 return YES;
133}
134
Alexandre Lision5855b6a2015-02-03 11:31:05 -0500135@end