Skip to content

Commit 582da1c

Browse files
committed
Merge branch 'release/1.3'
2 parents f6a8688 + 6bc264e commit 582da1c

File tree

110 files changed

+4796
-1275
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+4796
-1275
lines changed

.gitattributes

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Adamant/Assets/adamant-core.js linguist-vendored
1+
AdamantTests/Core/adamant-core.js linguist-vendored

Adamant.xcodeproj/project.pbxproj

Lines changed: 62 additions & 8 deletions
Large diffs are not rendered by default.

Adamant/AppDelegate.swift

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ extension StoreKey {
3838
struct AdamantResources {
3939
static let coreDataModel = Bundle.main.url(forResource: "Adamant", withExtension: "momd")!
4040

41+
// MARK: Nodes
42+
4143
static let nodes: [Node] = [
4244
Node(scheme: .https, host: "endless.adamant.im", port: nil),
4345
Node(scheme: .https, host: "clown.adamant.im", port: nil),
@@ -50,12 +52,16 @@ struct AdamantResources {
5052
"https://ethnode1.adamant.im/"
5153
// "https://ropsten.infura.io/" // test network
5254
]
55+
56+
static let lskServers = [
57+
"https://lisknode1.adamant.im"
58+
]
5359

54-
// Addresses
60+
// MARK: ADAMANT Addresses
5561
static let supportEmail = "ios@adamant.im"
5662
static let ansReadmeUrl = "https://github.com/Adamant-im/AdamantNotificationService/blob/master/README.md"
5763

58-
// Contacts
64+
// MARK: Contacts
5965
struct contacts {
6066
static let adamantBountyWallet = "U15423595369615486571"
6167
static let adamantIco = "U7047165086065693428"
@@ -67,10 +73,17 @@ struct AdamantResources {
6773
private init() {}
6874
}
6975

70-
// Explorers
76+
// MARK: Explorers
77+
// MARK: ADM
7178
static let adamantExplorerAddress = "https://explorer.adamant.im/tx/"
79+
80+
// MARK: ETH
7281
static let ethereumExplorerAddress = "https://etherscan.io/tx/"
7382
// static let ethereumExplorerAddress = "https://ropsten.etherscan.io/tx/" // Testnet
83+
84+
// MARK: LSK
85+
static let liskExplorerAddress = "https://explorer.lisk.io/tx/"
86+
// static let liskExplorerAddress = "https://testnet-explorer.lisk.io/tx/" // LISK Testnet
7487

7588
private init() {}
7689
}
@@ -104,7 +117,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
104117
window = UIWindow(frame: UIScreen.main.bounds)
105118
window!.rootViewController = UITabBarController()
106119
window!.rootViewController?.view.backgroundColor = .white
107-
window!.makeKeyAndVisible()
108120
window!.tintColor = UIColor.adamant.primary
109121

110122

@@ -114,27 +126,44 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
114126
fatalError("Failed to get Router")
115127
}
116128

117-
let login = router.get(scene: AdamantScene.Login.login)
118-
window!.rootViewController?.present(login, animated: false, completion: nil)
119-
120129
// MARK: 4. Prepare pages
121130
if let tabbar = window?.rootViewController as? UITabBarController {
122-
let chatListRoot = router.get(scene: AdamantScene.Chats.chatList)
123-
let chatList = UINavigationController(rootViewController: chatListRoot)
124-
chatList.tabBarItem.title = String.adamantLocalized.tabItems.chats
125-
chatList.tabBarItem.image = #imageLiteral(resourceName: "chats_tab")
126-
127-
let accountRoot = router.get(scene: AdamantScene.Account.account)
128-
let account = UINavigationController(rootViewController: accountRoot)
129-
account.tabBarItem.title = String.adamantLocalized.tabItems.account
130-
account.tabBarItem.image = #imageLiteral(resourceName: "account-tab")
131-
132-
chatList.tabBarItem.badgeColor = UIColor.adamant.primary
133-
account.tabBarItem.badgeColor = UIColor.adamant.primary
134-
135-
tabbar.setViewControllers([chatList, account], animated: false)
131+
// MARK: Chats
132+
let chats = UISplitViewController()
133+
chats.tabBarItem.title = String.adamantLocalized.tabItems.chats
134+
chats.tabBarItem.image = #imageLiteral(resourceName: "chats_tab")
135+
chats.preferredDisplayMode = .allVisible
136+
chats.tabBarItem.badgeColor = UIColor.adamant.primary
137+
138+
let chatList = UINavigationController(rootViewController: router.get(scene: AdamantScene.Chats.chatList))
139+
140+
// MARK: Accounts
141+
let accounts = UISplitViewController()
142+
accounts.tabBarItem.title = String.adamantLocalized.tabItems.account
143+
accounts.tabBarItem.image = #imageLiteral(resourceName: "account-tab")
144+
accounts.preferredDisplayMode = .allVisible
145+
accounts.tabBarItem.badgeColor = UIColor.adamant.primary
146+
147+
let account = UINavigationController(rootViewController: router.get(scene: AdamantScene.Account.account))
148+
149+
if UIScreen.main.traitCollection.userInterfaceIdiom == .pad {
150+
let chatDetails = UIViewController(nibName: "WelcomeViewController", bundle: nil)
151+
let accountDetails = UIViewController(nibName: "WelcomeViewController", bundle: nil)
152+
153+
chats.viewControllers = [chatList, chatDetails]
154+
accounts.viewControllers = [account, accountDetails]
155+
} else {
156+
chats.viewControllers = [chatList]
157+
accounts.viewControllers = [account]
158+
}
159+
160+
tabbar.setViewControllers([chats, accounts], animated: false)
136161
}
137-
162+
163+
window!.makeKeyAndVisible()
164+
165+
let login = router.get(scene: AdamantScene.Login.login)
166+
window!.rootViewController?.present(login, animated: false, completion: nil)
138167

139168
// MARK: 5 Reachability & Autoupdate
140169
repeater = RepeaterService()
@@ -305,7 +334,7 @@ extension AppDelegate {
305334
fatalError("can't get api service to register device token")
306335
}
307336

308-
apiService.sendMessage(senderId: address, recipientId: AdamantResources.contacts.ansAddress, keypair: keypair, message: encodedPayload.message, type: ChatType.signal, nonce: encodedPayload.nonce) { [unowned self] result in
337+
apiService.sendMessage(senderId: address, recipientId: AdamantResources.contacts.ansAddress, keypair: keypair, message: encodedPayload.message, type: ChatType.signal, nonce: encodedPayload.nonce, amount: nil) { [unowned self] result in
309338
switch result {
310339
case .success:
311340
return
@@ -421,6 +450,7 @@ extension AppDelegate {
421450
})
422451
}
423452

453+
/*
424454
if let ico = AdamantContacts.adamantIco.messages["chats.ico_message"] {
425455
chatProvider.fakeReceived(message: ico.message,
426456
senderId: AdamantContacts.adamantIco.name,
@@ -436,5 +466,6 @@ extension AppDelegate {
436466
print("ERROR showing welcome message: \(error.message)")
437467
})
438468
}
469+
*/
439470
}
440471
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"filename" : "logo.png",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"filename" : "logo@2x.png",
11+
"scale" : "2x"
12+
},
13+
{
14+
"idiom" : "universal",
15+
"filename" : "logo@3x.png",
16+
"scale" : "3x"
17+
}
18+
],
19+
"info" : {
20+
"version" : 1,
21+
"author" : "xcode"
22+
}
23+
}
Loading
Loading
Loading

