Share single torrent client across all services, eliminate triple qBittorrent login on startup
This commit is contained in:
@@ -82,12 +82,12 @@ type riverSetup struct {
|
|||||||
cacheRefreshWorker *indexer.CacheRefreshWorker
|
cacheRefreshWorker *indexer.CacheRefreshWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupRiver(ctx context.Context, cfg config.Config, db *database.DB) *riverSetup {
|
func setupRiver(ctx context.Context, cfg config.Config, db *database.DB, torrentClient torrent.TorrentClient) *riverSetup {
|
||||||
cacheWorker := &indexer.CacheRefreshWorker{}
|
cacheWorker := &indexer.CacheRefreshWorker{}
|
||||||
pollWorker := &workers.PollDownloadWorker{
|
pollWorker := &workers.PollDownloadWorker{
|
||||||
Downloads: database.NewDownloadRepository(db.Pool),
|
Downloads: database.NewDownloadRepository(db.Pool),
|
||||||
DownloadFiles: database.NewDownloadFileRepository(db.Pool),
|
DownloadFiles: database.NewDownloadFileRepository(db.Pool),
|
||||||
TorrentClient: torrent.MustNewTorrentClient(cfg),
|
TorrentClient: torrentClient,
|
||||||
}
|
}
|
||||||
|
|
||||||
riverWorkers := river.NewWorkers()
|
riverWorkers := river.NewWorkers()
|
||||||
@@ -155,9 +155,15 @@ func serveGrpc(config config.Config) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
db := setupDatabase(ctx, config)
|
db := setupDatabase(ctx, config)
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
rs := setupRiver(ctx, config, db)
|
|
||||||
|
|
||||||
musiscAgregatorSeerver, err := internal.NewMusicAgregatorServer(config, rs.client, db)
|
torrentClient, err := torrent.NewTorrentClient(config)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("failed to create torrent client")
|
||||||
|
}
|
||||||
|
|
||||||
|
rs := setupRiver(ctx, config, db, torrentClient)
|
||||||
|
|
||||||
|
musiscAgregatorSeerver, err := internal.NewMusicAgregatorServer(config, rs.client, torrentClient, db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("failed to create MusicAgregatorServer")
|
log.Fatal().Err(err).Msg("failed to create MusicAgregatorServer")
|
||||||
}
|
}
|
||||||
@@ -165,10 +171,7 @@ func serveGrpc(config config.Config) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("failed to create IndexerServer")
|
log.Fatal().Err(err).Msg("failed to create IndexerServer")
|
||||||
}
|
}
|
||||||
torrentServer, err := torrent.NewTorrentServer(config)
|
torrentServer := torrent.NewTorrentServer(torrentClient)
|
||||||
if err != nil {
|
|
||||||
log.Fatal().Err(err).Msg("failed to create TorrentServer")
|
|
||||||
}
|
|
||||||
metadataServer, err := metadata.NewMetadataServer(config)
|
metadataServer, err := metadata.NewMetadataServer(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Err(err).Msg("failed to create MetadataServer")
|
log.Fatal().Err(err).Msg("failed to create MetadataServer")
|
||||||
|
|||||||
+3
-2
@@ -11,6 +11,7 @@ import (
|
|||||||
pb "homelab.lan/music-agregator/gen/music_agregator/v1"
|
pb "homelab.lan/music-agregator/gen/music_agregator/v1"
|
||||||
"homelab.lan/music-agregator/internal/config"
|
"homelab.lan/music-agregator/internal/config"
|
||||||
"homelab.lan/music-agregator/internal/database"
|
"homelab.lan/music-agregator/internal/database"
|
||||||
|
"homelab.lan/music-agregator/internal/torrent"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MusicAgregatorServer struct {
|
type MusicAgregatorServer struct {
|
||||||
@@ -18,8 +19,8 @@ type MusicAgregatorServer struct {
|
|||||||
pb.UnimplementedMusicAgregatorServiceServer
|
pb.UnimplementedMusicAgregatorServiceServer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMusicAgregatorServer(cfg config.Config, riverClient *river.Client[pgx.Tx], db *database.DB) (*MusicAgregatorServer, error) {
|
func NewMusicAgregatorServer(cfg config.Config, riverClient *river.Client[pgx.Tx], torrentClient torrent.TorrentClient, db *database.DB) (*MusicAgregatorServer, error) {
|
||||||
service, err := NewMusicAgregatorService(cfg, riverClient, db)
|
service, err := NewMusicAgregatorService(cfg, riverClient, torrentClient, db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("failed to create MusicAgregatorService")
|
log.Err(err).Msg("failed to create MusicAgregatorService")
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
+1
-7
@@ -44,7 +44,7 @@ type MusicAgregatorService struct {
|
|||||||
downloadFiles *database.DownloadFileRepository
|
downloadFiles *database.DownloadFileRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMusicAgregatorService(cfg config.Config, riverClient *river.Client[pgx.Tx], db *database.DB) (*MusicAgregatorService, error) {
|
func NewMusicAgregatorService(cfg config.Config, riverClient *river.Client[pgx.Tx], torrentClient torrent.TorrentClient, db *database.DB) (*MusicAgregatorService, error) {
|
||||||
idx, err := indexer.NewIndexerService(cfg, riverClient, nil)
|
idx, err := indexer.NewIndexerService(cfg, riverClient, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("failed to create IndexerService")
|
log.Err(err).Msg("failed to create IndexerService")
|
||||||
@@ -63,12 +63,6 @@ func NewMusicAgregatorService(cfg config.Config, riverClient *river.Client[pgx.T
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
torrentClient, err := torrent.NewTorrentClient(cfg)
|
|
||||||
if err != nil {
|
|
||||||
log.Err(err).Msg("failed to create torrent client")
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &MusicAgregatorService{
|
return &MusicAgregatorService{
|
||||||
config: cfg,
|
config: cfg,
|
||||||
metadata: metadata.NewMetadataService(metadataClient, db),
|
metadata: metadata.NewMetadataService(metadataClient, db),
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
||||||
pb "homelab.lan/music-agregator/gen/music_agregator/torrent/v1"
|
pb "homelab.lan/music-agregator/gen/music_agregator/torrent/v1"
|
||||||
"homelab.lan/music-agregator/internal/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type TorrentServer struct {
|
type TorrentServer struct {
|
||||||
@@ -15,14 +14,8 @@ type TorrentServer struct {
|
|||||||
pb.UnimplementedTorrentServiceServer
|
pb.UnimplementedTorrentServiceServer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTorrentServer(cfg config.Config) (*TorrentServer, error) {
|
func NewTorrentServer(client TorrentClient) *TorrentServer {
|
||||||
service, err := NewTorrentService(cfg)
|
return &TorrentServer{service: NewTorrentService(client)}
|
||||||
if err != nil {
|
|
||||||
log.Err(err).Msg("failed to initialize TorrentService")
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &TorrentServer{service: service}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *TorrentServer) List(ctx context.Context, req *pb.ListRequest) (*pb.ListResponse, error) {
|
func (server *TorrentServer) List(ctx context.Context, req *pb.ListRequest) (*pb.ListResponse, error) {
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
pb "homelab.lan/music-agregator/gen/music_agregator/torrent/v1"
|
pb "homelab.lan/music-agregator/gen/music_agregator/torrent/v1"
|
||||||
"homelab.lan/music-agregator/internal/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type TorrentService struct {
|
type TorrentService struct {
|
||||||
@@ -19,27 +18,10 @@ type TorrentService struct {
|
|||||||
token string
|
token string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTorrentService(cfg config.Config) (*TorrentService, error) {
|
func NewTorrentService(client TorrentClient) *TorrentService {
|
||||||
var client TorrentClient
|
|
||||||
|
|
||||||
switch cfg.Torrent.ClientType {
|
|
||||||
case config.TorrentClientQbittorrent:
|
|
||||||
client = NewQbittorrentClient(cfg.Torrent.Url)
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("unknown torrent client type: %s", cfg.Torrent.ClientType)
|
|
||||||
}
|
|
||||||
|
|
||||||
token, err := client.Login(cfg.Torrent.Username, cfg.Torrent.Password)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("torrent client login failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info().Str("client", string(cfg.Torrent.ClientType)).Msg("torrent client connected")
|
|
||||||
|
|
||||||
return &TorrentService{
|
return &TorrentService{
|
||||||
client: client,
|
client: client,
|
||||||
token: token,
|
}
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (service *TorrentService) List(req *pb.ListRequest) (*pb.ListResponse, error) {
|
func (service *TorrentService) List(req *pb.ListRequest) (*pb.ListResponse, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user