This commit is contained in:
2026-04-18 08:09:38 -04:00
parent e667af9201
commit da8716cccc
5 changed files with 116 additions and 105 deletions

View File

@@ -1,25 +1,25 @@
#LWP-Cookies-2.0 #LWP-Cookies-2.0
Set-Cookie3: dslang=US-EN; path="/"; domain=.apple.com; path_spec; secure; discard; HttpOnly=None; version=0 Set-Cookie3: dslang=US-EN; path="/"; domain=.apple.com; path_spec; secure; discard; HttpOnly=None; version=0
Set-Cookie3: site=USA; path="/"; domain=.apple.com; path_spec; secure; discard; HttpOnly=None; version=0 Set-Cookie3: site=USA; path="/"; domain=.apple.com; path_spec; secure; discard; HttpOnly=None; version=0
Set-Cookie3: acn01="NNc+TvoQfp2pQiuHIAAqUBtXR1S4XhqZJWcHCAARBs+41xk/"; path="/"; domain=.apple.com; path_spec; secure; expires="2027-04-14 09:01:23Z"; HttpOnly=None; version=0 Set-Cookie3: acn01="siA7JPBndkEejEnE/127L8mBwoisazQDFIhojgAQ/KEGDE9i"; path="/"; domain=.apple.com; path_spec; secure; expires="2027-04-16 02:29:40Z"; HttpOnly=None; version=0
Set-Cookie3: aasp=DE9DF160D458CB33DB61E598CA924CC24441BCA91527DC0B793F5576DC6E8DF8BDBF5D9424A9243220F7D62057DD673EE28B6F754666DDF1949F07205B0E0BC0066D0CEDEA32E34965B3EA5AC66D2F90BEAC5E289B72B338B05E5D57B8DDD402BBC24F218664008D4D70C62F90DF6411A599DFC6DE59BA38; path="/"; domain=.idmsa.apple.com; path_spec; secure; discard; HttpOnly=None; version=0 Set-Cookie3: aasp=31DACD6478D254816871CEC71746594E9EB265E23843BFE54ACC23E6CD21C7967B4A74875C4B64D8D546102A6808900C1DFFE23602181DADE792ED7B73E9C5A4CC7C56CCF9C822DA32264AE474FEDF84ADC645D0F5B9D01FF71B500A76FBE7FF8AA5B0B9A6B0FB8F7A61CDB741E9973C9A04245DF7E939AB; path="/"; domain=.idmsa.apple.com; path_spec; secure; discard; HttpOnly=None; version=0
Set-Cookie3: DES580750186337023c50d1415a6e6ca44a2="HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX"; path="/"; domain=.idmsa.apple.com; path_spec; secure; expires="2026-04-21 03:09:12Z"; HttpOnly=None; version=0 Set-Cookie3: DES580750186337023c50d1415a6e6ca44a2="HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX"; path="/"; domain=.idmsa.apple.com; path_spec; secure; expires="2026-04-21 03:09:12Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-UNIQUE-CLIENT-ID="\"BA==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; version=0 Set-Cookie3: X-APPLE-UNIQUE-CLIENT-ID="\"BA==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; version=0
Set-Cookie3: X-APPLE-WEBAUTH-LOGIN="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGneOZkRDmdzLmljbG91ZC5hdXRovQCaguVTZqS1WtbK-2fXiMlSEneJRuCgMGur1kfGcotuhS8Kvhra-S8EJ_LDYfFgbF8KYm2Dwug7ev54fe7_F-ui_zK0AqM9w7i8HvwWtWOA6QeYJtzFKgl7BVt_c5I4FrExr468XbgzmKtoXQxDTJu_wOLbbA~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-LOGIN="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGngXy8RDmdzLmljbG91ZC5hdXRovQD04k7cSA0I7tz8P6YR10gGD7CeiE4Sp9KmB4NcfSJGJ9mMfV3s3UQpxtOj9bruFqCinlYpdqRIEyP2Gq5A_XBK1p7RsIkCrmxvCBTILwOf1RyEF9rd5VMxpyFJXo26hjHe8Cb6EB346qaJbrZ0r89Gs_Dp-A~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-VALIDATE="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGneOZkRDmdzLmljbG91ZC5hdXRovQCaguVTZqS1WtbK-2fXiMlSEneJRuCgMGur1kfGcotuhS8Kvhra-S8EJ_LDYfFgbF8KYm2Dwug7ev54fe7_F-ui_zK0AqM9w7i8HvwWtWOA6amlkIysG_APwQqmrfcDi-L_p8u1i1A8tqFrDUUfJs21Y1v8oA~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; version=0 Set-Cookie3: X-APPLE-WEBAUTH-VALIDATE="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGngXy8RDmdzLmljbG91ZC5hdXRovQD04k7cSA0I7tz8P6YR10gGD7CeiE4Sp9KmB4NcfSJGJ9mMfV3s3UQpxtOj9bruFqCinlYpdqRIEyP2Gq5A_XBK1p7RsIkCrmxvCBTILwOf1bJlsm_AS1Djsp7P1ioqPimN8HaW0JDK-1gjsxQX4O6MgDpkxQ~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; version=0
Set-Cookie3: X-APPLE-WEBAUTH-USER="\"v=1:s=1:d=157320350\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-USER="\"v=1:s=1:d=157320350\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X_APPLE_WEB_KB-FHMLYL_TPMN_3A8D3KIPPI0C_EC="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGm_OLQRDmdzLmljbG91ZC5hdXRovQD38nYoxQenHW9WggeFKkoDa8I8zeKoOshv6I4dsZQalR2itry1r6kUZe9d_BZan1W-oKlImTrYi_-Vt5Q4YEJWJITWeqN8QChxvbTXB0o8sQ-wAIzBL1J5sQIRBqMadrtP5U0wslkRg0u0AguK20CM4TGoGg~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-21 00:32:52Z"; HttpOnly=None; version=0 Set-Cookie3: X_APPLE_WEB_KB-FHMLYL_TPMN_3A8D3KIPPI0C_EC="\"v=1:t=BA==BST_IAAAAAAABLwIAAAAAGm_OLQRDmdzLmljbG91ZC5hdXRovQD38nYoxQenHW9WggeFKkoDa8I8zeKoOshv6I4dsZQalR2itry1r6kUZe9d_BZan1W-oKlImTrYi_-Vt5Q4YEJWJITWeqN8QChxvbTXB0o8sQ-wAIzBL1J5sQIRBqMadrtP5U0wslkRg0u0AguK20CM4TGoGg~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-21 00:32:52Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-DS-WEB-SESSION-TOKEN="\"AQFfzSjK/WZszw0Fsqj3EgUNWNY4t+SKa9A0tAZvx+6URTf4eVhwhvkiDp7K92hEHTDNkvBVpeLWCOciQyzVLPcDhnss5IUImi6rDXxU6diem5bTWiznw50LWVBDnC9GnFB1ER6z1jqvw6u/2pDoO7slxsylU2j5fDp6mPvMe2iz83UhRRDLqUV5RjHOZ3Y93rnGSskislOzvvd/wuWBL9aXdC22oeGCs8lALzT2LDTJE/fJfw4H5ttKDoh5sA5bPgO3UjBtvAOMurTwdlYHmyaZ5pPrRDKSl9sgcbzkxwwvbvCVUbbsLt7rUolhsJmY33Pu51A7ubiG6hzIEg8U/mAQH7A9Ill4D/HbpR0Q4/uW3Sw9BkdI2MopLsLLJudBW66IBfYSGY53Dzr33IXjyi8bn+f8drCoxv+Jqsut5Yn/MI8Ooc9vpkON2INj+MDPCbr9LP2dh2hjOjvyHWJvDIYuIa/1ols9fx7GAT37dp8iuJYq7UYUT4GVaayt5xRH/a+hE8IpM+6gMAVgXMYBYi40eAmvcCG1+Pd4NKTQGRio+Z53bfcpMq4IjV5ZpwmcfWHMsCs6UNuFzDUhz3Oh0O9zK1hubuxgP4NvpJWZTGeDxm3Ak4nphbELvoFeRzqzX+wHLIKfr8H/ruK8LCrLeJvt4QAExQH9N6pjBDot0M/WpG0aZ0ZbOubqhfmX5KftG2QKJwDfLouyLeWp07TvyAsWXkS+o5Bc2ararFO8R5+OHURIIx9O47UUHkA0a7C1iYhdbxf8MMhOjYt6J8buormR4LDZEp2q5Xk=\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-DS-WEB-SESSION-TOKEN="\"AQE2jvAclZD065mntDlVLyvYiJo3gR1bQrXcbC4UJg7cfXVcjogcjL3EORqqwOCw/77BmeCLIYZVCGY/rdu/a7P8a3P628zN4M3/97eFNWavQnlNfVotwXIPv7qcWQoIm7C2G7Gf4JHklBOmzWU9tmub3JpV5bzxRYb41I1YvwUYt8wWigFwQeX1p0djcpB0YbQp7Ign0RzHelQ0LE0046v2mWkeTXN59E57xpVChCkcsydb1LQ7dARyG6K8nDVBxYMrB4CiWR93/w9GbdECWXDl1zGyUcUEKjveXj/f4yUMmP97xlNYSr4T1srOGXuqyGQ35QBbcVhfgciSTSC8IWp1CfoJYDFoRjgsock39xnQIzkV0kgqbqh9KmMnRpra+BvTwFpkZooM5yqBH6q83k1mrQwv3WpGpKSgJf7DHk/DllkZi9mnZHVgukX+KWlgCnl5IPACmg72mbM9Lt43Rn6NxCXE4LoOxSRCg0OM7U5VB2KQEW0itAifwYbTeLDYEy2FK0GysmpQUdiRLPqbY/5tmR29VsrH11ILDmWcMkuClbf4MgFo723r2wPIZc8VXWSNAwArChh6gGmYRmmgpJwMoAADz+e53bH9t2zdNeo5Gl4UXCo2krrwW6hPDvIvIsO2G9RsqxPjfWe8TEhWxqSNZ0NCXihX0AZ+jYVR1eNu6d55TEBavM/wYPxJW7y8YCFJV3xXIpZRmPWAO/+WiqeBBH3jRSIGQZcCe5Sa8114Bf5zVUl2Ccgpo6A4ONfoWkXlDHbeXSxmuRKE7QXjToAcLgEErM1UOPo=\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-HSA-TRUST="\"28a33818a1dce9a0eecde38e7c8fcc6f080b70bc9feb505599fb2855903a4792_HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-07-13 12:56:57Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-HSA-TRUST="\"28a33818a1dce9a0eecde38e7c8fcc6f080b70bc9feb505599fb2855903a4792_HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-07-15 04:01:51Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Events="\"S2V5QXBwbDoBAAAA8QRQAABCqtxc6DiNgfM7sfluuTm75zY6t8HcSbX5byVn83L6Yg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Events="\"S2V5QXBwbDoBAAAA8QRZAADyjPVu3Zmkep80V+qJNHa5C3NwfKpeMyW67J1rMKpK4Q==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Documents="\"S2V5QXBwbDoBAAAAAgRQAAC9HDQLy/UwkOt+Z+OPhwCJxnyB1byDPGL1UYWgHtJEgg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Documents="\"S2V5QXBwbDoBAAAAAgRZAABipc9p/kcwMIQ/uzTmZZxdtx00DjfUVtPIn8qIK3qBiw==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Photos="\"S2V5QXBwbDoBAAAAAwRQAACxKufqce7i/IW850g8JkJ73J0Wyxpjpfh5nAk7eioyvw==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Photos="\"S2V5QXBwbDoBAAAAAwRZAABdIvbUGMfQwMvJBKaERpK7lH+LKZUfwl8xaaM0s/9G3A==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Cloudkit="\"S2V5QXBwbDoBAAAABARQAABnmo+VJgPhrzid+Xl/01UA02nJiwkk9q0MBvy6QH758g==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Cloudkit="\"S2V5QXBwbDoBAAAABARZAABLV1DirvkB63ct2xhJbufRGeA6yHF1dzCZyT2lUxmHqg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Safari="\"S2V5QXBwbDoBAAAAFgRQAAC9tTzH5+GZyvSdFF1r+Zmvj/kJmQNWTYNLCmNG8tX6Cw==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Safari="\"S2V5QXBwbDoBAAAAFgRZAAD1MhBAfPNJA/LzwgvGElc+wsl5KKnPYjLUu4/gMxexQg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Mail="\"S2V5QXBwbDoBAAAABwRQAABywaR34zLT3fm0XcBUYCbETV16EkpVL6/O4hB9EHwDcQ==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Mail="\"S2V5QXBwbDoBAAAABwRZAABpYZPPRGY/AiCTZ+FxbMFSnuLaJ83tH7xhjpL0BjSDDg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Notes="\"S2V5QXBwbDoBAAAACQRQAADqrnrINYzUlz7QoxZO+ami+5QY9Qtys3wAuCPjM0x7wQ==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Notes="\"S2V5QXBwbDoBAAAACQRZAAAHGYf+WnAkIKAbEuOfLXsDNDwkpc9fc9XRBT7MuUB8oA==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-News="\"S2V5QXBwbDoBAAAACwRQAAAYQEni07N+B3hrogj/ZlPdWE3ibkkBCYJcDgadmwRzOw==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-News="\"S2V5QXBwbDoBAAAACwRZAADjYc71gjGFasFxH7Z1SUqX3HeZxOksxRuTIbRcuYhNlA==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-PCS-Sharing="\"S2V5QXBwbDoBAAAADARQAABGcfw9nr8NjONRvLxWcwgMoaBXj7xode3Sf7ajDnV2IQ==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-14 12:57:00Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-PCS-Sharing="\"S2V5QXBwbDoBAAAADARZAABkkP52Jyp0ESCIUjeMwkIQt7V6sNsaAMg/Fqp2BpcFBg==\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-05-16 04:01:54Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-TOKEN="\"v=2:t=BA==BST_IAAAAAAABLwIAAAAAGneP2oRDmdzLmljbG91ZC5hdXRovQCgEswrYhaJx11ybTgoBMzcGPh9PUsXyVTJCpHvMijnTIkcF0JOFbgPAg8KKzEH9Rd9ebBJmHwfJP5LUVHG1YaUgB5xL9LX2AQYoGwnJcaj2mCD7LQxw4WCZSVJf9TauwpgZlhHpR15qHwnpiIC3Qg8Rue57g~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-04-28 13:21:46Z"; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-TOKEN="\"v=2:t=BA==BST_IAAAAAAABLwIAAAAAGngbgERDmdzLmljbG91ZC5hdXRovQA3sNfo8nQ2WqjRiW8b2v6FBA7xVM9ABBbUseXK6M1xna_9nP0GiTFniTIZZOBZKPWrAYTMjtv4yy7kM54yBmzwmpnsWfZi5eEJsLoboChOa7f6SKHTZUIsYnzV_GQH8efLnI9WppfwGYtR-h1kK71sisAa3g~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; expires="2026-04-30 05:05:05Z"; HttpOnly=None; version=0
Set-Cookie3: X-APPLE-WEBAUTH-FMIP="\"BA==BST_IAAAAAAABLwIAAAAAGneP2oRDmdzLmljbG91ZC5hdXRovQCgEswrYhaJx11ybTgoBMzcGPh9PUsXyVTJCpHvMijnTIkcF0JOFbgPAg8KKzEH9Rd9ebBJmHwfJP5LUVHG1YaUgB5xL9LX2AQYoGwnJcaj2h-pjNdL9bRPA229-vtr8LU4Syp2u2FO2pDcJ6aasJg2FHdtQg~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; HttpOnly=None; version=0 Set-Cookie3: X-APPLE-WEBAUTH-FMIP="\"BA==BST_IAAAAAAABLwIAAAAAGngbgERDmdzLmljbG91ZC5hdXRovQA3sNfo8nQ2WqjRiW8b2v6FBA7xVM9ABBbUseXK6M1xna_9nP0GiTFniTIZZOBZKPWrAYTMjtv4yy7kM54yBmzwmpnsWfZi5eEJsLoboChOa_OhPIyPKAsZumke00vIotvQgxBnmoPPwJSambgtmkzhunV0BQ~~\""; path="/"; domain=.icloud.com; path_spec; domain_dot; secure; discard; HttpOnly=None; version=0
Set-Cookie3: xr_3n2093n1a="B50g9gcKmoM+KF+j8hPX6wKXv22QcYsBKEONZTiNR4g="; path="/"; domain=p144-fmipweb.icloud.com; path_spec; secure; discard; HttpOnly=None; version=0 Set-Cookie3: xr_3n2093n1a="B50g9gcKmoM+KF+j8hPX6wKXv22QcYsBKEONZTiNR4g="; path="/"; domain=p144-fmipweb.icloud.com; path_spec; secure; discard; HttpOnly=None; version=0

