blob: f13b56300e9afc60e9b433427c2949e031a13eb4 [file] [log] [blame]
Alexandre Lision8521baa2015-03-13 11:08:00 -04001/*
Alexandre Lision9fe374b2016-01-06 10:17:31 -05002 * Copyright (C) 2015-2016 Savoir-faire Linux Inc.
Alexandre Lision8521baa2015-03-13 11:08:00 -04003 * 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.
Alexandre Lision8521baa2015-03-13 11:08:00 -040018 */
Alexandre Lision46dc0c32015-09-15 10:22:59 -040019
20#import <AppKit/NSApplication.h>
21
22//Qt
Alexandre Lision5855b6a2015-02-03 11:31:05 -050023#import <qapplication.h>
Alexandre Lision7a166e42015-09-02 15:04:43 -040024#import <globalinstances.h>
Alexandre Lisione7e01ba2015-03-30 13:30:51 -040025#import <QDebug>
26#import <QDir>
Alexandre Lision46dc0c32015-09-15 10:22:59 -040027#import <QTranslator>
28#import <QLocale>
Alexandre Lision5855b6a2015-02-03 11:31:05 -050029
Alexandre Lision922380d2015-09-15 10:25:17 -040030//LRC
31#import <personmodel.h>
Alexandre Lision4a1c7402016-01-21 14:13:09 -050032#import <recentmodel.h>
Alexandre Lision34e738e2015-09-24 14:13:23 -040033#import <categorizedhistorymodel.h>
34#import <localhistorycollection.h>
Alexandre Lision54187a22016-04-04 09:45:52 -040035#import <localprofilecollection.h>
Alexandre Lision261f1b92016-04-04 12:35:34 -040036#import <peerprofilecollection.h>
Alexandre Lisiond6e32252015-09-24 14:16:52 -040037#import <numbercategorymodel.h>
Alexandre Lisionaa03df42016-01-26 09:39:25 -050038#import <callmodel.h>
Alexandre Lision54187a22016-04-04 09:45:52 -040039#import <profilemodel.h>
Alexandre Lision922380d2015-09-15 10:25:17 -040040
Alexandre Lision46dc0c32015-09-15 10:22:59 -040041#import "backends/AddressBookBackend.h"
Alexandre Lision7a166e42015-09-02 15:04:43 -040042#import "delegates/ImageManipulationDelegate.h"
43
Alexandre Lision5855b6a2015-02-03 11:31:05 -050044int main(int argc, const char *argv[]) {
Alexandre Lision8521baa2015-03-13 11:08:00 -040045
Alexandre Lisione7e01ba2015-03-30 13:30:51 -040046 QDir dir(QString::fromUtf8(argv[0]));
47 dir.cdUp();
48 dir.cdUp();
49 dir.cd("Plugins");
50 QCoreApplication::addLibraryPath(dir.absolutePath());
51 qDebug() << "" << QCoreApplication::libraryPaths();
Alexandre Lision5855b6a2015-02-03 11:31:05 -050052 //Qt event loop will override native event loop
53 QApplication* app = new QApplication(argc, const_cast<char**>(argv));
54 app->setAttribute(Qt::AA_MacPluginApplication);
55
Alexandre Lision46dc0c32015-09-15 10:22:59 -040056 dir.cdUp();
Alexandre Lisionc8d9f0b2015-10-26 15:07:20 -040057
58 //We need to check if primary language is an English variant (en, en-CA etc...) before installing a translator
59 NSString* lang = [[NSLocale preferredLanguages] objectAtIndex:0];
Alexandre Lision4baba4c2016-02-11 13:00:57 -050060 if (![lang rangeOfString:@"en"].location != NSNotFound) {
Alexandre Lisionc8d9f0b2015-10-26 15:07:20 -040061 QTranslator translator;
62 if (translator.load(QLocale::system(), "lrc", "_", dir.absolutePath()+"/Resources/QtTranslations")) {
63 app->installTranslator(&translator);
64 } else {
65 NSLog(@"Couldn't load qt translator");
66 }
Alexandre Lision46dc0c32015-09-15 10:22:59 -040067 }
68
Alexandre Lisionaa03df42016-01-26 09:39:25 -050069 CallModel::instance();
Alexandre Lisiond3aa3ad2015-10-23 14:28:41 -040070 CategorizedHistoryModel::instance().addCollection<LocalHistoryCollection>(LoadOptions::FORCE_ENABLED);
Alexandre Lision34e738e2015-09-24 14:13:23 -040071
Alexandre Lisiond6e32252015-09-24 14:16:52 -040072 /* make sure basic number categories exist, in case user has no contacts
73 * from which these would be automatically created
74 */
Alexandre Lisiond3aa3ad2015-10-23 14:28:41 -040075 NumberCategoryModel::instance().addCategory("work", QVariant());
76 NumberCategoryModel::instance().addCategory("home", QVariant());
Alexandre Lisiond6e32252015-09-24 14:16:52 -040077
Alexandre Lision7a166e42015-09-02 15:04:43 -040078 GlobalInstances::setPixmapManipulator(std::unique_ptr<Interfaces::ImageManipulationDelegate>(new Interfaces::ImageManipulationDelegate()));
Alexandre Lision54187a22016-04-04 09:45:52 -040079
Alexandre Lisiond3aa3ad2015-10-23 14:28:41 -040080 PersonModel::instance().addCollection<AddressBookBackend>(LoadOptions::FORCE_ENABLED);
Alexandre Lision4a1c7402016-01-21 14:13:09 -050081 RecentModel::instance(); // Make sure RecentModel is initialized before showing UI
Alexandre Lision5855b6a2015-02-03 11:31:05 -050082
Alexandre Lision54187a22016-04-04 09:45:52 -040083 ProfileModel::instance().addCollection<LocalProfileCollection>(LoadOptions::FORCE_ENABLED);
Alexandre Lision261f1b92016-04-04 12:35:34 -040084 PersonModel::instance().addCollection<PeerProfileCollection>(LoadOptions::FORCE_ENABLED);
Alexandre Lision54187a22016-04-04 09:45:52 -040085
Alexandre Lision5855b6a2015-02-03 11:31:05 -050086 return NSApplicationMain(argc, argv);
87}