Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 10b23d3fcd1ca8ab57878d26287d153b754c44bf Author: Wim <wim@42.be> Date: Sun Apr 09 23:15:11 2017 +0000 Add 3.8.0 support (mattermost) diff --git a/matterclient/matterclient.go b/matterclient/matterclient.go index bdd8cbc..a066d65 100644 --- a/matterclient/matterclient.go +++ b/matterclient/matterclient.go @@ -49 +411 @@ import (   "crypto/tls"   "encoding/json"   "errors" + "fmt"   "net/http"   "net/http/cookiejar"   "net/url" + "strconv"   "strings"   "sync"   "time" @@ -4819 +5020 @@ type Team struct {  type MMClient struct {   sync.RWMutex   *Credentials - Team *Team - OtherTeams []*Team - Client *model.Client - User *model.User - Users map[string]*model.User - MessageChan chan *Message - log *log.Entry - WsClient *websocket.Conn - WsQuit bool - WsAway bool - WsConnected bool - WsSequence int64 - WsPingChan chan *model.WebSocketResponse + Team *Team + OtherTeams []*Team + Client *model.Client + User *model.User + Users map[string]*model.User + MessageChan chan *Message + log *log.Entry + WsClient *websocket.Conn + WsQuit bool + WsAway bool + WsConnected bool + WsSequence int64 + WsPingChan chan *model.WebSocketResponse + ServerVersion string  }    func New(login, pass, team, server string) *MMClient { @@ -1056 +10814 @@ func (m *MMClient) Login() error {   m.Client = model.NewClient(uriScheme + m.Credentials.Server)   m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}}   m.Client.HttpClient.Timeout = time.Second * 10 + // bogus call to get the serverversion + m.Client.GetClientProperties() + if firstConnection && !supportedVersion(m.Client.ServerVersion) { + return fmt.Errorf("unsupported mattermost version: %s", m.Client.ServerVersion) + } + m.ServerVersion = m.Client.ServerVersion + m.log.Infof("Found version %s", m.ServerVersion) +   var myinfo *model.Result   var appErr *model.AppError   var logmsg = "trying login" @@ -2957 +30612 @@ func (m *MMClient) UpdateChannels() error {   if err != nil {   return errors.New(err.DetailedError)   } - mmchannels2, err := m.Client.GetMoreChannels("") + var mmchannels2 *model.Result + if m.mmVersion() >= 3.8 { + mmchannels2, err = m.Client.GetMoreChannelsPage(0, 5000) + } else { + mmchannels2, err = m.Client.GetMoreChannels("") + }   if err != nil {   return errors.New(err.DetailedError)   } @@ -4306 +44614 @@ func (m *MMClient) UpdateChannelHeader(channelId string, header string) {    func (m *MMClient) UpdateLastViewed(channelId string) {   m.log.Debugf("posting lastview %#v", channelId) + if m.mmVersion() >= 3.8 { + view := model.ChannelView{ChannelId: channelId} + res, _ := m.Client.ViewChannel(view) + if res == false { + m.log.Errorf("ChannelView update for %s failed", channelId) + } + return + }   _, err := m.Client.UpdateLastViewedAt(channelId, true)   if err != nil {   m.log.Error(err) @@ -6637 +68711 @@ func (m *MMClient) initUser() error {   return errors.New(err.DetailedError)   }   t.Channels = mmchannels.Data.(*model.ChannelList) - mmchannels, err = m.Client.GetMoreChannels("") + if m.mmVersion() >= 3.8 { + mmchannels, err = m.Client.GetMoreChannelsPage(0, 5000) + } else { + mmchannels, err = m.Client.GetMoreChannels("") + }   if err != nil {   return errors.New(err.DetailedError)   } @@ -6913 +71918 @@ func (m *MMClient) sendWSRequest(action string, data map[string]interface{}) err   m.WsClient.WriteJSON(req)   return nil  } + +func (m *MMClient) mmVersion() float64 { + v, _ := strconv.ParseFloat(m.ServerVersion[0:3], 64) + return v +} + +func supportedVersion(version string) bool { + if strings.HasPrefix(version, "3.5.0") || + strings.HasPrefix(version, "3.6.0") || + strings.HasPrefix(version, "3.7.0") || + strings.HasPrefix(version, "3.8.0") { + return true + } + return false +}