My mirror of the Barnard terminal client for Mumble.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

78 行
1.4 KiB

  1. package barnard
  2. import (
  3. "github.com/layeh/barnard/uiterm"
  4. "github.com/layeh/gumble/gumble"
  5. )
  6. type TreeItem struct {
  7. User *gumble.User
  8. Channel *gumble.Channel
  9. }
  10. func (ti TreeItem) String() string {
  11. if ti.User != nil {
  12. return ti.User.Name()
  13. }
  14. if ti.Channel != nil {
  15. return ti.Channel.Name()
  16. }
  17. return ""
  18. }
  19. func (ti TreeItem) TreeItemStyle(active bool) (uiterm.Attribute, uiterm.Attribute) {
  20. fg := uiterm.ColorDefault
  21. bg := uiterm.ColorBlack
  22. if ti.Channel != nil {
  23. fg |= uiterm.AttrBold
  24. }
  25. if active {
  26. bg |= uiterm.AttrReverse
  27. }
  28. return fg, bg
  29. }
  30. func (b *Barnard) TreeItemSelect(ui *uiterm.Ui, tree *uiterm.Tree, item uiterm.TreeItem) {
  31. treeItem := item.(TreeItem)
  32. if treeItem.Channel != nil {
  33. b.Client.Self().Move(treeItem.Channel)
  34. }
  35. }
  36. func (b *Barnard) TreeItem(item uiterm.TreeItem) []uiterm.TreeItem {
  37. var treeItem TreeItem
  38. if ti, ok := item.(TreeItem); !ok {
  39. root := b.Client.Channels()[0]
  40. if root == nil {
  41. return nil
  42. }
  43. return []uiterm.TreeItem{
  44. TreeItem{
  45. Channel: root,
  46. },
  47. }
  48. } else {
  49. treeItem = ti
  50. }
  51. if treeItem.User != nil {
  52. return nil
  53. }
  54. users := []uiterm.TreeItem{}
  55. for _, user := range treeItem.Channel.Users() {
  56. users = append(users, TreeItem{
  57. User: user,
  58. })
  59. }
  60. channels := []uiterm.TreeItem{}
  61. for _, subchannel := range treeItem.Channel.Channels() {
  62. channels = append(channels, TreeItem{
  63. Channel: subchannel,
  64. })
  65. }
  66. return append(users, channels...)
  67. }