feat: set device name

This commit is contained in:
Richard Ramos 2020-07-03 12:54:27 -04:00 committed by Iuri Matias
parent 49e76d17bf
commit a4b9eedd5e
9 changed files with 157 additions and 1 deletions

View File

@ -7,6 +7,7 @@ import ../../status/libstatus/settings as status_settings
import ../../status/profile/[profile, mailserver] import ../../status/profile/[profile, mailserver]
import ../../status/[status, contacts] import ../../status/[status, contacts]
import ../../status/chat as status_chat import ../../status/chat as status_chat
import ../../status/devices
import ../../status/chat/chat import ../../status/chat/chat
import view import view
import chronicles import chronicles
@ -39,6 +40,7 @@ proc init*(self: ProfileController, account: Account) =
profile.appearance = appearance profile.appearance = appearance
profile.id = pubKey profile.id = pubKey
self.view.setDeviceSetup(devices.isDeviceSetup())
self.view.setNewProfile(profile) self.view.setNewProfile(profile)
self.view.setMnemonic(mnemonic) self.view.setMnemonic(mnemonic)

View File

@ -5,6 +5,7 @@ import ../../status/profile as status_profile
import ../../status/contacts as status_contacts import ../../status/contacts as status_contacts
import ../../status/accounts as status_accounts import ../../status/accounts as status_accounts
import ../../status/status import ../../status/status
import ../../status/devices
import ../../status/chat/chat import ../../status/chat/chat
import qrcode/qrcode import qrcode/qrcode
@ -15,6 +16,7 @@ QtObject:
contactList*: ContactList contactList*: ContactList
mnemonic: string mnemonic: string
status*: Status status*: Status
isDeviceSetup: bool
proc setup(self: ProfileView) = proc setup(self: ProfileView) =
self.QObject.setup self.QObject.setup
@ -33,6 +35,7 @@ QtObject:
result.contactList = newContactList() result.contactList = newContactList()
result.mnemonic = "" result.mnemonic = ""
result.status = status result.status = status
result.isDeviceSetup = false
result.setup result.setup
proc addMailServerToList*(self: ProfileView, mailserver: MailServer) = proc addMailServerToList*(self: ProfileView, mailserver: MailServer) =
@ -101,3 +104,25 @@ QtObject:
proc changeTheme*(self: ProfileView, theme: int) {.slot.} = proc changeTheme*(self: ProfileView, theme: int) {.slot.} =
self.profile.setAppearance(theme) self.profile.setAppearance(theme)
self.status.saveSetting("appearance", $theme) self.status.saveSetting("appearance", $theme)
proc isDeviceSetup*(self: ProfileView): bool {.slot} =
result = self.isDeviceSetup
proc deviceSetupChanged*(self: ProfileView) {.signal.}
proc setDeviceSetup*(self: ProfileView, isSetup: bool) {.slot} =
self.isDeviceSetup = isSetup
self.deviceSetupChanged()
QtProperty[bool] deviceSetup:
read = isDeviceSetup
notify = deviceSetupChanged
proc setDeviceName*(self: ProfileView, deviceName: string) {.slot.} =
devices.setDeviceName(deviceName)
self.isDeviceSetup = true
self.deviceSetupChanged()
proc syncAllDevices*(self: ProfileView) {.slot.} =
discard
#devices.syncAllDevices()

22
src/status/devices.nim Normal file
View File

@ -0,0 +1,22 @@
import system
import libstatus/settings
import libstatus/installations
import json
proc setDeviceName*(name: string) =
discard getSettings()
discard setInstallationMetadata(getSetting[string]("installation-id", "", true), name, hostOs)
proc isDeviceSetup*():bool =
discard getSettings()
let installationId = getSetting[string]("installation-id", "", true)
let responseResult = parseJSON($getOurInstallations())["result"]
if responseResult.kind == JNull:
return false
for installation in responseResult:
if installation["id"].getStr == installationId:
return installation["metadata"].kind != JNull
result = false
proc syncAllDevices*() =
discard

View File

@ -0,0 +1,9 @@
import json, core, utils, system
proc setInstallationMetadata*(installationId: string, deviceName: string, deviceType: string): string =
result = callPrivateRPC("setInstallationMetadata".prefix, %* [installationId, {"name": deviceName, "deviceType": deviceType}])
# TODO: handle errors
proc getOurInstallations*(): string =
result = callPrivateRPC("getOurInstallations".prefix, %* [])
echo result

View File

