command.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package command
  2. import (
  3. "context"
  4. core "github.com/v2fly/v2ray-core/v5"
  5. "github.com/v2fly/v2ray-core/v5/app/subscription"
  6. "github.com/v2fly/v2ray-core/v5/common"
  7. "google.golang.org/grpc"
  8. )
  9. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  10. type SubscriptionManagerService struct {
  11. UnimplementedSubscriptionManagerServiceServer
  12. manager subscription.SubscriptionManager
  13. }
  14. func (s *SubscriptionManagerService) UpdateTrackedSubscription(ctx context.Context, request *UpdateTrackedSubscriptionRequest) (*UpdateTrackedSubscriptionResponse, error) {
  15. if s.manager == nil {
  16. return nil, newError("subscription manager is not available")
  17. }
  18. err := s.manager.UpdateTrackedSubscription(request.Name)
  19. if err != nil {
  20. return nil, err
  21. }
  22. return &UpdateTrackedSubscriptionResponse{}, nil
  23. }
  24. func NewSubscriptionManagerService(manager subscription.SubscriptionManager) *SubscriptionManagerService {
  25. return &SubscriptionManagerService{manager: manager}
  26. }
  27. func (s *SubscriptionManagerService) ListTrackedSubscription(ctx context.Context, req *ListTrackedSubscriptionRequest) (*ListTrackedSubscriptionResponse, error) {
  28. if s.manager == nil {
  29. return nil, newError("subscription manager is not available")
  30. }
  31. names := s.manager.ListTrackedSubscriptions()
  32. return &ListTrackedSubscriptionResponse{Names: names}, nil
  33. }
  34. func (s *SubscriptionManagerService) AddTrackedSubscription(ctx context.Context, req *AddTrackedSubscriptionRequest) (*AddTrackedSubscriptionResponse, error) {
  35. if s.manager == nil {
  36. return nil, newError("subscription manager is not available")
  37. }
  38. err := s.manager.AddTrackedSubscriptionFromImportSource(req.Source)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return &AddTrackedSubscriptionResponse{}, nil
  43. }
  44. func (s *SubscriptionManagerService) RemoveTrackedSubscription(ctx context.Context, req *RemoveTrackedSubscriptionRequest) (*RemoveTrackedSubscriptionResponse, error) {
  45. if s.manager == nil {
  46. return nil, newError("subscription manager is not available")
  47. }
  48. err := s.manager.RemoveTrackedSubscription(req.Name)
  49. if err != nil {
  50. return nil, err
  51. }
  52. return &RemoveTrackedSubscriptionResponse{}, nil
  53. }
  54. func (s *SubscriptionManagerService) GetTrackedSubscriptionStatus(ctx context.Context, req *GetTrackedSubscriptionStatusRequest) (*GetTrackedSubscriptionStatusResponse, error) {
  55. if s.manager == nil {
  56. return nil, newError("subscription manager is not available")
  57. }
  58. status, err := s.manager.GetTrackedSubscriptionStatus(req.Name)
  59. if err != nil {
  60. return nil, err
  61. }
  62. return &GetTrackedSubscriptionStatusResponse{Status: status}, nil
  63. }
  64. func (s *SubscriptionManagerService) Register(server *grpc.Server) {
  65. RegisterSubscriptionManagerServiceServer(server, s)
  66. }
  67. func init() {
  68. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  69. var manager subscription.SubscriptionManager
  70. common.Must(core.RequireFeatures(ctx, func(m subscription.SubscriptionManager) {
  71. manager = m
  72. }))
  73. service := NewSubscriptionManagerService(manager)
  74. return service, nil
  75. }))
  76. }