]> git.mxchange.org Git - friendica.git/commitdiff
Do some caching
authorMichael Vogel <icarus@dabo.de>
Sun, 19 Jul 2015 19:29:24 +0000 (21:29 +0200)
committerMichael Vogel <icarus@dabo.de>
Sun, 19 Jul 2015 19:29:24 +0000 (21:29 +0200)
include/discover_poco.php
include/onepoll.php
include/socgraph.php

index 504d972873d0f3ca8ea2795edac411700977f91b..74ed83b4735c405a2ffcb6e8e32e20946f4341bb 100644 (file)
@@ -100,21 +100,22 @@ function discover_directory($search) {
                                if ($exists[0]["last_contact"] < $exists[0]["last_failure"])
                                        continue;
 
-                               $last_updated = poco_last_updated($jj->url);
-                               $last_contact = datetime_convert();
-
-                               if ($last_updated) {
-                                       logger("Mark profile ".$jj->url." as accessible (".$search.")", LOGGER_DEBUG);
-                                       q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
-                                               dbesc($last_updated), dbesc($last_contact), dbesc(normalise_link($jj->url)));
-                               } else {
-                                       logger("Mark profile ".$jj->url." as unaccessible (".$search.")", LOGGER_DEBUG);
-                                       q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
-                                               dbesc($last_contact), dbesc(normalise_link($jj->url)));
-                               }
+                               // Update the contact
+                               poco_last_updated($jj->url);
                                continue;
                        }
 
+                       // Harcoded paths aren't so good. But in this case it is okay.
+                       // First: We only will get Friendica contacts (which always are using this url schema)
+                       // Second: There will be no further problems if we are doing a mistake
+                       $server_url = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $jj->url);
+                       if ($server_url != $jj->url)
+                               if (!poco_check_server($server_url)) {
+                                       logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG);
+                                       continue;
+                               }
+                                       logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG);
+
                        logger("Check if profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG);
                        $data = probe_url($jj->url);
                        if ($data["network"] == NETWORK_DFRN) {
index 73668126a1b7c0a92ece2fd7a499381b7a3b5d6d..c0c2f1a34bbf13db868a2365725a6d29a99400eb 100644 (file)
@@ -120,23 +120,12 @@ function onepoll_run(&$argv, &$argc){
                                        dbesc($updated),
                                        intval($contact['id'])
                                );
-
-                               q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
-                                       dbesc($last_updated),
-                                       dbesc($updated),
-                                       dbesc($contact['nurl'])
-                               );
                        } else {
                                q("UPDATE `contact` SET `last-update` = '%s', `failure_update` = '%s' WHERE `id` = %d",
                                        dbesc($updated),
                                        dbesc($updated),
                                        intval($contact['id'])
                                );
-
-                               q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
-                                       dbesc($updated),
-                                       dbesc($contact['nurl'])
-                               );
                        }
                }
                return;
index c97a0f15cdc40092539a5bc4380d954d5f9b998e..9ccae5040543575092c8e50816143b1288cad8b3 100644 (file)
@@ -238,6 +238,8 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
 
        logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
 
+       poco_check_server($server_url, $network);
+
        // Only fetch last update manually if it wasn't provided and enabled in the system
        if (get_config('system','poco_completion') AND ($orig_updated == "0000-00-00 00:00:00") AND poco_do_update($updated, $last_contact, $last_failure)) {
                $last_updated = poco_last_updated($profile_url);
@@ -245,25 +247,10 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
                        $updated = $last_updated;
                        $last_contact = datetime_convert();
                        logger("Last updated for profile ".$profile_url.": ".$updated, LOGGER_DEBUG);
-
-                       if (count($x))
-                               q("UPDATE `gcontact` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($profile_url)));
-               } else {
+               } else
                        $last_failure = datetime_convert();
-
-                       if (count($x))
-                               q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($profile_url)));
-               }
        }
 
