Tapir Integtation #325
6
go.mod
6
go.mod
|
@ -3,12 +3,12 @@ module cwtch.im/ui
|
|||
go 1.12
|
||||
|
||||
require (
|
||||
cwtch.im/cwtch v0.3.16
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.1.4
|
||||
cwtch.im/cwtch v0.4.1
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.2.1
|
||||
git.openprivacy.ca/openprivacy/log v1.0.1
|
||||
github.com/gopherjs/gopherjs v0.0.0-20200209183636-89e6cbcd0b6d // indirect
|
||||
github.com/therecipe/qt v0.0.0-20200126204426-5074eb6d8c41
|
||||
github.com/therecipe/qt/internal/binding/files/docs/5.12.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect
|
||||
github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect
|
||||
golang.org/x/crypto v0.0.0-20200420104511-884d27f42877 // indirect
|
||||
)
|
||||
)
|
8
go.sum
8
go.sum
|
@ -8,12 +8,18 @@ cwtch.im/cwtch v0.3.15 h1:Z7fFREwXY728q2YmmwgHL357zAobrsWJ2oPkkGwzvo0=
|
|||
cwtch.im/cwtch v0.3.15/go.mod h1:iI9q4C3njHFBYQkNEbzMdK6QWPS0Vbkc0FigRHZNTvM=
|
||||
cwtch.im/cwtch v0.3.16 h1:4M5So2zRDjy5byzd3G8ZrA2ZWObfm/oSIRfMBIFdOuI=
|
||||
cwtch.im/cwtch v0.3.16/go.mod h1:iI9q4C3njHFBYQkNEbzMdK6QWPS0Vbkc0FigRHZNTvM=
|
||||
cwtch.im/cwtch v0.4.0 h1:lhGQiYRBqSF0Pif9QttYVL4B1Oy1vc0v3cZejL7c7x4=
|
||||
cwtch.im/cwtch v0.4.0/go.mod h1:EvZQDbvXNu38m785dWF0MMljqJzwWrNTFT40HvoEAhI=
|
||||
cwtch.im/cwtch v0.4.1 h1:wjf/3Vw5fDByEwwnXqWrPtpKsXTLk0oz0PqNGYcR+MQ=
|
||||
cwtch.im/cwtch v0.4.1/go.mod h1:EvZQDbvXNu38m785dWF0MMljqJzwWrNTFT40HvoEAhI=
|
||||
cwtch.im/tapir v0.1.15 h1:XSCWOvjmNkzMT2IceFgTBXWGKtYfr3a8o+La1s10OhE=
|
||||
cwtch.im/tapir v0.1.15/go.mod h1:HzezugpEx+nZ3LdyDsl0w6n45IJYnOt8uqldkLWmaqs=
|
||||
cwtch.im/tapir v0.1.17 h1:2jVZUe1a88tMI4aJPvRTO4Id3NN3PsM62cT5lntEChk=
|
||||
cwtch.im/tapir v0.1.17/go.mod h1:HzezugpEx+nZ3LdyDsl0w6n45IJYnOt8uqldkLWmaqs=
|
||||
cwtch.im/tapir v0.1.18 h1:Fs/jL9ZRyel/A1D/BYzIPEVQau8y5BJg44yA+GQDbSM=
|
||||
cwtch.im/tapir v0.1.18/go.mod h1:/IrAI6CBHfgzsfgRT8WHVb1P9fCCz7+45hfsdkKn8Zg=
|
||||
cwtch.im/tapir v0.2.0 h1:7MkoR5+uEuPW34/O0GZRidnIjq/01Cfm8nl5IRuqpGc=
|
||||
cwtch.im/tapir v0.2.0/go.mod h1:xzzZ28adyUXNkYL1YodcHsAiTt3IJ8Loc29YVn9mIEQ=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.1.0/go.mod h1:4P8mirZZslKbo2zBrXXVjgEdqGwHo/6qoFBwFQW6d6E=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.1.1 h1:hKxBOmxP7Jdu3K1BJ93mRtKNiWUoP6YHt/o2snE2Z0w=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.1.1/go.mod h1:4P8mirZZslKbo2zBrXXVjgEdqGwHo/6qoFBwFQW6d6E=
|
||||
|
@ -25,6 +31,8 @@ git.openprivacy.ca/openprivacy/connectivity v1.1.4 h1:/I9epvNNjM8rR/q5y9Y63D9/aP
|
|||
git.openprivacy.ca/openprivacy/connectivity v1.1.4/go.mod h1:4P8mirZZslKbo2zBrXXVjgEdqGwHo/6qoFBwFQW6d6E=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.2.0 h1:dbZ5CRl11vg3BNHdzRKSlDP8OUtDB+mf6FkxMVf73qw=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.2.0/go.mod h1:B7vzuVmChJtSKoh0ezph5vu6DQ0gIk0zHUNG6IgXCcA=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.2.1 h1:oRL56TR9ZQnKkGkTIQ9wYbJ2IkOOsi/zLYExYiAS+sE=
|
||||
git.openprivacy.ca/openprivacy/connectivity v1.2.1/go.mod h1:B7vzuVmChJtSKoh0ezph5vu6DQ0gIk0zHUNG6IgXCcA=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.11 h1:C7QFFzG0p5XKu0zcOIdLGwEpA9uU0BceBM7CfVK5D40=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.11/go.mod h1:yTMps/ZpYS+BNBBvANsNAft28FXrBvFHQauMYNWPrwE=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.13 h1:Z86uL9K47onznY1wP1P/wWfWMbbyvk6xnCp94R180os=
|
||||
|
|
|
@ -87,7 +87,6 @@ func App(gcd *ui.GrandCentralDispatcher, subscribed chan bool, reloadingAccounts
|
|||
if e.Data[event.Status] != "running" {
|
||||
p.Listen()
|
||||
p.StartPeersConnections()
|
||||
p.StartGroupConnections()
|
||||
}
|
||||
|
||||
blockUnkownPeers, exists := p.GetAttribute(constants.BlockUnknownPeersSetting)
|
||||
|
|
|
@ -127,7 +127,7 @@ func PeerHandler(onion string, uiManager ui.Manager, subscribed chan bool) {
|
|||
if state == connections.AUTHENTICATED {
|
||||
loading = true
|
||||
}
|
||||
uiManager.UpdateContactStatus(group.GroupID, int(state), loading)
|
||||
uiManager.UpdateContactStatus(serverOnion, int(state), loading)
|
||||
} else {
|
||||
log.Errorf("found group that is nil :/")
|
||||
}
|
||||
|
|
62
go/ui/gcd.go
62
go/ui/gcd.go
|
@ -1,6 +1,7 @@
|
|||
package ui
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"sync"
|
||||
|
||||
"cwtch.im/cwtch/app"
|
||||
|
@ -82,6 +83,7 @@ type GrandCentralDispatcher struct {
|
|||
_ func(locale string, zoom float32, theme string) `signal:"SupplySettings"`
|
||||
_ func(groupID, name, server, invitation string, accepted bool, addrbooknames, addrbookaddrs []string) `signal:"SupplyGroupSettings"`
|
||||
_ func(onion, nick string, authorization string, storage string) `signal:"SupplyPeerSettings"`
|
||||
_ func(server string, key_types []string, keys []string) `signal:"SupplyServerSettings"`
|
||||
|
||||
// signals emitted from the ui (written in go, below)
|
||||
// ui
|
||||
|
@ -118,6 +120,8 @@ type GrandCentralDispatcher struct {
|
|||
_ func(onion string) `signal:"storeHistoryForPeer,auto"`
|
||||
_ func(onion string) `signal:"deleteHistoryForPeer,auto"`
|
||||
|
||||
_ func(handle string) `signal:"requestServerSettings,auto"`
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
}
|
||||
|
||||
|
@ -380,6 +384,31 @@ func (this *GrandCentralDispatcher) deleteHistoryForPeer(onion string) {
|
|||
the.Peer.SetContactAttribute(onion, event.SaveHistoryKey, event.DeleteHistoryConfirmed)
|
||||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) requestServerSettings(groupID string) {
|
||||
group := the.Peer.GetGroup(groupID)
|
||||
|
||||
if group == nil {
|
||||
log.Errorf("couldn't find group %v", groupID)
|
||||
return
|
||||
}
|
||||
|
||||
serverInfo := the.Peer.GetContact(group.GroupServer)
|
||||
|
||||
key_types := []model.KeyType{model.KeyTypeServerOnion, model.KeyTypeTokenOnion, model.KeyTypePrivacyPass}
|
||||
var keyNames []string
|
||||
var keys []string
|
||||
|
||||
for _, key_type := range key_types {
|
||||
log.Debugf("Looking up %v %v", key_type, keyNames)
|
||||
if key, has := serverInfo.GetAttribute(string(key_type)); has {
|
||||
keyNames = append(keyNames, string(key_type))
|
||||
keys = append(keys, key)
|
||||
}
|
||||
}
|
||||
|
||||
this.SupplyServerSettings(group.GroupServer, keyNames, keys)
|
||||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) requestGroupSettings(groupID string) {
|
||||
group := the.Peer.GetGroup(groupID)
|
||||
|
||||
|
@ -397,6 +426,9 @@ func (this *GrandCentralDispatcher) requestGroupSettings(groupID string) {
|
|||
contactnames[i] = getNick(contact)
|
||||
}
|
||||
this.SupplyGroupSettings(group.GroupID, nick, group.GroupServer, invite, group.Accepted, contactnames, contactaddrs)
|
||||
status := connections.ConnectionStateToType[group.State]
|
||||
log.Debugf("Sending New Group Status: %v %v", group.GroupServer, status)
|
||||
this.UpdateContactStatus(group.GroupServer, int(status), false)
|
||||
}
|
||||
|
||||
func (this *GrandCentralDispatcher) saveGroupSettings(groupID, nick string) {
|
||||
|
@ -429,6 +461,29 @@ func (this *GrandCentralDispatcher) importString(str string) {
|
|||
return
|
||||
}
|
||||
|
||||
if strings.HasPrefix(str, "tofubundle:") {
|
||||
|
||||
bundle := strings.Split(str,"||")
|
||||
dan
commented
ideally both the bundle and sever invite parsers are functions in a file that also has the functions to compose the strings from the inputs as well, for easy comparison and ruse elsewhere ideally both the bundle and sever invite parsers are functions in a file that also has the functions to compose the strings from the inputs as well, for easy comparison and ruse elsewhere
|
||||
this.importString(bundle[0][11:])
|
||||
this.importString(bundle[1])
|
||||
return
|
||||
}
|
||||
|
||||
// Server Key Bundles are prefixed with
|
||||
if strings.HasPrefix(str, "server:") {
|
||||
bundle, err := base64.StdEncoding.DecodeString(str[7:])
|
||||
if err == nil {
|
||||
err := the.Peer.AddServer(string(bundle))
|
||||
if err == nil {
|
||||
this.InvokePopup("Successfully Imported Server Key Bundle")
|
||||
return
|
||||
}
|
||||
this.InvokePopup("Error Importing Server Key Bundle: " + err.Error())
|
||||
return
|
||||
}
|
||||
this.InvokePopup("Invalid Server Key Bundle: " + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
log.Debugf("importing: %s\n", str)
|
||||
onion := str
|
||||
name := onion
|
||||
|
@ -441,6 +496,7 @@ func (this *GrandCentralDispatcher) importString(str string) {
|
|||
this.InvokePopup("not a valid group invite")
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -650,7 +706,9 @@ func (this *GrandCentralDispatcher) loadProfile(onion string) {
|
|||
|
||||
contacts := the.Peer.GetContacts()
|
||||
for i := range contacts {
|
||||
this.GetUiManager(this.selectedProfile()).AddContact(contacts[i])
|
||||
if the.Peer.GetContact(contacts[i]).IsServer() == false {
|
||||
this.GetUiManager(this.selectedProfile()).AddContact(contacts[i])
|
||||
}
|
||||
}
|
||||
|
||||
groups := the.Peer.GetGroups()
|
||||
|
@ -689,7 +747,7 @@ func (this *GrandCentralDispatcher) storeSetting(key, val string) {
|
|||
func (this *GrandCentralDispatcher) reloadProfileList() {
|
||||
this.ResetProfileList()
|
||||
|
||||
for onion, _ := range the.CwtchApp.ListPeers() {
|
||||
for onion := range the.CwtchApp.ListPeers() {
|
||||
AddProfile(this, onion)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,11 +14,18 @@ import (
|
|||
)
|
||||
|
||||
func isGroup(id string) bool {
|
||||
return len(id) == 32
|
||||
return len(id) == 32 && !isServer(id)
|
||||
}
|
||||
|
||||
func isPeer(id string) bool {
|
||||
return len(id) == 56
|
||||
return len(id) == 56 && !isServer(id)
|
||||
}
|
||||
|
||||
// Check if the id is associated with a contact with a KeyTypeServerOnion attribute (which indicates that this
|
||||
// is a server, not a regular contact or a group
|
||||
func isServer(id string) bool {
|
||||
_, ok := the.Peer.GetContactAttribute(id, string(model.KeyTypeServerOnion))
|
||||
return ok
|
||||
}
|
||||
|
||||
func getOrDefault(id, key string, defaultVal string) string {
|
||||
|
|
Binary file not shown.
|
@ -69,44 +69,79 @@
|
|||
<context>
|
||||
<name>GroupSettingsPane</name>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="45"/>
|
||||
<source>server-label</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="44"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="65"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="50"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="68"/>
|
||||
<source>copy-btn</source>
|
||||
<translation>Kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="54"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="72"/>
|
||||
<source>copied-to-clipboard-notification</source>
|
||||
<extracomment>notification: copied to clipboard</extracomment>
|
||||
<translation type="unfinished">in die Zwischenablage kopiert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="63"/>
|
||||
<source>invitation-label</source>
|
||||
<translation>Einladung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="75"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="82"/>
|
||||
<source>server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-connected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-disconnected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-not-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="124"/>
|
||||
<source>view-server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="28"/>
|
||||
<source>group-name-label</source>
|
||||
<translation>Gruppenname</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="84"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<source>save-btn</source>
|
||||
<translation>Speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="94"/>
|
||||
<source>invite-to-group-label</source>
|
||||
<extracomment>Invite someone to the group</extracomment>
|
||||
<translation>In die Gruppe einladen</translation>
|
||||
<translation type="vanished">In die Gruppe einladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="105"/>
|
||||
<source>invite-btn</source>
|
||||
<translation>Einladen</translation>
|
||||
<translation type="vanished">Einladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="114"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="144"/>
|
||||
<source>delete-btn</source>
|
||||
<translation>Löschen</translation>
|
||||
</message>
|
||||
|
@ -454,13 +489,13 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="120"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="117"/>
|
||||
<source>your-profiles</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="147"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="141"/>
|
||||
<source>your-servers</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
|
|
Binary file not shown.
|
@ -157,44 +157,79 @@ Right-click to reset.</translation>
|
|||
<context>
|
||||
<name>GroupSettingsPane</name>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="45"/>
|
||||
<source>server-label</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="44"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="65"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="50"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="68"/>
|
||||
<source>copy-btn</source>
|
||||
<translation>Copy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="54"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="72"/>
|
||||
<source>copied-to-clipboard-notification</source>
|
||||
<extracomment>notification: copied to clipboard</extracomment>
|
||||
<translation type="unfinished">Copied to Clipboard</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="63"/>
|
||||
<source>invitation-label</source>
|
||||
<translation>Invitation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="75"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="82"/>
|
||||
<source>server-info</source>
|
||||
<translation>Server Information</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-connected</source>
|
||||
<translation>Server Connected</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-disconnected</source>
|
||||
<translation>Server Disconnected</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-synced</source>
|
||||
<translation >Synced</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-not-synced</source>
|
||||
<translation >Out of Sync</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="124"/>
|
||||
<source>view-server-info</source>
|
||||
<translation>Server Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="28"/>
|
||||
<source>group-name-label</source>
|
||||
<translation>Group Name</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="84"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<source>save-btn</source>
|
||||
<translation>Save</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="94"/>
|
||||
<source>invite-to-group-label</source>
|
||||
<extracomment>Invite someone to the group</extracomment>
|
||||
<translation>Invite to group</translation>
|
||||
<translation type="vanished">Invite to group</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="105"/>
|
||||
<source>invite-btn</source>
|
||||
<translation>Invite</translation>
|
||||
<translation type="vanished">Invite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="114"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="144"/>
|
||||
<source>delete-btn</source>
|
||||
<translation>Delete</translation>
|
||||
</message>
|
||||
|
@ -546,13 +581,13 @@ Right-click to reset.</translation>
|
|||
<translation>0 profiles loaded with that password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="120"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="117"/>
|
||||
<source>your-profiles</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation>Your Profiles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="147"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="141"/>
|
||||
<source>your-servers</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation>Your Servers</translation>
|
||||
|
|
Binary file not shown.
|
@ -69,44 +69,79 @@
|
|||
<context>
|
||||
<name>GroupSettingsPane</name>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="45"/>
|
||||
<source>server-label</source>
|
||||
<translation>Serveur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="44"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="65"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="50"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="68"/>
|
||||
<source>copy-btn</source>
|
||||
<translation>Copier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="54"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="72"/>
|
||||
<source>copied-to-clipboard-notification</source>
|
||||
<extracomment>notification: copied to clipboard</extracomment>
|
||||
<translation type="unfinished">Copié dans le presse-papier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="63"/>
|
||||
<source>invitation-label</source>
|
||||
<translation>Invitation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="75"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="82"/>
|
||||
<source>server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-connected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-disconnected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-not-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="124"/>
|
||||
<source>view-server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="28"/>
|
||||
<source>group-name-label</source>
|
||||
<translation>Nom du groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="84"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<source>save-btn</source>
|
||||
<translation>Sauvegarder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="94"/>
|
||||
<source>invite-to-group-label</source>
|
||||
<extracomment>Invite someone to the group</extracomment>
|
||||
<translation>Inviter quelqu'un</translation>
|
||||
<translation type="vanished">Inviter quelqu'un</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="105"/>
|
||||
<source>invite-btn</source>
|
||||
<translation>Invitation</translation>
|
||||
<translation type="vanished">Invitation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="114"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="144"/>
|
||||
<source>delete-btn</source>
|
||||
<translation>Effacer</translation>
|
||||
</message>
|
||||
|
@ -454,13 +489,13 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="120"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="117"/>
|
||||
<source>your-profiles</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="147"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="141"/>
|
||||
<source>your-servers</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
|
|
Binary file not shown.
|
@ -69,44 +69,79 @@
|
|||
<context>
|
||||
<name>GroupSettingsPane</name>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="45"/>
|
||||
<source>server-label</source>
|
||||
<translation>Servidor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="44"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="65"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="50"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="68"/>
|
||||
<source>copy-btn</source>
|
||||
<translation>Copiar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="54"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="72"/>
|
||||
<source>copied-to-clipboard-notification</source>
|
||||
<extracomment>notification: copied to clipboard</extracomment>
|
||||
<translation type="unfinished">Copiado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="63"/>
|
||||
<source>invitation-label</source>
|
||||
<translation>Convite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="75"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="82"/>
|
||||
<source>server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-connected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="90"/>
|
||||
<source>server-connectivity-disconnected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="108"/>
|
||||
<source>server-not-synced</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="124"/>
|
||||
<source>view-server-info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="28"/>
|
||||
<source>group-name-label</source>
|
||||
<translation>Nome do Grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="84"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="33"/>
|
||||
<source>save-btn</source>
|
||||
<translation>Salvar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="94"/>
|
||||
<source>invite-to-group-label</source>
|
||||
<extracomment>Invite someone to the group</extracomment>
|
||||
<translation>Convidar ao grupo</translation>
|
||||
<translation type="vanished">Convidar ao grupo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="105"/>
|
||||
<source>invite-btn</source>
|
||||
<translation>Convidar</translation>
|
||||
<translation type="vanished">Convidar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="114"/>
|
||||
<location filename="../qml/panes/GroupSettingsPane.qml" line="144"/>
|
||||
<source>delete-btn</source>
|
||||
<translation>Deletar</translation>
|
||||
</message>
|
||||
|
@ -454,13 +489,13 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="120"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="117"/>
|
||||
<source>your-profiles</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="147"/>
|
||||
<location filename="../qml/panes/ProfileManagerPane.qml" line="141"/>
|
||||
<source>your-servers</source>
|
||||
<extracomment>Your Profiles</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
|
|
23
main.go
23
main.go
|
@ -8,6 +8,7 @@ import (
|
|||
"cwtch.im/ui/go/ui"
|
||||
"cwtch.im/ui/go/ui/android"
|
||||
"flag"
|
||||
"fmt"
|
||||
"git.openprivacy.ca/openprivacy/connectivity/tor"
|
||||
"git.openprivacy.ca/openprivacy/log"
|
||||
"github.com/therecipe/qt/androidextras"
|
||||
|
@ -16,6 +17,8 @@ import (
|
|||
"github.com/therecipe/qt/network"
|
||||
"github.com/therecipe/qt/qml"
|
||||
"github.com/therecipe/qt/quickcontrols2"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"os/user"
|
||||
"path"
|
||||
|
@ -65,7 +68,7 @@ func main() {
|
|||
log.ExcludeFromPattern("service.go")
|
||||
log.ExcludeFromPattern("tor/BaseOnionService.go")
|
||||
log.ExcludeFromPattern("applications/auth.go")
|
||||
log.ExcludeFromPattern("connections/engine.go")
|
||||
//log.ExcludeFromPattern("connections/engine.go")
|
||||
|
||||
if os.Getenv("CWTCH_FOLDER") != "" {
|
||||
the.CwtchDir = os.Getenv("CWTCH_FOLDER")
|
||||
|
@ -233,10 +236,20 @@ func loadACN() {
|
|||
}
|
||||
var err error
|
||||
the.ACN, err = tor.NewTorACN(the.CwtchDir, torpath)
|
||||
if err != nil {
|
||||
// TODO: turn into UI error: status panel?
|
||||
log.Errorf("Could not start Tor: %v", err)
|
||||
os.Exit(1)
|
||||
|
||||
if _, ok := err.(*tor.NoTorrcError); ok {
|
||||
// Stopgap: just dump a basic torrc for now
|
||||
port := rand.Intn(1000) + 9600
|
||||
controlPort := port + 1
|
||||
ioutil.WriteFile(path.Join(the.CwtchDir, "tor", "torrc"), []byte(fmt.Sprintf(`SOCKSPort %v \n ControlPort %v`, port, controlPort)), 0600)
|
||||
the.ACN, err = tor.NewTorACNWithAuth(the.CwtchDir, torpath, controlPort, tor.NullAuthenticator{})
|
||||
|
||||
if err != nil {
|
||||
// TODO: turn into UI error: status panel?
|
||||
log.Errorf("Could not start Tor: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -215,6 +215,7 @@ ApplicationWindow {
|
|||
readonly property int userProfilePane: 2
|
||||
readonly property int groupProfilePane: 3
|
||||
readonly property int addGroupPane: 4
|
||||
readonly property int serverInfoPane: 5
|
||||
|
||||
Item { anchors.fill: parent } // empty
|
||||
|
||||
|
@ -235,6 +236,8 @@ ApplicationWindow {
|
|||
|
||||
AddGroupPane { anchors.fill: parent }
|
||||
|
||||
ServerInfoPane { anchors.fill: parent }
|
||||
|
||||
onCurrentIndexChanged: {
|
||||
parentStack.updateToolbar()
|
||||
if (currentIndex == emptyPane) {
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit e5e537c79bad4fa1c21a6544a1865287062bade3
|
||||
Subproject commit 5c33d6ed2c46f5fe039fc6fee3cb690cb562cb23
|
|
@ -9,128 +9,177 @@ import QtQuick.Controls 1.4
|
|||
import "../opaque" as Opaque
|
||||
import "../opaque/styles"
|
||||
import "../utils.js" as Utils
|
||||
import "../opaque/theme"
|
||||
import "../const"
|
||||
|
||||
ColumnLayout { // groupSettingsPane
|
||||
Opaque.SettingsList { // groupSettingsPane
|
||||
id: gsp
|
||||
anchors.fill: parent
|
||||
property string groupID
|
||||
property variant addrbook
|
||||
property bool connected: false
|
||||
property bool synced: false
|
||||
|
||||
Flickable {
|
||||
settings: Column {
|
||||
anchors.fill: parent
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
clip:true
|
||||
contentWidth: tehcol.width
|
||||
contentHeight: tehcol.height
|
||||
|
||||
Column {
|
||||
id: tehcol
|
||||
width: gsp.width
|
||||
leftPadding: 10
|
||||
spacing: 5
|
||||
|
||||
Opaque.ScalingLabel {
|
||||
text: qsTr("server-label") + ":"
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: txtServer
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
readOnly: true
|
||||
}
|
||||
|
||||
Opaque.Button {
|
||||
icon: "regular/clipboard"
|
||||
text: qsTr("copy-btn")
|
||||
Opaque.Setting {
|
||||
inline: false
|
||||
label: qsTr("group-name-label")
|
||||
|
||||
field: Opaque.ButtonTextField {
|
||||
id: txtGroupName
|
||||
readOnly: false
|
||||
button_text: qsTr("save-btn")
|
||||
dropShadowColor: Theme.dropShadowPaneColor
|
||||
onClicked: {
|
||||
gcd.popup("copied-clipboard-notification")
|
||||
//: notification: copied to clipboard
|
||||
gcd.saveGroupSettings(groupID, txtGroupName.text)
|
||||
theStack.title = txtGroupName.text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Opaque.Setting {
|
||||
inline: false
|
||||
label: qsTr("server-label")
|
||||
|
||||
field: Opaque.ButtonTextField {
|
||||
id: txtServer
|
||||
readOnly: true
|
||||
button_text: qsTr("copy-btn")
|
||||
dropShadowColor: Theme.dropShadowPaneColor
|
||||
onClicked: {
|
||||
//: notification: copied to clipboard
|
||||
gcd.popup(qsTr("copied-to-clipboard-notification"))
|
||||
txtServer.selectAll()
|
||||
txtServer.copy()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Opaque.ScalingLabel {
|
||||
text: qsTr("invitation-label") + ":"
|
||||
}
|
||||
Opaque.Setting {
|
||||
inline: false
|
||||
label: qsTr("invitation-label")
|
||||
|
||||
TextField {
|
||||
field: Opaque.ButtonTextField {
|
||||
id: txtInvitation
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
readOnly: true
|
||||
}
|
||||
|
||||
Opaque.Button {
|
||||
icon: "regular/clipboard"
|
||||
text: qsTr("copy-btn")
|
||||
|
||||
button_text: qsTr("copy-btn")
|
||||
dropShadowColor: Theme.dropShadowPaneColor
|
||||
onClicked: {
|
||||
gcd.popup("copied-clipboard-notification")
|
||||
//: notification: copied to clipboard
|
||||
gcd.popup(qsTr("copied-to-clipboard-notification"))
|
||||
txtInvitation.selectAll()
|
||||
txtInvitation.copy()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Opaque.ScalingLabel{
|
||||
text: qsTr("group-name-label") + ":"
|
||||
}
|
||||
Opaque.Setting {
|
||||
property color backgroundColor: parent.color
|
||||
inline: true
|
||||
label: qsTr("server-info")
|
||||
field: Column {
|
||||
width: parent.width
|
||||
spacing:10
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Layout.fillWidth: true
|
||||
Opaque.ScalingLabel {
|
||||
text: gsp.connected ? qsTr("server-connectivity-connected") : qsTr("server-connectivity-disconnected")
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
Opaque.Icon {
|
||||
backgroundColor: Theme.backgroundPaneColor
|
||||
id: serverStatusIcon
|
||||
height: 18
|
||||
width: 18
|
||||
Layout.alignment: Qt.AlignRight
|
||||
iconColor: gsp.connected ? Theme.statusbarOnlineFontColor : Theme.statusbarDisconnectedTorFontColor
|
||||
source: gcd.assetPath + (gsp.connected ? "core/signal_cellular_4_bar-24px.svg" : "core/signal_cellular_connected_no_internet_4_bar-24px.svg")
|
||||
}
|
||||
}
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Layout.fillWidth: true
|
||||
|
||||
TextField {
|
||||
id: txtGroupName
|
||||
style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 }
|
||||
}
|
||||
Opaque.ScalingLabel {
|
||||
text: gsp.synced ? qsTr("server-synced") : qsTr("server-not-synced")
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
Opaque.Icon {
|
||||
id: serverSyncedStatusIcon
|
||||
backgroundColor: Theme.backgroundPaneColor
|
||||
height: 18
|
||||
width: 18
|
||||
Layout.alignment: Qt.AlignRight
|
||||
iconColor : gsp.synced ? Theme.statusbarOnlineFontColor : Theme.statusbarConnectingFontColor
|
||||
source: gcd.assetPath + (gsp.synced ? "core/syncing-01.svg" : "core/syncing-03.svg")
|
||||
}
|
||||
}
|
||||
|
||||
Opaque.Button {
|
||||
text: qsTr("save-btn")
|
||||
Opaque.Button {
|
||||
icon: "regular/hdd"
|
||||
text: qsTr("view-server-info")
|
||||
anchors.right: parent.right
|
||||
|
||||
onClicked: {
|
||||
gcd.saveGroupSettings(groupID, txtGroupName.text)
|
||||
theStack.title = txtGroupName.text
|
||||
theStack.pane = theStack.messagePane
|
||||
}
|
||||
}
|
||||
onClicked: {
|
||||
gcd.requestServerSettings(gcd.selectedConversation)
|
||||
theStack.pane = theStack.serverInfoPane
|
||||
}
|
||||
}
|
||||
|
||||
//: Invite someone to the group
|
||||
Opaque.ScalingLabel { text: qsTr("invite-to-group-label") }
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: cbInvite
|
||||
//popup.font.pixelSize: 12
|
||||
width: 200
|
||||
//font.pixelSize: 20
|
||||
style: CwtchComboBoxStyle{}
|
||||
}
|
||||
|
||||
Opaque.Button {
|
||||
text: qsTr("invite-btn")
|
||||
|
||||
onClicked: {
|
||||
gcd.inviteToGroup(addrbook[cbInvite.currentIndex], groupID)
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
width:parent.width * 0.95
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
Opaque.Button {
|
||||
icon: "regular/trash-alt"
|
||||
text: qsTr("delete-btn")
|
||||
anchors.right: parent.right
|
||||
|
||||
|
||||
onClicked: {
|
||||
gcd.leaveGroup(groupID)
|
||||
theStack.pane = theStack.emptyPane
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}//end of column with padding
|
||||
}//end of flickable
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: gcd
|
||||
|
||||
onUpdateContactStatus: function(_handle, _status, _loading) {
|
||||
if (txtServer.text == _handle) {
|
||||
if (_status >= Const.state_connected) {
|
||||
gsp.connected = true
|
||||
serverStatusIcon
|
||||
if (_status != Const.state_synced) {
|
||||
gsp.synced = false
|
||||
} else {
|
||||
gsp.synced = true
|
||||
}
|
||||
} else {
|
||||
gsp.connected = false
|
||||
gsp.synced = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onSupplyGroupSettings: function(gid, name, server, invite, accepted, addrbooknames, addrbookaddrs) {
|
||||
gsp.groupID = gid
|
||||
txtGroupName.text = name
|
||||
txtServer.text = server
|
||||
txtInvitation.text = invite
|
||||
cbInvite.model = addrbooknames.map(function(e){return Utils.htmlEscaped(e)})
|
||||
//cbInvite.model = addrbooknames.map(function(e){return Utils.htmlEscaped(e)})
|
||||
dan
commented
needed? or delete? needed? or delete?
|
||||
addrbook = addrbookaddrs
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,10 +33,10 @@ ColumnLayout {
|
|||
//: Accept group invite button
|
||||
text: qsTr("accept-group-btn")
|
||||
icon: "regular/heart"
|
||||
onClicked: {
|
||||
gcd.acceptGroup(gcd.selectedConversation)
|
||||
gcd.requestGroupSettings(gcd.selectedConversation)
|
||||
}
|
||||
onClicked: {
|
||||
gcd.acceptGroup(gcd.selectedConversation)
|
||||
gcd.requestGroupSettings(gcd.selectedConversation)
|
||||
}
|
||||
}
|
||||
|
||||
Opaque.Button {
|
||||
|
@ -147,5 +147,11 @@ ColumnLayout {
|
|||
overlay.accepted = accepted
|
||||
overlay.inGroup = true
|
||||
}
|
||||
|
||||
onSupplyServerSettings: function(server) {
|
||||
overlay.name = server
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
import QtGraphicalEffects 1.0
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Controls.Material 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.11
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
import "../opaque" as Opaque
|
||||
import "../opaque/styles"
|
||||
import "../utils.js" as Utils
|
||||
import "../opaque/theme"
|
||||
import "../const"
|
||||
|
||||
Opaque.SettingsList { // groupSettingsPane
|
||||
id: gsp
|
||||
anchors.fill: parent
|
||||
property string serverName
|
||||
property color backgroundColor: parent.color
|
||||
property bool connected: false
|
||||
property bool synced: false
|
||||
|
||||
settings: Column {
|
||||
anchors.fill: parent
|
||||
|
||||
Opaque.Setting {
|
||||
inline: false
|
||||
label: qsTr("server-label")
|
||||
|
||||
field: Opaque.ButtonTextField {
|
||||
id: txtServer
|
||||
readOnly: true
|
||||
text: serverName;
|
||||
button_text: qsTr("copy-btn")
|
||||
dropShadowColor: Theme.dropShadowPaneColor
|
||||
onClicked: {
|
||||
//: notification: copied to clipboard
|
||||
gcd.popup(qsTr("copied-to-clipboard-notification"))
|
||||
txtServer.selectAll()
|
||||
txtServer.copy()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: gcd
|
||||
|
||||
onUpdateContactStatus: function(_handle, _status, _loading) {
|
||||
if (txtServer.text == _handle) {
|
||||
if (_status >= Const.state_connected) {
|
||||
gsp.connected = true
|
||||
serverStatusIcon
|
||||
if (_status != Const.state_synced) {
|
||||
gsp.synced = false
|
||||
} else {
|
||||
gsp.synced = true
|
||||
}
|
||||
} else {
|
||||
gsp.connected = false
|
||||
gsp.synced = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onSupplyServerSettings: function(server, key_names, keys) {
|
||||
gsp.serverName = server;
|
||||
toolbar.setTitle(qsTr("server-settings"));
|
||||
console.log("Servers: " + key_names);
|
||||
for (let i=0; i<key_names.length;i++) {
|
||||
// TODO: Actually do something with these keys
|
||||
console.log("FOUND SERVER KEY " + key_names[i] + " " + keys[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -115,6 +115,8 @@ ColumnLayout {
|
|||
|
||||
onClicked: function(handle) { profileAddEditPane.reset(); parentStack.pane = parentStack.addEditProfilePane }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue
these prefixes should be consts somewhere "tofobundle" and "server"