notice.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package controller
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "git.wanbits.cc/sin/flytalk/models"
  6. "git.wanbits.cc/sin/flytalk/tools"
  7. "github.com/gin-gonic/gin"
  8. "github.com/gorilla/websocket"
  9. "log"
  10. "net/http"
  11. "time"
  12. )
  13. func GetNotice(c *gin.Context) {
  14. kefuId := c.Query("kefu_id")
  15. welcomes := models.FindWelcomesByUserId(kefuId)
  16. user := models.FindUser(kefuId)
  17. result := make([]gin.H, 0)
  18. for _, welcome := range welcomes {
  19. h := gin.H{
  20. "name": user.Nickname,
  21. "avator": user.Avator,
  22. "is_kefu": false,
  23. "content": welcome.Content,
  24. "time": time.Now().Format("2006-01-02 15:04:05"),
  25. }
  26. result = append(result, h)
  27. }
  28. c.JSON(200, gin.H{
  29. "code": 200,
  30. "msg": "ok",
  31. "result": result,
  32. })
  33. }
  34. func GetNotices(c *gin.Context) {
  35. kefuId, _ := c.Get("kefu_name")
  36. welcomes := models.FindWelcomesByUserId(kefuId)
  37. c.JSON(200, gin.H{
  38. "code": 200,
  39. "msg": "ok",
  40. "result": welcomes,
  41. })
  42. }
  43. func PostNotice(c *gin.Context) {
  44. kefuId, _ := c.Get("kefu_name")
  45. content := c.PostForm("content")
  46. models.CreateWelcome(fmt.Sprintf("%s", kefuId), content)
  47. c.JSON(200, gin.H{
  48. "code": 200,
  49. "msg": "ok",
  50. "result": "",
  51. })
  52. }
  53. func PostNoticeSave(c *gin.Context) {
  54. kefuId, _ := c.Get("kefu_name")
  55. content := c.PostForm("content")
  56. id := c.PostForm("id")
  57. models.UpdateWelcome(fmt.Sprintf("%s", kefuId), id, content)
  58. c.JSON(200, gin.H{
  59. "code": 200,
  60. "msg": "ok",
  61. "result": "",
  62. })
  63. }
  64. func DelNotice(c *gin.Context) {
  65. kefuId, _ := c.Get("kefu_name")
  66. id := c.Query("id")
  67. models.DeleteWelcome(kefuId, id)
  68. c.JSON(200, gin.H{
  69. "code": 200,
  70. "msg": "ok",
  71. "result": "",
  72. })
  73. }
  74. var upgrader = websocket.Upgrader{}
  75. var oldFolders map[string]int
  76. //推送新邮件到达
  77. func PushMailServer(w http.ResponseWriter, r *http.Request) {
  78. c, err := upgrader.Upgrade(w, r, nil)
  79. if err != nil {
  80. log.Print("upgrade:", err)
  81. return
  82. }
  83. defer c.Close()
  84. for {
  85. mt, message, err := c.ReadMessage()
  86. if err != nil {
  87. log.Println("read:", err)
  88. break
  89. }
  90. log.Printf("recv: %s", message)
  91. mailServer := tools.GetMailServerFromCookie(r)
  92. var msg []byte
  93. if mailServer == nil {
  94. msg, _ = json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
  95. err = c.WriteMessage(mt, msg)
  96. if err != nil {
  97. log.Println("write:", err)
  98. break
  99. }
  100. } else {
  101. folders := tools.GetMailNum(mailServer.Server, mailServer.Email, mailServer.Password)
  102. for name, num := range folders {
  103. if oldFolders[name] != num {
  104. result := make(map[string]interface{})
  105. result["folder_name"] = name
  106. result["new_num"] = num - oldFolders[name]
  107. msg, _ := json.Marshal(tools.JsonListResult{
  108. JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
  109. Result: result,
  110. })
  111. c.WriteMessage(mt, msg)
  112. }
  113. }
  114. oldFolders = folders
  115. }
  116. }
  117. }