aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoop Kiefte <ikojba@gmail.com>2021-12-15 00:03:03 +0000
committerGitHub <noreply@github.com>2021-12-15 00:03:03 +0000
commit06a07547d88eda6c6911ff8604109422fcadab1a (patch)
tree817f36f4c444afa368d132915ffbc8c2c7cc1eab
parent99ba9783f80aec04aabfe57df2c3bc8fa4754eae (diff)
Add trim functionality
-rw-r--r--db.go25
-rw-r--r--localmessages.go9
-rw-r--r--main.go2
-rw-r--r--message/message.go19
4 files changed, 55 insertions, 0 deletions
diff --git a/db.go b/db.go
index e2d8bd1..a0def98 100644
--- a/db.go
+++ b/db.go
@@ -166,3 +166,28 @@ func SetDatabase() {
// If not, create them
InitDatabase(DB)
}
+
+func TrimDatabase() {
+ // Ask how many messages to keep
+ fmt.Println("How many messages to keep?")
+ var num int
+ fmt.Scan(&num)
+ // Get the database
+ db := GetDatabase()
+ // Get the list of messages
+ msgs := GetMessagesFromDatabase(db)
+ // Trim the list of messages
+ msgs.Trim(num)
+ // Delete all messages from the database
+ _, err := db.Exec("DELETE FROM messages")
+ if err != nil {
+ fmt.Println(err)
+ }
+ // Add the trimmed list of messages to the database
+ msgs.Each(func(m *message.Message) {
+ _, err := db.Exec("INSERT INTO messages(hash, message, nonce, timestamp) VALUES(?, ?, ?, ?)", m.Stamp(), m.Message, m.Nonce, m.Timestamp)
+ if err != nil {
+ fmt.Println(err)
+ }
+ })
+}
diff --git a/localmessages.go b/localmessages.go
index 4b18b24..c539ea6 100644
--- a/localmessages.go
+++ b/localmessages.go
@@ -89,3 +89,12 @@ func WriteMessage() {
}
}
}
+
+func TrimMessages() {
+ // Get the number of messages to keep from the user
+ fmt.Println("How many messages do you want to keep?")
+ var keep int
+ fmt.Scanln(&keep)
+ // Trim the messages
+ LocalMessages.Trim(keep)
+}
diff --git a/main.go b/main.go
index f09b431..d14b125 100644
--- a/main.go
+++ b/main.go
@@ -83,6 +83,8 @@ func main() {
{"Read Messages", ReadMessages},
{"Write Message", WriteMessage},
{"Sync Messages", SyncMenu},
+ {"Trim Messages", TrimMessages},
+ {"Trim Database", TrimDatabase},
{"Settings", SettingsMenu},
{"Quit", func() { os.Exit(0) }},
})
diff --git a/message/message.go b/message/message.go
index 7a1699d..4c0fc71 100644
--- a/message/message.go
+++ b/message/message.go
@@ -158,6 +158,25 @@ func MessagesFromIPFS(cid string) (*Messages, error) {
return &messages, nil
}
+// Trim the Messages map to the given number of messages based on the importance of the messages
+func (m *Messages) Trim(n int) {
+ // Create a slice of Messages sorted by importance
+ // Cannot lock the Messages map yet, Messages.MessageList() will lock it
+ msgs := m.MessageList()
+ // Now lock the Messages map and trim the map to the given number of messages
+ m.lock.Lock()
+ defer m.lock.Unlock()
+ // If the number of messages is less than or equal to the number of messages to keep, do nothing
+ if len(msgs) <= n {
+ return
+ }
+ fmt.Println("Trimming messages")
+ // Otherwise, remove the messages after the nth message from the map
+ for i := n; i < len(msgs); i++ {
+ delete(m.msgs, msgs[i].Stamp())
+ }
+}
+
// Add a message to the Messages map
func (m *Messages) Add(msg *Message) {
m.lock.Lock()