| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package command
- import (
- "context"
- core "github.com/v2fly/v2ray-core/v5"
- "github.com/v2fly/v2ray-core/v5/app/subscription"
- "github.com/v2fly/v2ray-core/v5/common"
- "google.golang.org/grpc"
- )
- //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
- type SubscriptionManagerService struct {
- UnimplementedSubscriptionManagerServiceServer
- manager subscription.SubscriptionManager
- }
- func NewSubscriptionManagerService(manager subscription.SubscriptionManager) *SubscriptionManagerService {
- return &SubscriptionManagerService{manager: manager}
- }
- func (s *SubscriptionManagerService) ListTrackedSubscription(ctx context.Context, req *ListTrackedSubscriptionRequest) (*ListTrackedSubscriptionResponse, error) {
- if s.manager == nil {
- return nil, newError("subscription manager is not available")
- }
- names := s.manager.ListTrackedSubscriptions()
- return &ListTrackedSubscriptionResponse{Names: names}, nil
- }
- func (s *SubscriptionManagerService) AddTrackedSubscription(ctx context.Context, req *AddTrackedSubscriptionRequest) (*AddTrackedSubscriptionResponse, error) {
- if s.manager == nil {
- return nil, newError("subscription manager is not available")
- }
- err := s.manager.AddTrackedSubscriptionFromImportSource(req.Source)
- if err != nil {
- return nil, err
- }
- return &AddTrackedSubscriptionResponse{}, nil
- }
- func (s *SubscriptionManagerService) RemoveTrackedSubscription(ctx context.Context, req *RemoveTrackedSubscriptionRequest) (*RemoveTrackedSubscriptionResponse, error) {
- if s.manager == nil {
- return nil, newError("subscription manager is not available")
- }
- err := s.manager.RemoveTrackedSubscription(req.Name)
- if err != nil {
- return nil, err
- }
- return &RemoveTrackedSubscriptionResponse{}, nil
- }
- func (s *SubscriptionManagerService) GetTrackedSubscriptionStatus(ctx context.Context, req *GetTrackedSubscriptionStatusRequest) (*GetTrackedSubscriptionStatusResponse, error) {
- if s.manager == nil {
- return nil, newError("subscription manager is not available")
- }
- status, err := s.manager.GetTrackedSubscriptionStatus(req.Name)
- if err != nil {
- return nil, err
- }
- return &GetTrackedSubscriptionStatusResponse{Status: status}, nil
- }
- func (s *SubscriptionManagerService) Register(server *grpc.Server) {
- RegisterSubscriptionManagerServiceServer(server, s)
- }
- func init() {
- common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
- var manager subscription.SubscriptionManager
- common.Must(core.RequireFeatures(ctx, func(m subscription.SubscriptionManager) {
- manager = m
- }))
- service := NewSubscriptionManagerService(manager)
- return service, nil
- }))
- }
|