mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-20 03:47:50 +01:00
New features (#110)
* added upload status * added changes for progress bar with more logs and bug fixes, Documentation yet to be added * huge changes that need more doucmenting * added possibility to get profile using NodeID * added fix profile listing user profile information * removed profile image from the explore reult struct * saving current changes * added filter to search based on NodeID * Monday bug fixing * updates to the profile * changes for tracing the blockchain profile image not shown * added condition to ensure TAG is not sent and removed debug prints * updated webapi docs
This commit is contained in:
committed by
GitHub
parent
97c3001596
commit
ae5f1d2fd7
86
webapi/Upload.go
Normal file
86
webapi/Upload.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package webapi
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
"math"
|
||||
"net/http"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type UploadStatus struct {
|
||||
APIStatus int `json:"apistatus"` // Status of the API call. See DownloadResponseX.
|
||||
ID uuid.UUID `json:"id"` // Download ID. This can be used to query the latest status and take actions.
|
||||
sync.RWMutex // Mutext for changing the status
|
||||
|
||||
UploadStatus int `json:"uploadstatus"` // Status of the download. See DownloadX.
|
||||
Progress struct {
|
||||
TotalSize uint64 `json:"totalsize"` // Total size in bytes.
|
||||
UploadedSize uint64 `json:"uploadedsize"` // Count of bytes download so far.
|
||||
Percentage float64 `json:"percentage"` // Percentage downloaded. Rounded to 2 decimal points. Between 0.00 and 100.00.
|
||||
} `json:"progress"` // Progress of the download. Only valid for status >= DownloadWaitSwarm.
|
||||
}
|
||||
|
||||
func (api *WebapiInstance) uploadAdd(info *UploadStatus) {
|
||||
api.uploadsMutex.Lock()
|
||||
api.uploads[info.ID] = info
|
||||
api.uploadsMutex.Unlock()
|
||||
}
|
||||
|
||||
func (api *WebapiInstance) uploadDelete(id uuid.UUID) {
|
||||
api.uploadsMutex.Lock()
|
||||
delete(api.uploads, id)
|
||||
api.uploadsMutex.Unlock()
|
||||
}
|
||||
|
||||
func (api *WebapiInstance) uploadLookup(id uuid.UUID) (info *UploadStatus) {
|
||||
api.uploadsMutex.Lock()
|
||||
info = api.uploads[id]
|
||||
api.uploadsMutex.Unlock()
|
||||
return info
|
||||
}
|
||||
|
||||
// UploadID API to set a Status ID to track the upload
|
||||
func (api *WebapiInstance) apiUploadID(w http.ResponseWriter, r *http.Request) {
|
||||
var info UploadStatus
|
||||
info.ID = uuid.New()
|
||||
|
||||
// Create a upload ID for adding the upload
|
||||
// metadata later one
|
||||
api.uploadAdd(&info)
|
||||
|
||||
EncodeJSON(api.Backend, w, r, info)
|
||||
}
|
||||
|
||||
// Write is used to satisfy the io.Writer interface.
|
||||
// Instead of writing somewhere, it simply aggregates
|
||||
// the total bytes on each read
|
||||
func (uploadStatus *UploadStatus) Write(p []byte) (n int, err error) {
|
||||
n = len(p)
|
||||
uploadStatus.Progress.UploadedSize += uint64(n)
|
||||
uploadStatus.Progress.Percentage = math.Round(float64(uploadStatus.Progress.UploadedSize)/float64(uploadStatus.Progress.TotalSize)*100*100) / 100
|
||||
return
|
||||
}
|
||||
|
||||
// Get information about upload file status
|
||||
func (api *WebapiInstance) apiUploadInfo(w http.ResponseWriter, r *http.Request) {
|
||||
ID := r.URL.Query().Get("id")
|
||||
if ID == "" {
|
||||
api.Backend.LogError("upload.UploadInformation", "error: %v", "ID parameter not passed")
|
||||
http.Error(w, "", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
IDUUID, err := uuid.Parse(ID)
|
||||
if err != nil {
|
||||
api.Backend.LogError("upload.UploadInformation", "error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
info := api.uploadLookup(IDUUID)
|
||||
if info == nil {
|
||||
EncodeJSON(api.Backend, w, r, UploadStatus{APIStatus: DownloadResponseIDNotFound})
|
||||
return
|
||||
}
|
||||
|
||||
EncodeJSON(api.Backend, w, r, info)
|
||||
}
|
||||
Reference in New Issue
Block a user