diff --git a/.justfile b/.justfile index 56b070a..c8ecec6 100644 --- a/.justfile +++ b/.justfile @@ -1,2 +1,2 @@ run: - go run main.go run linkding --archive-starred + go run main.go run linkding diff --git a/cmd/archive.go b/cmd/archive.go index 43cc75b..c01aa51 100644 --- a/cmd/archive.go +++ b/cmd/archive.go @@ -8,7 +8,6 @@ import ( "github.com/spf13/viper" "git.alecodes.page/alecodes/miniflux-archiver/internal/app" - "git.alecodes.page/alecodes/miniflux-archiver/internal/logger" "git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux" "git.alecodes.page/alecodes/miniflux-archiver/internal/service" ) @@ -18,14 +17,9 @@ var Services = []string{ } var ( - service_host string - service_user string - service_token string - service_max_requests uint8 - - archive_seen bool - archive_starred bool - archive_method string + service_host string + service_user string + service_token string ) // archiveCmd represents the archive command @@ -39,53 +33,30 @@ var archiveCmd = &cobra.Command{ serviceOption := service.ServiceOption(args[0]) serviceConfig := service.ServiceConfig{ - Service: serviceOption, - Host: viper.GetString("service_host"), - User: viper.GetString("service_user"), - Token: viper.GetString("service_token"), - Method: service.ServiceArchiveMethod(archive_method), - MaxRequests: service_max_requests, + Service: serviceOption, + Host: viper.GetString("service_host"), + User: viper.GetString("service_user"), + Token: viper.GetString("service_token"), } minifluxConfig := miniflux.MinifluxConfig{ - Host: viper.GetString("miniflux_host"), - Token: viper.GetString("miniflux_token"), - FeedId: viper.GetInt64("miniflux_feed_id"), - FeedFilter: &miniflux.Filter{}, + Host: viper.GetString("miniflux_host"), + Token: viper.GetString("miniflux_token"), + FeedId: viper.GetInt64("miniflux_feed_id"), } - if archive_seen { - logger.Info("Archiving Feed %v entries", minifluxConfig.FeedId) - app.Archive(minifluxConfig, serviceConfig) - } - - if archive_starred { - logger.Info("Archiving All starred entries") - minifluxConfig.FeedFilter.Starred = "true" - minifluxConfig.FeedId = -1 - app.Archive(minifluxConfig, serviceConfig) - } + app.Archive(minifluxConfig, serviceConfig) }, } func init() { rootCmd.AddCommand(archiveCmd) - archiveCmd.Flags(). - BoolVarP(&archive_seen, "archive-seen", "s", true, "If the seen entries should be archived") - archiveCmd.Flags(). - BoolVarP(&archive_starred, "archive-starred", "S", false, "If the starred entries should be archived") - archiveCmd.Flags(). - StringVarP(&archive_method, "archive-method", "m", "seen", "What action to apply to the entries, possible values are: seen, archive, both") - archiveCmd.Flags().StringVar(&service_host, "service-host", "", "127.0.0.1") archiveCmd.Flags().StringVar(&service_user, "service-user", "", "john.doe@mail.cl") archiveCmd.Flags().StringVar(&service_token, "service-token", "", "XXX-XXX-XXX") - archiveCmd.Flags(). - Uint8Var(&service_max_requests, "service_max_requests", 5, "Maximum alowed of concurrent requests") viper.BindPFlag("service_host", archiveCmd.Flags().Lookup("service-host")) viper.BindPFlag("service_host", archiveCmd.Flags().Lookup("service-host")) viper.BindPFlag("service_token", archiveCmd.Flags().Lookup("service-token")) - viper.BindPFlag("service_max_requests", archiveCmd.Flags().Lookup("service-max-requests")) } diff --git a/go.mod b/go.mod index d9dcd11..fdaf619 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,8 @@ go 1.23.3 require ( github.com/joho/godotenv v1.5.1 - github.com/piero-vic/go-linkding v0.2.0 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 - golang.org/x/sync v0.9.0 miniflux.app/v2 v2.2.3 ) @@ -18,6 +16,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/piero-vic/go-linkding v0.2.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect diff --git a/go.sum b/go.sum index b901c3f..ba43ab9 100644 --- a/go.sum +++ b/go.sum @@ -67,8 +67,6 @@ go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/internal/app/archive.go b/internal/app/archive.go index 857db3e..9e7b97a 100644 --- a/internal/app/archive.go +++ b/internal/app/archive.go @@ -1,17 +1,14 @@ package app import ( - "context" + "fmt" "git.alecodes.page/alecodes/miniflux-archiver/internal/logger" "git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux" "git.alecodes.page/alecodes/miniflux-archiver/internal/service" - "golang.org/x/sync/semaphore" ) func Archive(minifluxConfig miniflux.MinifluxConfig, serviceConfig service.ServiceConfig) { - ctx := context.Background() - mf, err := miniflux.NewMiniflux(minifluxConfig) if err != nil { logger.Fatal("Could not connect to the miniflux server: %v", err) @@ -27,26 +24,11 @@ func Archive(minifluxConfig miniflux.MinifluxConfig, serviceConfig service.Servi logger.Fatal("Could not retrieve entries from the miniflux feed: %v", err) } - sem := semaphore.NewWeighted(int64(serviceConfig.MaxRequests)) + entry := result.Entries[0] + fmt.Println(entry.Title, entry.Status, entry.Tags) - for _, entry := range result.Entries { - if err := sem.Acquire(ctx, 1); err != nil { - logger.Fatal("Failed to acquire semaphore: %v", err) - } - - go func() { - defer sem.Release(1) - - err := externalService.Archive(entry.URL) - if err != nil { - logger.Fatal("Could not archive url \"%v\" from the service: %v", entry.URL, err) - } - - logger.Info("Url \"%v\" has been marked as read", entry.URL) - }() - } - - if err := sem.Acquire(ctx, int64(serviceConfig.MaxRequests)); err != nil { - logger.Fatal("Failed to acquire semaphore: %v", err) + err = externalService.Archive(entry.URL) + if err != nil { + logger.Fatal("Could not archive entry from the service: %v", err) } } diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..6b2d59d --- /dev/null +++ b/internal/config/config.go @@ -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 +} diff --git a/internal/miniflux/miniflux.go b/internal/miniflux/miniflux.go index 8ad9e46..66a4842 100644 --- a/internal/miniflux/miniflux.go +++ b/internal/miniflux/miniflux.go @@ -5,14 +5,11 @@ import ( mfApi "miniflux.app/v2/client" ) -type Filter = mfApi.Filter - type MinifluxConfig struct { - Host string - User string - Token string - FeedId int64 - FeedFilter *Filter + Host string + User string + Token string + FeedId int64 } type Miniflux struct { @@ -21,13 +18,11 @@ type Miniflux struct { } func (mf *Miniflux) GetEntries() (*mfApi.EntryResultSet, error) { - mf.FeedFilter.Statuses = []string{mfApi.EntryStatusRead, mfApi.EntryStatusRemoved} - - if mf.FeedId == -1 { - return mf.client.Entries(mf.FeedFilter) - } else { - return mf.client.FeedEntries(mf.FeedId, mf.FeedFilter) + filter := &mfApi.Filter{ + Statuses: []string{mfApi.EntryStatusRead, mfApi.EntryStatusRemoved}, } + + return mf.client.FeedEntries(mf.FeedId, filter) } func NewMiniflux(config MinifluxConfig) (*Miniflux, error) { diff --git a/internal/service/linkding.go b/internal/service/linkding.go index 53f23b9..ea14253 100644 --- a/internal/service/linkding.go +++ b/internal/service/linkding.go @@ -52,18 +52,6 @@ func (ld *Linkding) Archive(url string) error { TagNames: bookmark.TagNames, } - switch ld.ServiceConfig.Method { - case ServiceArchiveMethodArchive: - payload.IsArchived = true - case ServiceArchiveMethodSeen: - payload.Unread = false - case ServiceArchiveMethodBoth: - payload.Unread = false - payload.IsArchived = true - default: - return fmt.Errorf("Archive method is invalid") - } - if payload.TagNames == nil { payload.TagNames = []string{} } diff --git a/internal/service/service.go b/internal/service/service.go index f38eec6..25f8757 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -1,8 +1,6 @@ package service -import ( - "fmt" -) +import "fmt" type ServiceOption string @@ -10,21 +8,11 @@ const ( ServiceLinkding ServiceOption = "linkding" ) -type ServiceArchiveMethod string - -const ( - ServiceArchiveMethodSeen = "seen" - ServiceArchiveMethodArchive = "archive" - ServiceArchiveMethodBoth = "both" -) - type ServiceConfig struct { - Service ServiceOption - Host string - User string - Token string - Method ServiceArchiveMethod - MaxRequests uint8 + Service ServiceOption + Host string + User string + Token string } type Service interface {