diff --git a/whapp-handler.go b/whapp-handler.go index cc3a3dc..fb15d7e 100644 --- a/whapp-handler.go +++ b/whapp-handler.go @@ -12,6 +12,20 @@ type WhappHandler struct { } func (h *WhappHandler) HandleError(err error) { + if _, connectionFailed := err.(*whatsapp.ErrConnectionFailed); connectionFailed { + err = RestoreWhappSessionFromStorage( + h.BridgeContext.Config.App.DataFolder, + h.BridgeContext.WhappConn, + ) + + if err != nil { + logString := "Failed to restore whatsapp connection: " + err.Error() + log.Println(logString) + h.BridgeContext.SendLog(logString) + return + } + } + logString := "Whatsapp Error: " + err.Error() log.Println(logString) diff --git a/whapp.go b/whapp.go index 993459f..a2f6ba1 100644 --- a/whapp.go +++ b/whapp.go @@ -27,34 +27,46 @@ func CreateAndLoginWhappConnection( var session whatsapp.Session - sessionFile := storageDir + "/whapp-session.json" + sessionFile := WhappSessionFileName(storageDir) if _, err := os.Stat(sessionFile); os.IsNotExist(err) { session, err = WhappQrLogin(storageDir, ctx) if err != nil { return err } - } else { - session = whatsapp.Session{} - sessionJson, err := ioutil.ReadFile(sessionFile) - - err = json.Unmarshal(sessionJson, &session) + return StoreWhappSession(session, storageDir) + } - if err != nil { - return err - } + return RestoreWhappSessionFromStorage(storageDir, wac) +} - session, err = wac.RestoreWithSession(session) +func RestoreWhappSessionFromStorage(storageDir string, wac *whatsapp.Conn) error { + storedSession, err := GetStoredWhappSession(storageDir) + if err != nil { + return err + } - if err != nil { - return err - } + session, err := wac.RestoreWithSession(*storedSession) + if err != nil { + return err } - err = StoreWhappSession(session, storageDir) + return StoreWhappSession(session, storageDir) +} - return err +func WhappSessionFileName(storageDir string) string { + return storageDir + "/whapp-session.json" +} + +func GetStoredWhappSession(storageDir string) (*whatsapp.Session, error) { + session := &whatsapp.Session{} + + sessionJson, err := ioutil.ReadFile(WhappSessionFileName(storageDir)) + + err = json.Unmarshal(sessionJson, session) + + return session, err } func WhappQrLogin(