-       poco_check_server($server_url, $network);
-
-       // Test - remove before flight
-       //if ($last_contact > $last_failure)
-       //      q("UPDATE `gserver` SET `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc($last_contact), dbesc(normalise_link($server_url)));
-       //else
-       //      q("UPDATE `gserver` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($last_failure), dbesc(normalise_link($server_url)));
-
        if(count($x)) {
                $gcid = $x[0]['id'];
 
@@ -366,17 +353,53 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
 }
 
 function poco_last_updated($profile) {
+
+       $gcontacts = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s'",
+                       dbesc(normalise_link($profile)));
+
+       if ($gcontacts[0]["server_url"] != "") {
+               $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` < `last_failure`", dbesc(normalise_link($gcontacts[0]["server_url"])));
+
+               if ($servers)
+                       return false;
+       }
+
        $data = probe_url($profile);
 
-       if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED))
+       if (($data["poll"] == "") OR ($data["network"] == NETWORK_FEED)) {
+               q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
+                       dbesc(datetime_convert()), dbesc(normalise_link($profile)));
                return false;
+       }
+
+       if (($data["name"] != "") AND ($data["name"] != $gcontacts[0]["name"]))
+               q("UPDATE `gcontact` SET `name` = '%s' WHERE `nurl` = '%s'",
+                       dbesc($data["name"]), dbesc(normalise_link($profile)));
+
+       if (($data["addr"] != "") AND ($data["addr"] != $gcontacts[0]["connect"]))
+               q("UPDATE `gcontact` SET `connect` = '%s' WHERE `nurl` = '%s'",
+                       dbesc($data["addr"]), dbesc(normalise_link($profile)));
+
+       if (($data["photo"] != "") AND ($data["photo"] != $gcontacts[0]["photo"]))
+               q("UPDATE `gcontact` SET `photo` = '%s' WHERE `nurl` = '%s'",
+                       dbesc($data["photo"]), dbesc(normalise_link($profile)));
+
+       if (($data["baseurl"] != "") AND ($data["baseurl"] != $gcontacts[0]["server_url"]))
+               q("UPDATE `gcontact` SET `server_url` = '%s' WHERE `nurl` = '%s'",
+                       dbesc($data["baseurl"]), dbesc(normalise_link($profile)));
+
+       if ($data["baseurl"] != "")
+               poco_check_server($data["baseurl"], $data["network"]);
 
        // To-Do: Use noscrape
 
        $feedret = z_fetch_url($data["poll"]);
 
-       if (!$feedret["success"])
+       if (!$feedret["success"]) {
+               q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'",
+                       dbesc(datetime_convert()), dbesc(normalise_link($profile)));
                return false;
+       }
 
        $doc = new DOMDocument();
        @$doc->loadXML($feedret["body"]);
@@ -404,6 +427,9 @@ function poco_last_updated($profile) {
                if ($xpath->query('/atom:feed')->length > 0)
                        $last_updated = "0000-00-00 00:00:00";
 
+       q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'",
+               dbesc($last_updated), dbesc(datetime_convert()), dbesc(normalise_link($profile)));
+
        return($last_updated);
 }
 
@@ -430,11 +456,11 @@ function poco_do_update($updated, $last_contact, $last_failure) {
                return false;
 
        // If the last contact time was more than a week ago, then only try once a week
-       if (($now - $contact_time) > (60 * 60 * 24 * 7) AND ($now - $failure_time) < (60 * 60 * 24 * 7))
+       if ((($now - $contact_time) > (60 * 60 * 24 * 7)) AND (($now - $failure_time) < (60 * 60 * 24 * 7)))
                return false;
 
-       // If the last contact time was more than a month ago, then only try once a month
-       if (($now - $contact_time) > (60 * 60 * 24 * 30) AND ($now - $failure_time) < (60 * 60 * 24 * 30))
+       // If the last contact time was more than a month ago, then only try once a month - but only if there ever was a contact time
+       if (($contact_time > 0) AND (($now - $contact_time) > (60 * 60 * 24 * 30)) AND (($now - $failure_time) < (60 * 60 * 24 * 30)))
                return false;
 
        return true;
@@ -452,7 +478,7 @@ function poco_to_boolean($val) {
 function poco_check_server($server_url, $network = "") {
 
        if ($server_url == "")
-               return;
+               return false;
 
        $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
        if ($servers) {
@@ -470,12 +496,8 @@ function poco_check_server($server_url, $network = "") {
                $info = $servers[0]["info"];
                $register_policy = $servers[0]["register_policy"];
 
-               // Only check the server once a week
-               if (strtotime(datetime_convert()) < (strtotime($last_contact) + (60 * 60 * 24 * 7)))
-                       return;
-
-               if (strtotime(datetime_convert()) < (strtotime($last_failure) + (60 * 60 * 24 * 7)))
-                       return;
+               if (!poco_do_update("", $last_contact, $last_failure))
+                       return ($last_contact >= $last_failure);
        } else {
                $poco = "";
                $noscrape = "";
@@ -668,6 +690,7 @@ function poco_check_server($server_url, $network = "") {
                                dbesc($platform),
                                dbesc(datetime_convert())
                );
+       return $failure;
 }
 
 function poco_contact_from_body($body, $created, $cid, $uid) {