Commit 69981855 authored by Thibault Wittemberg's avatar Thibault Wittemberg

project: add SwiftyBeaver for log

SwiftyBeaver improves log readability and allows
to use different logging levels and different kinds of
outputs. Way better than simples "print()"

Change-Id: Iaa3087952095d4344b3cd85314892c4fcd25251c
parent fb8bb07d
......@@ -2,3 +2,4 @@ github "RxSwiftCommunity/RxRealm"
github "RxSwiftCommunity/RxDataSources" == 1.0.3
github "pkluz/PKHUD"
github "AliSoftware/Reusable" ~> 4.0
github "SwiftyBeaver/SwiftyBeaver"
......@@ -2,5 +2,6 @@ github "AliSoftware/Reusable" "4.0.1"
github "ReactiveX/RxSwift" "3.5.0"
github "RxSwiftCommunity/RxDataSources" "1.0.4"
github "RxSwiftCommunity/RxRealm" "0.6.0"
github "SwiftyBeaver/SwiftyBeaver" "1.3.0"
github "pkluz/PKHUD" "4.2.3"
github "realm/realm-cocoa" "v2.8.3"
......@@ -93,6 +93,7 @@
04399B141D1C341A00E99CD9 /* libx264.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04399AE21D1C341A00E99CD9 /* libx264.a */; };
04399B151D1C341A00E99CD9 /* libyaml-cpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 04399AE31D1C341A00E99CD9 /* libyaml-cpp.a */; };
1A1E476D1F0E808500EA9A36 /* Reusable.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A1E476C1F0E808500EA9A36 /* Reusable.framework */; };
1A1E476F1F0E894600EA9A36 /* SwiftyBeaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A1E476E1F0E894600EA9A36 /* SwiftyBeaver.framework */; };
1ABE07BA1F0C16F100D36361 /* ContactViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ABE07B91F0C16F100D36361 /* ContactViewModel.swift */; };
1ABE07BC1F0C22CC00D36361 /* WalkthroughStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1ABE07BB1F0C22CC00D36361 /* WalkthroughStoryboard.storyboard */; };
1ABE07D21F0D8FE800D36361 /* Images.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ABE07D01F0D8FE800D36361 /* Images.swift */; };
......@@ -272,6 +273,7 @@
04399AE21D1C341A00E99CD9 /* libx264.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libx264.a; path = ../fat/lib/libx264.a; sourceTree = "<group>"; };
04399AE31D1C341A00E99CD9 /* libyaml-cpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libyaml-cpp.a"; path = "../fat/lib/libyaml-cpp.a"; sourceTree = "<group>"; };
1A1E476C1F0E808500EA9A36 /* Reusable.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Reusable.framework; path = Carthage/Build/iOS/Reusable.framework; sourceTree = "<group>"; };
1A1E476E1F0E894600EA9A36 /* SwiftyBeaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftyBeaver.framework; path = Carthage/Build/iOS/SwiftyBeaver.framework; sourceTree = "<group>"; };
1ABE07B91F0C16F100D36361 /* ContactViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactViewModel.swift; sourceTree = "<group>"; };
1ABE07BB1F0C22CC00D36361 /* WalkthroughStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = WalkthroughStoryboard.storyboard; sourceTree = "<group>"; };
1ABE07D01F0D8FE800D36361 /* Images.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Images.swift; sourceTree = "<group>"; };
......@@ -344,6 +346,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1A1E476F1F0E894600EA9A36 /* SwiftyBeaver.framework in Frameworks */,
1A1E476D1F0E808500EA9A36 /* Reusable.framework in Frameworks */,
56559B0E1EE8777600BF20E1 /* RxRealm.framework in Frameworks */,
564775831EE5CFC500A0C855 /* Realm.framework in Frameworks */,
......@@ -464,6 +467,7 @@
02AED8171DD4C4B000F740BA /* Frameworks */ = {
isa = PBXGroup;
children = (
1A1E476E1F0E894600EA9A36 /* SwiftyBeaver.framework */,
1A1E476C1F0E808500EA9A36 /* Reusable.framework */,
56559B0D1EE8777600BF20E1 /* RxRealm.framework */,
564775811EE5CFC500A0C855 /* Realm.framework */,
......@@ -987,6 +991,7 @@
"$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework",
"$(SRCROOT)/Carthage/Build/iOS/RxRealm.framework",
"$(SRCROOT)/Carthage/Build/iOS/Reusable.framework",
"$(SRCROOT)/Carthage/Build/iOS/SwiftyBeaver.framework",
);
name = "⚙️ Copy Frameworks";
outputPaths = (
......
......@@ -19,6 +19,7 @@
*/
import RealmSwift
import SwiftyBeaver
/**
The different states that an account can have during time.
......@@ -69,6 +70,11 @@ class AccountConfigModel: Object {
*/
fileprivate var configValues = [ConfigKeyModel: String]()
/**
logguer
*/
private let log = SwiftyBeaver.self
/**
Constructor.
......@@ -85,7 +91,7 @@ class AccountConfigModel: Object {
configValues.updateValue(value, forKey: configKeyModel)
} else {
//~ The key given in parameter is not known from Ring.
print("Can't find key", key)
log.warning("Can't find key: \(key)")
}
}
}
......
......@@ -18,12 +18,19 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
import SwiftyBeaver
/**
A structure exposing the fields and methods for an Account
*/
struct AccountModelHelper {
fileprivate var account: AccountModel
/**
logguer
*/
private let log = SwiftyBeaver.self
/**
Constructor
......@@ -110,9 +117,9 @@ struct AccountModelHelper {
let accountCredentialModel = try AccountCredentialsModel(withRawaData: credential)
self.account.credentialDetails.append(accountCredentialModel)
} catch CredentialsError.notEnoughData {
print("Not enough data to create a credential")
log.error("Not enough data to create a credential")
} catch {
print("Unexpected error")
log.error("Unexpected error")
}
}
}
......
......@@ -21,6 +21,7 @@
import UIKit
import RealmSwift
import SwiftyBeaver
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
......@@ -30,8 +31,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
static let accountService = AccountsService(withAccountAdapter: AccountAdapter())
static let nameService = NameService(withNameRegistrationAdapter: NameRegistrationAdapter())
static let conversationsService = ConversationsService(withMessageAdapter: MessagesAdapter())
private let log = SwiftyBeaver.self
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// initialize log format
let console = ConsoleDestination()
console.format = "$Dyyyy-MM-dd HH:mm:ss.SSS$d $C$L$c: $M"
log.addDestination(console)
SystemAdapter().registerConfigurationHandler()
self.startDaemon()
return true
......@@ -60,13 +68,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
try AppDelegate.daemonService.startDaemon()
AppDelegate.accountService.loadAccounts()
} catch StartDaemonError.initializationFailure {
print("Daemon failed to initialize.")
log.error("Daemon failed to initialize.")
} catch StartDaemonError.startFailure {
print("Daemon failed to start.")
log.error("Daemon failed to start.")
} catch StartDaemonError.daemonAlreadyRunning {
print("Daemon already running.")
log.error("Daemon already running.")
} catch {
print("Unknown error in Daemon start.")
log.error("Unknown error in Daemon start.")
}
}
......@@ -74,9 +82,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
do {
try AppDelegate.daemonService.stopDaemon()
} catch StopDaemonError.daemonNotRunning {
print("Daemon failed to stop because it was not already running.")
log.error("Daemon failed to stop because it was not already running.")
} catch {
print("Unknown error in Daemon stop.")
log.error("Unknown error in Daemon stop.")
}
}
}
......@@ -20,9 +20,15 @@
import RxSwift
import RealmSwift
import SwiftyBeaver
class ContactViewModel {
/**
logguer
*/
private let log = SwiftyBeaver.self
private let nameService = AppDelegate.nameService
private let disposeBag = DisposeBag()
private let contact: ContactModel
......@@ -60,7 +66,7 @@ class ContactViewModel {
self.contact.userName = lookupNameResponse.name
}
} catch let error {
print ("Realm persistence with error: \(error)")
self.log.error("Realm persistence with error: \(error)")
}
self.userName.value = lookupNameResponse.name
......
......@@ -21,9 +21,15 @@
import UIKit
import RxSwift
import RealmSwift
import SwiftyBeaver
class ConversationViewModel {
/**
logguer
*/
private let log = SwiftyBeaver.self
let conversation: ConversationModel
private lazy var realm: Realm = {
guard let realm = try? Realm() else {
......@@ -80,7 +86,7 @@ class ConversationViewModel {
self.conversation.recipient?.userName = userNameFound
}
} catch let error {
print ("Realm persistence with error: \(error)")
self.log.error("Realm persistence with error: \(error)")
}
}).addDisposableTo(self.disposeBag)
......@@ -158,8 +164,8 @@ class ConversationViewModel {
fileprivate func saveMessage(withContent content: String, byAuthor author: String, toConversationWith account: String) {
self.conversationsService
.saveMessage(withContent: content, byAuthor: author, toConversationWith: account, currentAccountId: (accountService.currentAccount?.id)!)
.subscribe(onCompleted: {
print("Message saved")
.subscribe(onCompleted: { [unowned self] in
self.log.debug("Message saved")
})
.addDisposableTo(disposeBag)
}
......@@ -167,8 +173,8 @@ class ConversationViewModel {
func setMessagesAsRead() {
self.conversationsService
.setMessagesAsRead(forConversation: self.conversation)
.subscribe(onCompleted: {
print("Message set as read")
.subscribe(onCompleted: { [unowned self] in
self.log.debug("Message set as read")
}).addDisposableTo(disposeBag)
}
......
......@@ -22,6 +22,7 @@
import RxCocoa
import RxSwift
import RealmSwift
import SwiftyBeaver
enum AddAccountError: Error {
case templateNotConform
......@@ -30,6 +31,12 @@ enum AddAccountError: Error {
class AccountsService: AccountAdapterDelegate {
// MARK: Private members
/**
logguer
*/
private let log = SwiftyBeaver.self
/**
Used to register the service to daemon events, injected by constructor.
*/
......@@ -150,7 +157,7 @@ class AccountsService: AccountAdapterDelegate {
account.credentialDetails.removeAll()
account.credentialDetails.append(objectsIn: credentialDetails)
} catch {
print(error)
log.error("\(error)")
}
}
}
......@@ -208,7 +215,7 @@ class AccountsService: AccountAdapterDelegate {
Not supported yet.
*/
fileprivate func addSipAccount() {
print("Not supported yet")
log.info("Not supported yet")
}
/**
......@@ -273,10 +280,10 @@ class AccountsService: AccountAdapterDelegate {
let credentials = try AccountCredentialsModel(withRawaData: rawCredentials)
credentialsList.append(credentials)
} catch CredentialsError.notEnoughData {
print("Not enough data to build a credential object.")
log.error("Not enough data to build a credential object.")
throw CredentialsError.notEnoughData
} catch {
print("Unexpected error.")
log.error("Unexpected error.")
throw AccountModelError.unexpectedError
}
}
......@@ -348,7 +355,7 @@ class AccountsService: AccountAdapterDelegate {
// MARK: - AccountAdapterDelegate
func accountsChanged() {
print("Accounts changed.")
log.debug("Accounts changed.")
reloadAccounts()
let event = ServiceEvent(withEventType: .accountsChanged)
......@@ -356,7 +363,7 @@ class AccountsService: AccountAdapterDelegate {
}
func registrationStateChanged(with response: RegistrationResponse) {
print("RegistrationStateChanged.")
log.debug("RegistrationStateChanged.")
reloadAccounts()
var event = ServiceEvent(withEventType: .registrationStateChanged)
......
......@@ -21,9 +21,15 @@
import UIKit
import RxSwift
import RealmSwift
import SwiftyBeaver
class ConversationsService: MessagesAdapterDelegate {
/**
logguer
*/
private let log = SwiftyBeaver.self
fileprivate let messageAdapter: MessagesAdapter
fileprivate let disposeBag = DisposeBag()
fileprivate let textPlainMIMEType = "text/plain"
......@@ -171,8 +177,8 @@ class ConversationsService: MessagesAdapterDelegate {
if let content = message[textPlainMIMEType] {
self.saveMessage(withContent: content, byAuthor: senderAccount, toConversationWith: senderAccount, currentAccountId: receiverAccountId)
.subscribe(onCompleted: {
print("Message saved")
.subscribe(onCompleted: { [unowned self] in
self.log.info("Message saved")
})
.addDisposableTo(disposeBag)
}
......@@ -180,7 +186,6 @@ class ConversationsService: MessagesAdapterDelegate {
func messageStatusChanged(_ status: MessageStatus, for messageId: UInt64,
from senderAccountId: String, to receiverAccount: String) {
print("messageStatusChanged: \(status.rawValue) for: \(messageId) from: \(senderAccountId) to: \(receiverAccount)")
log.debug("messageStatusChanged: \(status.rawValue) for: \(messageId) from: \(senderAccountId) to: \(receiverAccount)")
}
}
......@@ -19,6 +19,7 @@
*/
import Foundation
import SwiftyBeaver
/**
Errors that can be thrown when trying to start the daemon:
......@@ -53,6 +54,12 @@ enum StopDaemonError: Error {
*/
class DaemonService {
// MARK: Private members
/**
logguer
*/
private let log = SwiftyBeaver.self
/// Indicates whether the daemon is started or not.
fileprivate(set) internal var daemonStarted = false
......@@ -81,13 +88,13 @@ class DaemonService {
throw StartDaemonError.daemonAlreadyRunning
}
print("Starting daemon...")
log.debug("Starting daemon...")
if self.dRingAdaptor.initDaemon() {
print("Daemon initialized.")
log.debug("Daemon initialized.")
if self.dRingAdaptor.startDaemon() {
self.startRingServicePolling()
self.daemonStarted = true
print("Daemon started.")
log.debug("Daemon started.")
} else {
throw StartDaemonError.startFailure
}
......@@ -106,11 +113,11 @@ class DaemonService {
throw StopDaemonError.daemonNotRunning
}
print("Stopping daemon...")
log.debug("Stopping daemon...")
self.pollingTimer?.invalidate()
self.dRingAdaptor.fini()
self.daemonStarted = false
print("Daemon stopped.")
log.debug("Daemon stopped.")
}
// MARK: Private Core
......
......@@ -20,6 +20,7 @@
import UIKit
import RxSwift
import SwiftyBeaver
/**
Represents the status of a username validation request when the user is typing his username
......@@ -33,6 +34,10 @@ enum UsernameValidationStatus {
}
class NameService: NameRegistrationAdapterDelegate {
/**
logguer
*/
private let log = SwiftyBeaver.self
/**
Used to make lookup name request to the daemon
......@@ -105,7 +110,7 @@ class NameService: NameRegistrationAdapterDelegate {
} else if response.state == .invalidName {
usernameValidationStatus.onNext(.invalid)
} else {
print("Lookup name error")
log.error("Lookup name error")
}
usernameLookupStatus.onNext(response)
......@@ -113,9 +118,9 @@ class NameService: NameRegistrationAdapterDelegate {
internal func nameRegistrationEnded(with response: NameRegistrationResponse) {
if response.state == .success {
print("Registred name : \(response.name)")
log.debug("Registred name : \(response.name)")
} else {
print("Name Registration failed. State = \(response.state.rawValue)")
log.debug("Name Registration failed. State = \(response.state.rawValue)")
}
}
}
......@@ -19,10 +19,10 @@
*/
import UIKit
import RxCocoa
import RxSwift
import PKHUD
import SwiftyBeaver
fileprivate enum CreateRingAccountCellType {
case registerPublicUsername
......@@ -34,6 +34,11 @@ fileprivate enum CreateRingAccountCellType {
class CreateRingAccountViewController: UITableViewController {
/**
logguer
*/
private let log = SwiftyBeaver.self
var mAccountViewModel = CreateRingAccountViewModel(withAccountService: AppDelegate.accountService,
nameService: AppDelegate.nameService)
......@@ -135,7 +140,7 @@ class CreateRingAccountViewController: UITableViewController {
}
fileprivate func setCreateAccountAsLoading() {
print("Creating account...")
log.debug("Creating account...")
self.mCreateAccountButton.setTitle("Loading...", for: .normal)
self.mCreateAccountButton.isUserInteractionEnabled = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment