]> git.mxchange.org Git - friendica.git/commitdiff
Add routes file recompute on last modification time change
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 15 Oct 2020 15:45:15 +0000 (11:45 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Thu, 15 Oct 2020 15:45:15 +0000 (11:45 -0400)
src/App/Router.php

index dfe890fb968809fc0fc429aadf48576fd073a088..d27a9c1ae98cdb49dd03527396d10c368368ee37 100644 (file)
@@ -268,20 +268,33 @@ class Router
         * The cached "routerDispatchData" lasts for a day, and must be cleared manually when there
         * is any changes in the enabled addons list.
         *
+        * Additionally, we check for the base routes file last modification time to automatically
+        * trigger re-computing the dispatch data.
+        *
         * @return array|mixed
         * @throws HTTPException\InternalServerErrorException
         */
        private function getCachedDispatchData()
        {
                $routerDispatchData = $this->cache->get('routerDispatchData');
+               $lastRoutesFileModifiedTime = $this->cache->get('lastRoutesFileModifiedTime');
+               $forceRecompute = false;
 
-               if ($routerDispatchData) {
+               if ($this->baseRoutesFilepath && file_exists($this->baseRoutesFilepath)) {
+                       $routesFileModifiedTime = filemtime($this->baseRoutesFilepath);
+                       $forceRecompute = $lastRoutesFileModifiedTime != $routesFileModifiedTime;
+               }
+
+               if (!$forceRecompute && $routerDispatchData) {
                        return $routerDispatchData;
                }
 
                $routerDispatchData = $this->getDispatchData();
 
                $this->cache->set('routerDispatchData', $routerDispatchData, Duration::DAY);
+               if (!empty($routesFileModifiedTime)) {
+                       $this->cache->set('lastRoutesFileMtime', $routesFileModifiedTime, Duration::MONTH);
+               }
 
                return $routerDispatchData;
        }