github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/command_expand_collapse.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package slashcommands
     5  
     6  import (
     7  	"strconv"
     8  
     9  	"github.com/masterhung0112/hk_server/v5/app"
    10  	"github.com/masterhung0112/hk_server/v5/app/request"
    11  	"github.com/masterhung0112/hk_server/v5/model"
    12  	"github.com/masterhung0112/hk_server/v5/shared/i18n"
    13  )
    14  
    15  type ExpandProvider struct {
    16  }
    17  
    18  type CollapseProvider struct {
    19  }
    20  
    21  const (
    22  	CmdExpand   = "expand"
    23  	CmdCollapse = "collapse"
    24  )
    25  
    26  func init() {
    27  	app.RegisterCommandProvider(&ExpandProvider{})
    28  	app.RegisterCommandProvider(&CollapseProvider{})
    29  }
    30  
    31  func (*ExpandProvider) GetTrigger() string {
    32  	return CmdExpand
    33  }
    34  
    35  func (*CollapseProvider) GetTrigger() string {
    36  	return CmdCollapse
    37  }
    38  
    39  func (*ExpandProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command {
    40  	return &model.Command{
    41  		Trigger:          CmdExpand,
    42  		AutoComplete:     true,
    43  		AutoCompleteDesc: T("api.command_expand.desc"),
    44  		DisplayName:      T("api.command_expand.name"),
    45  	}
    46  }
    47  
    48  func (*CollapseProvider) GetCommand(a *app.App, T i18n.TranslateFunc) *model.Command {
    49  	return &model.Command{
    50  		Trigger:          CmdCollapse,
    51  		AutoComplete:     true,
    52  		AutoCompleteDesc: T("api.command_collapse.desc"),
    53  		DisplayName:      T("api.command_collapse.name"),
    54  	}
    55  }
    56  
    57  func (*ExpandProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
    58  	return setCollapsePreference(a, args, false)
    59  }
    60  
    61  func (*CollapseProvider) DoCommand(a *app.App, c *request.Context, args *model.CommandArgs, message string) *model.CommandResponse {
    62  	return setCollapsePreference(a, args, true)
    63  }
    64  
    65  func setCollapsePreference(a *app.App, args *model.CommandArgs, isCollapse bool) *model.CommandResponse {
    66  	pref := model.Preference{
    67  		UserId:   args.UserId,
    68  		Category: model.PREFERENCE_CATEGORY_DISPLAY_SETTINGS,
    69  		Name:     model.PREFERENCE_NAME_COLLAPSE_SETTING,
    70  		Value:    strconv.FormatBool(isCollapse),
    71  	}
    72  
    73  	if err := a.Srv().Store.Preference().Save(&model.Preferences{pref}); err != nil {
    74  		return &model.CommandResponse{Text: args.T("api.command_expand_collapse.fail.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
    75  	}
    76  
    77  	socketMessage := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_PREFERENCE_CHANGED, "", "", args.UserId, nil)
    78  	socketMessage.Add("preference", pref.ToJson())
    79  	a.Publish(socketMessage)
    80  
    81  	var rmsg string
    82  
    83  	if isCollapse {
    84  		rmsg = args.T("api.command_collapse.success")
    85  	} else {
    86  		rmsg = args.T("api.command_expand.success")
    87  	}
    88  	return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, Text: rmsg}
    89  }