diff --git a/Makefile b/Makefile index c31a5dd..d1b4778 100644 --- a/Makefile +++ b/Makefile @@ -16,19 +16,19 @@ windows: libCwtch.dll libCwtch.so: lib.go ./switch-ffi.sh - go build -buildmode c-shared -o libCwtch.so + go build -ldflags "-X main.buildVer=$(shell git describe --tags) -X main.buildDate=$(shell date +%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.so libCwtch.dylib: lib.go ./switch-ffi.sh - go build -buildmode c-shared -o libCwtch.dylib + go build -ldflags "-X main.buildVer=$(shell git describe --tags) -X main.buildDate=$(shell date +%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.dylib cwtch.aar: lib.go ./switch-gomobile.sh - gomobile bind -target android + gomobile bind -target android -ldflags="-X cwtch.buildVer=$(shell git describe --tags) -X cwtch.buildDate=$(shell date +%G-%m-%d-%H-%M)" libCwtch.dll: lib.go ./switch-ffi.sh - GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc-win32 go build -buildmode c-shared -o libCwtch.dll + GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc-win32 go build -ldflags "-X main.buildVer=$(shell git describe --tags) -X main.buildDate=$(shell date +%G-%m-%d-%H-%M)" -buildmode c-shared -o libCwtch.dll clean: rm -f cwtch.aar cwtch_go.apk libCwtch.h libCwtch.so cwtch-sources.jar libCwtch.dll libCwtch.dylib diff --git a/features/groups/group_functionality.go b/features/groups/group_functionality.go index 7c0d7b0..db31cb0 100644 --- a/features/groups/group_functionality.go +++ b/features/groups/group_functionality.go @@ -4,6 +4,7 @@ import ( "cwtch.im/cwtch/event" "cwtch.im/cwtch/model" "cwtch.im/cwtch/model/attr" + constants2 "cwtch.im/cwtch/model/constants" "cwtch.im/cwtch/peer" "cwtch.im/cwtch/protocol/connections" "fmt" @@ -57,5 +58,9 @@ func (gf *GroupFunctionality) GetServerInfo(serverOnion string, profile peer.Cwt } description, _ := serverInfo.GetAttribute(attr.LocalScope, attr.ServerZone, constants.Description) - return Server{Onion: serverOnion, Identifier: serverInfo.ID, Status: connections.ConnectionStateName[profile.GetPeerState(serverInfo.Handle)], Keys: serverKeys, Description: description} + startTimeStr := serverInfo.Attributes[attr.LocalScope.ConstructScopedZonedPath(attr.LegacyGroupZone.ConstructZonedPath(constants2.SyncPreLastMessageTime)).ToString()] + recentTimeStr := serverInfo.Attributes[attr.LocalScope.ConstructScopedZonedPath(attr.LegacyGroupZone.ConstructZonedPath(constants2.SyncMostRecentMessageTime)).ToString()] + syncStatus := SyncStatus{startTimeStr, recentTimeStr} + + return Server{Onion: serverOnion, Identifier: serverInfo.ID, Status: connections.ConnectionStateName[profile.GetPeerState(serverInfo.Handle)], Keys: serverKeys, Description: description, SyncProgress: syncStatus} } diff --git a/features/groups/server.go b/features/groups/server.go index e24be46..f48592c 100644 --- a/features/groups/server.go +++ b/features/groups/server.go @@ -5,10 +5,16 @@ type ServerKey struct { Key string `json:"key"` } -type Server struct { - Onion string `json:"onion"` - Identifier int `json:"identifier"` - Status string `json:"status"` - Description string `json:"description"` - Keys []ServerKey `json:"keys"` +type SyncStatus struct { + StartTime string `json:"startTime"` + LastMessageTime string `json:"lastMessageTime"` +} + +type Server struct { + Onion string `json:"onion"` + Identifier int `json:"identifier"` + Status string `json:"status"` + Description string `json:"description"` + Keys []ServerKey `json:"keys"` + SyncProgress SyncStatus `json:"syncProgress"` } diff --git a/go.mod b/go.mod index 0c65efd..50510fb 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.openprivacy.ca/cwtch.im/libcwtch-go go 1.15 require ( - cwtch.im/cwtch v0.15.1 + cwtch.im/cwtch v0.15.2 git.openprivacy.ca/cwtch.im/server v1.4.2 git.openprivacy.ca/openprivacy/connectivity v1.8.1 git.openprivacy.ca/openprivacy/log v1.0.3 diff --git a/go.sum b/go.sum index b5e60e3..d1284f6 100644 --- a/go.sum +++ b/go.sum @@ -11,8 +11,8 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cwtch.im/cwtch v0.14.9/go.mod h1:/fLuoYLY/7JHw6RojFojpd245CiOcU24QpWqzh9FRDI= -cwtch.im/cwtch v0.15.1 h1:y+c8KNnX3BVEa+THqX9drsI6CUZxHlFhZ+BtwGiVYT8= -cwtch.im/cwtch v0.15.1/go.mod h1:lG9e5RUib+SbX2XsjWtHKJWz9geoIglSAq55LrCm8Io= +cwtch.im/cwtch v0.15.2 h1:hGeLP3K2olqYevIGYYPY/x5TguQFwWb7X4pd6SHYON4= +cwtch.im/cwtch v0.15.2/go.mod h1:lG9e5RUib+SbX2XsjWtHKJWz9geoIglSAq55LrCm8Io= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/lib.go b/lib.go index 73ff576..00e9938 100644 --- a/lib.go +++ b/lib.go @@ -32,7 +32,6 @@ import ( "cwtch.im/cwtch/functionality/filesharing" "cwtch.im/cwtch/model" "cwtch.im/cwtch/model/attr" - "cwtch.im/cwtch/peer" "git.openprivacy.ca/cwtch.im/libcwtch-go/constants" "git.openprivacy.ca/cwtch.im/libcwtch-go/features/groups" "git.openprivacy.ca/cwtch.im/libcwtch-go/features/servers" @@ -56,6 +55,12 @@ const ( ProfileOnion = event.Field("ProfileOnion") ) +// supplied by make +var ( + buildVer string + buildDate string +) + var application app.Application var globalAppDir string var globalTorPath string @@ -105,6 +110,8 @@ func StartCwtch(appDir string, torPath string) int { log.SetLevel(log.LevelDebug) } log.Infof("StartCwtch(...)") + log.Debugf("builddate: %v buildver: %v", buildDate, buildVer) + // Quick hack check that we're being called with the correct params // On android a stale worker could be calling us with "last apps" directory. Best to abort fast so the app can make a new worker if runtime.GOOS == "android" { @@ -179,24 +186,6 @@ func _startCwtch(appDir string, torPath string) { eventHandler.HandleApp(application) - peer.DefaultEventsToHandle = []event.Type{ - event.EncryptedGroupMessage, - event.NewMessageFromPeerEngine, - event.PeerAcknowledgement, - event.PeerError, - event.SendMessageToPeerError, - event.SendMessageToGroupError, - event.NewGetValMessageFromPeer, - event.PeerStateChange, - event.NewRetValMessageFromPeer, - event.NewGroupInvite, - event.ServerStateChange, - event.ProtocolEngineStopped, - event.RetryServerRequest, - event.ManifestReceived, - event.FileDownloaded, - } - // Settings may have changed... settings = utils.ReadGlobalSettings() settingsJson, _ := json.Marshal(settings) @@ -1019,7 +1008,6 @@ func ShutdownCwtch() { if application != nil { // Kill the isolate eventHandler.Push(event.NewEvent(event.Shutdown, map[event.Field]string{})) - servers.Shutdown() // Allow for the shutdown events to go through and then purge everything else... log.Infof("Shutting Down Application...") diff --git a/utils/eventHandler.go b/utils/eventHandler.go index 9b7f79e..4860720 100644 --- a/utils/eventHandler.go +++ b/utils/eventHandler.go @@ -341,7 +341,7 @@ func (eh *EventHandler) handleProfileEvent(ev *EventProfileEnvelope) string { if ci != nil && ci.Accepted { handleImagePreviews(profile, &ev.Event, conversationID, ci.ID) } - gci, err := profile.GetConversationInfo(conversationID) + gci, _ := profile.GetConversationInfo(conversationID) ev.Event.Data["notification"] = string(determineNotification(gci)) case event.PeerAcknowledgement: ci, err := profile.FetchConversationInfo(ev.Event.Data["RemotePeer"])