Adamant/Assets/LaunchScreen.storyboard

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
33
<device id="retina4_7" orientation="portrait">
44
<adaptation id="fullscreen"/>
55
</device>
66
<dependencies>
77
<deployment identifier="iOS"/>
8-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
9-
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
10-
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
119
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
1210
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
1311
</dependencies>
@@ -29,11 +27,28 @@
2927
</subviews>
3028
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
3129
<constraints>
30+
<constraint firstItem="Tte-Yg-uSj" firstAttribute="height" relation="lessThanOrEqual" secondItem="6Tk-OE-BBY" secondAttribute="height" multiplier="0.4" id="KWn-Uz-8Qt"/>
31+
<constraint firstItem="Tte-Yg-uSj" firstAttribute="width" relation="lessThanOrEqual" secondItem="6Tk-OE-BBY" secondAttribute="width" multiplier="0.4" id="SyS-9E-pHO"/>
3232
<constraint firstItem="Tte-Yg-uSj" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="ZIP-t2-Exv"/>
33-
<constraint firstItem="Tte-Yg-uSj" firstAttribute="width" secondItem="6Tk-OE-BBY" secondAttribute="width" multiplier="0.6" id="hL5-t8-v0f"/>
33+
<constraint firstItem="Tte-Yg-uSj" firstAttribute="height" relation="lessThanOrEqual" secondItem="6Tk-OE-BBY" secondAttribute="height" multiplier="0.6" id="bp2-Io-xyX"/>
34+
<constraint firstItem="Tte-Yg-uSj" firstAttribute="width" relation="lessThanOrEqual" secondItem="6Tk-OE-BBY" secondAttribute="width" multiplier="0.6" id="hL5-t8-v0f"/>
3435
<constraint firstItem="Tte-Yg-uSj" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="oeh-vQ-KXY"/>
3536
</constraints>
3637
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
38+
<variation key="default">
39+
<mask key="constraints">
40+
<exclude reference="KWn-Uz-8Qt"/>
41+
<exclude reference="SyS-9E-pHO"/>
42+
</mask>
43+
</variation>
44+
<variation key="heightClass=regular-widthClass=regular">
45+
<mask key="constraints">
46+
<include reference="KWn-Uz-8Qt"/>
47+
<include reference="SyS-9E-pHO"/>
48+
<exclude reference="bp2-Io-xyX"/>
49+
<exclude reference="hL5-t8-v0f"/>
50+
</mask>
51+
</variation>
3752
</view>
3853
</viewController>
3954
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>