View File

@@ -1 +1 @@
{"client_id": "a803c3ce-2586-11f1-a724-8f6777a1d2b5", "session_id": "DE9DF160D458CB33DB61E598CA924CC24441BCA91527DC0B793F5576DC6E8DF8BDBF5D9424A9243220F7D62057DD673EE28B6F754666DDF1949F07205B0E0BC0066D0CEDEA32E34965B3EA5AC66D2F90BEAC5E289B72B338B05E5D57B8DDD402BBC24F218664008D4D70C62F90DF6411A599DFC6DE59BA38", "auth_attributes": "zahj2u9cli9LAxaDkM/LZ+cVDLo7WY7x9DXKo/GGGAb+VYFvMJT/jxRGAHy2AaUN3MbqtRLU0i7jA2oeXhQ1iMaUEntaTv9AWTsTfylbAnoJ1Vo+euKP22hW6V/IbTfClCFMHGxZul3ooBdwJwz+otrAo3VPF3yUptZPvP5+7JOegMRDA1awse9Ci0QtcOfI8p6tyj5aV1xjcpLbt29wdmV+Ny/Lm25iFpDKnf/XIgvT1MUXIpGot1NfW3rqWViq/M/pq8DK0i8/RuLDevFYABEGz8Qt3PE=", "scnt": "AAAA-kRFOURGMTYwRDQ1OENCMzNEQjYxRTU5OENBOTI0Q0MyNDQ0MUJDQTkxNTI3REMwQjc5M0Y1NTc2REM2RThERjhCREJGNUQ5NDI0QTkyNDMyMjBGN0Q2MjA1N0RENjczRUUyOEI2Rjc1NDY2NkRERjE5NDlGMDcyMDVCMEUwQkMwMDY2RDBDRURFQTMyRTM0OTY1QjNFQTVBQzY2RDJGOTBCRUFDNUUyODlCNzJCMzM4QjA1RTVENTdCOERERDQwMkJCQzI0RjIxODY2NDAwOEQ0RDcwQzYyRjkwREY2NDExQTU5OURGQzZERTU5QkEzOHwyAAABnYtHDOAIdGLN7q_QgI9AB0GH5OFan9jwoX6JhEYkfqH0K-ydWfBkwqF6Le3-ABEGz6vfU7IlwYBHKE9RVBG8MeYu5XjWFmHIzPcRjW3ImaknBIL7cA", "account_country": "USA", "session_token": "cD1YUhA3Q+BFVazN3KBXOKbVHASxhLLJyWAqVySi3kNzZY4W8ikOiA+sWjs3ROhJcgQh2aErAhxbB3MFVq0h1rdhwbfe6pDtiC1AO7gjuDjCjEJyfZXr4Z5YpeI0ETekbJnNtFrOvxQ5eMdBpXEf9GGOD8FSkBNkl1XYZWdBbsFPKrmGMPEBWcv07pD1XzkONFiwQs71dLPTEwbImkKMjYtTUckv61hjDV9+ktZrYRmRjEhclp3nXkB4a49d88pNVTt9+Dm2MGIuxPvjKogTmE6rLhhxQavVjJrc16zSayrXv30qNiKJfckwSCfcliqWEgICB/I56ZALxbAmvMBWOdB9YPYfvle81KfI1UGrOiXko3G7IzPAA/7voNZqStR0z8FiTiua3GxorxDmUFHezp1kpLgpa+yzNyBobbLP3vbSRC6083rN0XbXM/ad7Tmm2G8FDyzM4XOrE+P2X5mtQcXxlba7ygKq51nP4vM1YrfQYc6ZRgRBJK+vA21i3igPA8awj9zrg4KF5GvMGjwSZ6Tp3wG6MSws909+80bvdp5x22b88k/sjzk2MLNjborCRPz9xC9H/ZAeqjPp6F7S/AqwwEa6RQ34ykiZVLA5dv5bNFteEQZNVO6FmoDBecw3BscsBt6MAHA50mUjq6dvzeZxOOOlpGtgJyOWybyfK3VoevZ03utoYg12dTvLMwGaIyELPhOP6mJFDa2bJxmeDPwkkt+bwk3EVumRudUAhOcIbxXJ52Zt4HuvgzDE/6c+bg9Jbv29cw5njr2P+8VYJO4ghFqmnan+QLnFiwP7Ypacc+Jl0YbEB1bBa/paAnD0wlzYzqS8qi+GQpD5Ro4BFkbS7hMPIvZL1+n4xC3sepc3AAq+0IP6PerQiUn6ORK88JYuRnnMUuwEJcpDtzL/CONusB75h9R4KFIQZl9GykYQ3ZLj+3JerAgvzcFOR0D1OQARBs/I9osU", "trust_eligible": "true", "grant_code": "c610a05475fb544cab5128ff1b920b9a6.0.srzwz.U70T2OR3TxSYAjcY4DHZ9w", "trust_token": "HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX"} {"client_id": "a803c3ce-2586-11f1-a724-8f6777a1d2b5", "session_id": "31DACD6478D254816871CEC71746594E9EB265E23843BFE54ACC23E6CD21C7967B4A74875C4B64D8D546102A6808900C1DFFE23602181DADE792ED7B73E9C5A4CC7C56CCF9C822DA32264AE474FEDF84ADC645D0F5B9D01FF71B500A76FBE7FF8AA5B0B9A6B0FB8F7A61CDB741E9973C9A04245DF7E939AB", "auth_attributes": "TZEZq6jNK7opptLHNWdfaXDIdIxdU7QFMD77vSobzh8nCntqlxgqc//nJp+R019Uu1BCkbJQ2kQqR1klW6lvKS0MLfWf9rNzaflu5uQgHMQhqOm4MJzIb8Mebqfmh2rsPlbm137EJO468E/sZbLLwl1PKOjj3o1IqEhfG17Xsa7TlxJAfLQorZTGJtMAapcxBu3NJIAnYSJRoY7h11keWBRWxGSb6zuYAy0yXAD4x3Pu7tFVtYwQTiUX3+HrcGFVJa/D8f/3vfiryreNgQX7ABD8oRF8Ooc=", "scnt": "AAAA-jMxREFDRDY0NzhEMjU0ODE2ODcxQ0VDNzE3NDY1OTRFOUVCMjY1RTIzODQzQkZFNTRBQ0MyM0U2Q0QyMUM3OTY3QjRBNzQ4NzVDNEI2NEQ4RDU0NjEwMkE2ODA4OTAwQzFERkZFMjM2MDIxODFEQURFNzkyRUQ3QjczRTlDNUE0Q0M3QzU2Q0NGOUM4MjJEQTMyMjY0QUU0NzRGRURGODRBREM2NDVEMEY1QjlEMDFGRjcxQjUwMEE3NkZCRTdGRjhBQTVCMEI5QTZCMEZCOEY3QTYxQ0RCNzQxRTk5NzNDOUEwNDI0NURGN0U5MzlBQnwyAAABnZQtJsgyKZp42zbZ-0Z4oWrpA3YXiaHUTiSnXR609FFr-Gp8mXl0K2uZyfgHABD8oPi9bmzasngL_Wz-FTxJCZqjsaEPEy_FduILu2V9ZZicjLLe-w", "account_country": "USA", "session_token": "r1NSUQJqcNyXMokmn8eZ7kwyXJSKyZ+bfM6J1EO3EK+JWP5PGpyTXp2LoUGHTr14FeEigC9HrJ+Fldhzd+lFxZ5vwSik14II4CD3cJdJ0OS/+hJRQDEqfW4YPsYHia7RsWL7Bn9NcZ2V2CjwROu7KChcUT0Lpjwz2JVsfkX+h8m25H8Rh3jz5Osz+V7raXq5OlAOx7crzXt2dtuZm0zFlhg0X9lmI/NUmx3GlP4kou82pHPWcLQOa+i5sk86WsyjyhoeeCGS1ShuWch6+Cf+0G4ROe/6xSvnaNWU/Lqe8OMddybR0bbvkIAwsD7roIAxk0kRcL8k4MYUBByIw3C0KUKB1cJDdHTyoTJRq9UtUcH0vb+bbs4j2NfuJGO6k99/iG1yFNUj3X+DewCaEeKlb0sMw4Ja9BRfktZ8ql5/2blPa61cg9CNwUl93OXrJ58ux+QYHGKCQbT9v6YwGOLdfRZ24D9EV6n9nKeXrQg6xazO5R3EOtvmiGltLGFIhIWFb2L56juB1hahXXL4yJRL4w7x0kcPIFwdAFXQ0rJCqHWs/DiijrXDINFRgEeEJroyHKw/heO+yiGnHY8xLh51LoRR+5Wx55NJQm54z2P9JXKUqIjj5KPE1kbOBMJQXsUYL3aNVUbzPfDeOrsNCJ/3O0jjyoNfPvU/YPwCBGD5WjYhQJhvmk5J/QVTLantotSj2tU+NwN+BOiCDrs5cC+DKFTph0mN1xap3TSudHMSKNqlSGQ4kTAJaAcG2ECbraedI3b6WhjRPgiWx/fRCmpxpyPZvldFJq3QQXMM64hPQkk/8KG8D2ZLX1rKvZXZRKHo10PbRGYt8injSUjvgYf26+9sK2rCR/mngu0Rye+0fDG6BI4g2FfQ1v2vZW7Y7Q1UXhNxmXXZE/1Lgv7qm6gbHhOEO6JFCn2XfAt1Iee/purvYvkn0ldiuw20/3TNB6DR4AAQ/KEXuV7c", "trust_eligible": "true", "grant_code": "c9517c9fb90e44df386b19607971fb557.0.srzwz.W1TnJS7PpGpVTWSqASYfRw", "trust_token": "HSARMTKNSRVXWFlajR2ecD1662phQjqU9vXxnL49ZjypuVYYXHDpA3wTiX6Mf2J4WDlIhZj52z81aDOuz+VC80bVhV41TSNN4ggoPjW8WnsQrjniTQYkgJycPQNnzhkK4hfe2AMrr/bhrJJm8sHHc+Oh1HUckN6T7T4c1bmf2Qg9tRwsdRDNyMMyFH/Ml/cQlWKj39/YHlY=SRVX"}

