/*
* 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.GET;
import retrofit.http.POST;
import retrofit.http.Query;
import rx.Observable;
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 3/1/15.
*/
public interface SyncthingApi {
/**
* The name of the HTTP header used for the syncthing API key.
*/
public static final String HEADER_API_KEY = "X-API-Key";
/*
* GET
*/
@GET("rest/db/completion")
Observable<Completion> completion(@Query("device") String device, @Query("folder") String folder);
//@GET("/rest/db/file")
@GET("rest/db/ignores")
Observable<Ignores> ignores(@Query("folder") String folder);
@GET("rest/db/need")
Observable<Need> need(@Query("folder") String folder);
@GET("rest/db/status")
Observable<Model> model(@Query("folder") String folder);
//@GET("/rest/db/browse") //@Query("folder") ops @Query("prefix") @Query("disonly") @Query("levels")
@GET("rest/events")
Observable<Event[]> events(@Query("since") long lastId);
@GET("rest/events")
Observable<Event[]> events(@Query("since") long lastId, @Query("limit") int lim);
@GET("rest/stats/device")
Observable<DeviceStatsMap> deviceStats();
@GET("rest/stats/folder")
Observable<FolderStatsMap> folderStats();
@GET("rest/svc/deviceid")
Observable<DeviceId> deviceId(@Query("id") String id);
//@GET("/rest/svc/lang")
//@GET("/rest/svc/report")
@GET("rest/system/browse")
Observable<List<String>> autocompleteDirectory(@Query("current") String current);
@GET("rest/system/config")
Observable<Config> config();
@GET("rest/system/config/insync")
Observable<ConfigStats> configStatus();
@GET("rest/system/connections")
Observable<Connections> connections();
//@GET("/rest/system/discovery")
@GET("rest/system/error")
Observable<SystemErrors> errors();
@GET("rest/system/ping")
Observable<Ping> ping();
@GET("rest/system/status")
Observable<SystemInfo> system();
//@GET("/rest/system/upgrade")
@GET("rest/system/version")
Observable<Version> version();
//@GET("/rest/system/debug")
@GET("rest/system/log")
Observable<SystemMessages> log();
@GET("rest/system/log")
Observable<SystemMessages> log(@Query("since") DateTime since);
//@GEE("/rest/system/log.txt") //op @Query("since")
/*
* POST
*/
//@POST("/rest/db/prio")
//Observable<Void> bump(@Query("folder") String folder, @Query("file") String file);
@POST("rest/db/ignores")
Observable<Ignores> updateIgnores(@Query("folder") String folder, @Body Ignores ignores);
@POST("rest/db/override")
Observable<Void> override(@Query("folder") String folder);
@POST("rest/db/scan")
Observable<Void> scan(@Query("folder") String folder);
@POST("rest/db/scan")
Observable<Void> scan(@Query("folder") String folder, @Query("sub") String subfolder);
@POST("rest/system/config")
Observable<Config> updateConfig(@Body Config config);
//@POST("/rest/system/discovery")
//@POST("/rest/error")
@POST("rest/system/error/clear")
Observable<Void> clearErrors();
//@POST("/rest/system/ping")
//@POST("/rest/system/reset")
@POST("rest/system/restart")
Observable<Ok> restart();
@POST("rest/system/shutdown")
Observable<Ok> shutdown();
//@POST("/rest/system/upgrade")
@POST("rest/system/pause")
Observable<Void> pause(@Query("device") String device);
@POST("rest/system/resume")
Observable<Void> resume(@Query("device") String device);
//@POST("/rest/system/debug") //op @Query("enable") @Query("disable")
@POST("rest/scan")
Observable<Void> scan();
/*
* Misc
*/
@GET("qr/") //TODO proper image fetcher
Observable<ResponseBody> qr(@Query("text") String id);
}