diff --git a/auto/gui.files.go b/auto/gui.files.go index 7266cddb5..73fec608b 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("1f8b080000096e8800ffd43c5b73db3697eff915a89a965422534e76b7b363c5e9b44edaf5e6e68993bcb87ea04448624c812a09dad6b8faefdf390048020448d176d2a69ef9bed8b89c3bce0d60c78f3ee749cc389966e9554eb303c2b3828ec82c653c66052dff5e27458eff937f9347e307e3478b249d8609797840e66192c3a2902d8a24ccd4dfb8e88157c02f39cfe219f7260f1e5c8619c9376cc697315b90c37247b04aa322a1be57cd792372763e9c880d45964c43007348bc8ce6024eb52e4042b3344968e67ba7e5e811cf1280302fe0ef3865c47f98cfd23550f870c9f97a486e1e10f841d8eb8c5ebe083902df9f54a30bcadfbd8221e4b51e45e461c625e58245a0042725742485518130870537db4963721e2fecf1d5e6f80572e619a32c8d2802393b77003966c8a8419e9aa75996668e7d39a5ec25ced99840f234b1c9cae83a2db910e3e331390535b2454ea6749e66944cd334c94992a61730c239cd4c8c9c8bc5408b18bf89a303e2bd8e734e190002ed008733b015a1357292a53c9da509912bc82f5104e2ce690e0bf9660d76e8717acde12fa5056988db9106fc4d787d4a59f46abace35f0ef0abe485167ef51cdafe355cc89ff2afe759c0f6bd8ac584d69d609fd3dc00bd93103462fc3e454c32067483945fc5b435696e306ae26ef0eff24cc423820c97bfa67018b74e180c808080876b248c8a85ed21f3e00395ac249a60dc923f0dfe28412392b15d05ff41a86df85a7f985b1972c9c2634d290c8290273299c765ac345f3ec24fb753a6b812966ee02f214c77f959e54b7701c26f5b80eced8fff1849dd8e4c8118293eecde7a61f5a14f1a9fbf8a953a58befe3f17d8edc47935184f64bc1971482c72c14aef7a3c1f24e8027619e5fa559d40d545ba500afeb914e6a3fbcd60f170c90fffbf0e1e49480472380a897ae4b7157e105c2c569319b511ad1c82fa30bfec473e27f2782893eaaa92a6631f7871373caf7be6794033717c2677b4374d261e27bcb38a25e63b51daaf0676b905007ae5b92516fec26c215194d52b6b6c87e0bc137d8f26a2736a3bcc8581b936e31b7c9f2661ace2ea22c5d83aa011f581628fb826ea66998452a81d9b688ba8bc12a7cce818f252eae72109d3691870400d02f939bc7c41be71b38882ba031476bca73bfde1c853c6c32679addc4a5580911c8c0fd1ac943992af86eea14f05241fabefaf777d3cf1095029059eeeb49c33080b3f4329c2d35e0716429c62900918cfc8c600e3d18a06c06031fdf1f1fa5ab75cac00120a4bee2d1c420e09ec5d1b925892657faef6e1ab52cafb7a6307b64e91560c75c13b2bb2b7f383256f008267d5cb357e5a44332264ff6f7f7cd9571a4dc4ff9a3a5b0b0df69063183c85ca7b88dd9b4e0d5b4318f4e11244e6246da042c3c1c4e06cb307f77c5208f5bd38c6f84a21cebf1a7ac2d26d6ecd61ae1d9a6050a22459556ccbd09f9325885d7fefe88fc2f79243521561cb35f379ce61f520e617dcf91ae5bab50f43c1ada141a982bc1b5a386e4aa0f6e63592bf22d81f8375b129fb689d612ca7e5f161c0b6d6d18e6f4f8b081ce86601a98be410e35cea1cb38cda2aae9c6761d565910f53ea7cd32ca8d6e3b79d02c9520c3e3456eb87b1c6ec636cc2dd2b9e995701df8a543a8cc0a16d179cc20f973873e4858d8059c71e6e9d1c7c0608306dd40d100a7f83b44d10af994a7eb3560764216653b973ec643cfec4023e6ebdde572f1efd9fe79c0d38f80203b02d540b0792c27402fd39c67fe93e1c4e4436d3f24032c0f21191890bffe22f5e87194d0419317390d663620fea0a6129b0527349b41fc08175429e63119fc301c38b95522d1186a06f7757a9440c2f9f5f51db379fa15941d613d967d315d1b0af362504d2b66750ebdb62cae06934bbdb7425a67f12acc364e480ef1992a344de2abeb11a2781bc30ee9cabe9a880702fe7e3fa88606d7330e5cc10a88464e33c16325518c5d0b341a264db18a68374f52c81f018ddb296203cbe11471f8686e64f6482d3a7958e7088e6a43f016fe3d7e716eda1c2e6ccaa61c0f30674ca8408b420451b882666929c78ca044bc464422141b99eddb9473223e1e94265a08403f0c9b103b1c8ef722ce15ef95237688f578862cfd1b849a5edc569eaa6eba8dd056904ae6edd2b21df5372b2edb37f69299ed0877ca4cf78bb6c8b011f4374b4c112684a6fa505d7efde70e7d6b22ffc758683881ce18d5ceca27ba530d488c49a93034ed6ea1854cb5e2926639c076d1f735c593c410783fb5e3dea16788b51122b6a463b28b1cacb060125729facd0a404838d5db1f486f8996d5a22412eac428359045053748285bf025a45be4490bc75572d0c1a882066972ab31bc0d5736bf5dd600eb5b28d297741065aab8ccd4a1c2fdc91df2f932cedfba286dea8449d535b6f90d09ab9c4b2eee95650dfc429647629399dc3745b44b3e7d84d35b32348ab9d6916f6909fadef7e5ad59df36a5684a0f9d096e784977a374de2a36da9bc6a2e0dd5a9cff40de1928576db8087bd529cf827c9dc4dcf746c859b8d60edeb576f0ae030eb10c0cc151d9afd3dceac3012a10c7ff9fbe7b1be4e26e329e6f7c8392e188dc2c691881ab392037de51ca801ebef7016ccb0391866b204bde298c3fe729f3b60662974606d8ff1eb4750244ebba55de469bdc6cd8b775dbf3657ae5ed1686da6aacdc7165dca03d5f163cc2b3d3ddb2b63097fb9c3d16ab40a7fc43bca269c17db351ee83a29efecf7e5b23f676ace07173868786bb2cc116590646a1763c0ce835d848e4df6c47a50bb4494114a0a797d760e04e751acb4e693297eddd46a43602b5cd6f4d58505dcec1612287956fae8683cf69cce07c118709e0e29740499a050f4103279920da70b8687ea5d8eee47c4c0d84911d9f774afe46e71150461b16ae00e7b687f4dd3ecb14bf7bcddf2f1c28b229a7ddf27161b46ede44efdd2d92dd57672e39f44b939c21b3b4e9ef6aa3d6cd57cef638dd6265930ead3728ae24308990d712f2c6c9ddc51573a2d9dc80d998e8c1e53d386d726b4b7e47f8fd27a25f33364032d169af6556072e6944a294d1118927b765b497cd2b2cc4257b6b55e5689bb92c584012cea83f266320d80374d5c85e39a252110b66e5a55c6ef88ea94e850465678b46dec3894b1a129367e6199515084c3c7eecea43e86bcfe273bd4a3485d2717d5a6eae399e584b15e566182c7fa6190d2f7af427e46d22406a39d292e3750109831d9a5b7c5a90a719f7cbd64098d1bbba9e6fe124a67c49b392ceb624532ff05bfd786f378eb989edb85b6abf4e0f114342d574e577b06ad6501118e6c4327bd6b31da233df6ea00e8ec324e9d643e913358baab5d7742ccaa8ad92786835df95553a2812b7965871f5340d79cb69db465b594c03ccddc973eb51e94eeb982534cc5e9697aa9d29a1fe52d5a0f3cca45af55df6c8937341d6ce8029f68d05259e9bca791643de9f6c6cb5c2a1d649ad7390db1bafe8aae9f1cb6dc2b9c8f2e1ffabc034ab1cf5a8d916c2b9e1b0a35901705aead575dac760ca75e63b1f57db0103f87b98bd5de9a576d4a5570e29325e82085580c3dc76d5621a9032a1b31e2059199d63af81f4ac7420e7f6dbba3b978328b79eb50652f4650a314b1d3bf5e010ff9d4bb0bf9f654c563b79964ff9d7e99748560d9aad645561b19255dc65adaad28fb3737bceb44d2d9ed9e6597927d9ba2eab240b8a2b5974a363e5413894b8dc3154634206b31b79800e1421cdd794cdf88a3fb23476d36bab48d671e562290bf5575b8a8792cfd11a6321ea36c7f64de57c5228ddc7b897397e997e81d291a1038737352e85eea9847f4b9d8ccfa8351df578f1abeedf6efb404d6d73be50db81f1966f8cabf732ce77c4da0af51d93780a6a970c3b88525aba2551d52755ad44b55d47ecb8b050e5bcd1536d2d472d586feb0cddb5de558fb6b6afd4f17813aefdf633d40a40b5d6efa08a313e90ba9b3eaa032a4c411fdb5927e89f2140b2507ef0d4b82b188947d1785720d8a948d344ea8723322da9d42e134371ad271fc7d5d789e4c71f895a30752e68deb12a30cfd4f2a1ab5ada7b62956e6adb73b5adcc9f35a832620bb8564fa60157eeab21cbadcfabad201d4d36222cb6c8260c5ec419c4d934db08d4d55ffdb1d7009eeb006c1ad09013fdfbcb95f6e961e248dc8dc26b759695615e91a18ca5bc46b7118ac0b2d231265a8ad5e826af746489cc6256d8281e6a4c27f2006b123589484c22223a8b5710aa004d02454c61d012c58b98e7f83dd2accc6f5023f8919ff5f04f81df37ca2e09a07c812edfe4895f9374217f09a702f5101f9557334ff6cb7a1131371eb0038d50574bc8266b92ccadfef9adea1e782c8415a1f9d16d49bddaad7d0ec2d6051f11f152d5c1a2980e78fa5b7c4d23bf12a0b1ab7620c209d8044d63868fa2fad3d33ce46250a8a172046d4f51f749eb7b5609e539b8aca7ff4d1ee9ff58f9b758393e742c9db8b0764be9e9109f387be4f7f836a4f5a1e91ec4bce9474c2715f740ffca8d5e7fd59aa5a0ecd21e708fb7cbce56143f6eff86ec4c3cf9d5fee9906673e97decec3694f521e93e66d68b964e22ee81fde22b1859be849073471b3388773e556a411a2657e1267f5b7e9efdf5eddbf9465e277f17c5b365c12e8e5f7c61625da40eb4c765e2b97d9889302ca52c9ef3f9e3e0e6c9e8a7ed78d12cc1c5e29d60d59058ac2a91bdaa73dd6928276064ffb80ce42de8f8ec8ff11f7f9c8f9d22c02f7a247baa9bffec90fc578b6d68fa77dac7200882317ef32301e650b0535f07bef77428a538180fdaa41889c435bea4be978a8250762ebb64a99f33f99f393920de9137d28645ff5efd7754aa619e852c9f254564cd885ae7c07e38856d1a807da87ed5506c35b07405e8387ec0fe4cea110b9bc3017e773f206cb127bef1381c9865ef99821940aa3b78fe6c2c763e5718ece3a689a960f19f85e84d6942ea92d19f056cc6ffeac3e20d52a27191c4ece2a08621c4302234598d48c8790659f28c6749d33c702c78088ace69960705cb97f19c57f5837f19d3ab4f61e2ee598aef8dfa74c3ca9ff1985c510267ac4822e671998a82b49d8b256520d94fb82ae69b86b4442775626d55cffd6bda6487ad62e4bc8338be94bd534291919c844946c3687327f2447bad9dbedd34c4399100bfa874ac116563957c1a4d66eb5a4c99f37f000000ffff010000ffffe00d9c80f8480000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffd43c6b53dc36bbdff32b946d5a7b93c54b72cee99c81904e4bd21e4e6e4c48f285f2c1bb16ac8357dec8726087f2dfdfe791645bb264af81a44d9979df822ecf5dcf4d72a60f3f1559ca0499f1fca2a07c87085ed20999e74ca4aca4d5dfabac2cf07fea6ff2707a6ffaf02ccb6771461eec90d3382b6051ccceca2ce6fa6f5c742f28e19742f0742e82dd7bf7bec49c146b36178b949d91bd6a47b4cc9332a36150cf0513727c32de951b4a9ecd6200b347024e0b09a75e1721a13ccf32cac3e0a81add173c0308a725fc9de68c840f8a79be020a1f2c84588dc9d53d023f087bc5e997e7b140e0dbbbf5e819156f5fc210f2da8c22f2980b45b964b199cbb3e4ed0a71153077750d24e28c428b34323a3767edc9d3f4cc1d5fae0f9e23cb8135caf2842290e3130f90038612b0e8d6f394f39c7bf61594b21738e7620295d0cc258bd3556ef1389d9223d02f3b2bc88c9ee69c92599e6705c9f2fc1c4684a0dcc628845c0cb4c8f1ab34d921c1abb410940120501b7038072392ea24873c17f93ccf885a417e4d12d043410b5828d62b30d040d04b017f69f5280bbd9e18c05fc7974794252f67abc200ffb61467392af31deaff55ba4c05095fa6bf4d8b71039b95cb19e5bdd0df01bc981d3060f44b9c1d1918d40ca9a6487863c8da72fcc0f5e4ede11fc63c869393bda39f4b58640a0744464040b093255246cd92e1f001c8fe028e386d491e81ff9e6694a859a580e1a23730fc215dd0af8cbd60f12ca38981444d1198cbc10dd0062e9a672fd9aff279074c39731b904738fe9b72b1a685e33069c64d70d6fe0f87ecd025478d109cf46f3eb1fdd059991ef98f9f3e55a6f83e1cdce5c87db0194568bf96624121aacc63e9933f582c6f04781817c545ce937ea0c62a0d78d58cf452fbfe9579b86080fcdffbf78747043c1a014483745d89bb8e3b10478ecaf99cd28426611576f0273d25e17d1965cc514355294b4538deb5a7c2e007460570732e7d763046271d6761b048131ab456bb310c7fae2d129a887643329a8dfd447485cc86946b5764bfc7e01b5c797513cba92839eb62d22fe62e595ecde2f979c2f315a81af0816581b2cfe97a96c73cd199cd7587a8fb18acc3e729f0b1c0c5757262d226139408008655d6f38804d3620d0771093416684d4511369b9358c46de66cb3dbf5295641043270bf41f258a50aa19f3a0dbc5290b9aff9fdedec1344a50864568466d2308ee02cbd88e70b03789a388af10a402623bf2098bd0006289bc3c0877707fbf972953370000869a8780c3148b8c76972e248a2cd95f9bb9f4623cb1bac294c1d597e01d8310985ecee221c4fac152281c910d76cd5c9ea984cc9e3eded6d7b659a68f753fd18b92decf79a41ca203237b96f6b362f453d6dcda35304899394912e014b0f8793d1222ede5e30c8e356948bb55494673dfe5445c7ae337bed8c08beee80824851a53573af63b18896f165b83d21ff4b1e2a4dc81507ecb7b5a0c5fb5c4058dff2a4ebce2a14bd48c62e8516e65a70dda821b91a82db5ad689fc9a40fc9b2f4848bb44eb08657b280b9e85ae362c737ab4d742e742b00dccdca0865ae7d0679c7651d576639b0eab2a88069fd37619e547d72afbd05d418627cac272f738dc8e6d985be4a7b657c275e097f6a0322b59424f5306c99f3ff441c2c2cee18cb3c08c3e16061734e8068a0638c5f7114527e42391af5680d90b59d6f342f998003db3078d9c6f7657cbe57f8fb74f22917f00047c1f5403c1e6919a00bdcc0ac1c3c7e35d9b0fbd7d8f8cb03c84646044fefa8b34a3074946476d5ed43498d98884a3864aec221c523e87f8119f51ad984764f4e378e4e5568bc460a81ddc57f97e0609e7b7d777ca4ef36fa0ec04eb31fed5746d292c4841359d98f5390cbab2b8064ca1f4de0969c5d365ccd75e481ef1d92ab44de29beb11a27817c31ee9aa869b8c0712fef630a896065773015cc10a88465e33c163a5504c7d0b0c1a76db6295d1ee34cb217f04347ea7880d2c8f53c4e1fd532bb3476ad1c9c33a4f70d41ba237f0df83e727b6cde1c2b66caaf10873c68c4ab4284410852f68569672c0084a2468452442b1c3d9bd4d3b2712e24169a38500f4e3b80db1c7e104cfd342f35e3b628f580fe6c8d2bf41a8f9f94de5a9eba69b086d09a964d12d2dd7517fb7e2727de32099b98e70a3cc4cbfe88a0c1b417fb3c434615268ba0fd5e7d77fe9d1b721f27f8c859613e88d51ddac7ca41bd580c4d8944a4333ee163ac8d42bbe505e006c1f7ddf523c590a81f76337ee0d7a86589b2062473a36bbc8c1120b26799562deac00844c50b3fd81f4566859234aa2a0ee5aa506b2a8e1461965676201e91679dcc1719d1cf430aaa1419adc690c6fe2a5cb6f9f35c0fa0e8acc253d44d92aae3275a8707ff6877cb1488b373e4adb3a614a75ad6d614bc23ae7528b076559a3b054e591dc6427f76d116d92cf10e10c960c4d526174e4fd92b1ae16ab0b53d8be0eadcbbf482f324bdf30f8a1ba6f1bdae094edecb137358ebfd08dc44ea790059e5352941cfe2f5f5275d33b97173d8921edf07ecd0bfd5cc65911367c4e889fb3b1b7286fdd7db69ab0cec20a5aa46e377450b19c99bbea48f0a85865a90883094a325e192ee2d27011979180a80b264bda4d62d58758e585d3350474a082ff3f7afb262ae44d6a7adad2ed7842ae16344ec031ee90ab603f674093d87a0f27210035c62b204ddd804c3f15390baeadce65fd5bbf618cb0813fea6a65c8de7ba7daad3ebf7de3d0755d502cf28bc0e9d338f2d15bad951beebc5bb4178b522478f8fb7bee0ee66a9fb749e47418a8789f2e695e8ad0eef487a0bb27ffb3ddd549be192be82fbcf1ade5ef2bb025e760277ac783885e82d924e1d5f5a4f2e12e298802f4f4e212ecdeab4e6bd911cd4e557fba956a589986cb6f435854df2ec219237b7570a987a34f79cae0d8118f09e0e2174049cea307a081432e89b622069a5f25b65bf9405b0371e226181b257f65f2082893358b9780f37a80f45beecc2b7eff9abf5f380985dc96f6cbc787d1b93a9497077e916cbefbf3c961589ee78df9954ddf6f8cda345f353be074cb956d3a8ce6a6bc53c12c48ddaba82b337f1b5acec96e790b666b62009777e0b4cdad2bf9fec8fc8f04c4766c809ca6d75eabb4145cd2842439a31392eede94d14136afb1109fec9d55b5a36d27e36001593ca7e1944c81e000d0d5235bd588ce501c98b597f2b9e15b66403512949d2b1a7591286f99484a9eda6754955030f1e891af9162ae3d4e4fcc32d7164acffd6fb5b9e178d759aa29b7c360f533e3343e1fd06051d7a100a9e3482b8e5725240c6e68eef0695191731156bd8d98d3dbba9eefe124e6624179456757926976283afdf860378eb989ebb83b8ad75e0f914242d576e5b7b06ad6521118e6ae63f66c603fc764bedb403d1cc759d6af87ca271a16d568afed58b4513b35bdb1cca89c0b7fda8bd7ae58880d340d754debda46575d4f23ccddc933e755ec46eb986734e62faa5be1de94d07c6a6bd1796c53ad1b475be4f189246b63c094fba69292c04fe5294f21efcfd6ae5ae1509ba43639c8cd8d57b605cdf8e537e14266f9f0ff75609ad78e7ad2ee6be1dcd85bcad657b1bca35e5de5430ca65a673f54f2753f3080bf83d99b955e7a47537a159022e32d8e540538ccebbe5acc00522574ce0b2a27a3f3ecb5901e570ee4c47d1c78eb7210e536b0d6408abe4e21e6a863a31e3ce2bf7509f6f7b38cc96a2fcfea238555fe3592558b662759d5589c64157739abeaf4e3f8c49db36dd38867ae79d6de49f5deab2ac981e24b16fde8587510f6142e7f0c359850c1ec4a1da01d4d48bbd3d78eaff8a34a633fbdae8a541d572d56b2d07f75a57828f902ad3195a2ee726cdf55cea784d27f8c0799e3d7e917681d593af07853eb56eb8e4af8b7d4c9f80edcd0d18027cbfa02f1a62fecf436ef13bb0d186ff848ba7ef0e37d086dacd01f62c9b7ac6ec9b08128ada51b12557f13d64954d72dc5867b0c5dce5b3dd5ce72d481f5a6c9d07deb7df56867fb4a1f8fd7f12aec3e439d00746bfd16aa98e20bafdbe9a33ea0d214ccb18d7582f91d05240bd5175badbb82897cd58d7705929d9a3443a4613c21b38a4ae3363496f792ea755f731f4a7efa89e80533ef82f625b106f3542f1ffbaaa5adc74ee9a6b73dd3dbaafcd980aa22b684ebf4645a70d5be06b2dafaacde0ad2316423c362876ce2e879ca21cee67c2d51d77f0dc7de0078660270694043cecc2f4b97c6b793992771b70aafe531afc2bc26431b4bf50ec0452803cbd2c498192956ab9bbc3491652a8b5962a3786c309da9036c48d42622b38948e83c5de2c52d18321431a5454b929ea5a2c00faae6557e831ac1af149d978b1afcb655762900d5137af5a850fe9ae567ea977826518ff1557c3df378bbaa171173eb053ed00875b5826cb3a6c8bc363f2cd6dd8380c5b022b63f27aea8d7bb8def59d8aa1413229fda7a5894d391c87f4f2f6912d602b476350e443a0197a059caf055d7707ada875c0e4a35d48ea0eb2ded36e97c90aba03c0397f5e4bfc943f33f4efe2d574ef73c4b777d58fba5f4648c6fb403f2477a13d286d07407625e0f23a6978a3ba07fe9476f3ecbe53928bbb207dc136cb2b325c5cff6bf233b936f968dfff448b3bdf42e767613ca86907417331b444b2f1177c07efe0d8cac5840c8b9a58d59c47bdf5a75208db38b785dbca9be2ffff6f6ed7de46f92bf89e2f9a264e707cfbf32b13e5247c6eb38f9bd40cc6518565296ef11c36974f578f2f3f5f4ac5d82cbc51bc1ea21b95857225b75e7bad7500ec1c8fe7119a85bd0e9f19fd33fff3c997a45809f2429f67437ffe91ef9af0edb30f4efb58f51144553fc6849012ca060a7a1097cebc9584971341d75493191896bfa8586412e0b42d5b9ec93a579ced43fe0b24382fd60620ccbfebdfe1762ea61c16356ccb332716664adb3e33e9cc2360dc0ded3bf1a28ae0db07409e8047e81ff54e9110b9bbd11fec30123c2ceb6e4472a7b23bbec3dd63023487547cf9e4ee5ce671a837bdc0c31952cfd5ccade9421a43e197d2e6133feb31567af9112838b2c65e73b0d0c298609a1d9724262213864c973c1b3b679e058f400145d505e44252b16e9a9a8eb87f04b4a2f3ec699bf67293f981ad20dab7ea6537241099cb1324b5820542a0ad2f62e569481643fe2aa54ac5bd2929dd45d67abfe5ea1a14d75d86a464e7a88130bd53b25141929489c711a27eb5b9127db6bddf46da6212d8802f855a5e38c681babe5d36a323bd762da9cff030000ffff010000ffff6965c7dcd2490000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["app.js"] = bs diff --git a/gui/app.js b/gui/app.js index f57a225bd..5b8e503da 100644 --- a/gui/app.js +++ b/gui/app.js @@ -10,6 +10,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { var prevDate = 0; var getOK = true; var restarting = false; + var oldOptions = {}; $scope.connections = {}; $scope.config = {}; @@ -251,13 +252,18 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) { }; $scope.editSettings = function () { + oldOptions = angular.copy($scope.config.Options); $('#settings').modal({backdrop: 'static', keyboard: true}); } $scope.saveSettings = function () { - $scope.configInSync = false; - $scope.config.Options.ListenAddress = $scope.config.Options.ListenStr.split(',').map(function (x) { return x.trim(); }); - $http.post(urlbase + '/config', JSON.stringify($scope.config), {headers: {'Content-Type': 'application/json'}}); + // Make sure something changed + if(! angular.equals(oldOptions, $scope.config.Options)){ + $scope.configInSync = false; + $scope.config.Options.ListenAddress = $scope.config.Options.ListenStr.split(',').map(function (x) { return x.trim(); }); + $http.post(urlbase + '/config', JSON.stringify($scope.config), {headers: {'Content-Type': 'application/json'}}); + } + $('#settings').modal("hide"); };