wip: add basic linkding connection

This commit is contained in:
Alexander Navarro 2024-12-18 16:54:33 -03:00
parent 43cd24e4d0
commit 5f5d6bb2e2
7 changed files with 66 additions and 23 deletions

View file

@ -8,11 +8,12 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
"git.alecodes.page/alecodes/miniflux-archiver/internal/app" "git.alecodes.page/alecodes/miniflux-archiver/internal/app"
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux" "git.alecodes.page/alecodes/miniflux-archiver/internal/config"
"git.alecodes.page/alecodes/miniflux-archiver/internal/service"
) )
var Services = []string{ var Services = []string{
"linkding", string(service.ServiceLinkding),
} }
var ( var (
@ -29,16 +30,16 @@ var archiveCmd = &cobra.Command{
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs), Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
ValidArgs: Services, ValidArgs: Services,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
service := args[0] service := service.ServiceOption(args[0])
serviceConfig := app.ServiceConfig{ serviceConfig := config.ServiceConfig{
Service: service, Service: service,
Host: service_host, Host: service_host,
User: service_user, User: service_user,
Token: service_token, Token: service_token,
} }
minifluxConfig := miniflux.MinifluxConfig{ minifluxConfig := config.MinifluxConfig{
Host: viper.GetString("miniflux_host"), Host: viper.GetString("miniflux_host"),
Token: viper.GetString("miniflux_token"), Token: viper.GetString("miniflux_token"),
FeedId: viper.GetInt64("miniflux_feed_id"), FeedId: viper.GetInt64("miniflux_feed_id"),

View file

@ -3,16 +3,23 @@ package app
import ( import (
"fmt" "fmt"
"git.alecodes.page/alecodes/miniflux-archiver/internal/config"
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger" "git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux" "git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
"git.alecodes.page/alecodes/miniflux-archiver/internal/service"
) )
func Archive(minifluxConfig miniflux.MinifluxConfig, serviceConfig ServiceConfig) { func Archive(minifluxConfig config.MinifluxConfig, serviceConfig config.ServiceConfig) {
mf, err := miniflux.NewMiniflux(minifluxConfig) mf, err := miniflux.NewMiniflux(minifluxConfig)
if err != nil { if err != nil {
logger.Fatal("Could not connect to the miniflux server: %v", err) logger.Fatal("Could not connect to the miniflux server: %v", err)
} }
servi, err := service.ResolveService(serviceConfig)
if err != nil {
logger.Fatal("Could not connect to the miniflux server: %v", err)
}
result, err := mf.GetEntries() result, err := mf.GetEntries()
if err != nil { if err != nil {
logger.Fatal("Could not retrieve entries from the miniflux feed: %v", err) logger.Fatal("Could not retrieve entries from the miniflux feed: %v", err)

View file

@ -1,8 +0,0 @@
package app
type ServiceConfig struct {
Service string
Host string
User string
Token string
}

17
internal/config/config.go Normal file
View file

@ -0,0 +1,17 @@
package config
import "git.alecodes.page/alecodes/miniflux-archiver/internal/service"
type MinifluxConfig struct {
Host string
User string
Token string
FeedId int64
}
type ServiceConfig struct {
Service service.ServiceOption
Host string
User string
Token string
}

View file

@ -1,19 +1,13 @@
package miniflux package miniflux
import ( import (
"git.alecodes.page/alecodes/miniflux-archiver/internal/config"
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger" "git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
mfApi "miniflux.app/v2/client" mfApi "miniflux.app/v2/client"
) )
type MinifluxConfig struct {
Host string
User string
Token string
FeedId int64
}
type Miniflux struct { type Miniflux struct {
MinifluxConfig config.MinifluxConfig
client *mfApi.Client client *mfApi.Client
} }
@ -25,7 +19,7 @@ func (mf *Miniflux) GetEntries() (*mfApi.EntryResultSet, error) {
return mf.client.FeedEntries(mf.FeedId, filter) return mf.client.FeedEntries(mf.FeedId, filter)
} }
func NewMiniflux(config MinifluxConfig) (*Miniflux, error) { func NewMiniflux(config config.MinifluxConfig) (*Miniflux, error) {
mf := &Miniflux{ mf := &Miniflux{
MinifluxConfig: config, MinifluxConfig: config,
client: mfApi.NewClient(config.Host, config.Token), client: mfApi.NewClient(config.Host, config.Token),

View file

@ -0,0 +1,7 @@
package linkding
import "git.alecodes.page/alecodes/miniflux-archiver/internal/config"
type Linkding struct {
config.ServiceConfig
}

View file

@ -0,0 +1,25 @@
package service
import (
"git.alecodes.page/alecodes/miniflux-archiver/internal/config"
"git.alecodes.page/alecodes/miniflux-archiver/internal/service/linkding"
)
type ServiceOption string
const (
ServiceLinkding ServiceOption = "linkding"
)
type Service interface{}
func ResolveService(serviceConfig config.ServiceConfig) Service {
switch serviceConfig.Service {
case ServiceLinkding:
return &linkding.Linkding{
ServiceConfig: serviceConfig,
}
}
return nil
}