Add disk_largest_total_gb to info-json and refactor template cache API
All checks were successful
Build-Test-Publish / build (linux/amd64) (push) Successful in 39s
Build-Test-Publish / build (linux/arm64) (push) Successful in 3m13s

This commit is contained in:
j
2026-04-01 18:18:19 +13:00
parent 0936c3c98e
commit 2ad8718857
5 changed files with 75 additions and 67 deletions

View File

@@ -1 +1 @@
36f6a765ce8cbd6264e650e1535004866ef9131f826a85ee425f42ca01fe673e b7b7f597d066c9959efde19743c65b1988f259c8a11244373242c5966d720581

View File

@@ -461,62 +461,67 @@ bool recreate_tree(std::string destination_folder) {
"T1RfVVNFRF9HQj0kKGRmIC1CRyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywi"\ "T1RfVVNFRF9HQj0kKGRmIC1CRyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywi"\
"IiwkMyk7IHByaW50ICQzfScgfHwgZWNobyAiMCIpCkRJU0tfUk9PVF9UT1RBTF9HQj0kKGRmIC1C"\ "IiwkMyk7IHByaW50ICQzfScgfHwgZWNobyAiMCIpCkRJU0tfUk9PVF9UT1RBTF9HQj0kKGRmIC1C"\
"RyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywiIiwkMik7IHByaW50ICQyfScg"\ "RyAvIDI+L2Rldi9udWxsIHwgYXdrICdOUj09Mntnc3ViKC9HLywiIiwkMik7IHByaW50ICQyfScg"\
"fHwgZWNobyAiMCIpCgojIERpc2sgL3RhbmsgKG9ubHkgaWYgbW91bnRlZCkKRElTS19UQU5LX1VT"\ "fHwgZWNobyAiMCIpCgojIExhcmdlc3QgZGlzayBieSB0b3RhbCBjYXBhY2l0eSAoYWNyb3NzIGFs"\
"RURfR0I9IiIKRElTS19UQU5LX1RPVEFMX0dCPSIiCmlmIFsgLWQgL3RhbmsgXSAmJiBtb3VudHBv"\ "bCBtb3VudGVkIGZpbGVzeXN0ZW1zKQpESVNLX0xBUkdFU1RfVE9UQUxfR0I9JChkZiAtQkcgMj4v"\
"aW50IC1xIC90YW5rIDI+L2Rldi9udWxsOyB0aGVuCiAgICBESVNLX1RBTktfVVNFRF9HQj0kKGRm"\ "ZGV2L251bGwgfCBhd2sgJ05SPjF7Z3N1YigvRy8sIiIsJDIpOyBpZigkMiswID4gbWF4KSBtYXg9"\
"IC1CRyAvdGFuayAyPi9kZXYvbnVsbCB8IGF3ayAnTlI9PTJ7Z3N1YigvRy8sIiIsJDMpOyBwcmlu"\ "JDIrMH0gRU5Ee3ByaW50IG1heCswfScpCgojIERpc2sgL3RhbmsgKG9ubHkgaWYgbW91bnRlZCkK"\
"dCAkM30nIHx8IGVjaG8gIiIpCiAgICBESVNLX1RBTktfVE9UQUxfR0I9JChkZiAtQkcgL3Rhbmsg"\ "RElTS19UQU5LX1VTRURfR0I9IiIKRElTS19UQU5LX1RPVEFMX0dCPSIiCmlmIFsgLWQgL3Rhbmsg"\
"Mj4vZGV2L251bGwgfCBhd2sgJ05SPT0ye2dzdWIoL0cvLCIiLCQyKTsgcHJpbnQgJDJ9JyB8fCBl"\ "XSAmJiBtb3VudHBvaW50IC1xIC90YW5rIDI+L2Rldi9udWxsOyB0aGVuCiAgICBESVNLX1RBTktf"\
"Y2hvICIiKQpmaQoKIyBJUCBhZGRyZXNzZXMKSVBfTE9DQUw9JChob3N0bmFtZSAtSSAyPi9kZXYv"\ "VVNFRF9HQj0kKGRmIC1CRyAvdGFuayAyPi9kZXYvbnVsbCB8IGF3ayAnTlI9PTJ7Z3N1YigvRy8s"\
"bnVsbCB8IGF3ayAne3ByaW50ICQxfScgfHwgZWNobyAiVW5rbm93biIpCgpJUF9UQUlMU0NBTEU9"\ "IiIsJDMpOyBwcmludCAkM30nIHx8IGVjaG8gIiIpCiAgICBESVNLX1RBTktfVE9UQUxfR0I9JChk"\
"IiIKaWYgY29tbWFuZCAtdiB0YWlsc2NhbGUgJj4vZGV2L251bGw7IHRoZW4KICAgIElQX1RBSUxT"\ "ZiAtQkcgL3RhbmsgMj4vZGV2L251bGwgfCBhd2sgJ05SPT0ye2dzdWIoL0cvLCIiLCQyKTsgcHJp"\
"Q0FMRT0kKHRhaWxzY2FsZSBpcCAtNCAyPi9kZXYvbnVsbCB8fCBlY2hvICIiKQpmaQoKSVBfUFVC"\ "bnQgJDJ9JyB8fCBlY2hvICIiKQpmaQoKIyBJUCBhZGRyZXNzZXMKSVBfTE9DQUw9JChob3N0bmFt"\
"TElDPSIiCmlmIGNvbW1hbmQgLXYgY3VybCAmPi9kZXYvbnVsbDsgdGhlbgogICAgSVBfUFVCTElD"\ "ZSAtSSAyPi9kZXYvbnVsbCB8IGF3ayAne3ByaW50ICQxfScgfHwgZWNobyAiVW5rbm93biIpCgpJ"\
"PSQoY3VybCAtcyAtLW1heC10aW1lIDMgaWZjb25maWcubWUgMj4vZGV2L251bGwgfHwgZWNobyAi"\ "UF9UQUlMU0NBTEU9IiIKaWYgY29tbWFuZCAtdiB0YWlsc2NhbGUgJj4vZGV2L251bGw7IHRoZW4K"\
"IikKZWxpZiBjb21tYW5kIC12IHdnZXQgJj4vZGV2L251bGw7IHRoZW4KICAgIElQX1BVQkxJQz0k"\ "ICAgIElQX1RBSUxTQ0FMRT0kKHRhaWxzY2FsZSBpcCAtNCAyPi9kZXYvbnVsbCB8fCBlY2hvICIi"\
"KHdnZXQgLXFPLSAtLXRpbWVvdXQ9MyBpZmNvbmZpZy5tZSAyPi9kZXYvbnVsbCB8fCBlY2hvICIi"\ "KQpmaQoKSVBfUFVCTElDPSIiCmlmIGNvbW1hbmQgLXYgY3VybCAmPi9kZXYvbnVsbDsgdGhlbgog"\
"KQpmaQoKIyBPUyBpbmZvCk9TPSQoZ3JlcCBQUkVUVFlfTkFNRSAvZXRjL29zLXJlbGVhc2UgMj4v"\ "ICAgSVBfUFVCTElDPSQoY3VybCAtcyAtLW1heC10aW1lIDMgaWZjb25maWcubWUgMj4vZGV2L251"\
"ZGV2L251bGwgfCBjdXQgLWQ9IC1mMiB8IHRyIC1kICciJyB8fCB1bmFtZSAtbyAyPi9kZXYvbnVs"\ "bGwgfHwgZWNobyAiIikKZWxpZiBjb21tYW5kIC12IHdnZXQgJj4vZGV2L251bGw7IHRoZW4KICAg"\
"bCB8fCBlY2hvICJVbmtub3duIikKS0VSTkVMPSQodW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNo"\ "IElQX1BVQkxJQz0kKHdnZXQgLXFPLSAtLXRpbWVvdXQ9MyBpZmNvbmZpZy5tZSAyPi9kZXYvbnVs"\
"byAiVW5rbm93biIpClVQVElNRT0kKHVwdGltZSAtcCAyPi9kZXYvbnVsbCB8fCB1cHRpbWUgMj4v"\ "bCB8fCBlY2hvICIiKQpmaQoKIyBPUyBpbmZvCk9TPSQoZ3JlcCBQUkVUVFlfTkFNRSAvZXRjL29z"\
"ZGV2L251bGwgfHwgZWNobyAiVW5rbm93biIpCgojIERvY2tlcgpET0NLRVJfVkVSU0lPTj0iIgpp"\ "LXJlbGVhc2UgMj4vZGV2L251bGwgfCBjdXQgLWQ9IC1mMiB8IHRyIC1kICciJyB8fCB1bmFtZSAt"\
"ZiBjb21tYW5kIC12IGRvY2tlciAmPi9kZXYvbnVsbDsgdGhlbgogICAgRE9DS0VSX1ZFUlNJT049"\ "byAyPi9kZXYvbnVsbCB8fCBlY2hvICJVbmtub3duIikKS0VSTkVMPSQodW5hbWUgLXIgMj4vZGV2"\
"JChkb2NrZXIgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgYXdrICd7cHJpbnQgJDN9JyB8IHRyIC1k"\ "L251bGwgfHwgZWNobyAiVW5rbm93biIpClVQVElNRT0kKHVwdGltZSAtcCAyPi9kZXYvbnVsbCB8"\
"ICcsJyB8fCBlY2hvICIiKQpmaQoKIyBHUFUgbGlzdCAobWF5IGhhdmUgMCwgMSwgb3IgbXVsdGlw"\ "fCB1cHRpbWUgMj4vZGV2L251bGwgfHwgZWNobyAiVW5rbm93biIpCgojIERvY2tlcgpET0NLRVJf"\
"bGUpCkdQVV9KU09OPSJbXSIKaWYgY29tbWFuZCAtdiBsc3BjaSAmPi9kZXYvbnVsbDsgdGhlbgog"\ "VkVSU0lPTj0iIgppZiBjb21tYW5kIC12IGRvY2tlciAmPi9kZXYvbnVsbDsgdGhlbgogICAgRE9D"\
"ICAgR1BVX0xJTkVTPSQobHNwY2kgMj4vZGV2L251bGwgfCBncmVwIC1pICdWR0EgY29tcGF0aWJs"\ "S0VSX1ZFUlNJT049JChkb2NrZXIgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgYXdrICd7cHJpbnQg"\
"ZSBjb250cm9sbGVyXHwzRCBjb250cm9sbGVyXHxEaXNwbGF5IGNvbnRyb2xsZXInIHwgc2VkICdz"\ "JDN9JyB8IHRyIC1kICcsJyB8fCBlY2hvICIiKQpmaQoKIyBHUFUgbGlzdCAobWF5IGhhdmUgMCwg"\
"L15bXiBdKiAvLzsgcy9WR0EgY29tcGF0aWJsZSBjb250cm9sbGVyOiAvLzsgcy8zRCBjb250cm9s"\ "MSwgb3IgbXVsdGlwbGUpCkdQVV9KU09OPSJbXSIKaWYgY29tbWFuZCAtdiBsc3BjaSAmPi9kZXYv"\
"bGVyOiAvLzsgcy9EaXNwbGF5IGNvbnRyb2xsZXI6IC8vJyB8fCB0cnVlKQogICAgaWYgWyAtbiAi"\ "bnVsbDsgdGhlbgogICAgR1BVX0xJTkVTPSQobHNwY2kgMj4vZGV2L251bGwgfCBncmVwIC1pICdW"\
"JEdQVV9MSU5FUyIgXTsgdGhlbgogICAgICAgIEdQVV9KU09OPSJbIgogICAgICAgIGZpcnN0PXRy"\ "R0EgY29tcGF0aWJsZSBjb250cm9sbGVyXHwzRCBjb250cm9sbGVyXHxEaXNwbGF5IGNvbnRyb2xs"\
"dWUKICAgICAgICB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KICAgICAgICAgICAgWyAteiAi"\ "ZXInIHwgc2VkICdzL15bXiBdKiAvLzsgcy9WR0EgY29tcGF0aWJsZSBjb250cm9sbGVyOiAvLzsg"\
"JGxpbmUiIF0gJiYgY29udGludWUKICAgICAgICAgICAgaWYgWyAiJGZpcnN0IiA9ICJ0cnVlIiBd"\ "cy8zRCBjb250cm9sbGVyOiAvLzsgcy9EaXNwbGF5IGNvbnRyb2xsZXI6IC8vJyB8fCB0cnVlKQog"\
"OyB0aGVuCiAgICAgICAgICAgICAgICBmaXJzdD1mYWxzZQogICAgICAgICAgICBlbHNlCiAgICAg"\ "ICAgaWYgWyAtbiAiJEdQVV9MSU5FUyIgXTsgdGhlbgogICAgICAgIEdQVV9KU09OPSJbIgogICAg"\
"ICAgICAgICAgICBHUFVfSlNPTis9IiwiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIEdQVV9K"\ "ICAgIGZpcnN0PXRydWUKICAgICAgICB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KICAgICAg"\
"U09OKz0iXCIiCiAgICAgICAgICAgIEdQVV9KU09OKz0kKGpzb25fZXNjYXBlICIkbGluZSIpCiAg"\ "ICAgICAgWyAteiAiJGxpbmUiIF0gJiYgY29udGludWUKICAgICAgICAgICAgaWYgWyAiJGZpcnN0"\
"ICAgICAgICAgIEdQVV9KU09OKz0iXCIiCiAgICAgICAgZG9uZSA8PDwgIiRHUFVfTElORVMiCiAg"\ "IiA9ICJ0cnVlIiBdOyB0aGVuCiAgICAgICAgICAgICAgICBmaXJzdD1mYWxzZQogICAgICAgICAg"\
"ICAgICAgR1BVX0pTT04rPSJdIgogICAgZmkKZmkKCiMgLS0gT3V0cHV0IEpTT04gLS0KZWNobyAt"\ "ICBlbHNlCiAgICAgICAgICAgICAgICBHUFVfSlNPTis9IiwiCiAgICAgICAgICAgIGZpCiAgICAg"\
"biAneycKZWNobyAtbiAnImhvc3RuYW1lIjoiJzsganNvbl9lc2NhcGUgIiRIT1NUTkFNRSI7IGVj"\ "ICAgICAgIEdQVV9KU09OKz0iXCIiCiAgICAgICAgICAgIEdQVV9KU09OKz0kKGpzb25fZXNjYXBl"\
"aG8gLW4gJyInCmVjaG8gLW4gJywiY3B1IjoiJzsganNvbl9lc2NhcGUgIiRDUFUiOyBlY2hvIC1u"\ "ICIkbGluZSIpCiAgICAgICAgICAgIEdQVV9KU09OKz0iXCIiCiAgICAgICAgZG9uZSA8PDwgIiRH"\
"ICciJwplY2hvIC1uICcsImNwdV9jb3JlcyI6Iic7IGpzb25fZXNjYXBlICIkQ1BVX0NPUkVTIjsg"\ "UFVfTElORVMiCiAgICAgICAgR1BVX0pTT04rPSJdIgogICAgZmkKZmkKCiMgLS0gT3V0cHV0IEpT"\
"ZWNobyAtbiAnIicKZWNobyAtbiAnLCJtb3RoZXJib2FyZCI6Iic7IGpzb25fZXNjYXBlICIkTU9U"\ "T04gLS0KZWNobyAtbiAneycKZWNobyAtbiAnImhvc3RuYW1lIjoiJzsganNvbl9lc2NhcGUgIiRI"\
"SEVSQk9BUkQiOyBlY2hvIC1uICciJwplY2hvIC1uICcsImdwdSI6JyIkR1BVX0pTT04iCmVjaG8g"\ "T1NUTkFNRSI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiY3B1IjoiJzsganNvbl9lc2NhcGUgIiRD"\
"LW4gJywicmFtX3VzZWRfbWIiOiInOyBqc29uX2VzY2FwZSAiJFJBTV9VU0VEX01CIjsgZWNobyAt"\ "UFUiOyBlY2hvIC1uICciJwplY2hvIC1uICcsImNwdV9jb3JlcyI6Iic7IGpzb25fZXNjYXBlICIk"\
"biAnIicKZWNobyAtbiAnLCJyYW1fdG90YWxfbWIiOiInOyBqc29uX2VzY2FwZSAiJFJBTV9UT1RB"\ "Q1BVX0NPUkVTIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJtb3RoZXJib2FyZCI6Iic7IGpzb25f"\
"TF9NQiI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiZGlza19yb290X3VzZWRfZ2IiOiInOyBqc29u"\ "ZXNjYXBlICIkTU9USEVSQk9BUkQiOyBlY2hvIC1uICciJwplY2hvIC1uICcsImdwdSI6JyIkR1BV"\
"X2VzY2FwZSAiJERJU0tfUk9PVF9VU0VEX0dCIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkaXNr"\ "X0pTT04iCmVjaG8gLW4gJywicmFtX3VzZWRfbWIiOiInOyBqc29uX2VzY2FwZSAiJFJBTV9VU0VE"\
"X3Jvb3RfdG90YWxfZ2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfUk9PVF9UT1RBTF9HQiI7IGVj"\ "X01CIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJyYW1fdG90YWxfbWIiOiInOyBqc29uX2VzY2Fw"\
"aG8gLW4gJyInCmVjaG8gLW4gJywiZGlza190YW5rX3VzZWRfZ2IiOiInOyBqc29uX2VzY2FwZSAi"\ "ZSAiJFJBTV9UT1RBTF9NQiI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiZGlza19yb290X3VzZWRf"\
"JERJU0tfVEFOS19VU0VEX0dCIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkaXNrX3RhbmtfdG90"\ "Z2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfUk9PVF9VU0VEX0dCIjsgZWNobyAtbiAnIicKZWNo"\
"YWxfZ2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfVEFOS19UT1RBTF9HQiI7IGVjaG8gLW4gJyIn"\ "byAtbiAnLCJkaXNrX3Jvb3RfdG90YWxfZ2IiOiInOyBqc29uX2VzY2FwZSAiJERJU0tfUk9PVF9U"\
"CmVjaG8gLW4gJywiaXBfbG9jYWwiOiInOyBqc29uX2VzY2FwZSAiJElQX0xPQ0FMIjsgZWNobyAt"\ "T1RBTF9HQiI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiZGlza19sYXJnZXN0X3RvdGFsX2diIjoi"\
"biAnIicKZWNobyAtbiAnLCJpcF90YWlsc2NhbGUiOiInOyBqc29uX2VzY2FwZSAiJElQX1RBSUxT"\ "JzsganNvbl9lc2NhcGUgIiRESVNLX0xBUkdFU1RfVE9UQUxfR0IiOyBlY2hvIC1uICciJwplY2hv"\
"Q0FMRSI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiaXBfcHVibGljIjoiJzsganNvbl9lc2NhcGUg"\ "IC1uICcsImRpc2tfdGFua191c2VkX2diIjoiJzsganNvbl9lc2NhcGUgIiRESVNLX1RBTktfVVNF"\
"IiRJUF9QVUJMSUMiOyBlY2hvIC1uICciJwplY2hvIC1uICcsIm9zIjoiJzsganNvbl9lc2NhcGUg"\ "RF9HQiI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywiZGlza190YW5rX3RvdGFsX2diIjoiJzsganNv"\
"IiRPUyI7IGVjaG8gLW4gJyInCmVjaG8gLW4gJywia2VybmVsIjoiJzsganNvbl9lc2NhcGUgIiRL"\ "bl9lc2NhcGUgIiRESVNLX1RBTktfVE9UQUxfR0IiOyBlY2hvIC1uICciJwplY2hvIC1uICcsImlw"\
"RVJORUwiOyBlY2hvIC1uICciJwplY2hvIC1uICcsInVwdGltZSI6Iic7IGpzb25fZXNjYXBlICIk"\ "X2xvY2FsIjoiJzsganNvbl9lc2NhcGUgIiRJUF9MT0NBTCI7IGVjaG8gLW4gJyInCmVjaG8gLW4g"\
"VVBUSU1FIjsgZWNobyAtbiAnIicKZWNobyAtbiAnLCJkb2NrZXJfdmVyc2lvbiI6Iic7IGpzb25f"\ "JywiaXBfdGFpbHNjYWxlIjoiJzsganNvbl9lc2NhcGUgIiRJUF9UQUlMU0NBTEUiOyBlY2hvIC1u"\
"ZXNjYXBlICIkRE9DS0VSX1ZFUlNJT04iOyBlY2hvIC1uICciJwplY2hvICd9Jwo="; "ICciJwplY2hvIC1uICcsImlwX3B1YmxpYyI6Iic7IGpzb25fZXNjYXBlICIkSVBfUFVCTElDIjsg"\
"ZWNobyAtbiAnIicKZWNobyAtbiAnLCJvcyI6Iic7IGpzb25fZXNjYXBlICIkT1MiOyBlY2hvIC1u"\
"ICciJwplY2hvIC1uICcsImtlcm5lbCI6Iic7IGpzb25fZXNjYXBlICIkS0VSTkVMIjsgZWNobyAt"\
"biAnIicKZWNobyAtbiAnLCJ1cHRpbWUiOiInOyBqc29uX2VzY2FwZSAiJFVQVElNRSI7IGVjaG8g"\
"LW4gJyInCmVjaG8gLW4gJywiZG9ja2VyX3ZlcnNpb24iOiInOyBqc29uX2VzY2FwZSAiJERPQ0tF"\
"Ul9WRVJTSU9OIjsgZWNobyAtbiAnIicKZWNobyAnfScK";
// Decode Base64 data // Decode Base64 data
size_t decoded_size = (strlen(filedata_base64) * 3) / 4; size_t decoded_size = (strlen(filedata_base64) * 3) / 4;
@@ -524,15 +529,15 @@ bool recreate_tree(std::string destination_folder) {
size_t actual_size; size_t actual_size;
base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size);
bool file_written = _recreate_file_(outpath, 14298237631679424228ULL, std::filesystem::perms(509), decoded_data, actual_size); bool file_written = _recreate_file_(outpath, 3149380373933579389ULL, std::filesystem::perms(509), decoded_data, actual_size);
delete[] decoded_data; delete[] decoded_data;
any_written = any_written || file_written; any_written = any_written || file_written;
} }
{ {
// File: agent.hash // File: agent.hash
fs::path outpath = fs::path(destination_folder) / "agent.hash"; fs::path outpath = fs::path(destination_folder) / "agent.hash";
static const char filedata_base64[] = "MzZmNmE3NjVjZThjYmQ2MjY0ZTY1MGUxNTM1MDA0ODY2ZWY5MTMxZjgyNmE4NWVlNDI1ZjQyY2Ew"\ static const char filedata_base64[] = "YjdiN2Y1OTdkMDY2Yzk5NTllZmRlMTk3NDNjNjViMTk4OGYyNTljOGExMTI0NDM3MzI0MmM1OTY2"\
"MWZlNjczZQo="; "ZDcyMDU4MQo=";
// Decode Base64 data // Decode Base64 data
size_t decoded_size = (strlen(filedata_base64) * 3) / 4; size_t decoded_size = (strlen(filedata_base64) * 3) / 4;
@@ -540,7 +545,7 @@ bool recreate_tree(std::string destination_folder) {
size_t actual_size; size_t actual_size;
base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size); base64_decode(filedata_base64, strlen(filedata_base64), decoded_data, &actual_size);
bool file_written = _recreate_file_(outpath, 16323319876897252222ULL, std::filesystem::perms(436), decoded_data, actual_size); bool file_written = _recreate_file_(outpath, 11745996157868493046ULL, std::filesystem::perms(436), decoded_data, actual_size);
delete[] decoded_data; delete[] decoded_data;
any_written = any_written || file_written; any_written = any_written || file_written;
} }