Binary file not shown.

View File

@@ -2,6 +2,7 @@ import tempfile
from functools import partial from functools import partial
from typing import Annotated from typing import Annotated
import typer import typer
import os
from pymobiledevice3.remote.common import TunnelProtocol from pymobiledevice3.remote.common import TunnelProtocol
from pymobiledevice3.remote.module_imports import verify_tunnel_imports from pymobiledevice3.remote.module_imports import verify_tunnel_imports
@@ -10,7 +11,8 @@ from src.pymd3_vue_location_sim.server import TunneldRunnerSio, LocationSimulati
from src.pymd3_vue_location_sim.json_formatter import logger from src.pymd3_vue_location_sim.json_formatter import logger
def main(): def main():
cli_tunneld(host="0.0.0.0", port=49151) port = int(os.getenv("PORT", 49151))
cli_tunneld(host="0.0.0.0", port=port)
def cli_tunneld( def cli_tunneld(
host: Annotated[str, typer.Option(help="Address to bind the tunneld server to.")] = TUNNELD_DEFAULT_ADDRESS[0], host: Annotated[str, typer.Option(help="Address to bind the tunneld server to.")] = TUNNELD_DEFAULT_ADDRESS[0],

View File

@@ -14,7 +14,6 @@ import httpx
from contextlib import suppress from contextlib import suppress
from typing import Optional, Dict from typing import Optional, Dict
from dotenv import load_dotenv from dotenv import load_dotenv
from sqlalchemy.util import await_only
with warnings.catch_warnings(): with warnings.catch_warnings():
# Ignore: "Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater." # Ignore: "Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater."
@@ -205,7 +204,7 @@ class TunneldRunnerSio:
await self.context.sio.shutdown() await self.context.sio.shutdown()
self.host = host self.host = host
self.port = os.getenv("PORT") self.port = port
self.protocol = protocol self.protocol = protocol
self.context = context or LocationSimulationState() self.context = context or LocationSimulationState()
self._tunneld_api_address = ( self._tunneld_api_address = (
@@ -862,18 +861,18 @@ class TunneldRunnerSio:
async def resume_simulation_queue(): async def resume_simulation_queue():
"""Resumes asyncio.simulation_queue playback""" """Resumes asyncio.simulation_queue playback"""
self.context.simulation_queue_state = "RUNNING" self.context.simulation_queue_state = "RUNNING"
update_queue_times() await update_queue_times()
def advance_simulation_queue(): async def advance_simulation_queue():
self.context.simulation_queue_state = "NEXT" self.context.simulation_queue_state = "NEXT"
update_queue_times() await update_queue_times()
def update_queue_times(): async def update_queue_times():
current_loc_id = self.context.get_current_loc_id() current_loc_id = self.context.get_current_loc_id()
current_index = get_item_index( current_index = get_item_index(
current_loc_id) if current_loc_id else 0 current_loc_id) if current_loc_id else 0
remaining_items = self.context.simulation_queue_order[current_index + 1:] remaining_items = self.context.simulation_queue_order[current_index + 1:]
new_delay = self.context.next_move or 0 new_delay = 0
now_time = datetime.now(timezone.utc) now_time = datetime.now(timezone.utc)
for item in remaining_items: for item in remaining_items:
item_delay = parse_delay_seconds( item_delay = parse_delay_seconds(
@@ -881,10 +880,11 @@ class TunneldRunnerSio:
new_delay += item_delay new_delay += item_delay
new_time = ( new_time = (
now_time + timedelta(seconds=new_delay)).isoformat() now_time + timedelta(seconds=new_delay)).isoformat()
self.context.simulation_queue_data[item].start = new_time logger.info("Updating queue time for %s to %s", item, new_time)
update_queue_data() self.context.simulation_queue_data[item]["start"] = new_time
await update_queue_data()
def update_queue_data(): async def update_queue_data():
data = { data = {
"simulation_queue": { "simulation_queue": {
"active": self.context.simulation_active, "active": self.context.simulation_active,
@@ -894,7 +894,7 @@ class TunneldRunnerSio:
"worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None, "worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None,
} }
} }
self.context.sio.emit("queue_data_update", { await self.context.sio.emit("queue_data_update", {
"data": data}, namespace="/") "data": data}, namespace="/")
async def empty_simulation_queue(): async def empty_simulation_queue():
@@ -924,6 +924,11 @@ class TunneldRunnerSio:
del self.context.simulation_queue_data[item_id] del self.context.simulation_queue_data[item_id]
def reset_queue(): def reset_queue():
self.context.simulation_queue_data = {}
self.context.simulation_queue_order = []
self.context.set_current_loc_id(None)
def remove_future_items():
current_loc_id = self.context.get_current_loc_id() current_loc_id = self.context.get_current_loc_id()
if current_loc_id and self.context.simulation_active and current_loc_id in self.context.simulation_queue_data: if current_loc_id and self.context.simulation_active and current_loc_id in self.context.simulation_queue_data:
self.context.simulation_queue_order = [current_loc_id] self.context.simulation_queue_order = [current_loc_id]
@@ -1122,20 +1127,19 @@ class TunneldRunnerSio:
return data return data
async def get_reverse_geocode(data): async def get_reverse_geocode(data):
latitude = ( latitude = float(
data.get("latitude") data.get("latitude", 999)
if isinstance(data, dict) if isinstance(data, dict)
else getattr(data, "latitude", None) else getattr(data, "latitude", 999)
) )
longitude = ( longitude = float(
data.get("longitude") data.get("longitude", 999)
if isinstance(data, dict) if isinstance(data, dict)
else getattr(data, "longitude", None) else getattr(data, "longitude", 999)
) )
if latitude and longitude: if latitude != 999 and longitude != 999:
coords = f"{latitude}, {longitude}" coords = f"{latitude}, {longitude}"
rev_geocode = await self.context.reverse_geocode.get_address(latitude, longitude) rev_geocode = await self.context.reverse_geocode.get_address(latitude, longitude)
logger.info("Reverse Geocoded %s to %s", coords, rev_geocode)
return rev_geocode return rev_geocode
else: else:
return None return None
@@ -1422,7 +1426,7 @@ class TunneldRunnerSio:
async def app_clear_queue() -> fastapi.Response: async def app_clear_queue() -> fastapi.Response:
"""Clear the simulation queue""" """Clear the simulation queue"""
logger.info("Simulation Start Requested ") logger.info("Simulation Start Requested ")
await empty_simulation_queue() clear_future_items()
data = {"command_status": "OK", "command_class": "simulation_control", "command": "clear", "message": "Simulation cleared"} data = {"command_status": "OK", "command_class": "simulation_control", "command": "clear", "message": "Simulation cleared"}
return generate_http_response(data) return generate_http_response(data)
@@ -1644,7 +1648,7 @@ class TunneldRunnerSio:
try: try:
match command: match command:
case "next": case "next":
resp = advance_simulation_queue() resp = await advance_simulation_queue()
return resp return resp
case "test-mode": case "test-mode":
@@ -1664,7 +1668,7 @@ class TunneldRunnerSio:
case "clear": case "clear":
""" Clear the simulation queue""" """ Clear the simulation queue"""
await clear_future_items() clear_future_items()
return { return {
"command": command, "command": command,
"command_class": "simulation_control", "command_class": "simulation_control",
@@ -1741,6 +1745,8 @@ class TunneldRunnerSio:
if loc_id and key and value: if loc_id and key and value:
old_val = self.context.simulation_queue_data[loc_id][key] old_val = self.context.simulation_queue_data[loc_id][key]
self.context.simulation_queue_data[loc_id][key] = value self.context.simulation_queue_data[loc_id][key] = value
if key == "delay":
await update_queue_times()
logger.info( logger.info(
"Location Item Update: %s: %s changed from %s to %s", loc_id, key, old_val, value "Location Item Update: %s: %s changed from %s to %s", loc_id, key, old_val, value
) )
@@ -1933,6 +1939,12 @@ class TunneldRunnerSio:
"command_status": "ERROR", "command_status": "ERROR",
"message": f"Unknown operation: {command}", "message": f"Unknown operation: {command}",
} }
@self.context.sio.event
async def reverse_geocode(sid, data: LatLng):
logger.info("OSM Proxy Request from %s, data: %s", sid, data)
rev_geocode = await get_reverse_geocode(data)
return rev_geocode
self._vue_app.include_router(self._app, prefix="/api") self._vue_app.include_router(self._app, prefix="/api")
self._vue_app.mount( self._vue_app.mount(
@@ -1943,15 +1955,10 @@ class TunneldRunnerSio:
return FileResponse(self._vue_dist + "index.html") return FileResponse(self._vue_dist + "index.html")
def _run_app(self) -> None: def _run_app(self) -> None:
# api = uvicorn.Server(uvicorn.Config(self._app, host=self.host, port=49151, log_level="info"))
# vue = uvicorn.Server(uvicorn.Config(self._asgi_app, host=self.host, port=8087, log_level="info"))
# await asyncio.gather(api.serve(), vue.serve())
uvicorn.run( uvicorn.run(
self._asgi_app, host=self.host, port=self.port, loop="asyncio", workers=1 self._asgi_app, host=self.host, port=self.port, loop="asyncio", workers=1
) )
class LocationSimulationQueue(LocationSimulation): class LocationSimulationQueue(LocationSimulation):
def __init__(self, dvt, context: LocationSimulationState): def __init__(self, dvt, context: LocationSimulationState):
super().__init__(dvt) super().__init__(dvt)
@@ -2055,7 +2062,7 @@ class LocationSimulationQueue(LocationSimulation):
name=f"simulation-noise-{loc_id}", name=f"simulation-noise-{loc_id}",
) )
def _update_queue_data(self): async def _update_queue_data(self):
data = { data = {
"simulation_queue": { "simulation_queue": {
"active": self.context.simulation_active, "active": self.context.simulation_active,
@@ -2065,7 +2072,7 @@ class LocationSimulationQueue(LocationSimulation):
"worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None, "worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None,
} }
} }
self.context.sio.emit("queue_data_update", { await self.context.sio.emit("queue_data_update", {
"data": data}, namespace="/") "data": data}, namespace="/")
async def _update_location_item(self, loc_id: str) -> None: async def _update_location_item(self, loc_id: str) -> None:
@@ -2168,18 +2175,18 @@ class LocationSimulationQueue(LocationSimulation):
break break
self.context.next_move = location_item.get("delay") - 1 self.context.next_move = location_item.get("delay") - 1
self.context.simulation_queue_data[loc_id]["delay"] -= 1 self.context.simulation_queue_data[loc_id]["delay"] -= 1
await self.context.sio.emit( # await self.context.sio.emit(
"simulation_status", # "simulation_status",
{ # {
"status": self.context.simulation_active, # "status": self.context.simulation_active,
"loc_id": current_loc_id, # "loc_id": current_loc_id,
"latitude": current_latitude, # "latitude": current_latitude,
"longitude": current_longitude, # "longitude": current_longitude,
"start": current_start, # "start": current_start,
"next_move": self.context.next_move, # "next_move": self.context.next_move,
}, # },
namespace="/", # namespace="/",
) # )
await self._update_location_item(loc_id) await self._update_location_item(loc_id)
await asyncio.sleep(1) await asyncio.sleep(1)
if self.context.simulation_queue_state == "SHUTDOWN": if self.context.simulation_queue_state == "SHUTDOWN":
@@ -2193,7 +2200,7 @@ class LocationSimulationQueue(LocationSimulation):
self.context.simulation_queue_data[current_loc_id]["end"] = datetime.now( self.context.simulation_queue_data[current_loc_id]["end"] = datetime.now(
timezone.utc).isoformat() timezone.utc).isoformat()
await self._update_location_item(current_loc_id) await self._update_location_item(current_loc_id)
self._update_queue_data() await self._update_queue_data()
await self._stop_noise_task() await self._stop_noise_task()
await self.set(new_latitude, new_longitude) await self.set(new_latitude, new_longitude)
self.context.simulation_queue_data[loc_id]["status"] = "set" self.context.simulation_queue_data[loc_id]["status"] = "set"
@@ -2202,25 +2209,25 @@ class LocationSimulationQueue(LocationSimulation):
self._start_noise_task( self._start_noise_task(
loc_id, new_latitude, new_longitude) loc_id, new_latitude, new_longitude)
active_loc_id = self.context.get_current_loc_id() active_loc_id = self.context.get_current_loc_id()
await self.context.sio.emit( # await self.context.sio.emit(
"simulation_status", # "simulation_status",
{ # {
"status": self.context.simulation_active, # "status": self.context.simulation_active,
"loc_id": active_loc_id, # "loc_id": active_loc_id,
"latitude": new_latitude, # "latitude": new_latitude,
"longitude": new_longitude, # "longitude": new_longitude,
"start": new_start, # "start": new_start,
"next_move": None, # "next_move": None,
}, # },
namespace="/", # namespace="/",
) # )
logger.info( logger.info(
"Set simulated location to %s, %s after %ss delay", "Set simulated location to %s, %s after %ss delay",
new_latitude, new_latitude,
new_longitude, new_longitude,
new_delay, new_delay,
) )
self._update_queue_data() await self._update_queue_data()
self.context.simulation_queue_pending_ids.discard(loc_id) self.context.simulation_queue_pending_ids.discard(loc_id)
self.context.simulation_queue.task_done() self.context.simulation_queue.task_done()
await self._enqueue_next_queue_item() await self._enqueue_next_queue_item()
@@ -2326,7 +2333,7 @@ class LocationSimulationTestQueue(LocationSimulationBase):
name=f"simulation-noise-{loc_id}", name=f"simulation-noise-{loc_id}",
) )
def _update_queue_data(self): async def _update_queue_data(self):
data = { data = {
"simulation_queue": { "simulation_queue": {
"active": self.context.simulation_active, "active": self.context.simulation_active,
@@ -2336,7 +2343,7 @@ class LocationSimulationTestQueue(LocationSimulationBase):
"worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None, "worker_task": self.context.simulation_task.get_name() if self.context.simulation_task else None,
} }
} }
self.context.sio.emit("queue_data_update", { await self.context.sio.emit("queue_data_update", {
"data": data}, namespace="/") "data": data}, namespace="/")
async def _update_location_item(self, loc_id: str) -> None: async def _update_location_item(self, loc_id: str) -> None:
@@ -2438,18 +2445,20 @@ class LocationSimulationTestQueue(LocationSimulationBase):
break break
self.context.next_move = location_item.get("delay") - 1 self.context.next_move = location_item.get("delay") - 1
self.context.simulation_queue_data[loc_id]["delay"] -= 1 self.context.simulation_queue_data[loc_id]["delay"] -= 1
await self.context.sio.emit(
"simulation_status", # await self.context.sio.emit(
{ # "simulation_status",
"status": self.context.simulation_active, # {
"loc_id": current_loc_id, # "status": self.context.simulation_active,
"latitude": current_latitude, # "loc_id": current_loc_id,
"longitude": current_longitude, # "latitude": current_latitude,
"start": current_start, # "longitude": current_longitude,
"next_move": self.context.next_move, # "start": current_start,
}, # "next_move": self.context.next_move,
namespace="/", # },
) # namespace="/",
# )
await self._update_location_item(loc_id) await self._update_location_item(loc_id)
await asyncio.sleep(1) await asyncio.sleep(1)
if self.context.simulation_queue_state == "SHUTDOWN": if self.context.simulation_queue_state == "SHUTDOWN":
@@ -2463,37 +2472,37 @@ class LocationSimulationTestQueue(LocationSimulationBase):
self.context.simulation_queue_data[current_loc_id]["end"] = datetime.now( self.context.simulation_queue_data[current_loc_id]["end"] = datetime.now(
timezone.utc).isoformat() timezone.utc).isoformat()
await self._update_location_item(current_loc_id) await self._update_location_item(current_loc_id)
self._update_queue_data() await self._update_queue_data()
await self._stop_noise_task() await self._stop_noise_task()
await self.set(new_latitude, new_longitude) await self.set(new_latitude, new_longitude)
self.context.simulation_queue_data[loc_id]["status"] = "set" self.context.simulation_queue_data[loc_id]["status"] = "set"
await self._update_location_item(loc_id) await self._update_location_item(loc_id)
self.context.set_current_loc_id(loc_id) self.context.set_current_loc_id(loc_id)
if self.context.simulation_noise: if self.context.simulation_noise:
self._start_noise_talk( self._start_noise_task(
loc_id, new_latitude, new_longitude) loc_id, new_latitude, new_longitude)
active_loc_id = self.context.get_current_loc_id() active_loc_id = self.context.get_current_loc_id()
await self.context.sio.emit( # await self.context.sio.emit(
"simulation_status", # "simulation_status",
{ # {
"status": self.context.simulation_active, # "status": self.context.simulation_active,
"loc_id": active_loc_id, # "loc_id": active_loc_id,
"latitude": new_latitude, # "latitude": new_latitude,
"longitude": new_longitude, # "longitude": new_longitude,
"start": new_start, # "start": new_start,
"next_move": None, # "next_move": None,
}, # },
namespace="/", # namespace="/",
) # )
logger.info( logger.info(
"Set simulated location to %s, %s after %ss delay", "Set simulated location to %s, %s after %ss delay",
new_latitude, new_latitude,
new_longitude, new_longitude,
new_delay, new_delay,
) )
self._update_queue_data() await self._update_queue_data()
self.context.simulation_queue_pending_ids.discard(loc_id) self.context.simulation_queue_pending_ids.discard(loc_id)
self.context.simulation_queue.task_done() self.context.simulation_queue.task_done()
await self._enqueue_next_queue_item() await self._enqueue_next_queue_item()
finally: finally:
await self._stop_noise_talk() await self._stop_noise_task()