File: write_read_file.C

package info (click to toggle)
peruser 4b33-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 2,952 kB
  • ctags: 1,064
  • sloc: cpp: 22,367; perl: 2,733; makefile: 345; sh: 335
file content (94 lines) | stat: -rw-r--r-- 2,263 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "npsummary.h"

void NP_Summary::write_read_file()
{
   if ( !total || tree == NULL )
      return;

   if ( !strcmp( group, "FOLLOW-UPS" ) ||
        !strcmp( group, "POSTED" ) ||
        !strcmp( group, "OUTBOX" ) ||
        !strcmp( group, "SENT-MAIL" ))
      return;

   NP_File read;
   char buffer[ 1024 ];
   snprintf( buffer, sizeof buffer, "%s/.peruser_spool/%s-%s:read",
             getenv( "HOME" ), server, group );

   if ( read.openw( buffer ))
   {
      read.print_error();
      return;
   }

   np_thread_node_t *old_tree = tree;
   np_thread_node_t *old_spool_beginning = spool_beginning;

   if ( hide_seen || hide_headers )
   {
      if (( tree = threads.get_tree( server, group, 0, 0, 0 )) == NULL )
         return;

      if (( spool_beginning = threads.get_spool_beginning()) == NULL )
         return;

      for( np_thread_node_t *outer_pointer = old_tree;
            outer_pointer != NULL;
            outer_pointer = outer_pointer->next )
      {
         if ( outer_pointer->is_article < 0 )
            continue;

         if ( outer_pointer->message_id == NULL )
            continue;

         for( np_thread_node_t *pointer = tree;
               pointer != NULL;
               pointer = pointer->next )
         {
            if ( pointer->is_article < 0 )
               continue;

            if ( pointer->message_id == NULL )
               continue;

            if( strcmp( pointer->message_id, 
                        outer_pointer->message_id ))
               continue;

            pointer->is_unseen = outer_pointer->is_unseen;
            pointer->is_requested = outer_pointer->is_requested;
            break;
         }
      }
   }

   for( np_thread_node_t *pointer = spool_beginning;
         pointer != NULL;
         pointer = pointer->spool_next )
   {
      snprintf( buffer, sizeof buffer, "%c\n",
            (( pointer->is_unseen == 1 ) ? 'u' : 'r' ));

      if ( read.put_string( buffer ))
      {
         read.print_error();
         return;
      }
   }

   read.close();

   write_requests_file();

   if ( hide_seen || hide_headers )
   {
      threads.clear();
      spool_beginning = old_spool_beginning;
      tree = old_tree;
      threads.assign( old_tree );
   }

   return;
}