1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-12-25 18:15:49 +01:00

Always initialize weather before sending

This commit is contained in:
Martin.JM 2024-02-15 20:31:17 +01:00 committed by José Rebelo
parent 4b70f3fcdb
commit 6a2186919c
3 changed files with 51 additions and 74 deletions

View File

@ -166,8 +166,6 @@ public class HuaweiSupportProvider {
private MusicStateSpec musicStateSpec = null;
private MusicSpec musicSpec = null;
private Weather.Settings weatherSettings = null;
private final HuaweiPacket.ParamsProvider paramsProvider = new HuaweiPacket.ParamsProvider();
protected ResponseManager responseManager = new ResponseManager(this);
@ -1703,86 +1701,61 @@ public class HuaweiSupportProvider {
}
public void onSendWeather(WeatherSpec weatherSpec) {
if (weatherSettings != null && weatherSettings.weatherSupported) {
try {
SendWeatherCurrentRequest sendWeatherCurrentRequest = new SendWeatherCurrentRequest(
this,
weatherSettings,
weatherSpec
);
// Initialize weather settings and send weather
if (!getHuaweiCoordinator().supportsWeather()) {
// TODO: exception?
return;
}
SendGpsAndTimeToDeviceRequest sendGpsAndTimeToDeviceRequest = new SendGpsAndTimeToDeviceRequest(
this
);
Weather.Settings weatherSettings = new Weather.Settings();
sendWeatherCurrentRequest.nextRequest(sendGpsAndTimeToDeviceRequest);
SendWeatherStartRequest weatherStartRequest = new SendWeatherStartRequest(this, weatherSettings);
Request lastRequest = weatherStartRequest;
if (getHuaweiCoordinator().supportsWeatherUnit()) {
SendWeatherUnitRequest weatherUnitRequest = new SendWeatherUnitRequest(this);
lastRequest.nextRequest(weatherUnitRequest);
lastRequest = weatherUnitRequest;
}
if (getHuaweiCoordinator().supportsWeatherForecasts()) {
SendWeatherForecastRequest sendWeatherForecastRequest = new SendWeatherForecastRequest(
this,
weatherSpec
);
sendGpsAndTimeToDeviceRequest.nextRequest(sendWeatherForecastRequest);
}
SendWeatherSupportRequest weatherSupportRequest = new SendWeatherSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherSupportRequest);
lastRequest = weatherSupportRequest;
sendWeatherCurrentRequest.doPerform();
} catch (IOException e) {
// TODO: Use translatable string
GB.toast(context, "Failed to send weather", Toast.LENGTH_SHORT, GB.ERROR, e);
LOG.error("Failed to send weather", e);
}
} else {
// Initialize weather settings
if (!getHuaweiCoordinator().supportsWeather()) {
// TODO: exception?
return;
}
if (getHuaweiCoordinator().supportsWeatherExtended()) {
SendWeatherExtendedSupportRequest weatherExtendedSupportRequest = new SendWeatherExtendedSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherExtendedSupportRequest);
lastRequest = weatherExtendedSupportRequest;
}
this.weatherSettings = new Weather.Settings();
if (getHuaweiCoordinator().supportsWeatherMoonRiseSet()) {
SendWeatherSunMoonSupportRequest weatherSunMoonSupportRequest = new SendWeatherSunMoonSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherSunMoonSupportRequest);
lastRequest = weatherSunMoonSupportRequest;
}
RequestCallback requestCallback = new RequestCallback(this) {
@Override
public void call() {
this.support.weatherSettings.weatherSupported = true;
this.support.onSendWeather(weatherSpec);
}
};
// End of initialization and start of actually sending weather
SendWeatherStartRequest weatherStartRequest = new SendWeatherStartRequest(this);
Request lastRequest = weatherStartRequest;
SendWeatherCurrentRequest sendWeatherCurrentRequest = new SendWeatherCurrentRequest(this, weatherSettings, weatherSpec);
lastRequest.nextRequest(sendWeatherCurrentRequest);
lastRequest = sendWeatherCurrentRequest;
if (getHuaweiCoordinator().supportsWeatherUnit()) {
SendWeatherUnitRequest weatherUnitRequest = new SendWeatherUnitRequest(this);
lastRequest.nextRequest(weatherUnitRequest);
lastRequest = weatherUnitRequest;
}
SendGpsAndTimeToDeviceRequest sendGpsAndTimeToDeviceRequest = new SendGpsAndTimeToDeviceRequest(this);
lastRequest.nextRequest(sendGpsAndTimeToDeviceRequest);
lastRequest = sendGpsAndTimeToDeviceRequest;
SendWeatherSupportRequest weatherSupportRequest = new SendWeatherSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherSupportRequest);
lastRequest = weatherSupportRequest;
if (getHuaweiCoordinator().supportsWeatherForecasts()) {
SendWeatherForecastRequest sendWeatherForecastRequest = new SendWeatherForecastRequest(this, weatherSpec);
lastRequest.nextRequest(sendWeatherForecastRequest);
lastRequest = sendWeatherForecastRequest;
}
if (getHuaweiCoordinator().supportsWeatherExtended()) {
SendWeatherExtendedSupportRequest weatherExtendedSupportRequest = new SendWeatherExtendedSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherExtendedSupportRequest);
lastRequest = weatherExtendedSupportRequest;
}
if (getHuaweiCoordinator().supportsWeatherMoonRiseSet()) {
SendWeatherSunMoonSupportRequest weatherSunMoonSupportRequest = new SendWeatherSunMoonSupportRequest(this, weatherSettings);
lastRequest.nextRequest(weatherSunMoonSupportRequest);
lastRequest = weatherSunMoonSupportRequest;
}
lastRequest.setFinalizeReq(requestCallback);
try {
weatherStartRequest.doPerform();
} catch (IOException e) {
// TODO: Use translatable string
GB.toast(context, "Failed to send initialize weather requests", Toast.LENGTH_SHORT, GB.ERROR, e);
LOG.error("Failed to send initialize weather requests", e);
}
try {
weatherStartRequest.doPerform();
} catch (IOException e) {
// TODO: Use translatable string
GB.toast(context, "Failed to send weather", Toast.LENGTH_SHORT, GB.ERROR, e);
LOG.error("Failed to send weather", e);
}
}
}

