Show 100% complete status for nodes without any files to sync (fixes #453)

This commit is contained in:
Jakob Borg committed 2014-08-05 20:16:25 +02:00
1 parent b2c196e5c7
commit 62d703f967
3 files changed
+23 -3

No files matched your search

+1 -1
View File
@@ -28,7 +28,7 @@ func init() {
bs, _ = ioutil.ReadAll(gr)
Assets["angular.min.js"] = bs
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7dff73db36b2f8effe2b107d729594c89493f43af789e3f4b54e72cfd734c9c471df9b71dd37940859ac2952e5173b9ec4fffbdb5d8024be5294e3e6ee669ea68d2562b1582c168bddc5029c4ed961b6becee3f365c9468763f678efd1b7ec1fe14536633f66f9390bd30820d2328f675599e5051b159cb372c9d9e1db371fde1ffd78f2e1edfb63b688133e0e7600dd0f49c2085dc1725ef0fc9247013b2938cb16502d2e589155f99cb3791671063fcfb34b9ea73c62b36b688cfd7cf461b728af138eb89278ced3029b0b4b3687d219678bac0292e29468787d74f8f2cdf14b6a3ed8d9993ef8bd48e2b464b33cbb82b69fb232aff804da4acb38ad78fd7b9d5405fe2f7eb30753a8799e64b33061f79fb24598140014a6e75512e6f23702ed0c2bf852002fe6e5707f67e732cc59719dcea15be9393ba86b04ab2caa123e1a3665c3093b1daec3621e26eb9ccf976550e6615a2461c98767e37d4254e5c92c04f4076c087c23fc4dfd003ab088cf478b0a1ec459ca46f79765b97e97679771c4f309bbdfe0ab9f8dd9a71d061f0d3088f822ac92b2083e16f9e23f7908cfde842b6af4bf770f8fdfbfdafd905df0141adf50f730cb2e625ed7d56a8aaa164101f0eeb80ccb78fe0a06ab789d61e32341247e80318bf8e353364c808dbbc3495350540b5110fc5e64e9909edf00d3f07f9d45659e2509201dbebce4697958e609305ee15931cfd630b0d4ad863ff43048c2a2a45ad09db44a12c1001c972c0589c25e9218b4cfb1c6d10b78be27bb4cd250cde7bc285ea508df341c856558b7879f78c146f7045ef5b142ce7dbe8acbd1f0e4e82d410dc7fb1a5443138a6f5b74b3a33521297ccef6cc5690a06091e52fc3f952112a8e0c3061f103bc2d32986149763e1a10d460c2e86f1047f5b7f21a992bbe538ff72d3c5aefac5a46851be5f7cd7edb35c7886173a7d4a984a7e7e592edb247676ded66a8ccaa40bd82b8e0e58778c5b3aa5478620d100a4f70cecb513d611fb2e194e82fbe2fe274ce0f86f0483439d6aa06523a468d9418e53ccfb37c44ff4299d2fb09fbebde9e7c70a3889b04dd286c3d656db1e814366502102177c8b824061a0e1e0def8e618ff62c8e6d494157eb56cb1dcae8b87edaad9054250edf936c1e2254cd461c6e5091972fa058289dfa2974e8ed4f9a2ec0a7b88684792916263972aac29b67ab75c2898e03f6e9665f2fc3d5c6f7fc28c51e690db6e529a7be157665e2153e3f3dd39ec362c9131b7c754d337638d49ea600ecc0b1ceb3329b67c9e112d60e302534599530395f677909ec0bedc644d93b606fccafbcb51d9d025b287d891db349add6e7392c7147e92293f5dc42f87030c5156f306ee4ad15102c28d48924169ef4bc1575d0e26c848f63920af8f38c200aa90ae1c9c387e65c44000027b8d3f84c9fefa8302ec3248e5e139a388df8c7b70ba265cc9e1fd8ab0975ab915d5ce705b0adff67390f2f0c2d6fe8939bb126a6f7b3743468268318df63c1a7813a955c4c42855fd784910a7358ecc681ce3eb14e62cf0c6dd5d99f9bc608d18493f3e88756fc1be861be1a82f9f282278a55030fa33897cf416bc7f9582d4555828538d5d4e76556cd975870b28ed07a144537261947730f11395f81bdeda4c32eaa8988b2ab34017bcd49082c743c8f8b8b861473f85a2b461d3052bb6064e71aeb5543c369fd48bc710a4b96f2d8a5ed9a2aa3e1ff4b797995e51734558763d43961321a2ec12ed59003648ba91bae585625f2c50d658a46cd07b9c26ecf087b692623b2a5d612605faf3fcdc2f94594676b18bb82ec7120e7825fcfb2308fa4b373b351d6a94368ce73a9737bf409e76524f42f94908da877475d118439876af7cc63b7986001f6864b6b3028b35e5d780dfa213942152726d417f703bc181894e57ba068d4d03656ac4c706b45534c598291f4aa20651e82ff2c9639f27aafc0e15c863917be3322635771b90ccc19410b94ca8d3788c361e423eec385252f92eec386a61a90101dbd9830b5370d67bbe4fd3d2894927f0de6fa3b4150d8139b7e27cdd8d91771212d995e14831472184ddb063aad3b006ec6d986360fb7689066fe86e63c73c607ae2d154d3be96c5d3c657b13ab042c7d5fd151fae375c98b0f5919264e80b755b901e28728825104f40d85213cd1e16e7acdee43325829d4e060acc953cdca0ddeae894dc1c9fb1fc0dc589768563a8c1f98ce470b5615e13967c28cc4456819166c06b6214b394c560eb3bac691c2148ff81cb579343131c164bf0ac1a32d3316161714e102eb23c7dfabf082b390cd97593ce701fbb122d51065e9b0a43a262aa832abce11c58a45558e44e1a2198709ba6b15b81b4546ca85978896c239a4592c44404409de9d88df71b688f3a2649771119701fbaf254f65744e60001db5c6b09f4d1006121b5c00b6ca48a9852946f472b6847f0a169e6713a44af6dec4f14705eb1d5a733b5a09ea0c22eb17a40a57806c5eadd0bf1754e1ac4fc2391f4d47df3f85ff7efb1c3cd8ffb578306e2bc1af5f0fe09fd1e96ffb670fc6c183fbe3cfbfc1bfd3091bdc7f3418db26f2bdb6b2cb20364800a2066d858301b89ee8c9816aba02dbf5211becafc28fbb204454f464efc1e36f1f3cf96e6fcf309619c750a463aa02410f15163c53b1ef3281eb01f9c47665fca0b950ddde486808ec65db938ee7b30ca6238f5ec1bf85ea2135b354d5f6a4b78d6502e841b62a60c83b8434ac24bdad53a867e9470708ca917cda11d620e639030b649f7c8fe4504488a718f13e797f84ab53968268884eb9fc3e3386a335a65a3fb4d44b93c71e0dfc68a13b955513e29458165d236946e3444865425ebf651e7a58589be837ee913dbe06df61a5b1d4cdca8200877d59a587106805c1effb2e2081dac94217eb04c9038b6d37dd3d35cc2ac17b73fdc11258630e54fa6d33adacf254e17ec78c681bc57941d8ff85a6476bfd7e8fa4d11c91340ebfb9f359a3db4c75cba7d8a0d55987949855944890f9b9e99ab5261e6d022ba5fb3b4e2c38c665862b1c4cc43985bef7dc543461a1f96a8d9b65b7e83ab20c6ba3440efea744736dd0058f9f7aa3cd4d949f3df8c18e3d3cf0720a4839f3a3456640e54777302681e82b063881a229a2f60c874b4128936ec2dab93ef18ec03f47f51e368e003af1450f1dacb80ebd15310a20d820c0cad61cd18dde1283b52384d96dc2db63603a7558b7b9226314946838d4d75946e21fd336b14f2b08d587d30e8cf5b757e93bb076785e5e43b5b14fccfde26d4b58995f7bb0d06e15385d01395840fecf2138f460ff8d608cffc61e085e1284ea4d01871c5e9c0985cc2b238754692d0b07aeb369cd4ff3b7ad81791bbf61f3b09c2fc1f1f2b1d6628a47b1d95d7000facc50fc38f72afa2dfeeda429b6b6002808d7679e897d926d6d9d6677a55f4f0435b73063280da197b2Line truncated
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d7b73db4692f8fffa1463febc216953a06c6753fbb32ce712d9ded3c6b15d9695bb2a45b90289a1880804183c24ab6c7df7ebee1900f3044159f1ee561d2bb1484c4f4f774f4f4f77cf03d3293bccd6d7797cbe2cd9e870cc1eef3dfa96fd23bcc866ecc72c3f67611a01445ae6f1ac2ab3bc60a38273562e393b7cfbe6c3fba31f4f3ebc7d7fcc1671c2c7c10ea0fb214918a12b58ce0b9e5ff22860270567d902aac5052bb22a9f7336cf22cee0e77976c9f394476c760d8db19f8f3eec16e575c2115712cf795a607361c9e6503ae36c915540529c120daf8f0e5fbe397e49cd073b3bd307bf17499c966c966757d0f65356e6159f405b6919a715af7faf93aac0ffc56ff6600a35cf936c1626ecfe53b608930280c2f4bc4ac25cfe46a09d61055f0a90c5bc1ceeefec5c86392baed339b0959eb383ba46b0caa22ae1a36153369cb0d3e13a2ce661b2cef97c5906651ea64512967c7836de2744559ecc42407fc0862037c2dfd40f8081457c3e5a54f020ce5236babf2ccbf5bb3cbb8c239e4fd8fd065ffd6ccc3eed30f8688041c41761959445f0b1c817ffc94378f6265c51a3ffbd7b78fcfed5ee87ec82a7d0f886ba87597611f3baae565354b5080a4076c76558c6f357d059c5eb0c1b1f0922f1038259c41f9fb2610262dc1d4e9a82a25a8882e0f7224b87f4fc068486ffeb222af32c4900e9f0e5254fcbc3324f40f08acc8a79b6868e25b61af9d0c320098b926a013b6995244200d82f590a1a855c921ab4cfb1c6d10b78be2759266da8e6735e14af52846f1a8ec232acdbc34fbc60a37b02affa5821e73e5fc5e5687872f496a086e37d0daaa109d5b72dbad9d19a90143e677b662b4850b0c8f297e17ca92815470198b0f801d916198cb0243b1f0d086a3061f43788a3fa5b798dc215df89e37d0b8fc69d55cba870a3fcbed96f5973f41836774a4c253c3d2f976c973d3a6b6b375d655605ea15c4052f3fc42b9e55a52213ab83507982735e8eea01fb900da7447ff17d11a7737e308447a2c9b1563590da316ab4c428e7799ee523fa17ca14ee27ecaf7b7bf2c18da26e1274a3b2f5d4b5c5a253d994014084dca1e0921868387834bc3b813ddab324b625055dad5b2d7718a3e3fa69b741528d387c4fb2798850b518b1bbc1445ebe80626174eaa7c0d0db9f345b804f710e09f3524c4cb2e7548337cf56eb84131d07ecd3cdbe5e86b38deff9518a1c690db6e52927de0abb32c90a9f9f9e69cf61b2e4890dbebaa6113b1c6a4f530076e058e75999cdb3e470097307b8129aae4a989cafb3bc04f1857663a2ec1d8837e657deda0ea6c0174a5f226336a9d5fa3c8729ee285d64b29e5b091f0ea638e30dc68dbeb50a8205853a90c4c4939eb7aa0e569c8df0714c5a017f9e1144214d213c79f8d01c8b0800e004771a9fe9e31d0dc66598c4d16b4213a711fff87641b48cd9f3037b3621b61addc5795e00dbf67f96f3f0c2b0f2863db9196b6a7a3f4b4783663088fe3d16721aa843c9252434f8754de8a93087c96e1ce8e213f324726658ab4e7e6e1a2744534ecea31f5af56fa087f96a08eecb0b9e285e0d3c8ce25c3e07ab1de763b5144d0916e250539f9759355f62c1c93a42ef5114dd98641ccd3d44e47c05feb6930ebba82622caaed204fc35272130d1f13c2e2e1a52ccee6bbd18b5c3c8ec82939d6ba2571d0da7f723f1c6294c59ca6397b56baa8c86ff2fe5e555965fd0501d8ed1e684c968b804bf54430e902da66eb862599528173794a91ab51ce40cbbbd20eca9999cc8965a4b817d5c7f9a85f38b28cfd6d07705f9e340ce05bf9e65611ec960e766a3ae1343e8ce7369737bf084e33212f6174ac847d4d9516704e1cea1d93df3f82d265880dc70e90d0665d68b85d7601f9223347162407d311f10c540a72cdf0345a386b6b1e26542582b9a62ca148ca4570519f310e26731cd51d47b0501e732ccb9889d1119bb8acb65608e089aa05469bc411c0e271f711f2e2c7d91741f3634d58084e8e8c584a9dc3492edd2f7f760504afe3584eb6782a090139b7e27cdc8ec8bb8909e4c2f8a410b39f4a6ed039dd60c409871b6a1cdc32d1aa491bfa139cf98f1816b5345d34e3a5b174fd9dec42a014fdf577494fe785df2e24356868913e06d556e80f8218aa017017d4361084f74b89b7d377b75c76fe6ee7f4a4100040a5ed41d86e3907c61ca6238faccec2ecd810edeaea9078293f73f8027b32ed16375f85560298e16ac2ac273ce84878af3db322cd80cdc4e9672b0031c0c468d2305eb11f1394e14d1c4c40476e42a8460b9cc58585c50f20c1c9b1c7fafc20bce42365f66f19c07ecc78aac4e94a5c392ea98a8a0caac3a47142b1655391285f3711c2618095610c91419d92d5e225aca1491d1b210011125048e2235c8d922ce8b925dc6455c06ecbf963c95893f8101ccdf1a338a364198a36c7001d82a237b19a6982cccd912fe2958789e4d902ac9bd89e38f0aa652741477b412344744d62f48154e2ed9bc5a61ea405085062509e77c341d7dff14fefbed73f060ffd7e2c1b8ad04bf7e3d807f46a7bfed9f3d18070fee8f3fff06ff4e276c70ffd1606c7bdff7daca2e5fdb2001881ab4150e0610d562900856ef0adce2876cb0bf0a3fee821251d193bd078fbf7df0e4bbbd3dc30f671cb39c0e2b00043d5444f04cc5becb04ae07146edb95f1839e48757bffa321b057d840d3079f65301c79f40afe2dd4e0ab19a5ea444253823103013d2856050c6587908603a6b7750af52cd3eb00413d924f3b3226243c67ce825c9fef911c4a36f11493e927ef8f70e2cb52500dc1942ba434d3435a63aa63455e84f4a6ecdec08f961554453521498919d7d59366a24f646b269450b03c4f8f086befffc6ddb3c7d71096ac3491ba455910e0b0afa8f4ec044d30f8dd391b09d44e11ba4427481e5862bbe9e6d4f0d884eccdf9074b608e3950e9b73dc0b2ca5345fa1d23a26d14c70561ff171a1ead1bf03d92466344d238fce6ce478dee8e350e08366831ebd012b38a9264323f375da3d6c4a30d60a5747fc78905fb183c224c224dd89cb2ea7b6e2a9a8cd37cb5c675b85bb08e22c3daa89103e1880dbae0f153afe1b989f28b073fc8d8c303afa48094333f5a1406547e74077d12085e31770a144d11b5a73b5c0642197413d68ef589b707fe39a6f7b08931303f50f4b0c14a54d2db10a302820f02a26cdd11dde92d310f3c4298dd26733e06a113c3bacf1519bda024daa1be2e3252ff9856a07d5641983e1c76e0acbfbd4adf81b7c3f3f21aaa8d7d6aee576f5bc3cafcda838516c220e209287603f27f0ecb6500fedf08faf86fec81902541a8811a48c811209a5028bc32726895d6b2880d3b9bd642407fdb1a98b7f11b360fcbf912022f9f682da1780c9bcd8203d0e786e2c7b90cd26ff26f074db1b50740f9bd3ee34c2cc16cebeb340b37fd3811Line truncated
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
bs, _ = ioutil.ReadAll(gr)
Assets["app.js"] = bs
+8
View File
@@ -168,6 +168,9 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
OutBytesTotal: 0,
Address: arg.data.addr,
};
$scope.completion[arg.data.id] = {
_total: 100,
};
}
});
@@ -284,6 +287,11 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
$scope.config.Options.ListenStr = $scope.config.Options.ListenAddress.join(', ');
$scope.nodes = $scope.config.Nodes;
$scope.nodes.forEach(function (nodeCfg) {
$scope.completion[nodeCfg.NodeID] = {
_total: 100,
};
});
$scope.nodes.sort(nodeCompare);
$scope.repos = repoMap($scope.config.Repositories);
+14 -2
View File
@@ -199,7 +199,15 @@ func (m *Model) ConnectionStats() map[string]ConnectionInfo {
// Returns the completion status, in percent, for the given node and repo.
func (m *Model) Completion(node protocol.NodeID, repo string) float64 {
var tot int64
m.repoFiles[repo].WithGlobal(func(f protocol.FileInfo) bool {
m.rmut.RLock()
rf, ok := m.repoFiles[repo]
m.rmut.RUnlock()
if !ok {
return 0 // Repo doesn't exist, so we hardly have any of it
}
rf.WithGlobal(func(f protocol.FileInfo) bool {
if !protocol.IsDeleted(f.Flags) {
var size int64
if protocol.IsDirectory(f.Flags) {
@@ -212,8 +220,12 @@ func (m *Model) Completion(node protocol.NodeID, repo string) float64 {
return true
})
if tot == 0 {
return 100 // Repo is empty, so we have all of it
}
var need int64
m.repoFiles[repo].WithNeed(node, func(f protocol.FileInfo) bool {
rf.WithNeed(node, func(f protocol.FileInfo) bool {
if !protocol.IsDeleted(f.Flags) {
var size int64
if protocol.IsDirectory(f.Flags) {