diff --git a/go.mod b/go.mod index 0944f6e..1a2c3a0 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.13.1 + cwtch.im/cwtch v0.13.2 git.openprivacy.ca/cwtch.im/server v1.3.2 git.openprivacy.ca/openprivacy/connectivity v1.5.0 git.openprivacy.ca/openprivacy/log v1.0.3 diff --git a/go.sum b/go.sum index a7e4e42..17ccadd 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ cwtch.im/cwtch v0.13.0 h1:9WhLG9czfyRceZnHSqfTAq0vfmDC/E20mziJb9+Skrg= cwtch.im/cwtch v0.13.0/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= cwtch.im/cwtch v0.13.1 h1:k7CDr16ZLZ+uaRtic2Joooc8TzkO7BkgWXs8r9ilqDY= cwtch.im/cwtch v0.13.1/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= +cwtch.im/cwtch v0.13.2 h1:qbKTQOUryvJpTzIf5iT49x6iAmeNxiz0doNb5phYVEQ= +cwtch.im/cwtch v0.13.2/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.openprivacy.ca/cwtch.im/server v1.3.1 h1:Kt4TnlGxGPk1KTjvs1cXtnFWDx+hYqu8w+2eIaqt+F4= diff --git a/lib.go b/lib.go index 956becc..7dfd2e3 100644 --- a/lib.go +++ b/lib.go @@ -208,6 +208,7 @@ func _startCwtch(appDir string, torPath string) { event.ProtocolEngineStopped, event.RetryServerRequest, event.ManifestReceived, + event.FileDownloaded, } settings := utils.ReadGlobalSettings() settingsJson, _ := json.Marshal(settings) @@ -590,9 +591,9 @@ func GetMessage(profileOnion, handle string, messageIndex int) string { message.ContactImage = ph.GetProfilePic(message.Message.PeerID) } else { eventHandler.Push(event.NewEvent(event.MessageCounterResync, map[event.Field]string{ - event.Identity: profileOnion, - event.GroupID: handle, - event.Data: strconv.Itoa(length), + event.Identity: profileOnion, + event.GroupID: handle, + event.Data: strconv.Itoa(length), })) log.Errorf("Couldn't find message in timeline %v / %v or unacked messages, probably transient threading issue, but logging for visibility..", messageIndex, length) } @@ -759,13 +760,45 @@ func c_CheckDownloadStatus(profilePtr *C.char, profileLen C.int, fileKeyPtr *C.c func CheckDownloadStatus(profileOnion, fileKey string) { profile := application.GetPeer(profileOnion) - if path, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fileKey); exists { + path, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.path", fileKey)) + if _, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.complete", fileKey)); exists { eventHandler.Push(event.NewEvent(event.FileDownloaded, map[event.Field]string{ ProfileOnion: profileOnion, event.FileKey: fileKey, event.FilePath: path, event.TempFile: "", })) + } else { + log.Infof("CheckDownloadStatus found .path but not .complete") + eventHandler.Push(event.NewEvent(event.FileDownloadProgressUpdate, map[event.Field]string{ + ProfileOnion: profileOnion, + event.FileKey: fileKey, + event.Progress: "-1", + event.FileSizeInChunks: "-1", + event.FilePath: path, + })) + } +} + +//export c_VerifyOrResumeDownload +func c_VerifyOrResumeDownload(profile_ptr *C.char, profile_len C.int, handle_ptr *C.char, handle_len C.int, filekey_ptr *C.char, filekey_len C.int) { + profile := C.GoStringN(profile_ptr, profile_len) + handle := C.GoStringN(handle_ptr, handle_len) + filekey := C.GoStringN(filekey_ptr, filekey_len) + VerifyOrResumeDownload(profile, handle, filekey) +} + +func VerifyOrResumeDownload(profileOnion, handle, fileKey string) { + profile := application.GetPeer(profileOnion) + if manifestFilePath, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%v.manifest", fileKey)); exists { + if downloadfilepath, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.path", fileKey)); exists { + log.Infof("resuming %s", fileKey) + DownloadFile(profileOnion, handle, downloadfilepath, manifestFilePath, fileKey) + } else { + log.Errorf("found manifest path but not download path for %s", fileKey) + } + } else { + log.Errorf("no stored manifest path found for %s", fileKey) } } @@ -1091,7 +1124,6 @@ func LaunchServer(onion string) { } } - //export c_StopServer func c_StopServer(onionPtr *C.char, onionLen C.int) { StopServer(C.GoStringN(onionPtr, onionLen))