1212from .display import DisplayFormatter
1313from .cache import CacheManager
1414from .config import ConfigManager
15+ from .providers import ProviderConfig , PROVIDER_ENV_VARS , PROVIDER_DEFAULT_URLS
1516from . import __version__
1617
1718
@@ -25,16 +26,16 @@ def _background_refresh_cache_subprocess(username: str) -> None:
2526 config_manager = ConfigManager ()
2627 cache_expiry = config_manager .get_cache_expiry_minutes ()
2728 cache_manager = CacheManager (cache_expiry_minutes = cache_expiry )
28- provider = config_manager .get_provider ()
29- provider_url = config_manager .get_provider_url ()
30- token = config_manager .get_token ()
31- if provider == None :
32- print ("Provider not set" )
29+
30+ provider_config = config_manager .get_provider_config ()
31+ if not provider_config :
3332 exit (1 )
34- if provider_url == None :
35- print ("Provider url not set" )
33+ if not provider_config .url :
3634 exit (1 )
37- fetcher = _create_fetcher (provider , provider_url , token )
35+
36+ fetcher = _create_fetcher (
37+ provider_config .name , provider_config .url , provider_config .token or None
38+ )
3839
3940 fresh_user_data = fetcher .fetch_user_data (username )
4041 fresh_stats = fetcher .fetch_user_stats (username , fresh_user_data )
@@ -264,17 +265,18 @@ def main() -> int:
264265 # Initialize components
265266 cache_expiry = config_manager .get_cache_expiry_minutes ()
266267 cache_manager = CacheManager (cache_expiry_minutes = cache_expiry )
267- provider = config_manager .get_provider ()
268- provider_url = config_manager .get_provider_url ()
269- token = config_manager .get_token ()
270- if provider == None :
271- print ("Provider not set" )
268+
269+ provider_config = config_manager .get_provider_config ()
270+ if not provider_config :
271+ print ("Provider not set. Run: gitfetch --change-provider" )
272272 return 1
273- if provider_url == None :
274- print ("Provider url not set" )
273+ if not provider_config . url :
274+ print ("Provider URL not set. Run: gitfetch --change-provider " )
275275 return 1
276276
277- fetcher = _create_fetcher (provider , provider_url , token )
277+ fetcher = _create_fetcher (
278+ provider_config .name , provider_config .url , provider_config .token or None
279+ )
278280
279281 # Handle custom box character
280282 custom_box = args .custom_box
@@ -565,48 +567,53 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
565567 if not provider :
566568 return False
567569
568- config_manager .set_provider (provider )
569-
570- # Set default URL for known providers
570+ # Determine URL for provider
571571 if provider == 'github' :
572- config_manager . set_provider_url ( 'https://api.github.com' )
572+ url = PROVIDER_DEFAULT_URLS . get ( 'github' , 'https://api.github.com' )
573573 elif provider == 'gitlab' :
574- config_manager . set_provider_url ( 'https://gitlab.com' )
574+ url = PROVIDER_DEFAULT_URLS . get ( 'gitlab' , 'https://gitlab.com' )
575575 elif provider == 'gitea' :
576576 url = input ("Enter Gitea/Forgejo/Codeberg URL: " ).strip ()
577577 if not url :
578578 print ("Provider URL required" , file = sys .stderr )
579579 return False
580- config_manager .set_provider_url (url )
581580 elif provider == 'sourcehut' :
582- config_manager .set_provider_url ('https://git.sr.ht' )
583-
584- # Ask for token if needed
585- token = None
586- if provider in ['gitlab' , 'gitea' , 'sourcehut' , 'github' ]:
587- token_input = input (
588- f"Enter your { provider } personal access token{ ', needed for private repositories' if provider == 'github' else '' } \n "
589- +
590- "(optional, press Enter to skip): "
591- ).strip ()
592- if token_input :
593- token = token_input
594- config_manager .set_token (token )
595-
596- # Create appropriate fetcher
597- url = config_manager .get_provider_url ()
598- if url == None :
599- print ("Provider url could not be found." , file = sys .stderr )
581+ url = PROVIDER_DEFAULT_URLS .get ('sourcehut' , 'https://git.sr.ht' )
582+ else :
583+ print (f"Unsupported provider: { provider } " , file = sys .stderr )
600584 return False
601585
602- fetcher = _create_fetcher (
603- provider , url , token
586+ # Ask for token
587+ token = ''
588+ env_var = PROVIDER_ENV_VARS .get (provider , '' )
589+ token_msg = f"Enter your { provider } personal access token"
590+ if provider == 'github' :
591+ token_msg += " (needed for private repositories)"
592+ token_msg += f"\n (optional, press Enter to skip"
593+ if env_var :
594+ token_msg += f", or set { env_var } env var"
595+ token_msg += "): "
596+
597+ token_input = input (token_msg ).strip ()
598+ if token_input :
599+ token = token_input
600+
601+ # Create provider config
602+ provider_config = ProviderConfig (
603+ name = provider ,
604+ username = '' , # Will be set after fetcher auth
605+ url = url ,
606+ token = token
604607 )
605608
609+ # Create fetcher to get authenticated user
610+ fetcher = _create_fetcher (provider , url , token or None )
611+
606612 # Try to get authenticated user
607613 try :
608614 username = fetcher .get_authenticated_user ()
609615 print (f"Using authenticated user: { username } " )
616+ provider_config .username = username
610617 except Exception as e :
611618 print (f"Could not get authenticated user: { e } " )
612619 if provider == 'github' :
@@ -634,7 +641,8 @@ def _initialize_gitfetch(config_manager: ConfigManager) -> bool:
634641 else :
635642 config_manager .set_cache_expiry_minutes (15 )
636643
637- # Save configuration
644+ # Save configuration using new provider config system
645+ config_manager .set_provider_config (provider_config )
638646 config_manager .set_default_username (username )
639647 config_manager .save ()
640648
0 commit comments