/*
* Copyright (c) 2015 OpenSilk Productions LLC
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
*/
package syncthing.api;
import com.squareup.okhttp.ResponseBody;
import org.joda.time.DateTime;
import java.util.List;
import retrofit.http.Body;
import retrofit.http.Query;
import rx.Observable;
import rx.Scheduler;
import syncthing.api.model.Completion;
import syncthing.api.model.Config;
import syncthing.api.model.ConfigStats;
import syncthing.api.model.Connections;
import syncthing.api.model.DeviceId;
import syncthing.api.model.DeviceStatsMap;
import syncthing.api.model.FolderStatsMap;
import syncthing.api.model.SystemErrors;
import syncthing.api.model.Ignores;
import syncthing.api.model.Model;
import syncthing.api.model.Need;
import syncthing.api.model.Ok;
import syncthing.api.model.Ping;
import syncthing.api.model.SystemInfo;
import syncthing.api.model.SystemMessages;
import syncthing.api.model.Version;
import syncthing.api.model.event.Event;
/**
* Created by drew on 10/10/15.
*/
public class SynchingApiWrapper implements SyncthingApi {
private final Scheduler scheduler;
private final SyncthingApi api;
private SynchingApiWrapper(Scheduler scheduler, SyncthingApi api) {
this.scheduler = scheduler;
this.api = api;
}
public static SyncthingApi wrap(SyncthingApi api, Scheduler scheduler) {
return new SynchingApiWrapper(scheduler, api);
}
public static SyncthingApi unwrap(SyncthingApi api) {
if (api instanceof SynchingApiWrapper) {
return ((SynchingApiWrapper)api).api;
} else {
return api;
}
}
@Override
public Observable<Completion> completion(@Query("device") String device, @Query("folder") String folder) {
return api.completion(device, folder).subscribeOn(scheduler);
}
@Override
public Observable<Ignores> ignores(@Query("folder") String folder) {
return api.ignores(folder).subscribeOn(scheduler);
}
@Override
public Observable<Need> need(@Query("folder") String folder) {
return api.need(folder).subscribeOn(scheduler);
}
@Override
public Observable<Model> model(@Query("folder") String folder) {
return api.model(folder).subscribeOn(scheduler);
}
@Override
public Observable<Event[]> events(@Query("since") long lastId) {
return api.events(lastId).subscribeOn(scheduler);
}
@Override
public Observable<Event[]> events(@Query("since") long lastId, @Query("limit") int lim) {
return api.events(lastId, lim).subscribeOn(scheduler);
}
@Override
public Observable<DeviceStatsMap> deviceStats() {
return api.deviceStats().subscribeOn(scheduler);
}
@Override
public Observable<FolderStatsMap> folderStats() {
return api.folderStats().subscribeOn(scheduler);
}
@Override
public Observable<DeviceId> deviceId(@Query("id") String id) {
return api.deviceId(id).subscribeOn(scheduler);
}
@Override
public Observable<List<String>> autocompleteDirectory(@Query("current") String current) {
return api.autocompleteDirectory(current).subscribeOn(scheduler);
}
@Override
public Observable<Config> config() {
return api.config().subscribeOn(scheduler);
}
@Override
public Observable<ConfigStats> configStatus() {
return api.configStatus().subscribeOn(scheduler);
}
@Override
public Observable<Connections> connections() {
return api.connections().subscribeOn(scheduler);
}
@Override
public Observable<SystemErrors> errors() {
return api.errors().subscribeOn(scheduler);
}
@Override
public Observable<Ping> ping() {
return api.ping().subscribeOn(scheduler);
}
@Override
public Observable<SystemInfo> system() {
return api.system().subscribeOn(scheduler);
}
@Override
public Observable<Version> version() {
return api.version().subscribeOn(scheduler);
}
@Override
public Observable<SystemMessages> log() {
return api.log().subscribeOn(scheduler);
}
@Override
public Observable<SystemMessages> log(@Query("since") DateTime since) {
return api.log(since).subscribeOn(scheduler);
}
@Override
public Observable<Ignores> updateIgnores(@Query("folder") String folder, @Body Ignores ignores) {
return api.updateIgnores(folder, ignores).subscribeOn(scheduler);
}
@Override
public Observable<Void> override(@Query("folder") String folder) {
return api.override(folder).subscribeOn(scheduler);
}
@Override
public Observable<Void> scan(@Query("folder") String folder) {
return api.scan(folder).subscribeOn(scheduler);
}
@Override
public Observable<Void> scan(@Query("folder") String folder, @Query("sub") String subfolder) {
return api.scan(folder,subfolder).subscribeOn(scheduler);
}
@Override
public Observable<Config> updateConfig(@Body Config config) {
return api.updateConfig(config).subscribeOn(scheduler);
}
@Override
public Observable<Void> clearErrors() {
return api.clearErrors().subscribeOn(scheduler);
}
@Override
public Observable<Ok> restart() {
return api.restart().subscribeOn(scheduler);
}
@Override
public Observable<Ok> shutdown() {
return api.shutdown().subscribeOn(scheduler);
}
@Override
public Observable<Void> pause(@Query("device") String device) {
return api.pause(device).subscribeOn(scheduler);
}
@Override
public Observable<Void> resume(@Query("device") String device) {
return api.resume(device).subscribeOn(scheduler);
}
@Override
public Observable<Void> scan() {
return api.scan().subscribeOn(scheduler);
}
@Override
public Observable<ResponseBody> qr(@Query("text") String id) {
return api.qr(id).subscribeOn(scheduler);
}
}