diff --git a/go/characters/incominglistener.go b/go/characters/incominglistener.go index 19ba293..f0c47ea 100644 --- a/go/characters/incominglistener.go +++ b/go/characters/incominglistener.go @@ -5,6 +5,7 @@ import ( "cwtch.im/ui/go/cwutil" "cwtch.im/ui/go/gobjects" "cwtch.im/ui/go/the" + "git.openprivacy.ca/openprivacy/libricochet-go/log" "time" ) @@ -12,6 +13,7 @@ func IncomingListener(callback func(*gobjects.Message)) { q := event.NewEventQueue(1000) the.CwtchApp.EventBus().Subscribe(event.NewMessageFromPeer, q.EventChannel) the.CwtchApp.EventBus().Subscribe(event.NewMessageFromGroup, q.EventChannel) + the.CwtchApp.EventBus().Subscribe(event.NewGroupInvite, q.EventChannel) for { e := q.Next() @@ -40,6 +42,8 @@ func IncomingListener(callback func(*gobjects.Message)) { FromMe: e.Data[event.RemotePeer] == the.Peer.GetProfile().Onion, Timestamp: ts, }) + case event.NewGroupInvite: + log.Debugf("got a group invite!") } } } \ No newline at end of file diff --git a/go/characters/torstatuspoller.go b/go/characters/torstatuspoller.go index 95c408f..135f441 100644 --- a/go/characters/torstatuspoller.go +++ b/go/characters/torstatuspoller.go @@ -1,32 +1,28 @@ package characters -func TorStatusPoller(setTorStatus func(int, string)) { - //TODO: convert this from asaur to bine - /* - for { - time.Sleep(time.Second) - //todo: this should use a config manager - //todo: also, try dialing the proxy to differentiate tor not running vs control port not configured - rawStatus, err := asaur.GetInfo("localhost:9051", "tcp4", "", "status/bootstrap-phase") - if err != nil { - setTorStatus(0, "can't find tor. is it running? is the controlport configured?") - continue - } +import ( + "git.openprivacy.ca/openprivacy/libricochet-go/connectivity" + "time" +) - status := asaur.ParseBootstrapPhase(rawStatus) - progress, _ := strconv.Atoi(status["PROGRESS"]) +func TorStatusPoller(setTorStatus func(int, string), acn connectivity.ACN) { + for { + time.Sleep(time.Second) - if status["TAG"] == "done" { - setTorStatus(3, "tor appears to be running just fine!") - continue - } - - if progress == 0 { - setTorStatus(1, "tor is trying to start up") - continue - } - - setTorStatus(2, status["SUMMARY"]) + percent, message := acn.GetBootstrapStatus() + var statuscode int + if percent == 0 { + statuscode = 0 + message = "can't find tor. is it running? is the controlport configured?" + } else if percent == 100 { + statuscode = 3 + message = "tor appears to be running just fine!" + } else if percent < 80 { + statuscode = 1 + } else { + statuscode = 2 } - */ + + setTorStatus(statuscode, message) + } } diff --git a/go/gothings/gcd.go b/go/gothings/gcd.go index 901c78c..f4c9de4 100644 --- a/go/gothings/gcd.go +++ b/go/gothings/gcd.go @@ -43,7 +43,7 @@ type GrandCentralDispatcher struct { // other stuff i can't ontologize atm _ func(str string) `signal:"InvokePopup"` - _ func(groupID, name, server, invitation string) `signal:"SupplyGroupSettings"` + _ func(groupID, name, server, invitation string, addrbooknames, addrbookaddrs []string) `signal:"SupplyGroupSettings"` _ func(onion, nick string) `signal:"SupplyPeerSettings"` // signals emitted from the ui (written in go, below) @@ -58,6 +58,7 @@ type GrandCentralDispatcher struct { _ func(groupID, nick string) `signal:"saveGroupSettings,auto"` _ func() `signal:"requestPeerSettings,auto"` _ func(onion, nick string) `signal:"savePeerSettings,auto"` + _ func(onion, groupID string) `signal:"inviteToGroup,auto"` } func (this *GrandCentralDispatcher) sendMessage(message string, mID uint) { @@ -241,7 +242,19 @@ func (this *GrandCentralDispatcher) requestGroupSettings() { nick, _ := group.GetAttribute("nick") invite, _ := the.Peer.ExportGroup(this.CurrentOpenConversation()) - this.SupplyGroupSettings(this.CurrentOpenConversation(), nick, group.GroupServer, invite) + + contactaddrs := the.Peer.GetContacts() + contactnames := make([]string, len(contactaddrs)) + for i, contact := range contactaddrs { + name, hasname := the.Peer.GetContact(contact).GetAttribute("nick") + if hasname { + contactnames[i] = name + } else { + contactnames[i] = contact + } + } + + this.SupplyGroupSettings(this.CurrentOpenConversation(), nick, group.GroupServer, invite, contactnames, contactaddrs) } func (this *GrandCentralDispatcher) saveGroupSettings(groupID, nick string) { @@ -399,3 +412,10 @@ func (this *GrandCentralDispatcher) createGroup(server, groupName string) { group.NewMessage = make(chan model.Message) go characters.CwtchListener(this.UIState.AddMessage, group.GroupID, group.NewMessage) } + +func (this *GrandCentralDispatcher) inviteToGroup(onion, groupID string) { + err := the.Peer.InviteOnionToGroup(onion, groupID) + if err != nil { + log.Errorf("inviting %v to %v: %v", onion, groupID, err) + } +} \ No newline at end of file diff --git a/main.go b/main.go index dff9a0b..6bfd1de 100644 --- a/main.go +++ b/main.go @@ -66,7 +66,7 @@ func main() { loadCwtchData(gcd, acn) go characters.IncomingListener(gcd.UIState.AddMessage) go characters.PostmanPat(gcd.OutgoingMessages) - go characters.TorStatusPoller(gcd.TorStatus) + go characters.TorStatusPoller(gcd.TorStatus, acn) go characters.PresencePoller(gcd.UIState.GetContact, gcd.UIState.AddContact, gcd.UIState.UpdateContact) go characters.GroupPoller(gcd.UIState.GetContact, gcd.UIState.UpdateContact) diff --git a/qml/panes/GroupSettingsPane.qml b/qml/panes/GroupSettingsPane.qml index e999167..3ac786e 100644 --- a/qml/panes/GroupSettingsPane.qml +++ b/qml/panes/GroupSettingsPane.qml @@ -10,7 +10,7 @@ import "../widgets" ColumnLayout { // groupSettingsPane anchors.fill: parent property string groupID - + property variant addrbook StackToolbar { id: toolbar @@ -67,16 +67,35 @@ ColumnLayout { // groupSettingsPane } } + ScalingLabel { text: "Invite someone to the group:" } + + ComboBox { + id: cbInvite + popup.font.pixelSize: 12 + width: 200 + font.pixelSize: 20 + } + + SimpleButton { + text: "Invite" + + onClicked: { + gcd.inviteToGroup(addrbook[cbInvite.currentIndex], groupID) + } + } + Connections { target: gcd - onSupplyGroupSettings: function(gid, name, server, invite) { + onSupplyGroupSettings: function(gid, name, server, invite, addrbooknames, addrbookaddrs) { groupID = gid toolbar.text = name txtGroupName.text = name txtServer.text = server txtInvitation.text = invite + cbInvite.model = addrbooknames + addrbook = addrbookaddrs } } } \ No newline at end of file diff --git a/qml/widgets/MyProfile.qml b/qml/widgets/MyProfile.qml index d4400cd..d4ed233 100644 --- a/qml/widgets/MyProfile.qml +++ b/qml/widgets/MyProfile.qml @@ -101,6 +101,7 @@ ColumnLayout { width: parent.width onUpdated: { + nick = lblNick.text gcd.updateNick(lblNick.text) } }