From 06a07547d88eda6c6911ff8604109422fcadab1a Mon Sep 17 00:00:00 2001 From: Joop Kiefte Date: Wed, 15 Dec 2021 00:03:03 +0000 Subject: Add trim functionality --- db.go | 25 +++++++++++++++++++++++++ localmessages.go | 9 +++++++++ main.go | 2 ++ message/message.go | 19 +++++++++++++++++++ 4 files changed, 55 insertions(+) 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() -- cgit v1.2.3-70-g09d2