Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

NVNewsgroup.h

Go to the documentation of this file.
00001 #ifndef __NVNewsgroup_h__
00002 #define __NVNewsgroup_h__
00003 
00004 #include <stdio.h>
00005 #include <sys/stat.h>
00006 #include <sys/types.h>
00007 #include <sys/file.h>
00008 #include <unistd.h>
00009 #include <utime.h>
00010 #include <errno.h>
00011 #include <time.h>
00012 #include <fcntl.h>
00013 #include <stdlib.h>
00014 
00015 #include <iostream>
00016 #include <fstream>
00017 #include <string>
00018 
00019 #include "config.h"
00020 #include "Debug.h"
00021 #include "util.h"
00022 #include "NVArray.h"
00023 #include "Newsgroup.h"
00024 
00031 class NVNewsgroup:public Newsgroup, protected NVArray {
00032       protected:
00033         void sprintover(std::ostream & os, unsigned int nbr);
00034 
00035         enum {
00036                 hasarticle = 0x1,
00037                 overview = 0x2,
00038                 article = 0x3,
00039                 bigarticle = 0x4
00040         };
00041 
00042         char _SpoolDirectory[MAXPATHLEN];
00043       public:
00044          NVNewsgroup(OverviewFmt * fmt, const char *spooldir,
00045                      const char *name)
00046         :Newsgroup(fmt, name), NVArray() {
00047                 char fn[MAXPATHLEN];
00048                  sprintf(_SpoolDirectory, "%s/%s", spooldir,
00049                          group2dir(name));
00050                  mkpdir(_SpoolDirectory, 0755);
00051                  sprintf(fn, "%s/.db", _SpoolDirectory);
00052                  NVArray::open(fn);
00053         }
00054 #ifdef ENABLE_ASSERTIONS
00055         virtual void testdb(void);
00056 #endif
00057         virtual void getsize(unsigned int *f, unsigned int *l) {
00058                 *f = arrfst;
00059                 *l = arrlst;
00060         }
00061         virtual void setsize(unsigned int f, unsigned int l);
00062         virtual unsigned int firstnbr() {
00063                 return arrfst;
00064         }
00065         virtual unsigned int lastnbr() {
00066                 return arrlst;
00067         }
00068         virtual int hasrecord(unsigned int i) {
00069                 return NVArray::has_element(i);
00070         }
00071 
00072         virtual Article *getarticle(unsigned int nbr);
00073         virtual void freearticle(Article * artp) {
00074                 delete artp;
00075         }
00076         virtual void setarticle(Article * art);
00077         virtual void printarticle(std::ostream & os, unsigned int nbr);
00078         virtual void prefetchGroup(int lockgrp = 1) {
00079         }
00080         virtual void prefetchOverview(void) {
00081         }
00082 
00083         virtual const char *getover(unsigned int nbr);
00084         virtual void setover(const string & over);
00085         virtual void printover(std::ostream & os, unsigned int nbr) {
00086                 NVArray::lock(NVcontainer::ShrdLock);
00087                 sprintover(os, nbr);
00088                 NVArray::lock(NVcontainer::UnLock);
00089         }
00090         virtual void readoverdb(std::istream & is);
00091         virtual void printoverdb(std::ostream & os, unsigned int f =
00092                                  0, unsigned int l = UINT_MAX);
00093         virtual void printheaderdb(std::ostream & os, const char *header,
00094                                    unsigned int f = 0, unsigned int l =
00095                                    UINT_MAX);
00096 
00097         virtual void printlistgroup(std::ostream & os);
00098 };
00099 
00100 
00101 /* No Iterator needed at this point, because the Newsgroup iterator 
00102  * may also be used for a NVNewsgroup 
00103  */
00104 
00105 #endif

Generated on Fri Aug 20 10:58:08 2004 for NewsCache by doxygen 1.3.6-20040222