View File

@@ -189,7 +189,7 @@ int add_template_handler(const CommandContext& ctx) {
} }
// 10. Always update dropshell-templates.list with discovered templates // 10. Always update dropshell-templates.list with discovered templates
gTemplateManager().write_list_file(local_path, templates); gTemplateManager().update_source_cache(local_path, templates);
info << "Found " << templates.size() << " template(s)" << std::endl; info << "Found " << templates.size() << " template(s)" << std::endl;

View File

@@ -112,7 +112,7 @@
template_dirs = discover_templates(src.local_path); template_dirs = discover_templates(src.local_path);
// Write the discovered list so next time is fast // Write the discovered list so next time is fast
if (!template_dirs.empty()) if (!template_dirs.empty())
write_list_file(list_file.string(), template_dirs); update_source_cache(src.local_path, template_dirs);
} }
// Remove stale entries for this source from mTemplateMap before re-adding // Remove stale entries for this source from mTemplateMap before re-adding
@@ -187,11 +187,14 @@
return result; return result;
} }
void template_manager::write_list_file(const std::string& list_file_path, const std::vector<std::string>& template_dirs) const void template_manager::update_source_cache(const std::string& local_path, const std::vector<std::string>& template_dirs) const
{ {
std::ofstream f(list_file_path); std::filesystem::path list_file = get_list_cache_path(local_path);
// Remove stale cache before writing
std::filesystem::remove(list_file);
std::ofstream f(list_file.string());
if (!f.is_open()) { if (!f.is_open()) {
debug << "Could not write " << list_file_path << std::endl; debug << "Could not write " << list_file << std::endl;
return; return;
} }
f << "# Auto-generated by dropshell — template directories (cached)" << std::endl; f << "# Auto-generated by dropshell — template directories (cached)" << std::endl;

View File

@@ -72,7 +72,7 @@ class template_manager {
// Template discovery and list file management // Template discovery and list file management
std::vector<std::string> discover_templates(const std::string& local_path) const; std::vector<std::string> discover_templates(const std::string& local_path) const;
void write_list_file(const std::string& list_file_path, const std::vector<std::string>& template_dirs) const; void update_source_cache(const std::string& local_path, const std::vector<std::string>& template_dirs) const;
private: private:
static bool required_file(std::string path, std::string template_name); static bool required_file(std::string path, std::string template_name);