]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
Merge commit 'upstream/master'
[friendica.git] / include / poller.php
index a6b85f2d23232e9f71a15ae1079f55d8e940b94e..499483d007dea6ecaffde1d9c4d0fffb420e79e3 100755 (executable)
@@ -25,10 +25,20 @@ function poller_run($argv, $argc){
        require_once('include/Contact.php');
        require_once('include/email.php');
        require_once('include/socgraph.php');
+       require_once('include/pidfile.php');
 
        load_config('config');
        load_config('system');
 
+       $lockpath = get_config('system','lockpath');
+       if ($lockpath != '') {
+               $pidfile = new pidfile($lockpath, 'poller.lck');
+               if($pidfile->is_already_running()) {
+                       logger("poller: Already running");
+                       exit;
+               }
+       }
+
        $a->set_baseurl(get_config('system','url'));
 
        load_hooks();
@@ -69,6 +79,19 @@ function poller_run($argv, $argc){
        // clear old cache
        Cache::clear();
 
+       // clear item cache files if they are older than one day
+       $cache = get_config('system','itemcache');
+       if (($cache != '') and is_dir($cache)) {
+               if ($dh = opendir($cache)) {
+                       while (($file = readdir($dh)) !== false) {
+                               $fullpath = $cache."/".$file;
+                               if ((filetype($fullpath) == "file") and filectime($fullpath) < (time() - 86400))
+                                       unlink($fullpath);
+                       }
+                       closedir($dh);
+               }
+       }
+
        $manual_id  = 0;
        $generation = 0;
        $hub_update = false;
@@ -140,7 +163,10 @@ function poller_run($argv, $argc){
                        if($manual_id)
                                $contact['last-update'] = '0000-00-00 00:00:00';
 
-                       if($contact['network'] === NETWORK_DFRN || $contact['network'] === NETWORK_OSTATUS)
+                       if($contact['network'] === NETWORK_DFRN)
+                               $contact['priority'] = 2;
+
+                       if(!get_config('system','ostatus_use_priority') and ($contact['network'] === NETWORK_OSTATUS))
                                $contact['priority'] = 2;
 
                        if($contact['priority'] || $contact['subhub']) {
@@ -194,8 +220,8 @@ function poller_run($argv, $argc){
                                                        $update = true;
                                                break;
                                }
-//                             if((! $update) && (! $force))
-//                                     continue;
+                               if((! $update) && (! $force))
+                                       continue;
                        }
 
                        // Check to see if we are running out of memory - if so spawn a new process and kill this one
@@ -216,7 +242,7 @@ function poller_run($argv, $argc){
 
                        $importer_uid = $contact['uid'];
                
-                       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
+                       $r = q("SELECT `contact`.*, `user`.`page-flags` FROM `contact` LEFT JOIN `user` on `contact`.`uid` = `user`.`uid` WHERE `user`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
                                intval($importer_uid)
                        );
                        if(! count($r))
@@ -419,13 +445,13 @@ function poller_run($argv, $argc){
                                                        // look for a 'references' header and try and match with a parent item we have locally.
 
                                                        $raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
-                                                       $datarray['uri'] = trim($meta->message_id,'<>');
+                                                       $datarray['uri'] = msgid2iri(trim($meta->message_id,'<>'));
 
                                                        if($raw_refs) {
                                                                $refs_arr = explode(' ', $raw_refs);
                                                                if(count($refs_arr)) {
                                                                        for($x = 0; $x < count($refs_arr); $x ++)
-                                                                               $refs_arr[$x] = "'" . str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x])) . "'";
+                                                                               $refs_arr[$x] = "'" . msgid2iri(str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x]))) . "'";
                                                                }
                                                                $qstr = implode(',',$refs_arr);
                                                                $r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1",
@@ -453,12 +479,47 @@ function poller_run($argv, $argc){
                                                                                intval($r[0]['id'])
                                                                        );
                                                                }
