2024-06-01 16:06:55 +01:00
|
|
|
// SPDX-FileCopyrightText: 2024 Dan Anglin <d.n.i.anglin@gmail.com>
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2024-02-27 19:52:59 +00:00
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ListRepliesPolicy int
|
|
|
|
|
|
|
|
const (
|
|
|
|
ListRepliesPolicyFollowed ListRepliesPolicy = iota
|
|
|
|
ListRepliesPolicyList
|
|
|
|
ListRepliesPolicyNone
|
2024-05-30 19:42:11 +01:00
|
|
|
ListRepliesPolicyUnknown
|
2024-02-27 19:52:59 +00:00
|
|
|
)
|
|
|
|
|
2024-05-30 19:42:11 +01:00
|
|
|
const (
|
|
|
|
listRepliesPolicyFollowedValue = "followed"
|
|
|
|
listRepliesPolicyListValue = "list"
|
|
|
|
listRepliesPolicyNoneValue = "none"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (l ListRepliesPolicy) String() string {
|
|
|
|
mapped := map[ListRepliesPolicy]string{
|
|
|
|
ListRepliesPolicyFollowed: listRepliesPolicyFollowedValue,
|
|
|
|
ListRepliesPolicyList: listRepliesPolicyListValue,
|
|
|
|
ListRepliesPolicyNone: listRepliesPolicyNoneValue,
|
|
|
|
}
|
|
|
|
|
|
|
|
output, ok := mapped[l]
|
|
|
|
if !ok {
|
|
|
|
return unknownValue
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
2024-05-30 19:42:11 +01:00
|
|
|
return output
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
2024-05-30 19:42:11 +01:00
|
|
|
func ParseListRepliesPolicy(value string) ListRepliesPolicy {
|
|
|
|
mapped := map[string]ListRepliesPolicy{
|
|
|
|
listRepliesPolicyFollowedValue: ListRepliesPolicyFollowed,
|
|
|
|
listRepliesPolicyListValue: ListRepliesPolicyList,
|
|
|
|
listRepliesPolicyNoneValue: ListRepliesPolicyNone,
|
|
|
|
}
|
|
|
|
|
|
|
|
output, ok := mapped[value]
|
|
|
|
if !ok {
|
|
|
|
return ListRepliesPolicyUnknown
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
2024-05-30 19:42:11 +01:00
|
|
|
return output
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (l ListRepliesPolicy) MarshalJSON() ([]byte, error) {
|
2024-05-30 18:46:33 +01:00
|
|
|
value := l.String()
|
2024-05-30 19:42:11 +01:00
|
|
|
if value == unknownValue {
|
|
|
|
return nil, fmt.Errorf("%q is not a valid list replies policy")
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
2024-05-30 18:46:33 +01:00
|
|
|
return json.Marshal(value)
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (l *ListRepliesPolicy) UnmarshalJSON(data []byte) error {
|
|
|
|
var (
|
|
|
|
value string
|
|
|
|
err error
|
|
|
|
)
|
|
|
|
|
|
|
|
if err = json.Unmarshal(data, &value); err != nil {
|
|
|
|
return fmt.Errorf("unable to unmarshal the data; %w", err)
|
|
|
|
}
|
|
|
|
|
2024-05-30 19:42:11 +01:00
|
|
|
*l = ParseListRepliesPolicy(value)
|
2024-02-27 19:52:59 +00:00
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type List struct {
|
|
|
|
ID string `json:"id"`
|
|
|
|
RepliesPolicy ListRepliesPolicy `json:"replies_policy"`
|
|
|
|
Title string `json:"title"`
|
2024-05-19 11:48:36 +01:00
|
|
|
Accounts map[string]string
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|
|
|
|
|
2024-05-31 21:18:11 +01:00
|
|
|
func (l List) Display(noColor bool) string {
|
2024-05-19 11:48:36 +01:00
|
|
|
format := `
|
|
|
|
%s
|
|
|
|
%s
|
2024-02-27 19:52:59 +00:00
|
|
|
|
2024-05-19 11:48:36 +01:00
|
|
|
%s
|
|
|
|
%s
|
|
|
|
|
|
|
|
%s
|
|
|
|
%s
|
|
|
|
|
|
|
|
%s`
|
|
|
|
|
|
|
|
output := fmt.Sprintf(
|
2024-02-27 19:52:59 +00:00
|
|
|
format,
|
2024-05-31 21:18:11 +01:00
|
|
|
utilities.HeaderFormat(noColor, "LIST TITLE:"), l.Title,
|
|
|
|
utilities.HeaderFormat(noColor, "LIST ID:"), l.ID,
|
|
|
|
utilities.HeaderFormat(noColor, "REPLIES POLICY:"), l.RepliesPolicy,
|
|
|
|
utilities.HeaderFormat(noColor, "ADDED ACCOUNTS:"),
|
2024-02-27 19:52:59 +00:00
|
|
|
)
|
2024-05-19 11:48:36 +01:00
|
|
|
|
|
|
|
if len(l.Accounts) > 0 {
|
2024-05-31 21:41:10 +01:00
|
|
|
for acct, name := range l.Accounts {
|
2024-05-19 11:48:36 +01:00
|
|
|
output += fmt.Sprintf(
|
|
|
|
"\n • %s (%s)",
|
2024-05-31 21:18:11 +01:00
|
|
|
utilities.DisplayNameFormat(noColor, name),
|
2024-05-31 21:41:10 +01:00
|
|
|
acct,
|
2024-05-19 11:48:36 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
output += "\n None"
|
|
|
|
}
|
|
|
|
|
2024-05-31 21:41:10 +01:00
|
|
|
output += "\n"
|
|
|
|
|
2024-05-19 11:48:36 +01:00
|
|
|
return output
|
|
|
|
}
|
|
|
|
|
|
|
|
type Lists []List
|
|
|
|
|
2024-05-31 21:18:11 +01:00
|
|
|
func (l Lists) Display(noColor bool) string {
|
|
|
|
output := "\n" + utilities.HeaderFormat(noColor, "LISTS")
|
2024-05-19 11:48:36 +01:00
|
|
|
|
|
|
|
for i := range l {
|
|
|
|
output += fmt.Sprintf(
|
2024-05-31 21:18:11 +01:00
|
|
|
"\n • %s (%s)",
|
2024-05-19 11:48:36 +01:00
|
|
|
l[i].Title,
|
|
|
|
l[i].ID,
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
return output
|
2024-02-27 19:52:59 +00:00
|
|
|
}
|