Allow force restarting of file shares regardless of timestamp.
continuous-integration/drone/pr Build is passing
Details
continuous-integration/drone/pr Build is passing
Details
Move RestartFileShare to FileSharingFunctionality where it belongs.
This commit is contained in:
parent
95527f8978
commit
602041d1c2
|
@ -45,6 +45,8 @@ func (f *Functionality) ExperimentsToRegister() []string {
|
||||||
func (f *Functionality) OnEvent(ev event.Event, profile peer.CwtchPeer) {
|
func (f *Functionality) OnEvent(ev event.Event, profile peer.CwtchPeer) {
|
||||||
if profile.IsFeatureEnabled(constants.FileSharingExperiment) {
|
if profile.IsFeatureEnabled(constants.FileSharingExperiment) {
|
||||||
switch ev.EventType {
|
switch ev.EventType {
|
||||||
|
case event.ProtocolEngineCreated:
|
||||||
|
f.ReShareFiles(profile)
|
||||||
case event.ManifestReceived:
|
case event.ManifestReceived:
|
||||||
log.Debugf("Manifest Received Event!: %v", ev)
|
log.Debugf("Manifest Received Event!: %v", ev)
|
||||||
handle := ev.Data[event.Handle]
|
handle := ev.Data[event.Handle]
|
||||||
|
@ -294,9 +296,10 @@ func (f *Functionality) DownloadFile(profile peer.CwtchPeer, conversationID int,
|
||||||
}
|
}
|
||||||
|
|
||||||
// startFileShare is a private method used to finalize a file share and publish it to the protocol engine for processing.
|
// startFileShare is a private method used to finalize a file share and publish it to the protocol engine for processing.
|
||||||
func (f *Functionality) startFileShare(profile peer.CwtchPeer, filekey string, manifest string) error {
|
// if force is set to true, this function will ignore timestamp checks...
|
||||||
|
func (f *Functionality) startFileShare(profile peer.CwtchPeer, filekey string, manifest string, force bool) error {
|
||||||
tsStr, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.ts", filekey))
|
tsStr, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.ts", filekey))
|
||||||
if exists {
|
if exists && !force {
|
||||||
ts, err := strconv.ParseInt(tsStr, 10, 64)
|
ts, err := strconv.ParseInt(tsStr, 10, 64)
|
||||||
if err != nil || ts < time.Now().Unix()-2592000 {
|
if err != nil || ts < time.Now().Unix()-2592000 {
|
||||||
log.Errorf("ignoring request to download a file offered more than 30 days ago")
|
log.Errorf("ignoring request to download a file offered more than 30 days ago")
|
||||||
|
@ -311,7 +314,14 @@ func (f *Functionality) startFileShare(profile peer.CwtchPeer, filekey string, m
|
||||||
}
|
}
|
||||||
|
|
||||||
// RestartFileShare takes in an existing filekey and, assuming the manifest exists, restarts sharing of the manifest
|
// RestartFileShare takes in an existing filekey and, assuming the manifest exists, restarts sharing of the manifest
|
||||||
|
// by default this function always forces a file share, even if the file has timed out.
|
||||||
func (f *Functionality) RestartFileShare(profile peer.CwtchPeer, filekey string) error {
|
func (f *Functionality) RestartFileShare(profile peer.CwtchPeer, filekey string) error {
|
||||||
|
return f.restartFileShareAdvanced(profile, filekey, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RestartFileShareAdvanced takes in an existing filekey and, assuming the manifest exists, restarts sharing of the manifest in addition
|
||||||
|
// to a set of parameters
|
||||||
|
func (f *Functionality) restartFileShareAdvanced(profile peer.CwtchPeer, filekey string, force bool) error {
|
||||||
|
|
||||||
// assert that we are allowed to restart filesharing
|
// assert that we are allowed to restart filesharing
|
||||||
if !profile.IsFeatureEnabled(constants.FileSharingExperiment) {
|
if !profile.IsFeatureEnabled(constants.FileSharingExperiment) {
|
||||||
|
@ -323,7 +333,7 @@ func (f *Functionality) RestartFileShare(profile peer.CwtchPeer, filekey string)
|
||||||
if manifestExists {
|
if manifestExists {
|
||||||
// everything is in order, so reshare this file with the engine
|
// everything is in order, so reshare this file with the engine
|
||||||
log.Debugf("restarting file share: %v", filekey)
|
log.Debugf("restarting file share: %v", filekey)
|
||||||
return f.startFileShare(profile, filekey, manifest)
|
return f.startFileShare(profile, filekey, manifest, force)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("manifest does not exist for filekey: %v", filekey)
|
return fmt.Errorf("manifest does not exist for filekey: %v", filekey)
|
||||||
}
|
}
|
||||||
|
@ -357,12 +367,10 @@ func (f *Functionality) ReShareFiles(profile peer.CwtchPeer) error {
|
||||||
filekey := strings.Join(keyparts[:2], ".")
|
filekey := strings.Join(keyparts[:2], ".")
|
||||||
sharedFile, err := f.GetFileShareInfo(profile, filekey)
|
sharedFile, err := f.GetFileShareInfo(profile, filekey)
|
||||||
|
|
||||||
// If we haven't explicitly stopped sharing the file AND
|
// If we haven't explicitly stopped sharing the file then attempt a reshare
|
||||||
// If fewer than 30 days have passed since we originally shared this file,
|
|
||||||
// Then attempt to share this file again...
|
|
||||||
// TODO: In the future this would be the point to change the timestamp and reshare the file...
|
|
||||||
if err == nil && sharedFile.Active {
|
if err == nil && sharedFile.Active {
|
||||||
err := f.RestartFileShare(profile, filekey)
|
// this reshare can fail because we don't force sharing of files older than 30 days...
|
||||||
|
err := f.restartFileShareAdvanced(profile, filekey, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("could not reshare file: %v", err)
|
log.Debugf("could not reshare file: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -456,7 +464,7 @@ func (f *Functionality) ShareFile(filepath string, profile peer.CwtchPeer) (stri
|
||||||
profile.SetScopedZonedAttribute(attr.ConversationScope, attr.FilesharingZone, fmt.Sprintf("%s.manifest", key), string(serializedManifest))
|
profile.SetScopedZonedAttribute(attr.ConversationScope, attr.FilesharingZone, fmt.Sprintf("%s.manifest", key), string(serializedManifest))
|
||||||
profile.SetScopedZonedAttribute(attr.ConversationScope, attr.FilesharingZone, fmt.Sprintf("%s.manifest.size", key), strconv.Itoa(int(math.Ceil(float64(len(serializedManifest)-lenDiff)/float64(files.DefaultChunkSize)))))
|
profile.SetScopedZonedAttribute(attr.ConversationScope, attr.FilesharingZone, fmt.Sprintf("%s.manifest.size", key), strconv.Itoa(int(math.Ceil(float64(len(serializedManifest)-lenDiff)/float64(files.DefaultChunkSize)))))
|
||||||
|
|
||||||
err = f.startFileShare(profile, key, string(serializedManifest))
|
err = f.startFileShare(profile, key, string(serializedManifest), false)
|
||||||
|
|
||||||
return key, string(wrapperJSON), err
|
return key, string(wrapperJSON), err
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,10 +75,9 @@ func (i *ImagePreviewsFunctionality) OnEvent(ev event.Event, profile peer.CwtchP
|
||||||
// we reset the profile image here so that it is always available.
|
// we reset the profile image here so that it is always available.
|
||||||
profile.SetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.ts", key), strconv.FormatInt(time.Now().Unix(), 10))
|
profile.SetScopedZonedAttribute(attr.LocalScope, attr.FilesharingZone, fmt.Sprintf("%s.ts", key), strconv.FormatInt(time.Now().Unix(), 10))
|
||||||
log.Debugf("Custom Profile Image: %v %s", key, serializedManifest)
|
log.Debugf("Custom Profile Image: %v %s", key, serializedManifest)
|
||||||
|
f := Functionality{}
|
||||||
|
f.RestartFileShare(profile, key)
|
||||||
}
|
}
|
||||||
// If file sharing is enabled then reshare all active files...
|
|
||||||
fsf := FunctionalityGate()
|
|
||||||
_ = fsf.ReShareFiles(profile)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue