network.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'dart:io';
  2. import 'package:dio/dio.dart';
  3. import 'package:fk_user_agent/fk_user_agent.dart';
  4. import 'package:package_info_plus/package_info_plus.dart';
  5. import 'package:photos/core/constants.dart';
  6. import 'package:photos/core/network/ente_interceptor.dart';
  7. import 'package:shared_preferences/shared_preferences.dart';
  8. int kConnectTimeout = 15000;
  9. class NetworkClient {
  10. // apiEndpoint points to the Ente server's API endpoint
  11. static const apiEndpoint = String.fromEnvironment(
  12. "endpoint",
  13. defaultValue: kDefaultProductionEndpoint,
  14. );
  15. late Dio _dio;
  16. late Dio _enteDio;
  17. Future<void> init() async {
  18. await FkUserAgent.init();
  19. final packageInfo = await PackageInfo.fromPlatform();
  20. final preferences = await SharedPreferences.getInstance();
  21. _dio = Dio(
  22. BaseOptions(
  23. connectTimeout: kConnectTimeout,
  24. headers: {
  25. HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
  26. 'X-Client-Version': packageInfo.version,
  27. 'X-Client-Package': packageInfo.packageName,
  28. },
  29. ),
  30. );
  31. _enteDio = Dio(
  32. BaseOptions(
  33. baseUrl: apiEndpoint,
  34. connectTimeout: kConnectTimeout,
  35. headers: {
  36. HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
  37. 'X-Client-Version': packageInfo.version,
  38. 'X-Client-Package': packageInfo.packageName,
  39. },
  40. ),
  41. );
  42. _enteDio.interceptors.add(EnteRequestInterceptor(preferences, apiEndpoint));
  43. }
  44. NetworkClient._privateConstructor();
  45. static NetworkClient instance = NetworkClient._privateConstructor();
  46. Dio getDio() => _dio;
  47. Dio get enteDio => _enteDio;
  48. }