Adamant/Assets/l18n/de.lproj/Localizable.strings

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"About.Row.Adamant" = "ADAMANT";
6969

7070
/* System accounts: ADAMANT Tokens */
71-
"Accounts.AdamantTokens" = "ADAMANT Tokens";
71+
"Accounts.AdamantTokens" = "Willkommen in ADAMANT";
7272

7373
/* System accounts: ADAMANT iOS Support */
7474
"Accounts.iOSSupport" = "ADAMANT iOS Support";
@@ -127,6 +127,9 @@
127127
/* Account tab: 'Send ETH tokens' button */
128128
"AccountTab.Row.SendEth" = "ETH senden";
129129

130+
/* Account tab: 'Send ETH tokens' button */
131+
"AccountTab.Row.SendLsk" = "LSK senden";
132+
130133
/* Account tab: 'Address' row */
131134
"AccountTab.Row.Address" = "Addresse";
132135

@@ -164,7 +167,7 @@
164167
"ADAMANT" = "ADAMANT";
165168

166169
/* AddressBookService: Not enought money to save address into blockchain */
167-
"AddressBookService.Error.NotEnoughtMoney" = "Nicht genug Tokens, um Daten auf der Blockchain zu speichern";
170+
"AddressBookService.Error.notEnoughMoney" = "Nicht genug Tokens, um Daten auf der Blockchain zu speichern";
168171

169172
/* Application: Failed to send deviceToken to ANS error format. %@ for error description */
170173
"Application.deviceTokenErrorFormat" = "Anmeldefehler in ANS: %@";
@@ -181,8 +184,8 @@
181184
/* Eureka forms Cancel button */
182185
"Cancel" = "Abbrechen";
183186

184-
/* ChatList: outgoing message preview format, like 'You: %@' */
185-
"ChatListPage.SentMessageFormat" = "Sie: %@";
187+
/* ChatList: outgoing message prefix */
188+
"ChatListPage.SentMessagePrefix" = "Sie: ";
186189

187190
/* ChatList: First syncronization is in progress */
188191
"ChatListPage.SyncingChats" = "Chats werden synchronisiert…";
@@ -191,7 +194,7 @@
191194
"ChatListPage.Title" = "Chats";
192195

193196
/* ChatsProvider: Notify user that he doesn't have money to pay a message fee */
194-
"ChatsProvider.Error.NotEnoughtMoney" = "Sie haben nicht genügend Tokens, um eine Nachricht zu senden";
197+
"ChatsProvider.Error.notEnoughMoney" = "Sie haben nicht genügend Tokens, um eine Nachricht zu senden";
195198

196199
/* ChatsProvider: Transaction not found error. %@ for transaction's ID */
197200
"ChatsProvider.Error.TransactionNotFoundFormat" = "Nachricht mit der ID %@ nicht gefunden";
@@ -203,13 +206,13 @@
203206
"ChatsProvider.Validation.MessageTooLong" = "Nachricht ist zu lang";
204207

