From a60d12a05905a632d576c8815bdfb22b8720903d Mon Sep 17 00:00:00 2001 From: DevChat Tester Date: Fri, 7 Nov 2025 10:23:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20subscription=20set?= =?UTF-8?q?-url=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scientific_surfing/cli.py | 8 +++++++- scientific_surfing/models.py | 8 ++++++++ scientific_surfing/subscription_manager.py | 19 +++++++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/scientific_surfing/cli.py b/scientific_surfing/cli.py index 8b66b64..1f8fe92 100644 --- a/scientific_surfing/cli.py +++ b/scientific_surfing/cli.py @@ -40,6 +40,11 @@ def create_parser() -> argparse.ArgumentParser: rename_parser.add_argument('name', help='Current name of the subscription') rename_parser.add_argument('new_name', help='New name for the subscription') + # Set URL subscription command + set_url_parser = subscription_subparsers.add_parser('set-url', help='Update the URL for a subscription') + set_url_parser.add_argument('name', help='Name of the subscription') + set_url_parser.add_argument('url', help='New URL for the subscription') + # Activate subscription command activate_parser = subscription_subparsers.add_parser('activate', help='Activate a subscription') activate_parser.add_argument('name', help='Name of the subscription to activate') @@ -164,6 +169,8 @@ def main() -> None: subscription_manager.delete_subscription(args.name) elif args.subcommand == 'rename': subscription_manager.rename_subscription(args.name, args.new_name) + elif args.subcommand == 'set-url': + subscription_manager.set_subscription_url(args.name, args.url) elif args.subcommand == 'activate': subscription_manager.activate_subscription(args.name) elif args.subcommand == 'list': @@ -262,7 +269,6 @@ def main() -> None: except Exception as e: print(f"❌ Error: {e}") raise - sys.exit(1) if __name__ == '__main__': diff --git a/scientific_surfing/models.py b/scientific_surfing/models.py index 7dcb420..0cb14a6 100644 --- a/scientific_surfing/models.py +++ b/scientific_surfing/models.py @@ -106,4 +106,12 @@ class SubscriptionsData(BaseModel): subscription = self.subscriptions.pop(old_name) subscription.name = new_name self.subscriptions[new_name] = subscription + return True + + def set_subscription_url(self, name: str, url: str) -> bool: + """Update the URL for a subscription.""" + if name not in self.subscriptions: + return False + + self.subscriptions[name].url = url return True \ No newline at end of file diff --git a/scientific_surfing/subscription_manager.py b/scientific_surfing/subscription_manager.py index 4d3f9c8..9df9294 100644 --- a/scientific_surfing/subscription_manager.py +++ b/scientific_surfing/subscription_manager.py @@ -21,7 +21,7 @@ class SubscriptionManager: self.subscriptions_dir = self.storage.config_dir / "subscriptions" self.subscriptions_dir.mkdir(exist_ok=True) - def add_subscription(self, url: str, name: str) -> None: + def add_subscription(self, name: str, url: str) -> None: """Add a new subscription.""" subscription = self.subscriptions_data.add_subscription(name, url) @@ -45,11 +45,12 @@ class SubscriptionManager: try: # Download the subscription content headers = { - 'User-Agent': self.config.default_user_agent + # 'User-Agent': self.config.default_user_agent } - timeout = self.config.timeout_seconds + # timeout = self.config.timeout_seconds - response = requests.get(url, headers=headers, timeout=timeout) + # response = requests.get(url, headers=headers, timeout=timeout) + response = requests.get(url) response.raise_for_status() # File path without timestamp @@ -121,6 +122,16 @@ class SubscriptionManager: else: print(f"❌ Failed to rename subscription: '{old_name}' not found or '{new_name}' already exists") + def set_subscription_url(self, name: str, url: str) -> None: + """Update the URL for a subscription.""" + if self.subscriptions_data.set_subscription_url(name, url): + if self.storage.save_subscriptions(self.subscriptions_data): + print(f"✅ Updated URL for subscription '{name}': {url}") + else: + print("❌ Failed to save subscription") + else: + print(f"❌ Subscription '{name}' not found") + def activate_subscription(self, name: str) -> None: """Activate a subscription.""" if self.subscriptions_data.set_active(name):