Use lowerCamelCase for the JSON API (fixes #1338)

Replace the current mix of UpperCamelCase und lowerCamelCase with
consistent lowerCamelCase keys for the JSON API. Also adapt the frontend
so it works with the changed API.

Attention: this will break existing consumers of the API.
This commit is contained in:
Pascal Jungblut committed 2015-03-16 10:05:01 +01:00
1 parent 51c932164f
commit 49bc74e7a0
10 files changed
+339 -329

No files matched your search

+3 -3
View File
@@ -177,7 +177,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["assets/lang/valid-langs.js"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
assets["index.html"] = bs
@@ -187,7 +187,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["modal.html"] = bs
bs, _ = base64.StdEncoding.DecodeString("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")
bs, _ = base64.StdEncoding.DecodeString("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")
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
assets["scripts/syncthing/app.js"] = bs
@@ -197,7 +197,7 @@ func Assets() map[string][]byte {
bs, _ = ioutil.ReadAll(gr)
assets["scripts/syncthing/core/controllers/eventController.js"] = bs
bs, _ = base64.StdEncoding.DecodeString("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 truncated
bs, _ = base64.StdEncoding.DecodeString("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 truncated
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
assets["scripts/syncthing/core/controllers/syncthingController.js"] = bs
+55 -55
View File
@@ -39,12 +39,12 @@ var l = logger.DefaultLogger
const CurrentVersion = 9
type Configuration struct {
Version int `xml:"version,attr"`
Folders []FolderConfiguration `xml:"folder"`
Devices []DeviceConfiguration `xml:"device"`
GUI GUIConfiguration `xml:"gui"`
Options OptionsConfiguration `xml:"options"`
IgnoredDevices []protocol.DeviceID `xml:"ignoredDevice"`
Version int `xml:"version,attr" json:"version"`
Folders []FolderConfiguration `xml:"folder" json:"folders"`
Devices []DeviceConfiguration `xml:"device" json:"devices"`
GUI GUIConfiguration `xml:"gui" json:"gui"`
Options OptionsConfiguration `xml:"options" json:"options"`
IgnoredDevices []protocol.DeviceID `xml:"ignoredDevice" json:"ignoredDevices"`
XMLName xml.Name `xml:"configuration" json:"-"`
OriginalVersion int `xml:"-" json:"-"` // The version we read from disk, before any conversion
@@ -53,19 +53,19 @@ type Configuration struct {
}
type FolderConfiguration struct {
ID string `xml:"id,attr"`
Path string `xml:"path,attr"`
Devices []FolderDeviceConfiguration `xml:"device"`
ReadOnly bool `xml:"ro,attr"`
RescanIntervalS int `xml:"rescanIntervalS,attr" default:"60"`
IgnorePerms bool `xml:"ignorePerms,attr"`
Versioning VersioningConfiguration `xml:"versioning"`
LenientMtimes bool `xml:"lenientMtimes"`
Copiers int `xml:"copiers" default:"1"` // This defines how many files are handled concurrently.
Pullers int `xml:"pullers" default:"16"` // Defines how many blocks are fetched at the same time, possibly between separate copier routines.
Hashers int `xml:"hashers" default:"0"` // Less than one sets the value to the number of cores. These are CPU bound due to hashing.
ID string `xml:"id,attr" json:"id"`
Path string `xml:"path,attr" json:"path"`
Devices []FolderDeviceConfiguration `xml:"device" json:"devices"`
ReadOnly bool `xml:"ro,attr" json:"readOnly"`
RescanIntervalS int `xml:"rescanIntervalS,attr" json:"rescanIntervalS" default:"60"`
IgnorePerms bool `xml:"ignorePerms,attr" json:"ignorePerms"`
Versioning VersioningConfiguration `xml:"versioning" json:"versioning"`
LenientMtimes bool `xml:"lenientMtimes" json:"lenientMTimes"`
Copiers int `xml:"copiers" json:"copiers" default:"1"` // This defines how many files are handled concurrently.
Pullers int `xml:"pullers" json:"pullers" default:"16"` // Defines how many blocks are fetched at the same time, possibly between separate copier routines.
Hashers int `xml:"hashers" json:"hashers" default:"0"` // Less than one sets the value to the number of cores. These are CPU bound due to hashing.
Invalid string `xml:"-"` // Set at runtime when there is an error, not saved
Invalid string `xml:"-" json:"invalid"` // Set at runtime when there is an error, not saved
deviceIDs []protocol.DeviceID
@@ -105,8 +105,8 @@ func (f *FolderConfiguration) DeviceIDs() []protocol.DeviceID {
}
type VersioningConfiguration struct {
Type string `xml:"type,attr"`
Params map[string]string
Type string `xml:"type,attr" json:"type"`
Params map[string]string `json:"params"`
}
type InternalVersioningConfiguration struct {
@@ -146,44 +146,44 @@ func (c *VersioningConfiguration) UnmarshalXML(d *xml.Decoder, start xml.StartEl
}
type DeviceConfiguration struct {
DeviceID protocol.DeviceID `xml:"id,attr"`
Name string `xml:"name,attr,omitempty"`
Addresses []string `xml:"address,omitempty"`
Compression protocol.Compression `xml:"compression,attr"`
CertName string `xml:"certName,attr,omitempty"`
Introducer bool `xml:"introducer,attr"`
DeviceID protocol.DeviceID `xml:"id,attr" json:"deviceID"`
Name string `xml:"name,attr,omitempty" json:"name"`
Addresses []string `xml:"address,omitempty" json:"addresses"`
Compression protocol.Compression `xml:"compression,attr" json:"compression"`
CertName string `xml:"certName,attr,omitempty" json:"certName"`
Introducer bool `xml:"introducer,attr" json:"introducer"`
}
type FolderDeviceConfiguration struct {
DeviceID protocol.DeviceID `xml:"id,attr"`
DeviceID protocol.DeviceID `xml:"id,attr" json:"deviceID"`
Deprecated_Name string `xml:"name,attr,omitempty" json:"-"`
Deprecated_Addresses []string `xml:"address,omitempty" json:"-"`
}
type OptionsConfiguration struct {
ListenAddress []string `xml:"listenAddress" default:"0.0.0.0:22000"`
GlobalAnnServers []string `xml:"globalAnnounceServer" default:"udp4://announce.syncthing.net:22026, udp6://announce-v6.syncthing.net:22026"`
GlobalAnnEnabled bool `xml:"globalAnnounceEnabled" default:"true"`
LocalAnnEnabled bool `xml:"localAnnounceEnabled" default:"true"`
LocalAnnPort int `xml:"localAnnouncePort" default:"21025"`
LocalAnnMCAddr string `xml:"localAnnounceMCAddr" default:"[ff32::5222]:21026"`
MaxSendKbps int `xml:"maxSendKbps"`
MaxRecvKbps int `xml:"maxRecvKbps"`
ReconnectIntervalS int `xml:"reconnectionIntervalS" default:"60"`
StartBrowser bool `xml:"startBrowser" default:"true"`
UPnPEnabled bool `xml:"upnpEnabled" default:"true"`
UPnPLease int `xml:"upnpLeaseMinutes" default:"0"`
UPnPRenewal int `xml:"upnpRenewalMinutes" default:"30"`
URAccepted int `xml:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently)
URUniqueID string `xml:"urUniqueID"` // Unique ID for reporting purposes, regenerated when UR is turned on.
RestartOnWakeup bool `xml:"restartOnWakeup" default:"true"`
AutoUpgradeIntervalH int `xml:"autoUpgradeIntervalH" default:"12"` // 0 for off
KeepTemporariesH int `xml:"keepTemporariesH" default:"24"` // 0 for off
CacheIgnoredFiles bool `xml:"cacheIgnoredFiles" default:"true"`
ProgressUpdateIntervalS int `xml:"progressUpdateIntervalS" default:"5"`
SymlinksEnabled bool `xml:"symlinksEnabled" default:"true"`
LimitBandwidthInLan bool `xml:"limitBandwidthInLan" default:"false"`
ListenAddress []string `xml:"listenAddress" json:"listenAddress" default:"0.0.0.0:22000"`
GlobalAnnServers []string `xml:"globalAnnounceServer" json:"globalAnnounceServers" json:"globalAnnounceServer" default:"udp4://announce.syncthing.net:22026, udp6://announce-v6.syncthing.net:22026"`
GlobalAnnEnabled bool `xml:"globalAnnounceEnabled" json:"globalAnnounceEnabled" default:"true"`
LocalAnnEnabled bool `xml:"localAnnounceEnabled" json:"localAnnounceEnabled" default:"true"`
LocalAnnPort int `xml:"localAnnouncePort" json:"localAnnouncePort" default:"21025"`
LocalAnnMCAddr string `xml:"localAnnounceMCAddr" json:"localAnnounceMCAddr" default:"[ff32::5222]:21026"`
MaxSendKbps int `xml:"maxSendKbps" json:"maxSendKbps"`
MaxRecvKbps int `xml:"maxRecvKbps" json:"maxRecvKbps"`
ReconnectIntervalS int `xml:"reconnectionIntervalS" json:"reconnectionIntervalS" default:"60"`
StartBrowser bool `xml:"startBrowser" json:"startBrowser" default:"true"`
UPnPEnabled bool `xml:"upnpEnabled" json:"upnpEnabled" default:"true"`
UPnPLease int `xml:"upnpLeaseMinutes" json:"upnpLeaseMinutes" default:"0"`
UPnPRenewal int `xml:"upnpRenewalMinutes" json:"upnpRenewalMinutes" default:"30"`
URAccepted int `xml:"urAccepted" json:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently)
URUniqueID string `xml:"urUniqueID" json:"urUniqueId"` // Unique ID for reporting purposes, regenerated when UR is turned on.
RestartOnWakeup bool `xml:"restartOnWakeup" json:"restartOnWakeup" default:"true"`
AutoUpgradeIntervalH int `xml:"autoUpgradeIntervalH" json:"autoUpgradeIntervalH" default:"12"` // 0 for off
KeepTemporariesH int `xml:"keepTemporariesH" json:"keepTemporariesH" default:"24"` // 0 for off
CacheIgnoredFiles bool `xml:"cacheIgnoredFiles" json:"cacheIgnoredFiles" default:"true"`
ProgressUpdateIntervalS int `xml:"progressUpdateIntervalS" json:"progressUpdateIntervalS" default:"5"`
SymlinksEnabled bool `xml:"symlinksEnabled" json:"symlinksEnabled" default:"true"`
LimitBandwidthInLan bool `xml:"limitBandwidthInLan" json:"limitBandwidthInLan" default:"false"`
Deprecated_RescanIntervalS int `xml:"rescanIntervalS,omitempty" json:"-"`
Deprecated_UREnabled bool `xml:"urEnabled,omitempty" json:"-"`
@@ -194,12 +194,12 @@ type OptionsConfiguration struct {
}
type GUIConfiguration struct {
Enabled bool `xml:"enabled,attr" default:"true"`
Address string `xml:"address" default:"127.0.0.1:8080"`
User string `xml:"user,omitempty"`
Password string `xml:"password,omitempty"`
UseTLS bool `xml:"tls,attr"`
APIKey string `xml:"apikey,omitempty"`
Enabled bool `xml:"enabled,attr" json:"enabled" default:"true"`
Address string `xml:"address" json:"address" default:"127.0.0.1:8080"`
User string `xml:"user,omitempty" json:"user"`
Password string `xml:"password,omitempty" json:"password"`
UseTLS bool `xml:"tls,attr" json:"useTLS"`
APIKey string `xml:"apikey,omitempty" json:"apiKey"`
}
func New(myID protocol.DeviceID) Configuration {
+11
View File
@@ -18,6 +18,7 @@ package model
import (
"bufio"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"io"
@@ -241,6 +242,16 @@ type ConnectionInfo struct {
ClientVersion string
}
func (info ConnectionInfo) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"at": info.At,
"inBytesTotal": info.InBytesTotal,
"outBytesTotal": info.OutBytesTotal,
"address": info.Address,
"clientVersion": info.ClientVersion,
})
}
// ConnectionStats returns a map with connection statistics for each connected device.
func (m *Model) ConnectionStats() map[string]ConnectionInfo {
type remoteAddrer interface {
+8 -8
View File
@@ -49,14 +49,14 @@ type sharedPullerState struct {
// A momentary state representing the progress of the puller
type pullerProgress struct {
Total int
Reused int
CopiedFromOrigin int
CopiedFromElsewhere int
Pulled int
Pulling int
BytesDone int64
BytesTotal int64
Total int `json:"total"`
Reused int `json:"reused"`
CopiedFromOrigin int `json:"copiedFromOrigin"`
CopiedFromElsewhere int `json:"copiedFromElsewhere"`
Pulled int `json:"pulled"`
Pulling int `json:"pulling"`
BytesDone int64 `json:"bytesDone"`
BytesTotal int64 `json:"bytesTotal"`
}
// A lockedWriterAt synchronizes WriteAt calls with an external mutex.
+1 -1
View File
@@ -24,7 +24,7 @@ import (
)
type DeviceStatistics struct {
LastSeen time.Time
LastSeen time.Time `json:"lastSeen"`
}
type DeviceStatisticsReference struct {
+3 -3
View File
@@ -23,7 +23,7 @@ import (
)
type FolderStatistics struct {
LastFile LastFile
LastFile LastFile `json:"lastFile"`
}
type FolderStatisticsReference struct {
@@ -32,8 +32,8 @@ type FolderStatisticsReference struct {
}
type LastFile struct {
At time.Time
Filename string
At time.Time `json:"at"`
Filename string `json:"filename"`
}
func NewFolderStatisticsReference(ldb *leveldb.DB, folder string) *FolderStatisticsReference {