205208
/* Known contacts: Adamant ICO message. Markdown supported. */
206-
"Chats.IcoMessage" = "Sie haben die Möglichkeit, **am ICO** von ADAMANT, dem sichersten Messenger überhaupt, teilzunehmen. Mehr dazu auf Adamant.im oder im Whitepaper.\n\nBitte vergewissern Sie sich, dass sie die Passphrase für dieses Konto gemerkt haben — loggen Sie sich aus und wieder ein. Wir empfehlen Ihnen, diese auf einem Blatt Papier aufzuschreiben. Bitte beachten: nur **Sie sind für die Sicherheit der Passphrase zuständig**. Sie kann nicht wiederhergestellt werden. Wenn Dritte an die Passphrase kommen, Ihre Tokens werden gestohlen. Behandeln sie die Passphrase so, als würden in Ihrer Wallet mehrere Millionen Dollar liegen.\n\nUm die ADM Tokens zu kaufen, gehen Sie zur Wallet und klicken Sie Zum ICO oder öffnen Sie Adamant.im/ico/ im Browser. Im ICO-Formular geben Sie Ihre ADAMANT-Adresse ein. Als Nächstes, wählen Sie Kryptowährung, mit der Sie zahlen möchten, und den Betrag. Es wird angezeigt, wie viele ADM Tokens Sie bekommen, inklusive Bonus: 20–30 ETH: +20%, 30–50 ETH: +30%, 50–90 ETH: +40%, 90+ ETH: +50%. Klicken Sie auf ADAMANT Tokens kaufen. Es wird eine Adresse angezeigt, wo Sie Kryptowährung senden sollen. Sobald Ihre Transaktion bestätigt wurde, erhalten Sie Ihre ADM Tokens. Die Zahlung kann **von jeder Wallet oder Börse** getätigt werden. Es ist nicht notwendig, den exakten Betrag inklusive der Transaktionsgebühren zu senden, die Zahlung wird trotzdem bearbeitet.\nNachdem Sie Ihre ADM Tokens erhalten haben, empfehlen wir Ihnen, sie so lange wie möglich zu behalten. Alle während des ICOs nicht verkaufte Tokens werden unter den Wallets verteilt, 5% im Monat werden werden hinzugefügt. Zusätzliche Informationen finden Sie auf Adamant.im und im Whitepaper.\n\nBitte nicht auf diese Nachricht antworten, sie wurde maschinell erstellt. Wenn Sie noch Fragen haben, schreiben Sie **U15677078342684640219** an";
209+
"Chats.IcoMessage" = "Null";
207210

208211
/* Known contacts: Adamant pre ICO message */
209-
"Chats.PreIcoMessage" = "You have a possibility to invest in ADAMANT, the most secure and anonymous messenger. Now is a Pre-ICO stage — the most profitable for investors. Learn more on Adamant.im website or in the Whitepaper. To participate just reply to this message and we will assist. We are eager to answer quickly, but sometimes delays for a couple of hours are possible.\nAfter you invest and receive ADM tokens, we recommend to keep them as long as possible. All of unsold tokens during ICO will be distributed among users wallets, adding 5% monthly. Additional info is on Adamant.im website and in the Whitepaper.";
212+
"Chats.PreIcoMessage" = "Null";
210213

