From f0333df1b2b6e0ef54a580668cb759a094b56010 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 13 Mar 2018 15:27:12 +0200 Subject: Add initial login view and debug panel with tview --- session.go | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 session.go (limited to 'session.go') diff --git a/session.go b/session.go new file mode 100644 index 0000000..8f0e5d8 --- /dev/null +++ b/session.go @@ -0,0 +1,102 @@ +// gomuks - A terminal Matrix client written in Go. +// Copyright (C) 2018 Tulir Asokan +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package main + +import ( + "encoding/json" + "io/ioutil" + "path/filepath" + + "github.com/matrix-org/gomatrix" +) + +type Session struct { + MXID string `json:"-"` + path string `json:"-"` + AccessToken string + NextBatch string + FilterID string + Rooms map[string]*gomatrix.Room +} + +func (config *Config) LoadSession(mxid string) { + config.Session = config.NewSession(mxid) + config.Session.Load() +} + +func (config *Config) NewSession(mxid string) *Session { + return &Session{ + MXID: mxid, + path: filepath.Join(config.dir, mxid+".session"), + Rooms: make(map[string]*gomatrix.Room), + } +} + +func (s *Session) Load() { + data, err := ioutil.ReadFile(s.path) + if err != nil { + debug.Print("Failed to read session from", s.path) + panic(err) + } + + err = json.Unmarshal(data, s) + if err != nil { + debug.Print("Failed to parse session at", s.path) + panic(err) + } +} + +func (s *Session) Save() { + data, err := json.Marshal(s) + if err != nil { + debug.Print("Failed to marshal session of", s.MXID) + panic(err) + } + + err = ioutil.WriteFile(s.path, data, 0600) + if err != nil { + debug.Print("Failed to write session to", s.path) + panic(err) + } +} + +func (s *Session) LoadFilterID(_ string) string { + return s.FilterID +} + +func (s *Session) LoadNextBatch(_ string) string { + return s.NextBatch +} + +func (s *Session) LoadRoom(mxid string) *gomatrix.Room { + return s.Rooms[mxid] +} + +func (s *Session) SaveFilterID(_, filterID string) { + s.FilterID = filterID + s.Save() +} + +func (s *Session) SaveNextBatch(_, nextBatch string) { + s.NextBatch = nextBatch + s.Save() +} + +func (s *Session) SaveRoom(room *gomatrix.Room) { + s.Rooms[room.ID] = room + s.Save() +} -- cgit v1.2.3