[LON-CAPA-cvs] cvs: loncom /interface lonmsg.pm lonwhatsnew.pm

raeburn raeburn at source.lon-capa.org
Tue Jul 21 17:26:33 EDT 2015


raeburn		Tue Jul 21 21:26:33 2015 EDT

  Modified files:              
    /loncom/interface	lonwhatsnew.pm lonmsg.pm 
  Log:
  - speedup "What's New" page for people with large number of messages in INBOX.
  
  
Index: loncom/interface/lonwhatsnew.pm
diff -u loncom/interface/lonwhatsnew.pm:1.117 loncom/interface/lonwhatsnew.pm:1.118
--- loncom/interface/lonwhatsnew.pm:1.117	Mon Dec 15 17:13:25 2014
+++ loncom/interface/lonwhatsnew.pm	Tue Jul 21 21:26:32 2015
@@ -1,5 +1,5 @@
 #
-# $Id: lonwhatsnew.pm,v 1.117 2014/12/15 17:13:25 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.118 2015/07/21 21:26:32 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1275,29 +1275,36 @@
 
 sub getnormalmail {
     my ($newmsgs) = @_;
-# Check for unread mail in course
+# Check for unread messages in user's INBOX (which were sent in context of current course).
     my $msgcount = 0;
-
-    my @messages = sort(&Apache::lonnet::getkeys('nohist_email'));
-    foreach my $message (@messages) {
-	my $msgid=&escape($message);
-        my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=
-            &Apache::lonmsg::unpackmsgid($msgid);
-        if (($fromcid) && ($fromcid eq $env{'request.course.id'})) {
-            if (defined($sendtime) && $sendtime!~/error/) {
-                if ($status eq 'new') {
-                $sendtime = &Apache::lonlocal::locallocaltime($sendtime);
-		    $msgcount ++;
-                    if ($shortsubj eq '') {
-                        $shortsubj = &mt('No subject');
+    my @messages = &Apache::lonnet::getkeys('nohist_email');
+    return $msgcount if (!@messages);
+    my %emailstatus = &Apache::lonnet::dump('email_status');
+    foreach my $msgid (sort(@messages)) {
+        if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) {
+            my $skipstatus;
+            if ($emailstatus{$msgid} eq 'new') {
+                $skipstatus = 1;
+            }
+            my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=
+                &Apache::lonmsg::unpackmsgid($msgid,undef,$skipstatus,undef,
+                                             $env{'request.course.id'});
+            if (($fromcid) && ($fromcid eq $env{'request.course.id'})) {
+                if (defined($sendtime) && $sendtime!~/error/) {
+                    if (($emailstatus{$msgid} eq 'new') || ($status eq 'new')) {
+                        $sendtime = &Apache::lonlocal::locallocaltime($sendtime);
+		        $msgcount ++;
+                        if ($shortsubj eq '') {
+                            $shortsubj = &mt('No subject');
+                        }
+                        push(@{$newmsgs}, {
+                            msgid    => $msgid,
+                            sendtime => $sendtime,
+                            shortsub => $shortsubj,
+                            from     => $fromname,
+                            fromdom  => $fromdom
+                            });
                     }
-                    push(@{$newmsgs}, {
-                        msgid    => $msgid,
-                        sendtime => $sendtime,
-                        shortsub => $shortsubj,
-                        from     => $fromname,
-                        fromdom  => $fromdom
-                        });
                 }
             }
         }
@@ -1307,13 +1314,14 @@
 
 sub getcritmail {
     my ($critmsgs) = @_; 
-# Check for critical messages in course
+# Check for critical messages which were sent in context of current course.
     my %what=&Apache::lonnet::dump('critical');
     my $result = '';
     my $critmsgcount = 0;
     foreach my $msgid (sort(keys(%what))) {
         my ($sendtime,$shortsubj,$fromname,$fromdom,$status,$fromcid)=
-            &Apache::lonmsg::unpackmsgid($msgid);
+            &Apache::lonmsg::unpackmsgid($msgid,undef,1,undef,
+                                         $env{'request.course.id'});
         if (($fromcid) && ($fromcid eq  $env{'request.course.id'})) {
             if (defined($sendtime) && $sendtime!~/error/) {
                 $sendtime = &Apache::lonlocal::locallocaltime($sendtime);
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.242 loncom/interface/lonmsg.pm:1.243
--- loncom/interface/lonmsg.pm:1.242	Tue Jun 23 02:42:34 2015
+++ loncom/interface/lonmsg.pm	Tue Jul 21 21:26:32 2015
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging
 #
-# $Id: lonmsg.pm,v 1.242 2015/06/23 02:42:34 musolffc Exp $
+# $Id: lonmsg.pm,v 1.243 2015/07/21 21:26:32 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -397,14 +397,17 @@
 }
 
 sub unpackmsgid {
-    my ($msgid,$folder,$skipstatus,$status_cache)=@_;
+    my ($msgid,$folder,$skipstatus,$status_cache,$onlycid)=@_;
     $msgid=&unescape($msgid);
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid,
         $processid,$symb,$error) = split(/\:/,&unescape($msgid));
+    if (!defined($processid)) { $fromcid = ''; }
+    if (($onlycid) && ($onlycid ne $fromcid)) {
+        return ($sendtime,'',$fromname,$fromdomain,'',$fromcid,'',$error);
+    }
     $shortsubj = &unescape($shortsubj);
     $shortsubj = &HTML::Entities::decode($shortsubj);
     $symb = &unescape($symb);
-    if (!defined($processid)) { $fromcid = ''; }
     my %status=();
     unless ($skipstatus) {
 	if (ref($status_cache)) {




More information about the LON-CAPA-cvs mailing list