summaryrefslogtreecommitdiff
path: root/internal/server/repository/repository.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-09-12 22:11:37 +0300
committerPaul Buetow <paul@buetow.org>2024-09-12 22:11:37 +0300
commit87c98f19b5ea8333c30a4b0ba5330b4ac338c9cc (patch)
treeca71a0429baa7c23de9e30f17b68219f03403660 /internal/server/repository/repository.go
parentd586966b0ac5d245b8198c4e9dcbb516fa8828f7 (diff)
persist and add
Diffstat (limited to 'internal/server/repository/repository.go')
-rw-r--r--internal/server/repository/repository.go44
1 files changed, 18 insertions, 26 deletions
diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go
index e8cec81..3bcec4d 100644
--- a/internal/server/repository/repository.go
+++ b/internal/server/repository/repository.go
@@ -104,7 +104,9 @@ func (r Repository) load() error {
errs = append(errs, err)
continue
}
- r.putMemoryOnly(entry)
+ r.mu.Lock()
+ r.add(entry)
+ r.mu.Unlock()
}
if len(errs) == 0 {
@@ -138,33 +140,28 @@ func (r Repository) ListBytes() ([]byte, error) {
return json.Marshal(pairs)
}
-// put writes exact the same entry to the repository. Whereas merge
-// Is a bit more refined, tries to merge the same entry wich are slightly
-// different into the same entry.
-func (r Repository) put(entry types.Entry) error {
- r.putMemoryOnly(entry)
-
- bytes, err := entry.JSONMarshal()
- if err != err {
- return err
- }
- return r.fs.WriteFile(r.entryPath(entry), bytes)
-}
-
-// putMemoryOnly is the same as put but don't write to disk.
-func (r Repository) putMemoryOnly(entry types.Entry) {
- r.mu.Lock()
- defer r.mu.Unlock()
-
+func (r Repository) add(entry types.Entry) {
r.entries[entry.ID] = entry
for _, platform := range r.conf.SocialPlatformsEnabled {
- if !entry.IsShared(platform) {
+ if entry.IsShared(platform) {
+ r.pending.delete(platform, entry.ID)
+ } else {
r.pending.add(platform, entry.ID)
}
}
}
+func (r Repository) persist(entry types.Entry) error {
+ r.add(entry)
+
+ bytes, err := entry.JSONMarshal()
+ if err != err {
+ return err
+ }
+ return r.fs.WriteFile(r.entryPath(entry), bytes)
+}
+
func (r Repository) Get(id types.EntryID) (types.Entry, error) {
if !r.getIdRe.MatchString(id) {
return types.Entry{}, fmt.Errorf("invalid id %s", id)
@@ -243,12 +240,7 @@ func (r Repository) Merge(otherEnt types.Entry) error {
return nil
}
- bytes, err := entry.JSONMarshal()
- if err != err {
- return err
- }
-
- return r.fs.WriteFile(r.entryPath(entry), bytes)
+ return r.persist(entry)
}
func (r Repository) MergeRemotely(ctx context.Context) error {