bazaar.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. // SiYuan - Build Your Eternal Digital Garden
  2. // Copyright (c) 2020-present, b3log.org
  3. //
  4. // This program is free software: you can redistribute it and/or modify
  5. // it under the terms of the GNU Affero General Public License as published by
  6. // the Free Software Foundation, either version 3 of the License, or
  7. // (at your option) any later version.
  8. //
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. // GNU Affero General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU Affero General Public License
  15. // along with this program. If not, see <https://www.gnu.org/licenses/>.
  16. package api
  17. import (
  18. "net/http"
  19. "github.com/88250/gulu"
  20. "github.com/gin-gonic/gin"
  21. "github.com/siyuan-note/siyuan/kernel/bazaar"
  22. "github.com/siyuan-note/siyuan/kernel/model"
  23. "github.com/siyuan-note/siyuan/kernel/util"
  24. )
  25. func getBazaarPackageREAME(c *gin.Context) {
  26. ret := gulu.Ret.NewResult()
  27. defer c.JSON(http.StatusOK, ret)
  28. arg, ok := util.JsonArg(c, ret)
  29. if !ok {
  30. return
  31. }
  32. repoURL := arg["repoURL"].(string)
  33. repoHash := arg["repoHash"].(string)
  34. ret.Data = map[string]interface{}{
  35. "html": model.GetPackageREADME(repoURL, repoHash),
  36. }
  37. }
  38. func getBazaarWidget(c *gin.Context) {
  39. ret := gulu.Ret.NewResult()
  40. defer c.JSON(http.StatusOK, ret)
  41. ret.Data = map[string]interface{}{
  42. "packages": model.BazaarWidgets(),
  43. }
  44. }
  45. func getInstalledWidget(c *gin.Context) {
  46. ret := gulu.Ret.NewResult()
  47. defer c.JSON(http.StatusOK, ret)
  48. ret.Data = map[string]interface{}{
  49. "packages": bazaar.InstalledWidgets(),
  50. }
  51. }
  52. func installBazaarWidget(c *gin.Context) {
  53. ret := gulu.Ret.NewResult()
  54. defer c.JSON(http.StatusOK, ret)
  55. arg, ok := util.JsonArg(c, ret)
  56. if !ok {
  57. return
  58. }
  59. repoURL := arg["repoURL"].(string)
  60. repoHash := arg["repoHash"].(string)
  61. packageName := arg["packageName"].(string)
  62. err := model.InstallBazaarWidget(repoURL, repoHash, packageName)
  63. if nil != err {
  64. ret.Code = 1
  65. ret.Msg = err.Error()
  66. return
  67. }
  68. util.PushMsg(model.Conf.Language(69), 3000)
  69. ret.Data = map[string]interface{}{
  70. "packages": model.BazaarWidgets(),
  71. }
  72. }
  73. func uninstallBazaarWidget(c *gin.Context) {
  74. ret := gulu.Ret.NewResult()
  75. defer c.JSON(http.StatusOK, ret)
  76. arg, ok := util.JsonArg(c, ret)
  77. if !ok {
  78. return
  79. }
  80. packageName := arg["packageName"].(string)
  81. err := model.UninstallBazaarWidget(packageName)
  82. if nil != err {
  83. ret.Code = -1
  84. ret.Msg = err.Error()
  85. return
  86. }
  87. ret.Data = map[string]interface{}{
  88. "packages": model.BazaarWidgets(),
  89. }
  90. }
  91. func getBazaarIcon(c *gin.Context) {
  92. ret := gulu.Ret.NewResult()
  93. defer c.JSON(http.StatusOK, ret)
  94. ret.Data = map[string]interface{}{
  95. "packages": model.BazaarIcons(),
  96. }
  97. }
  98. func getInstalledIcon(c *gin.Context) {
  99. ret := gulu.Ret.NewResult()
  100. defer c.JSON(http.StatusOK, ret)
  101. ret.Data = map[string]interface{}{
  102. "packages": bazaar.InstalledIcons(),
  103. }
  104. }
  105. func installBazaarIcon(c *gin.Context) {
  106. ret := gulu.Ret.NewResult()
  107. defer c.JSON(http.StatusOK, ret)
  108. arg, ok := util.JsonArg(c, ret)
  109. if !ok {
  110. return
  111. }
  112. repoURL := arg["repoURL"].(string)
  113. repoHash := arg["repoHash"].(string)
  114. packageName := arg["packageName"].(string)
  115. err := model.InstallBazaarIcon(repoURL, repoHash, packageName)
  116. if nil != err {
  117. ret.Code = 1
  118. ret.Msg = err.Error()
  119. return
  120. }
  121. util.PushMsg(model.Conf.Language(69), 3000)
  122. ret.Data = map[string]interface{}{
  123. "packages": model.BazaarIcons(),
  124. "appearance": model.Conf.Appearance,
  125. }
  126. }
  127. func uninstallBazaarIcon(c *gin.Context) {
  128. ret := gulu.Ret.NewResult()
  129. defer c.JSON(http.StatusOK, ret)
  130. arg, ok := util.JsonArg(c, ret)
  131. if !ok {
  132. return
  133. }
  134. packageName := arg["packageName"].(string)
  135. err := model.UninstallBazaarIcon(packageName)
  136. if nil != err {
  137. ret.Code = -1
  138. ret.Msg = err.Error()
  139. return
  140. }
  141. ret.Data = map[string]interface{}{
  142. "packages": model.BazaarIcons(),
  143. "appearance": model.Conf.Appearance,
  144. }
  145. }
  146. func getBazaarTemplate(c *gin.Context) {
  147. ret := gulu.Ret.NewResult()
  148. defer c.JSON(http.StatusOK, ret)
  149. ret.Data = map[string]interface{}{
  150. "packages": model.BazaarTemplates(),
  151. }
  152. }
  153. func getInstalledTemplate(c *gin.Context) {
  154. ret := gulu.Ret.NewResult()
  155. defer c.JSON(http.StatusOK, ret)
  156. ret.Data = map[string]interface{}{
  157. "packages": bazaar.InstalledTemplates(),
  158. }
  159. }
  160. func installBazaarTemplate(c *gin.Context) {
  161. ret := gulu.Ret.NewResult()
  162. defer c.JSON(http.StatusOK, ret)
  163. arg, ok := util.JsonArg(c, ret)
  164. if !ok {
  165. return
  166. }
  167. repoURL := arg["repoURL"].(string)
  168. repoHash := arg["repoHash"].(string)
  169. packageName := arg["packageName"].(string)
  170. err := model.InstallBazaarTemplate(repoURL, repoHash, packageName)
  171. if nil != err {
  172. ret.Code = 1
  173. ret.Msg = err.Error()
  174. return
  175. }
  176. ret.Data = map[string]interface{}{
  177. "packages": model.BazaarTemplates(),
  178. }
  179. util.PushMsg(model.Conf.Language(69), 3000)
  180. }
  181. func uninstallBazaarTemplate(c *gin.Context) {
  182. ret := gulu.Ret.NewResult()
  183. defer c.JSON(http.StatusOK, ret)
  184. arg, ok := util.JsonArg(c, ret)
  185. if !ok {
  186. return
  187. }
  188. packageName := arg["packageName"].(string)
  189. err := model.UninstallBazaarTemplate(packageName)
  190. if nil != err {
  191. ret.Code = -1
  192. ret.Msg = err.Error()
  193. return
  194. }
  195. ret.Data = map[string]interface{}{
  196. "packages": model.BazaarTemplates(),
  197. }
  198. }
  199. func getBazaarTheme(c *gin.Context) {
  200. ret := gulu.Ret.NewResult()
  201. defer c.JSON(http.StatusOK, ret)
  202. ret.Data = map[string]interface{}{
  203. "packages": model.BazaarThemes(),
  204. }
  205. }
  206. func getInstalledTheme(c *gin.Context) {
  207. ret := gulu.Ret.NewResult()
  208. defer c.JSON(http.StatusOK, ret)
  209. ret.Data = map[string]interface{}{
  210. "packages": bazaar.InstalledThemes(),
  211. }
  212. }
  213. func installBazaarTheme(c *gin.Context) {
  214. ret := gulu.Ret.NewResult()
  215. defer c.JSON(http.StatusOK, ret)
  216. arg, ok := util.JsonArg(c, ret)
  217. if !ok {
  218. return
  219. }
  220. repoURL := arg["repoURL"].(string)
  221. repoHash := arg["repoHash"].(string)
  222. packageName := arg["packageName"].(string)
  223. mode := arg["mode"].(float64)
  224. update := false
  225. if nil != arg["update"] {
  226. update = arg["update"].(bool)
  227. }
  228. err := model.InstallBazaarTheme(repoURL, repoHash, packageName, int(mode), update)
  229. if nil != err {
  230. ret.Code = 1
  231. ret.Msg = err.Error()
  232. return
  233. }
  234. util.PushMsg(model.Conf.Language(69), 3000)
  235. ret.Data = map[string]interface{}{
  236. "packages": model.BazaarThemes(),
  237. "appearance": model.Conf.Appearance,
  238. }
  239. }
  240. func uninstallBazaarTheme(c *gin.Context) {
  241. ret := gulu.Ret.NewResult()
  242. defer c.JSON(http.StatusOK, ret)
  243. arg, ok := util.JsonArg(c, ret)
  244. if !ok {
  245. return
  246. }
  247. packageName := arg["packageName"].(string)
  248. err := model.UninstallBazaarTheme(packageName)
  249. if nil != err {
  250. ret.Code = -1
  251. ret.Msg = err.Error()
  252. return
  253. }
  254. ret.Data = map[string]interface{}{
  255. "packages": model.BazaarThemes(),
  256. "appearance": model.Conf.Appearance,
  257. }
  258. }