diff options
author | Joop Kiefte <ikojba@gmail.com> | 2021-12-15 00:03:03 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-15 00:03:03 +0000 |
commit | 06a07547d88eda6c6911ff8604109422fcadab1a (patch) | |
tree | 817f36f4c444afa368d132915ffbc8c2c7cc1eab | |
parent | 99ba9783f80aec04aabfe57df2c3bc8fa4754eae (diff) |
Add trim functionality
-rw-r--r-- | db.go | 25 | ||||
-rw-r--r-- | localmessages.go | 9 | ||||
-rw-r--r-- | main.go | 2 | ||||
-rw-r--r-- | message/message.go | 19 |
4 files changed, 55 insertions, 0 deletions
@@ -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) +} @@ -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() |