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
00102
00103
00104
00105 #endif