- Improve in-memoery storage, whic reduces memory usage - Fix issues with rclone integration
143 lines
5.0 KiB
Go
143 lines
5.0 KiB
Go
package wire
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
type File struct {
|
|
Index int `json:"index,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Size int64 `json:"size,omitempty"`
|
|
Progress int `json:"progress,omitempty"`
|
|
Priority int `json:"priority,omitempty"`
|
|
IsSeed bool `json:"is_seed,omitempty"`
|
|
PieceRange []int `json:"piece_range,omitempty"`
|
|
Availability float64 `json:"availability,omitempty"`
|
|
}
|
|
|
|
type Torrent struct {
|
|
ID string `json:"id"`
|
|
DebridID string `json:"debrid_id"`
|
|
Debrid string `json:"debrid"`
|
|
TorrentPath string `json:"-"`
|
|
Files []*File `json:"files,omitempty"`
|
|
|
|
AddedOn int64 `json:"added_on,omitempty"`
|
|
AmountLeft int64 `json:"amount_left"`
|
|
AutoTmm bool `json:"auto_tmm"`
|
|
Availability float64 `json:"availability,omitempty"`
|
|
Category string `json:"category,omitempty"`
|
|
Completed int64 `json:"completed"`
|
|
CompletionOn int `json:"completion_on,omitempty"`
|
|
ContentPath string `json:"content_path"`
|
|
DlLimit int `json:"dl_limit"`
|
|
Dlspeed int64 `json:"dlspeed"`
|
|
Downloaded int64 `json:"downloaded"`
|
|
DownloadedSession int64 `json:"downloaded_session"`
|
|
Eta int `json:"eta"`
|
|
FlPiecePrio bool `json:"f_l_piece_prio,omitempty"`
|
|
ForceStart bool `json:"force_start,omitempty"`
|
|
Hash string `json:"hash"`
|
|
LastActivity int64 `json:"last_activity,omitempty"`
|
|
MagnetUri string `json:"magnet_uri,omitempty"`
|
|
MaxRatio int `json:"max_ratio,omitempty"`
|
|
MaxSeedingTime int `json:"max_seeding_time,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
NumComplete int `json:"num_complete,omitempty"`
|
|
NumIncomplete int `json:"num_incomplete,omitempty"`
|
|
NumLeechs int `json:"num_leechs,omitempty"`
|
|
NumSeeds int `json:"num_seeds,omitempty"`
|
|
Priority int `json:"priority,omitempty"`
|
|
Progress float64 `json:"progress"`
|
|
Ratio int `json:"ratio,omitempty"`
|
|
RatioLimit int `json:"ratio_limit,omitempty"`
|
|
SavePath string `json:"save_path"`
|
|
SeedingTimeLimit int `json:"seeding_time_limit,omitempty"`
|
|
SeenComplete int64 `json:"seen_complete,omitempty"`
|
|
SeqDl bool `json:"seq_dl"`
|
|
Size int64 `json:"size,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
SuperSeeding bool `json:"super_seeding"`
|
|
Tags string `json:"tags,omitempty"`
|
|
TimeActive int `json:"time_active,omitempty"`
|
|
TotalSize int64 `json:"total_size,omitempty"`
|
|
Tracker string `json:"tracker,omitempty"`
|
|
UpLimit int64 `json:"up_limit,omitempty"`
|
|
Uploaded int64 `json:"uploaded,omitempty"`
|
|
UploadedSession int64 `json:"uploaded_session,omitempty"`
|
|
Upspeed int64 `json:"upspeed,omitempty"`
|
|
Source string `json:"source,omitempty"`
|
|
|
|
sync.Mutex
|
|
}
|
|
|
|
func (t *Torrent) Copy() *Torrent {
|
|
return &Torrent{
|
|
ID: t.ID,
|
|
DebridID: t.DebridID,
|
|
Debrid: t.Debrid,
|
|
TorrentPath: t.TorrentPath,
|
|
AddedOn: t.AddedOn,
|
|
AmountLeft: t.AmountLeft,
|
|
AutoTmm: t.AutoTmm,
|
|
Availability: t.Availability,
|
|
Category: t.Category,
|
|
Completed: t.Completed,
|
|
CompletionOn: t.CompletionOn,
|
|
ContentPath: t.ContentPath,
|
|
DlLimit: t.DlLimit,
|
|
Dlspeed: t.Dlspeed,
|
|
Downloaded: t.Downloaded,
|
|
DownloadedSession: t.DownloadedSession,
|
|
Eta: t.Eta,
|
|
FlPiecePrio: t.FlPiecePrio,
|
|
ForceStart: t.ForceStart,
|
|
Hash: t.Hash,
|
|
LastActivity: t.LastActivity,
|
|
MagnetUri: t.MagnetUri,
|
|
MaxRatio: t.MaxRatio,
|
|
MaxSeedingTime: t.MaxSeedingTime,
|
|
Name: t.Name,
|
|
NumComplete: t.NumComplete,
|
|
NumIncomplete: t.NumIncomplete,
|
|
NumLeechs: t.NumLeechs,
|
|
NumSeeds: t.NumSeeds,
|
|
Priority: t.Priority,
|
|
Progress: t.Progress,
|
|
Ratio: t.Ratio,
|
|
RatioLimit: t.RatioLimit,
|
|
SavePath: t.SavePath,
|
|
SeedingTimeLimit: t.SeedingTimeLimit,
|
|
SeenComplete: t.SeenComplete,
|
|
SeqDl: t.SeqDl,
|
|
Size: t.Size,
|
|
State: t.State,
|
|
SuperSeeding: t.SuperSeeding,
|
|
Tags: t.Tags,
|
|
TimeActive: t.TimeActive,
|
|
TotalSize: t.TotalSize,
|
|
Tracker: t.Tracker,
|
|
UpLimit: t.UpLimit,
|
|
Uploaded: t.Uploaded,
|
|
UploadedSession: t.UploadedSession,
|
|
Upspeed: t.Upspeed,
|
|
Source: t.Source,
|
|
}
|
|
}
|
|
|
|
func (t *Torrent) IsReady() bool {
|
|
return (t.AmountLeft <= 0 || t.Progress == 1) && t.TorrentPath != ""
|
|
}
|
|
|
|
func (t *Torrent) discordContext() string {
|
|
format := `
|
|
**Name:** %s
|
|
**Arr:** %s
|
|
**Hash:** %s
|
|
**MagnetURI:** %s
|
|
**Debrid:** %s
|
|
`
|
|
return fmt.Sprintf(format, t.Name, t.Category, t.Hash, t.MagnetUri, t.Debrid)
|
|
}
|