diff --git a/auto/gui.files.go b/auto/gui.files.go index 776ef8dec..63ff0ec39 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -18,7 +18,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["angular.min.js"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffd41b5d73db36f23dbf0255d3928a65cae9dcdcdc44716e5a37edf8d23699b8e98b470f940849a829500740b135aefefb2d3e48020448d11f69729a492c018bfdc6ee62098e9ffdc97342059ab1e29a63f60209b6c523342fa820748bcbdf9b7ccbe53ffd1b3d1b3f193f5be6c52ccdd1d3176891e61c8052badce62933bf25d093680b5fb860642ea2c993271f5386f88ecec58ad0253a2d5724eb22dbe6388eaab968842ea74358518d24922556e439667174518e9e099603ec620bbf494151fc94cf8b0df0f27425c466886e9f20f848b21b863ffe980a0c544f26d5e8128bb76f60484a558f32cc45ca84e65109039cc8498d5db242b122c801e0763f694c2ec8d21f5fefce7f84d128724669916189e4721a40724ea5a00e7b661e3356b0c03a8e317d2de77c4aa0639cfb6c31bc294a446a7c3c46176030bae468861705c3685614394779515cc1881098b9148550c080428ddf92ec058a7e215c600a88c03a20e11cbc42590dbd638528e6458e3404fa3ecb40dd1c730014bb0d785c24f08d805fc60adae5f6230bf9afe9cd05a6d99bd9865be8df6ec5b290367b2fcdfc0b591381e2373f6cf8b0464db7eb19669dc8df03ba949e5390f3639a5f5804f40c2aa7507c67ccc671c2c8cde4fdf1bf4b590afb237f8fffbb05205b37a03104fa819534532aaa41fae30724672bd8b2b8a17889fc279263a467b5fe7b6bde22f0b38a28df53fa9aa6b31c67160d3d8560ae80bd8e6bbcd2393bb9fea598b7e05433f7417921c77fd011d3f66f398cea711b9d593f7503c9724b2ec2fbc76c0b5b031fce1fb2673eb8bc4a6cdf6fc50a439c9fa72a767e70b83e88f05dcaf975c1b26ea4169441bca94742c84b0d55211d42f4c5763ec738c3595c4674f9210b147fa502b83daab41b475f532c80ca950a86d15046bf348fa315c970349c38d07e0e909fbd43a7ce08215af56c37a5505e71e9ed7de17f4a616bf992b773c4b0d832da26c9dd14763b4be757192b366038a0076605b35de1ddac48596612fdbe459fbd0494f9efac586f5286e37484664d31a5d3140b9426bfa56b8cbe3a85b4b6a5195e100a5b197dfb2d3200b32040534e89d1a07a69960c1d805a7fe8f879d3786ad82c7f6596b7a919c04032c8f88a8efa1ab69343a7c65153d3685e556826b61eab24be007f5849a55795904d4e55430918268ec6d271c67c0781640d66e6726b711ed7ebb254a44d56dd3de8eaa5ac031446e040aeb7241aea5a250e336690973e6eafabbfdb954a0215c9eb74beb2f0c971cfa19b02abea671ca12324c113b0464fd12d06148e4bb37eea89da64db11a1c98f5542f6b6822c4d69710d8465210ba5e3753c1c39102283c958c21c5705ef108dd1f393931317926426ce961fab3e86f54113130a79bfae9f1bb3c55654d3ce3c580cc5244384a23605ab502e279355cadf5e5328123798891d2c1b86e0e5a73ca24cbcd9bd3722d8ae058b247a49b26925dcafa95825ebf4263e19a17fa167da120ae29cfeb01398ff5e08a81a8e0367010f4aaa5e64439f438772a5b876d250baf5a1ed80b512df23c8cdf3158a719b6a3da59cf4152100e85bc371a7a3d306391f83eb60f6023dd4d88221e7744f6ccd10d5b14ff541abf7166d1ecfc294f69327cd2318d48e62cb9d00de8c6b563af4021244a3eecc67f249f4815ec1f6a6919d73aaafea782e74108864acf4e9246abe5e5d82abbf9727d344141f36b077cf528e21d21fe909d0de8c0b163f1f5ab141ca63969fa2813c1c423133407ffd85ead1f32cc783a62c7a1afc6080e241cda56c15bcc36c0ed567bac4467d4768f0cd701094d6a8c412a8995437c5590ed5eaa7b78a2cb68f095d148f661747b9110135761337ee1db5d533352eae0dd58d6ec3c83a65bb20ba36a15dedbbd6fce426800cd9267a40d9baf5a562adc27fd20fab63d00d1cf54f250444fa0009a27a3f9ac4380460f13069ea5665923926790c54c2414716de81a0a3eaf18573a690cccaf8097081bc631698e274ea7aa0040cd5e0723c91657f8e1559a943d044281f95de724e915448d408f608cb5663fb321356502cb74d93ec118abe19363176848ae847c28dece049ad6a3d9f4b91fe1f945a5cdd559fe6a47117a5ada14ae3eddaf243ec17ab2e3f48f6d2991f0c0feacc0e8bbeca64ffe76fd698614c29cdb49fba62fbbf3bec6da9fcb389d008029d79aa5d943ff0413348665c4e95a359cf045ad834101f31e3803bc4dfa7544f4e20effed14ebb879d559be42eda91cd98304f36480737aec865cd0987a97f865320ce88b0daaf2dad9338faba7cc6d1b72da6da99c36055937ec48749069f0135da690e50f276a3ac9ee806b1d9a08e63f8501782257c931338eb8ca464e9c63adcdc0043a55e6f1201112c1e4e0247a54dc1ed9e0650014dfce7e2ed6f09570f91c862173b4c0c47e87685d30c7ceb05ba8dcee0140fae76fc3bd46f116833dd0047ba773cfe931734da3b3443c618c856eba0ed68a5baa4adaa763ab26e03b8adb1cb57c575d4a907b32af25b58ad8ff5029e29bdf8d0fe29d16e1903259a154f1328ac31cde2dbfda8dc133e2b9204c8f5fa067c2128be873aa91e3b80e7a83691de6ed570f267412838138a1a262bc5b9d7fe7135936699a798831ab9b5390792d98ea66ba0b9efa195e6b67b5c71a09cc702774b14a2e83d5e501db4b010879f0f34b5503e94b67f260b920b6cf771db32082d13dd5775a2b3ddc86e632bfa6dfb444136f9b01a08aab128b320519d27f8f3d2ed15e7982ec50a268e8e5a1a350aee924c9ba4dcf11eb23f40fea60e7c7b1cc8047f73206eb8b04c699d0eacdbd62a568c5056503c42647257197b6d02430585d4ee41d5712b14cbee991c2b22524e5f0cdd0af7bc556fb00e6fb5da100ab6f44c534dba854fc7138c72712db1df6d359cbbd9a0fccc184eaf7a9c6374431f30b5ec3b2df166cb57b19fa15a0252c20b2662eb81e17de3c667de3085586156b2d85696d86780d6f8db3bfcca73c6c136b458117e70231328299a21f81e0e4d1bd6019f9c781e4f7b9e982ce12fe9b4dd3b0332ab46bd2c877b9a4237f67d5bb49d5c70f23b514f8b9bf7b30e5a639ee394bd2e9f2374163bf6a52f87cf4b976b6d0f748c9e4f155b41ba0b0647bf2cdff90e0adbc226de917d0f9a5f1d5ded401d7602aeea4cf85fe6e33c9de3785e45b951f3ac29e786c38ee321e0692db6df43bebf5bb16d56d4c53687524ef60595e22040ecbbaa6f0b49596278cfb5bd1a23b0d6217a596e98a97f9be51e07009372259dc729dc3d251fd46e40a9f72fd91f491059ef744aa26f906e8ac7a8771c9ebd7ac750f1ea1db9ca83aab2e2e5d49f73fdc88ab5be2b55fb9eeae04c68184ba8860993a3a5d39e6a5ae1f86e09a10b875bedec2f0c23cd6b48cdc82f3ffab815e6f7bec5dbc1a38655bc55c70a93d44a463a8bb67211aae03f53d1a62555ba378cf438b524d219391105e495e601ebcba9c9b4637407a85e5bf251cfe1e5dd6cf70254b3f6602db5074b8267d0f7fafe929b1b1e66bb2ffa94dabcd1613aeabdae74b84d78e73e47a5b587dcadebbe3b678561336715f2edf48d5eef40bf7a652148bfad797ca0bd6c8ed24e53d0eb09f83d6a138b4bc0be27bf129977d60beea4807b87d6a8479de5adc4430a1fcb1b0b77d77ab55f947dedb106598eabf7066297c391badf7702800ab8229ce13959c32e846c9d432dba5ddbefc3646449049777b7e7a5ec3276c9f70ebc1b0d26a09c384f343482f2dada222f0a16abaf79b1d45fd299223d9437d1aa99e72765912e29376ebd018f703cd1980d94a1add9dcdb2f04994018d1142052f735a0927bb3ba9e2074b31523d0404eb280886a3a11c54fe4066771a54067551d60f6ee1b4a25433342e5e3defefc341f89a9416586eade4adb6d9b13d47a6547637905cef1dd3fd033fb8f57a128c8f169007412a2daada5ef86f2da55847e267761ad0f4f0f60e6d77ecc7472f100f26fc2e4edeb3aac006397fe20d74487fc6c8de58b755f909fa9bb4cd69f0e6d36411fe26777e1ac0f4b0f71b35ebc7432f100ea579fc0c9f80a72ef3d7dcc613ef838be85689a5fa73bfe5bf9cad8a7f7efe0e53f9bfd368e33c2e48d8b8f388e0a55febcce6441d1c5b4ad1ffd6a2c14b267d1c83e94cb669779f7b61a162ca57c9e6f336f4655032f9ab764f57372c07d6abe5a24f6165abc067242be9af5522b4cdea53c1dc8eb99034497c7ead2e1e9c02df22e0dce8464d3c1ab9763b5f295a160d4f43f000000ffff010000ffffde437a5d5d3c0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffd41b5d73db36f23dbf0255d3928a65cae9dcdcdc44716e5a37edf8d23699b8e98b470f940849a829500740b135aefefb2d3e48020448d11f69729a492c018bfdc6ee62098e9ffdc97342059ab1e29a63f60209b6c523342fa820748bcbdf9b7ccbe53ffd1b3d1b3f193f5be6c52ccdd1d3176891e61c8052badce62933bf25d093680b5fb860642ea2c993271f5386f88ecec58ad0253a2d5724eb22dbe6388eaab968842ea74358518d24922556e439667174518e9e099603ec620bbf494151fc94cf8b0df0f27425c466886e9f20f848b21b863ffe980a0c544f26d5e8128bb76f60484a558f32cc45ca84e65109039cc8498d5db242b122c801e0763f694c2ec8d21f5fefce7f84d128724669916189e4721a40724ea5a00e7b661e3356b0c03a8e317d2de77c4aa0639cfb6c31bc294a446a7c3c46176030bae468861705c3685614394779515cc1881098b9148550c080428ddf92ec058a7e215c600a88c03a20e11cbc42590dbd638528e6458e3404fa3ecb40dd1c730014bb0d785c24f08d805fc60adae5f6230bf9afe9cd05a6d99bd9865be8df6ec5b290367b2fcdfc0b591381e2373f6cf8b0464db7eb19669dc8df03ba949e5390f3639a5f5804f40c2aa7507c67ccc671c2c8cde4fdf1bf4b590afb237f8fffbb05205b37a03104fa819534532aaa41fae30724672bd8b2b8a17889fc279263a467b5fe7b6bde22f0b38a28df53fa9aa6b31c67160d3d8560ae80bd8e6bbcd2393bb9fea598b7e05433f7417921c77fd011d3f66f398cea711b9d593f7503c9724b2ec2fbc76c0b5b031fce1fb2673eb8bc4a6cdf6fc50a439c9fa72a767e70b83e88f05dcaf975c1b26ea4169441bca94742c84b0d55211d42f4c5763ec738c3595c4674f9210b147fa502b83daab41b475f532c80ca950a86d15046bf348fa315c970349c38d07e0e909fbd43a7ce08215af56c37a5505e71e9ed7de17f4a616bf992b773c4b0d832da26c9dd14763b4be757192b366038a0076605b35de1ddac48596612fdbe459fbd0494f9efac586f5286e37484664d31a5d3140b9426bfa56b8cbe3a85b4b6a5195e100a5b197dfb2d3200b32040534e89d1a07a69960c1d805a7fe8f879d3786ad82c7f6596b7a919c04032c8f88a8efa1ab69343a7c65153d3685e556826b61eab24be007f5849a55795904d4e55430918268ec6d271c67c0781640d66e6726b711ed7ebb254a44d56dd3de8eaa5ac031446e040aeb7241aea5a250e336690973e6eafabbfdb954a0215c9eb74beb2f0c971cfa19b02abea671ca12324c113b0464fd12d06148e4bb37eea89da64db11a1c98f5542f6b6822c4d69710d8465210ba5e3753c1c39102283c958c21c5705ef108dd1f393931317926426ce961fab3e86f54113130a79bfae9f1bb3c55654d3ce3c580cc5244384a23605ab502e279355cadf5e5328123798891d2c1b86e0e5a73ca24cbcd9bd3722d8ae058b247a49b26925dcafa95825ebf4263e19a17fa167da120ae29cfeb01398ff5e08a81a8e0367010f4aaa5e64439f438772a5b876d250baf5a1ed80b512df23c8cdf3158a719b6a3da59cf4152100e85bc371a7a3d306391f83eb60f6023dd4d88221e7744f6ccd10d5b14ff541abf7166d1ecfc294f69327cd2318d48e62cb9d00de8c6b563af4021244a3eecc67f249f4815ec1f6a6919d73aaafea782e74108864acf4e9246abe5e5d82abbf9727d344141f36b077cf528e21d21fe909d0de8c0b163f1f5ab141ca63969fa2813c1c423133407ffd85ead1f32cc783a62c7a1afc6080e241cda56c15bcc36c0ed567bac4467d4768f0cd701094d6a8c412a8995437c5590ed5eaa7b78a2cb68f095d148f661747b9110135761337ee1db5d533352eae0dd58d6ec3c83a65bb20ba36a15dedbbd6fce426800cd9267a40d9baf5a562adc27fd20fab63d00d1cf54f250444fa0009a27a3f9ac4380460f13069ea5665923926790c54c2414716de81a0a3eaf18573a690cccaf8097081bc631698e274ea7aa0040cd5e0723c91657f8e1559a943d044281f95de724e915448d408f608cb5663fb321356502cb74d93ec118abe19363176848ae847c28dece049ad6a3d9f4b91fe1f945a5cdd559fe6a47117a5ada14ae3eddaf243ec17ab2e3f48f6d2991f0c0feacc0e8bbeca64ffe76fd698614c29cdb49fba62fbbf3bec6da9fcb389d008029d79aa5d943ff0413348665c4e95a359cf045ad834101f31e3803bc4dfa7544f4e20effed14ebb879d559be42eda91cd98304f36480737aec865cd0987a97f865320ce88b0daaf2dad9338faba7cc6d1b72da6da99c36055937ec48749069f0135da690e50f276a3ac9ee806b1d9a08e63f8501782257c931338eb8ca464e9c63adcdc0043a55e6f1201112c1e4e0247a54dc1ed9e0650014dfce7e2ed6f09570f91c862173b4c0c47e87685d30c7ceb05ba8dcee0140fae76fc3bd46f116833dd0047ba773cfe931734da3b3443c618c856eba0ed68a5baa4adaa763ab26e03b8adb1cb57c575d4a907b32af25b58ad8ff5029e29bdf8d0fe29d16e1903259a154f1328ac31cde2dbfda8dc133e2b9204c8f5fa067c2128be873aa91e3b80e7a83691de6ed570f267412838138a1a262bc5b9d7fe7135936699a798831ab9b5390792d98ea66ba0b9efa195e6b67b5c71a09cc702774b14a2e83d5e501db4b010879f0f34b5503e94b67f260b920b6cf771db32082d13dd5775a2b3ddc86e632bfa6dfb444136f9b01a08aab128b320519d27f8f3d2ed15e7982ec50a268e8e5a1a350aee924c9ba4dcf11eb23f40fea60e7c7b1cc8047f73206eb8b04c699d0eacdbd62a568c5056503c42647257197b6d02430585d4ee41d5712b14cbee991c2b22524e5f0cdd0af7bc556fb00e6fb5da100ab6f44c534dba854fc7138c72712db1df6d359cbbd9a0fccc184eaf7a9c6374431f30b5ec3b2df166cb57b19fa15a0252c20b2662eb81e17de3c667de3085586156b2d85696d86780d6f8db3bfcca73c6c136b458117e70231328299a21f81e0e4d1bd6019f9c781e4f7b9e982ce12fe9b4dd3b0332ab46bd2c877b9a4237f67d5bb49d5c70f23b514f8b9bf7b30e5a639ee394bd2e9f2374163bf6a52f87cf4b976b6d0f748c9e4f155b5d29442d192b26a230830b0667c42cdff99e0cfbc7e6b2234d1ff41375c6b5237ad85bb82a48e17f99b8f3748ee379150e47cd43a99c1b0e3bce9180a7b52a7f0f85c1ddaa72b3a2aeca39d47cb281a814079164df55a65b48ca5ac47b00ee152381b50ed1cb72674dfd6b2ff7382998dc2ce93c4e85ef29f9a076034abd7f6dff4882c8c2a853127dd574533c4661e4f0ec1546868a5718c9551e54953e2fa7fe9ceb475650f65da9daf754477142c35842c54e981c2d9df654d30a27024b085d61dc6a677f611869de576aa608f9d1e7b230bff7adf20e9e49ac2aaf3a7f98ec5732d259dd958b5005ff99aa3b2da9d2bd61a4c7f12691cec8892820af344f625f4ef1a61da33b40f5da928f7a602f2f71bb37a59a450a6b295258123cacbed7179ddcdcf030db7dd1c7d9e6d50fd37aef75f7c3edd63b173f2aad3de4125ef7253b2b0c9b39abe26fa76ff47a07fad5bb0d41fa6d5de6037d6873e676ba875ef3c06f669b585c02f63d2296c8bc4361702705dc3bb4463d132daf2f1e52f8585e6db8bbd6abfda2ec6b8f35c8725cbd6010bb1c8ed445c0130054c015e10ccfc91a762164eb1c6ad1edda7e7126234b22b8bce43d2f6597b14bbea0e05d7d3001e5c479f4a11194f7db167951b0587dcd8ba5fe92ce14e9a1bcb256cd3c3f298b7449b9713d0e7884738cc66ca00c6dcde6de7e73c804c288a60091baef0b95dc9bd5f504a19bad1881067292054454d389287e2237388b2b053aabea00b3775f652a199a112a9f0bf7e7a7f9ec4c0d2a3354175cdaaee59ca0d6bb3d1acb2b708eeffe819ed97fbc0a45418e4f03a09310d56e2d7d3794f7b322f433b90b6b7d787a0033bff663a6938b07907f13266fdfeb610518bbf407b9263ae4676b2cdfc0fb82fc4c5d7ab2fe7468b309fa103fbb0b677d587a889bf5e2a593890750bffa044ec657907befe9630ef3c1e7f62d44d3fc3addf1dfca77cb3ebd7f076f09daecb7719c1126af667cc47154a8f2e775260b8a2ea66dfde87768a1903d8b46f6a15c36bbcc4bbad5b06029e5f37c9b7933aa1a78d1bc4eab1fa803ee53f3d522b1b7d0e2359013f21dae975a61f2d2e5e940dee31c20ba3c56b7134f076e9177697026249b0e5ebd1cab95af0c05a3a6ff010000ffff010000ffff8424d304863c0000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 41e279b5a..064e2f03c 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -41,6 +41,7 @@ func startGUI(cfg GUIConfiguration, m *Model) { router.Post("/rest/restart", restPostRestart) router.Post("/rest/reset", restPostReset) router.Post("/rest/error", restPostError) + router.Post("/rest/error/clear", restClearErrors) go func() { mr := martini.New() @@ -191,6 +192,12 @@ func restPostError(req *http.Request) { showGuiError(string(bs)) } +func restClearErrors() { + guiErrorsMut.Lock() + guiErrors = nil + guiErrorsMut.Unlock() +} + func showGuiError(err string) { guiErrorsMut.Lock() guiErrors = append(guiErrors, guiError{time.Now(), err}) diff --git a/gui/app.js b/gui/app.js index 19a503a19..c6b1c8013 100644 --- a/gui/app.js +++ b/gui/app.js @@ -334,6 +334,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { $scope.clearErrors = function () { $scope.seenError = $scope.errors[$scope.errors.length - 1].Time; + $http.post('/rest/error/clear'); }; $scope.friendlyNodes = function (str) {