View File

@ -27,8 +27,8 @@ public class SendGpsAndTimeToDeviceRequest extends Request {
return new GpsAndTime.CurrentGPSRequest(
this.paramsProvider,
(int) (Calendar.getInstance().getTime().getTime() / 1000L) - 60,
prefs.getFloat("location_latitude", 0),
prefs.getFloat("location_longitude", 0)
prefs.getFloat("location_latitude", 0.0F),
prefs.getFloat("location_longitude", 0.0F)
).serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);

View File

@ -32,11 +32,13 @@ public class SendWeatherStartRequest extends Request {
private static final Logger LOG = LoggerFactory.getLogger(SendWeatherStartRequest.class);
public int response = -1;
private Weather.Settings weatherSettings;
public SendWeatherStartRequest(HuaweiSupportProvider support) {
public SendWeatherStartRequest(HuaweiSupportProvider support, Weather.Settings weatherSettings) {
super(support);
this.serviceId = Weather.id;
this.commandId = Weather.WeatherStart.id;
this.weatherSettings = weatherSettings;
}
@Override
@ -55,6 +57,8 @@ public class SendWeatherStartRequest extends Request {
this.stopChain();
GB.toast(supportProvider.getContext(), "Received non-ok status for WeatherStart response", Toast.LENGTH_SHORT, GB.INFO);
LOG.info("Received non-ok status for WeatherStart response");
} else {
weatherSettings.weatherSupported = true;
}
} else {
this.stopChain();