diff options
| author | Paul Buetow <paul@buetow.org> | 2024-09-18 01:04:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-09-18 01:04:26 +0300 |
| commit | 5263e61d5667009e7a7ac13014cec73ccbd0e20a (patch) | |
| tree | 64187b679f0b0da34840c3d77d5bde441cea3fb0 | |
| parent | 279ee9e1026f74f923766286b767d4df3901b82f (diff) | |
some stuff
| -rw-r--r-- | internal/config/server/server.go | 3 | ||||
| -rw-r--r-- | internal/server/cron/cron.go | 4 | ||||
| -rw-r--r-- | internal/server/repository/pending.go | 9 | ||||
| -rw-r--r-- | internal/server/repository/repository.go | 5 | ||||
| -rw-r--r-- | internal/server/scheduler/scheduler.go | 15 | ||||
| -rw-r--r-- | internal/types/entry.go | 10 | ||||
| -rw-r--r-- | internal/types/shared_test.go | 22 |
7 files changed, 55 insertions, 13 deletions
diff --git a/internal/config/server/server.go b/internal/config/server/server.go index 209493b..16da14c 100644 --- a/internal/config/server/server.go +++ b/internal/config/server/server.go @@ -20,6 +20,7 @@ type ServerConfig struct { MergeIntervalS int `json:"MergeInterval,omitempty"` ScheduleIntervalS int `json:"ScheduleInterval,omitempty"` SocialPlatformsEnabled []string `json:"SocialPlatformsEnabled,omitempty"` + PostsPerWeek int `json:"PostsPerWeek,omitempty"` Secrets SecretsConfig `json:"Secrets,omitempty"` } @@ -44,7 +45,7 @@ func New(configFile, secretsFile string) (ServerConfig, error) { conf.EmailFrom = config.Str("GOS_EMAIL_FROM", conf.EmailFrom) conf.SocialPlatformsEnabled = config.StrSlice("GOS_SOCIAL_PLATFORMS_ENABLED", []string{types.Mastodon, types.LinkedIn, types.Textfile}) - + conf.PostsPerWeek = config.Int("GOS_POSTS_PER_WEEK", conf.PostsPerWeek, 2) conf.SMTPServer = config.Str("GOS_SMTP_SERVER", conf.SMTPServer, func() string { hostname, err := os.Hostname() if err != nil { diff --git a/internal/server/cron/cron.go b/internal/server/cron/cron.go index 3de44b8..3d6b9cf 100644 --- a/internal/server/cron/cron.go +++ b/internal/server/cron/cron.go @@ -28,7 +28,9 @@ func Run(ctx context.Context, conf config.ServerConfig, status health.Status) { case <-mergeTicker.C: run(ctx, "cron->repository.Merge", status, repository.Instance(conf).MergeRemotely) case <-scheduleTicker.C: - run(ctx, "cron->scheduler.Run", status, scheduler.Run) + run(ctx, "cron->scheduler.Run", status, func(ctx context.Context) error { + return scheduler.Run(ctx, conf) + }) } } } diff --git a/internal/server/repository/pending.go b/internal/server/repository/pending.go index 2245f30..a1fd7a7 100644 --- a/internal/server/repository/pending.go +++ b/internal/server/repository/pending.go @@ -13,6 +13,15 @@ func newPending() pending { return pending{make(map[types.PlatformName]pendingEntries)} } +// Returns number of pending entries for the platform +// func (p pending) num(platform types.PlatformName) int { +// pe, ok := p.platforms[platform] +// if !ok { +// return 0 +// } +// return len(pe) +// } + func (p pending) add(platform types.PlatformName, id types.EntryID) { pe, ok := p.platforms[platform] if !ok { diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go index 77f23ec..d277884 100644 --- a/internal/server/repository/repository.go +++ b/internal/server/repository/repository.go @@ -33,8 +33,10 @@ type entryPair struct { } // Holds all entries in the database / stores them to the disks.. +// TODO: Keep track of how many posts were made this week already. type Repository struct { - pending + pending pending + stats stats conf server.ServerConfig entries map[types.EntryID]types.Entry mu *sync.Mutex @@ -55,6 +57,7 @@ func newRepository(conf server.ServerConfig, fs fs) Repository { var loaded bool return Repository{ pending: newPending(), // TODO: Make use of the pending for the selection algoritmh for the next post + stats: newStats(), // TODO: Make use of this. conf: conf, entries: make(map[types.EntryID]types.Entry), mu: &sync.Mutex{}, diff --git a/internal/server/scheduler/scheduler.go b/internal/server/scheduler/scheduler.go index da66519..bbcb59a 100644 --- a/internal/server/scheduler/scheduler.go +++ b/internal/server/scheduler/scheduler.go @@ -1,9 +1,16 @@ package scheduler -import "context" +import ( + "context" + "log" -// TODO: Implement this -func Run(ctx context.Context) error { - // Need to figure out which posts to post where. + "codeberg.org/snonux/gos/internal/config/server" +) + +// TODO: Finish implementing this +func Run(ctx context.Context, config server.ServerConfig) error { + for _, platform := range config.SocialPlatformsEnabled { + log.Println("TODO: implement ... posting a post now or what on", platform) + } return nil } diff --git a/internal/types/entry.go b/internal/types/entry.go index 6e06aec..bac8fd1 100644 --- a/internal/types/entry.go +++ b/internal/types/entry.go @@ -8,7 +8,6 @@ import ( "os" "sort" "strings" - "time" ) type EntryID = string @@ -68,10 +67,12 @@ func NewEntryFromTextFile(filePath string) (Entry, error) { } func (e *Entry) initialize() { + e.checksumDirty = true + if e.Shared == nil { e.Shared = make(map[PlatformName]Shared) + return } - e.checksumDirty = true } func (e Entry) Equals(other Entry) bool { @@ -96,10 +97,7 @@ func (e Entry) IsShared(platform PlatformName) bool { } func (e Entry) SetShared(platform PlatformName) Entry { - e.Shared[platform] = Shared{ - Is: true, - Timestamp: time.Now().Format("20060102150405"), - } + e.Shared[platform] = newShared(true) return e } diff --git a/internal/types/shared_test.go b/internal/types/shared_test.go new file mode 100644 index 0000000..e8dd78a --- /dev/null +++ b/internal/types/shared_test.go @@ -0,0 +1,22 @@ +package types + +import ( + "testing" + "time" +) + +func TestShared(t *testing.T) { + t.Parallel() + + before := time.Now().Unix() + shared := newShared(false) + + if before > shared.Timestamp { + t.Errorf("expected %d to be after or equal %d", shared.Timestamp, before) + } + + after := time.Now().Unix() + if after < shared.Timestamp { + t.Errorf("expected %d to be before or equal %d", shared.Timestamp, before) + } +} |
