code refactoring
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
import { atom, selector } from 'recoil'
|
import { atom, selector } from 'recoil'
|
||||||
import { RPCResult } from '../types'
|
|
||||||
import { activeDownloadsState } from './downloads'
|
import { activeDownloadsState } from './downloads'
|
||||||
|
|
||||||
export const loadingAtom = atom({
|
export const loadingAtom = atom({
|
||||||
@@ -7,11 +6,6 @@ export const loadingAtom = atom({
|
|||||||
default: true
|
default: true
|
||||||
})
|
})
|
||||||
|
|
||||||
export const optimisticDownloadsState = atom<RPCResult[]>({
|
|
||||||
key: 'optimisticDownloadsState',
|
|
||||||
default: []
|
|
||||||
})
|
|
||||||
|
|
||||||
export const totalDownloadSpeedState = selector<number>({
|
export const totalDownloadSpeedState = selector<number>({
|
||||||
key: 'totalDownloadSpeedState',
|
key: 'totalDownloadSpeedState',
|
||||||
get: ({ get }) => get(activeDownloadsState)
|
get: ({ get }) => get(activeDownloadsState)
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ type LoginRequest struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Login(w http.ResponseWriter, r *http.Request) {
|
func Login(w http.ResponseWriter, r *http.Request) {
|
||||||
req := new(LoginRequest)
|
var req LoginRequest
|
||||||
err := json.NewDecoder(r.Body).Decode(req)
|
|
||||||
if err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package internal
|
|||||||
import (
|
import (
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -35,33 +34,6 @@ func (m *MemoryDB) Set(process *Process) string {
|
|||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update a process info/metadata, given the process id
|
|
||||||
//
|
|
||||||
// Deprecated: will be removed anytime soon.
|
|
||||||
func (m *MemoryDB) UpdateInfo(id string, info DownloadInfo) error {
|
|
||||||
entry, ok := m.table.Load(id)
|
|
||||||
if ok {
|
|
||||||
entry.(*Process).Info = info
|
|
||||||
m.table.Store(id, entry)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return fmt.Errorf("can't update row with id %s", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update a process progress data, given the process id
|
|
||||||
// Used for updating completition percentage or ETA.
|
|
||||||
//
|
|
||||||
// Deprecated: will be removed anytime soon.
|
|
||||||
func (m *MemoryDB) UpdateProgress(id string, progress DownloadProgress) error {
|
|
||||||
entry, ok := m.table.Load(id)
|
|
||||||
if ok {
|
|
||||||
entry.(*Process).Progress = progress
|
|
||||||
m.table.Store(id, entry)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return fmt.Errorf("can't update row with id %s", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removes a process progress, given the process id
|
// Removes a process progress, given the process id
|
||||||
func (m *MemoryDB) Delete(id string) {
|
func (m *MemoryDB) Delete(id string) {
|
||||||
m.table.Delete(id)
|
m.table.Delete(id)
|
||||||
@@ -92,7 +64,7 @@ func (m *MemoryDB) All() *[]ProcessResponse {
|
|||||||
return &running
|
return &running
|
||||||
}
|
}
|
||||||
|
|
||||||
// WIP: Persist the database in a single file named "session.dat"
|
// Persist the database in a single file named "session.dat"
|
||||||
func (m *MemoryDB) Persist() error {
|
func (m *MemoryDB) Persist() error {
|
||||||
running := m.All()
|
running := m.All()
|
||||||
|
|
||||||
@@ -115,17 +87,16 @@ func (m *MemoryDB) Persist() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WIP: Restore a persisted state
|
// Restore a persisted state
|
||||||
func (m *MemoryDB) Restore(logger *slog.Logger) {
|
func (m *MemoryDB) Restore(logger *slog.Logger) {
|
||||||
fd, err := os.Open("session.dat")
|
fd, err := os.Open("session.dat")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
session := Session{}
|
var session Session
|
||||||
|
|
||||||
err = gob.NewDecoder(fd).Decode(&session)
|
if err := gob.NewDecoder(fd).Decode(&session); err != nil {
|
||||||
if err != nil {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,17 +29,15 @@ func PlaylistDetect(req DownloadRequest, mq *MessageQueue, db *MemoryDB, logger
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
m := metadata{}
|
var m metadata
|
||||||
|
|
||||||
err = cmd.Start()
|
if err := cmd.Start(); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Info("decoding metadata", slog.String("url", req.URL))
|
logger.Info("decoding metadata", slog.String("url", req.URL))
|
||||||
|
|
||||||
err = json.NewDecoder(stdout).Decode(&m)
|
if err := json.NewDecoder(stdout).Decode(&m); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
logsChan = make(chan rxgo.Item, 100)
|
logsChan = make(chan rxgo.Item, 100)
|
||||||
logsObservable = rxgo.
|
logsObservable = rxgo.
|
||||||
FromChannel(logsChan, rxgo.WithBackPressureStrategy(rxgo.Drop)).
|
FromEventSource(logsChan, rxgo.WithBackPressureStrategy(rxgo.Drop)).
|
||||||
BufferWithTime(rxgo.WithDuration(time.Millisecond * 500))
|
BufferWithTime(rxgo.WithDuration(time.Millisecond * 500))
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -20,9 +20,7 @@ func NewObservableLogger() *ObservableLogger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (o *ObservableLogger) Write(p []byte) (n int, err error) {
|
func (o *ObservableLogger) Write(p []byte) (n int, err error) {
|
||||||
go func() {
|
|
||||||
logsChan <- rxgo.Of(string(p))
|
logsChan <- rxgo.Of(string(p))
|
||||||
}()
|
|
||||||
|
|
||||||
n = len(p)
|
n = len(p)
|
||||||
err = nil
|
err = nil
|
||||||
|
|||||||
@@ -11,20 +11,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func validateToken(tokenValue string) error {
|
func validateToken(tokenValue string) error {
|
||||||
if tokenValue == "" {
|
token, err := jwt.Parse(tokenValue, func(t *jwt.Token) (interface{}, error) {
|
||||||
return errors.New("invalid token")
|
|
||||||
}
|
|
||||||
|
|
||||||
token, _ := jwt.Parse(tokenValue, func(t *jwt.Token) (interface{}, error) {
|
|
||||||
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
|
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||||
return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
|
return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
|
||||||
}
|
}
|
||||||
return []byte(os.Getenv("JWT_SECRET")), nil
|
return []byte(os.Getenv("JWT_SECRET")), nil
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
|
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
|
||||||
expiresAt, err := time.Parse(time.RFC3339, claims["expiresAt"].(string))
|
expiresAt, err := time.Parse(time.RFC3339, claims["expiresAt"].(string))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user