+                                                               switch ($mailconf[0]['action']) {
+                                                                       case 0:
+                                                                               break;
+                                                                       case 1:
+                                                                               logger("Mail: Deleting ".$msg_uid);
+                                                                               imap_delete($mbox, $msg_uid, FT_UID);
+                                                                               break;
+                                                                       case 2:
+                                                                               logger("Mail: Mark as seen ".$msg_uid);
+                                                                               imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
+                                                                               break;
+                                                                       case 3:
+                                                                               logger("Mail: Moving ".$msg_uid." to ".$mailconf[0]['movetofolder']);
+                                                                               imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
+                                                                               if ($mailconf[0]['movetofolder'] != "")
+                                                                                       imap_mail_move($mbox, $msg_uid, $mailconf[0]['movetofolder'], FT_UID);
+                                                                               break;
+                                                               }
                                                                continue;
                                                        }
-                                                       $datarray['title'] = notags(trim($meta->subject));
+
+                                                       // Decoding the header
+                                                       $subject = imap_mime_header_decode($meta->subject);
+                                                       $datarray['title'] = "";
+                                                       foreach($subject as $subpart)
+                                                               if ($subpart->charset != "default")
+                                                                       $datarray['title'] .= iconv($subpart->charset, 'UTF-8//IGNORE', $subpart->text);
+                                                               else
+                                                                       $datarray['title'] .= $subpart->text;
+
+                                                       $datarray['title'] = notags(trim($datarray['title']));
+
+                                                       //$datarray['title'] = notags(trim($meta->subject));
                                                        $datarray['created'] = datetime_convert('UTC','UTC',$meta->date);
 
-                                                       $r = email_get_msg($mbox,$msg_uid);
+                                                       // Is it  reply?
+                                                       $reply = ((substr(strtolower($datarray['title']), 0, 3) == "re:") or
+                                                               (substr(strtolower($datarray['title']), 0, 3) == "re-") or
+                                                               (raw_refs != ""));
+
+                                                       $r = email_get_msg($mbox,$msg_uid, $reply);
                                                        if(! $r) {
                                                                logger("Mail: can't fetch msg ".$msg_uid);
                                                                continue;
@@ -470,8 +531,17 @@ function poller_run($argv, $argc){
                                                        // some mailing lists have the original author as 'from' - add this sender info to msg body.
                                                        // todo: adding a gravatar for the original author would be cool
 
-                                                       if(! stristr($meta->from,$contact['addr']))
-                                                               $datarray['body'] = t('From: ') . escape_tags($meta->from) . "\n\n" . $datarray['body'];
+                                                       if(! stristr($meta->from,$contact['addr'])) {
+                                                               $from = imap_mime_header_decode($meta->from);
+                                                               $fromdecoded = "";
+                                                               foreach($from as $frompart)
+                                                                       if ($frompart->charset != "default")
+                                                                               $fromdecoded .= iconv($frompart->charset, 'UTF-8//IGNORE', $frompart->text);
+                                                                       else
+                                                                               $fromdecoded .= $frompart->text;
+
+                                                               $datarray['body'] = "[b]".t('From: ') . escape_tags($fromdecoded) . "[/b]\n\n" . $datarray['body'];
+                                                       }
 
                                                        $datarray['uid'] = $importer_uid;
                                                        $datarray['contact-id'] = $contact['id'];
@@ -493,6 +563,24 @@ function poller_run($argv, $argc){
                                                        q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
                                                                intval($stored_item)
                                                        );
+                                                       switch ($mailconf[0]['action']) {
+                                                               case 0:
+                                                                       break;
+                                                               case 1:
+                                                                       logger("Mail: Deleting ".$msg_uid);
+                                                                       imap_delete($mbox, $msg_uid, FT_UID);
+                                                                       break;
+                                                               case 2:
+                                                                       logger("Mail: Mark as seen ".$msg_uid);
+                                                                       imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
+                                                                       break;
+                                                               case 3:
+                                                                       logger("Mail: Moving ".$msg_uid." to ".$mailconf[0]['movetofolder']);
+                                                                       imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
+                                                                       if ($mailconf[0]['movetofolder'] != "")
+                                                                               imap_mail_move($mbox, $msg_uid, $mailconf[0]['movetofolder'], FT_UID);
+                                                                       break;
+                                                       }
                                                }
                                        }
 
@@ -501,7 +589,7 @@ function poller_run($argv, $argc){
                        }
                        elseif($contact['network'] === NETWORK_FACEBOOK) {
                                // This is picked up by the Facebook plugin on a cron hook.
-                               // Ignored here.                        
+                               // Ignored here.
                        }
 
                        if($xml) {