✨ iOS background widget fetching
This commit is contained in:
@ -71,7 +71,36 @@ class SnNetworkProvider {
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> initializeUserAgent() async {
|
||||
static Future<Dio> createOffContextClient() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final client = Dio();
|
||||
client.interceptors.add(RetryInterceptor(
|
||||
dio: client,
|
||||
retries: 3,
|
||||
retryDelays: const [
|
||||
Duration(milliseconds: 300),
|
||||
Duration(milliseconds: 1000),
|
||||
Duration(milliseconds: 3000),
|
||||
],
|
||||
));
|
||||
final ua = await _getUserAgent();
|
||||
client.interceptors.add(
|
||||
InterceptorsWrapper(
|
||||
onRequest: (
|
||||
RequestOptions options,
|
||||
RequestInterceptorHandler handler,
|
||||
) async {
|
||||
options.headers['User-Agent'] = ua;
|
||||
return handler.next(options);
|
||||
},
|
||||
),
|
||||
);
|
||||
client.options.baseUrl = prefs.getString(kNetworkServerStoreKey) ?? kNetworkServerDefault;
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
static Future<String> _getUserAgent() async {
|
||||
final String platformInfo;
|
||||
if (kIsWeb) {
|
||||
final deviceInfo = await DeviceInfoPlugin().webBrowserInfo;
|
||||
@ -97,7 +126,11 @@ class SnNetworkProvider {
|
||||
|
||||
final packageInfo = await PackageInfo.fromPlatform();
|
||||
|
||||
_userAgent = 'Solian/${packageInfo.version}+${packageInfo.buildNumber} ($platformInfo)';
|
||||
return 'Solian/${packageInfo.version}+${packageInfo.buildNumber} ($platformInfo)';
|
||||
}
|
||||
|
||||
Future<void> initializeUserAgent() async {
|
||||
_userAgent = await _getUserAgent();
|
||||
}
|
||||
|
||||
final tkLock = Lock();
|
||||
|
@ -4,6 +4,8 @@ import 'dart:io';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:home_widget/home_widget.dart';
|
||||
import 'package:surface/providers/sn_network.dart';
|
||||
import 'package:surface/types/post.dart';
|
||||
|
||||
class HomeWidgetProvider {
|
||||
HomeWidgetProvider(BuildContext context);
|
||||
@ -15,8 +17,7 @@ class HomeWidgetProvider {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveWidgetData(String id, dynamic data,
|
||||
{bool update = true}) async {
|
||||
Future<void> saveWidgetData(String id, dynamic data, {bool update = true}) async {
|
||||
if (kIsWeb || !(Platform.isAndroid || Platform.isIOS)) return;
|
||||
await HomeWidget.saveWidgetData(id, jsonEncode(data));
|
||||
if (update) await updateWidget();
|
||||
@ -25,7 +26,7 @@ class HomeWidgetProvider {
|
||||
Future<void> updateWidget() async {
|
||||
if (kIsWeb || !(Platform.isAndroid || Platform.isIOS)) return;
|
||||
if (Platform.isIOS) {
|
||||
const widgets = ["SolarFeaturedPostWidget", "SolarCheckInWidget"];
|
||||
const widgets = ["SolarRandomPostWidget", "SolarCheckInWidget"];
|
||||
for (final widget in widgets) {
|
||||
await HomeWidget.updateWidget(
|
||||
name: widget,
|
||||
@ -43,3 +44,16 @@ class HomeWidgetProvider {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> widgetUpdateRandomPost() async {
|
||||
final snc = await SnNetworkProvider.createOffContextClient();
|
||||
final resp = await snc.get('/cgi/co/recommendations/shuffle?take=1');
|
||||
final post = SnPost.fromJson(resp.data['data'][0]);
|
||||
await HomeWidget.saveWidgetData("int_random_post", jsonEncode(post.toJson()));
|
||||
await HomeWidget.updateWidget(
|
||||
name: "SolarRandomPostWidget",
|
||||
iOSName: "SolarRandomPostWidget",
|
||||
androidName: "FeaturedPostWidgetReceiver",
|
||||
qualifiedAndroidName: "dev.solsynth.solian.widgets.FeaturedPostWidgetReceiver",
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user