211214
/* Known contacts: Adamant welcome message. Markdown supported. */
212-
"Chats.WelcomeMessage" = "Willkommen im ADAMANT, dem sichersten und anonymsten Messenger überhaupt. Beachten Sie, Ihre Sicherheit und Anonymität sind in Ihrem Interesse. Folgen Sie keinen Links, andernfalls kann Ihre IP-Adresse für Dritte sichtbar werden. Vertrauen Sie keinen Browser-Erweiterungen. Übergeben Sie Ihre ADM-Adresse persönlich, nutzen Sie dafür keine anderen Messenger. Halten Sie Ihre Passphrase geheim. Setzen Sie ein Passwort auf Ihrem Gerät oder loggen Sie sich aus, wenn Sie es nicht nutzen.\nLesen Sie mehr über Sicherheit und Anonymität unter https://adamant.im/staysecured.\nAlle Transaktionen auf der Blockchain müssen eine minimale Gebühr haben. Das ist nötig, um die Netzwerkinfrastruktur zu unterstützen. Um jetzt Nachrichten zu versenden, **erhalten Sie kostenlose Tokens** — gehen Sie zu Wallet und klicken Kostenlose ADM Tokens. Dann klicken Sie Neuen Chat starten in Chats und geben Sie die Adresse Ihres Gesprächspartners ein. Um Ihre Adresse zu kopieren, klicken Sie auf die ADAMANT-Adresse in Ihrer Wallet.\nBitte nicht auf diese Nachricht antworten, sie wurde maschinell erstellt. Wenn Sie noch Fragen haben, schreiben Sie **U15677078342684640219** an";
215+
"Chats.WelcomeMessage" = "ADAMANT ist ein Messenger, der vollständig auf der Blockchain funktioniert. Er ist unabhängig von Staaten, Konzernen und sogar Entwicklern. Das wird dank der dezentralen Netzinfrastruktur ermöglicht, deren Quellcode offen ist und die von Nutzern unterstützt wird. Deswegen kostet jede Transaktion wie Versand von Nachrichten oder Speichern von Kontakten eine Netzwerkgebühr von 0.001 ADM.\n\nDie Blockchain hilft, herausragende Sicherheit und Privatsphäre zu erlangen, die für keinen gewöhnlichen P2P- oder zentralisierten Messenger verfügbar ist. Außerdem stellt die Blockchain neue Möglichkeiten dar. Sie können Kryptowährungen in der Wallet aufbewahren sowie direkt im Chat versenden, ohne dabei die Kontrolle über Ihre privaten Schlüssel zu verlieren, oder auch ADAMANT als eine 2FA-Lösung verwenden.\n\nIn ADAMANT kann kein Konto kontrolliert, geblockt, deaktiviert, eingeschränkt oder zensiert werden. Alle Nutzer tragen die volle Verantwortung für die Inhalte, Nachrichten, Medien, Absichten und Ziele bei der Nutzung des Messenger.\n\nBedenken Sie, dass Sicherheit und Anonymität auch von Ihnen selbst abhängt. Folgen Sie keinen Links in den Chats, andernfalls kann Ihre IP-Adresse für Dritte sichtbar werden. Verwenden Sie einen PIN-Code auf Ihrem Gerät. Mehr Informationen zu Sicherheit und Anonymität lesen Sie hier: https://adamant.im/ru-staysecured/.\n\nVergewissern Sie sich, dass sie die Passphrase von Ihrem Konto gespeichert haben – loggen Sie sich aus und wieder ein. Schreiben Sie die Passphrase auf einem Stück Papier. Nur Sie tragen die Verantwortung für die sichere Aufbewahrung Ihrer Passphrase. Diese kann nämlich nicht wiederhergestellt werden. Gelangt Sie in die Hände Dritter, verlieren Sie Ihr Geld und Ihr Chatverlauf wird gelesen. Behandeln Sie Ihre Passphrase so, als würden Tokens in Ihrer Wallet 1.000.000.000 Dollar kosten.\n\nUm mit einer Konversation zu beginnen, erhalten Sie zuerst kostenlose Tokens im Account-Tab. Erstellen Sie einen neuen Chat und geben Sie die ADM-Adresse Ihres Gesprächspartners. Zeigen Sie Ihre ADM-Adresse persönlich und senden Sie sie nicht über andere Messenger.";
213216

214217
/* Alert 'Retry Or Delete' title. Used in chat for sending failed messages again or delete them */
215218
"Chats.RetryOrDelete.Title" = "Erneut versuchen oder löschen?";
@@ -650,7 +653,7 @@
650653
"TransferScene.Error.InvalidAddress" = "Geben Sie eine gültige Adresse ein";
651654

652655
/* Transfer: Amount is hiegher that user's total money notification */
653-
"TransferScene.Error.NotEnoughtMoney" = "Sie haben nicht genug Tokens";
656+
"TransferScene.Error.notEnoughMoney" = "Sie haben nicht genug Tokens";
654657

655658
/* Transfer: Amount is zero, or even negative notification */
656659
"TransferScene.Error.TooLittleMoney" = "Sie müssen mehr Tokens senden";
@@ -682,6 +685,9 @@
682685
/* Transfer: transfer fee */
683686
"TransferScene.Row.TransactionFee" = "Gebühr";
684687

688+
/* Transfer: comment for transfer in chat */
689+
"TransferScene.Row.Comments" = "Bemerkungen";
690+
685691
/* Transfer: 'Transfer info' section */
686692
"TransferScene.Section.TransferInfo" = "Transaktionsinfo";
687693

@@ -710,7 +716,7 @@
710716
"TransferScene.TransferSuccessMessage" = "Fertig!";
711717

712718
/* Wallet Services: Shared error, user do not have enought money. */
713-
"WalletServices.SharedErrors.NotEnoughtMoney" = "Nicht genug Geld";
719+
"WalletServices.SharedErrors.notEnoughMoney" = "Nicht genug Geld";
714720

715721
/* Wallet Services: Shared error, user has not yet initiated a specific wallet. */
716722
"WalletServices.SharedErrors.WalletNotInitiated" = "Die Wallet wurde noch nicht initiiert";

0 commit comments

Comments
 (0)