@ -101,6 +101,31 @@ Rectangle {
} }
} }
TabButton {
id: devicesTabButton
width: profileTabBar.w
height: profileTabBar.btnheight
visible: true
text: ""
anchors.left: parent.left
anchors.leftMargin: 0
anchors.top: privacyTabButton.bottom
anchors.topMargin: 0
background: Rectangle {
color: Theme.transparent
}
StyledText {
color: "#000000"
text: qsTr("Devices")
anchors.left: parent.left
anchors.leftMargin: 72
anchors.verticalCenter: parent.verticalCenter
font.weight: profileScreenButtons.currentIndex === 3 ? Font.Bold : Font.Medium
font.pixelSize: 14
}
}
TabButton { TabButton {
id: syncTabButton id: syncTabButton
width: profileTabBar.w width: profileTabBar.w
@ -109,7 +134,7 @@ Rectangle {
text: "" text: ""
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 0 anchors.leftMargin: 0
anchors.top: privacyTabButton.bottom anchors.top: devicesTabButton.bottom
anchors.topMargin: 0 anchors.topMargin: 0
background: Rectangle { background: Rectangle {
color: Style.current.transparent color: Style.current.transparent

View File

@ -42,6 +42,8 @@ SplitView {
PrivacyContainer {} PrivacyContainer {}
DevicesContainer {}
SyncContainer {} SyncContainer {}
LanguageContainer {} LanguageContainer {}

View File

@ -0,0 +1,69 @@
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import "../../../../imports"
import "../../../../shared"
Item {
id: syncContainer
width: 200
height: 200
Layout.fillHeight: true
Layout.fillWidth: true
StyledText {
id: sectionTitle
text: qsTr("Devices")
anchors.left: parent.left
anchors.leftMargin: 24
anchors.top: parent.top
anchors.topMargin: 24
font.weight: Font.Bold
font.pixelSize: 20
}
Item {
id: firstTimeSetup
anchors.left: syncContainer.left
anchors.leftMargin: Theme.padding
anchors.top: sectionTitle.bottom
anchors.topMargin: Theme.padding
anchors.right: syncContainer.right
anchors.rightMargin: Theme.padding
visible: !profileModel.deviceSetup
StyledText {
id: deviceNameLbl
text: qsTr("Please set a name for your device.")
font.pixelSize: 14
}
Input {
id: deviceNameTxt
placeholderText: qsTr("Specify a name")
anchors.top: deviceNameLbl.bottom
anchors.topMargin: Theme.padding
}
StyledButton {
visible: !selectChatMembers
anchors.top: deviceNameTxt.bottom
anchors.topMargin: 10
anchors.right: deviceNameTxt.right
label: qsTr("Continue")
disabled: deviceNameTxt.text === ""
onClicked : profileModel.setDeviceName(deviceNameTxt.text.trim())
}
}
StyledButton {
anchors.bottom: syncContainer.bottom
anchors.bottomMargin: Theme.padding
anchors.right: deviceNameTxt.right
label: qsTr("Sync all devices")
onClicked : {
console.log("TODO")
}
}
}

View File

@ -2,6 +2,7 @@ EnsContainer 1.0 EnsContainer.qml
ContactsContainer 1.0 ContactsContainer.qml ContactsContainer 1.0 ContactsContainer.qml
PrivacyContainer 1.0 PrivacyContainer.qml PrivacyContainer 1.0 PrivacyContainer.qml
SyncContainer 1.0 SyncContainer.qml SyncContainer 1.0 SyncContainer.qml
DevicesContainer 1.0 DevicesContainer.qml
LanguageContainer 1.0 LanguageContainer.qml LanguageContainer 1.0 LanguageContainer.qml
NotificationsContainer 1.0 NotificationsContainer.qml NotificationsContainer 1.0 NotificationsContainer.qml
AdvancedContainer 1.0 AdvancedContainer.qml AdvancedContainer 1.0 AdvancedContainer.qml

View File

@ -134,6 +134,7 @@ DISTFILES += \
app/AppLayouts/Profile/Sections/PrivacyContainer.qml \ app/AppLayouts/Profile/Sections/PrivacyContainer.qml \
app/AppLayouts/Profile/Sections/SignoutContainer.qml \ app/AppLayouts/Profile/Sections/SignoutContainer.qml \
app/AppLayouts/Profile/Sections/SyncContainer.qml \ app/AppLayouts/Profile/Sections/SyncContainer.qml \
app/AppLayouts/Profile/Sections/DevicesContainer.qml \
app/AppLayouts/Profile/Sections/qmldir \ app/AppLayouts/Profile/Sections/qmldir \
app/AppLayouts/Profile/qmldir \ app/AppLayouts/Profile/qmldir \
app/AppLayouts/Wallet/LeftTab.qml \ app/AppLayouts/Wallet/LeftTab.qml \