예제 #1
0
//
// findFilter
//
// Find a filter in the list
//
FilterItem *
Filter::findFilter(const QString& filterPattern)
{
  FilterItem* re;

  FilterListIterator it(m_filterItems);
  for (re = it.toFirst(); re != NULL; re = ++it)
    if (re->name() ==  filterPattern)
      return re;

  return NULL;
}
예제 #2
0
void
Filter::listFilters(void)
{
  FilterItem *re;

#ifdef DEBUG_FILTER
//  printf("Filter::listFilters\n");
#endif

  FilterListIterator it(m_filterItems);
  for (re = it.toFirst(); re != NULL; re = ++it)
    printf("'%s'\n", (const char*)re->name());
}
예제 #3
0
bool Filter::isFiltered(const QString& filterString, uint8_t level)
{
  FilterItem *re;
#ifdef DEBUG_FILTER
  //seqDebug("isFiltered(%s)", string);
#endif /* DEBUG_FILTER */

  // iterate over the filters checking for a match
  FilterListIterator it(m_filterItems);
  for (re = it.toFirst(); re != NULL; re = ++it)
  {
    if (re->isFiltered(filterString, level))
      return true;
  }

  return false;
}
예제 #4
0
//
// save
//
// parses the filter file and builds filter list
//
bool Filter::save(QString& indent, QTextStream& out)
{
  FilterItem *re;

  // increase indent
  indent += "    ";

  // construct an iterator over the filter items
  FilterListIterator it(m_filterItems);

  // iterate over the filter items, saving them as we go along.
  for (re = it.toFirst(); re != NULL; re = ++it)
    re->save(indent, out);

  // decrease indent
  indent.remove(0, 4);

  return true;
}
예제 #5
0
//
// addFilter
//
// Add a filter to the list
//
bool 
Filter::addFilter(const QString& filterPattern)
{
  FilterItem* re;

  // no duplicates allowed
  if (findFilter(filterPattern))
    return false;

  re = new FilterItem(filterPattern, m_caseSensitive);

  // append it to the end of the list
  m_filterItems.append(re);

#ifdef DEBUG_FILTER
  seqDebug("Added Filter '%s'", (const char*)filterPattern);
#endif

 return re->valid(); 
} // end addFilter
예제 #6
0
//
// addFilter
//
// Add a filter to the list
//
bool 
Filter::addFilter(const QString& filterPattern)
{
  FilterItem* re;

  // no duplicates allowed
  if (findFilter(filterPattern))
    return false;

  re = new FilterItem(filterPattern, m_cFlags);

  // append it to the end of the list
  m_filterItems.append(re);

#ifdef DEBUG_FILTER
printf("Added Filter '%s'\n", filterPattern);
#endif

 return re->valid(); 
} // end addFilter
예제 #7
0
//
// remFilter
//
// Remove a filter from the list
void
Filter::remFilter(const QString& filterPattern)
{
   FilterItem *re;

   // Find a match in the list and the one previous to it
   //while(re)
   FilterListIterator it(m_filterItems);
   for (re = it.toFirst(); re != NULL; re = ++it)
   {
     if (re->name() == filterPattern) // if match
     {
       // remove the filter
       m_filterItems.remove(re);

#ifdef DEBUG_FILTER
       seqDebug("Removed '%s' from List", (const char*)filterPattern);
#endif
       break;
     }
   } //end For
}
예제 #8
0
void
Filter::listFilters(void)
{
  FilterItem *re;

#ifdef DEBUG_FILTER
//  seqDebug("Filter::listFilters");
#endif

  FilterListIterator it(m_filterItems);
  for (re = it.toFirst(); re != NULL; re = ++it)
  {
    if (re->minLevel() || re->maxLevel())
      seqInfo("\t'%s' (%d, %d)", 
	     (const char*)re->name().utf8(), re->minLevel(), re->maxLevel());
    else
      seqInfo("\t'%s'", (const char*)re->name().utf8());
  }
}
예제 #9
0
bool
Filter::saveFilters(void)
{
  FILE *in;
  FILE *out;
  FilterItem* re;
  char msg[MAXLEN + 1];
  char *p;
  int count = 0;
  bool done  = false;
  bool start = false;
  
#ifdef DEBUG_FILTER
  printf("Filter::saveFilters(void)\n");
#endif
  // if no filename can't save
  if (m_file.isEmpty())
    return false;
  
  // Save filter file
  // Open source and destination files
  QString outfilename = NULL;
  QString infilename = m_file;
  
  outfilename = infilename + ".new";
  in = fopen ((const char*)infilename, "r");
  out = fopen ((const char*)outfilename, "w+");
  if (in == 0)
  {
    fprintf (stderr, "Couldn't open filter file. '%s' - %s\n", 
	     (const char*)infilename, strerror(errno));
  }
  if (out == 0)
  {
    fprintf (stderr, "Couldn't open filter file. '%s' - %s\n", 
	     (const char*)outfilename, strerror(errno));
    return false;
  }
  else
  {
    char *sType = NULL;
    
    if (in)
    {
      // Parse source file
      while (fgets (msg, MAXLEN, in) != NULL)
      {
	// terminate the line
	p = index (msg, '\n');
	if (p)
	  *p = 0;
	p = index (msg, '\r');
	if (p)
	  *p = 0;
	
	// terminate on CF or LF 
	// if this filter uses section names
	if (!m_type.isEmpty())
	{
	  // end of section - dump all items left in list that belong here
	  if (sType && !msg[0])
	  {
	    // if this is our section
	    if (m_type == sType)
	    {
	      // done copying filters that existed in file already
	      // dump whatever is left in list
	      FilterListIterator it(m_filterItems);
	      for (re = it.toFirst(); re != NULL; re = ++it)
	      {
#ifdef DEBUG_FILTER
		printf("OUT: '%s'\n", (const char*)re->name());
#endif
		fprintf(out, "%s\n", (const char*)re->name());
	      }
	      done = true;
	      start = false;
	    } // end if our section
	    free(sType);
	    sType = 0;
	  } // end if end of section
	}
	
	// treat lines beginning with # or ; as comments
	if ( (msg[0] == '#') || (msg[0] == ';'))
	{
#ifdef DEBUG_FILTER
	  printf("OUT: '%s'\n", msg);
#endif
	  fprintf(out, "%s", msg);
	  msg[0] = 0;
	}
	
	// preserve blank lines
	if (!msg[0])
	  fprintf(out, "\n");
	
	if (!m_type.isEmpty())
	{
	  // check for section name
	  if (msg[0] == '[')
	  {
	    p = index(msg, ']');
	    if (p)
	      *p = 0;
	    p = index(msg, '\r');
	    if (p)
	      *p = 0;
	    if (sType)
	      free(sType);
	    sType = strdup(msg + 1);
#ifdef DEBUG_FILTER
	    printf("OUT: '[%s]'\n", sType);
#endif
	    fprintf(out, "[%s]\n", sType);
	    start = true;
	    msg[0] = 0;
	  }
	} // end if filter uses section names  
	
	if (msg[0])
	{
	  // if this is our section
	  if (sType && (m_type == sType))
	  { 
	    // look for a match, if found put it in the file and 
	    // remove it from the list
	    FilterListIterator it(m_filterItems);
	    for (re = it.toFirst(); re != NULL; re = ++it)
	    {
	      // if we found a match, output it
	      if (re->name() ==  msg)
	      {
#ifdef DEBUG_FILTER
		printf("OUT: '%s'\n", msg);
#endif
		fprintf(out, "%s\n", msg);
		count++;
		remFilter(msg);
		break;
	      }
	     } // for all items in list
	  } // end if our section
	  
	  // someone elses section, just output it without alteration
	  else
	  {
#ifdef DEBUG_FILTER
	    printf("OUT: '%s'\n", msg);
#endif
	    fprintf(out, "%s\n", msg);
	  }
	} // end if msg
      }  // end while lines in source file
    } // end if source file
    
    // if we still have filters in our list, we never found our section
    // add it
    if (!done)
    {
      if (!m_type.isEmpty() && !start)
      {
#ifdef DEBUG_FILTER
	printf("done parsing file... creating section '%s'\n", 
	       (const char*)m_type);
#endif
	fprintf(out, "\n[%s]\n", (const char*)m_type);
      }
       
      // done copying filters that existed in file already
      // dump whatever is left in list
      FilterListIterator it(m_filterItems);
      for (re = it.toFirst(); re != NULL; re = ++it)
      {
#ifdef DEBUG_FILTER
	printf("OUT: '%s'\n", (const char*)re->name());
#endif
	fprintf(out, "%s\n", (const char*)re->name());
      }
    }
    if (fflush (out))
      fprintf (stderr, "Couldn't flush filter file. '%s' - %s\n", 
	       (const char*)outfilename, strerror(errno));
    if (fclose (out))
      fprintf (stderr, "Couldn't flush filter file. '%s' - %s\n", 
	       (const char*)outfilename, strerror(errno));
    if (in)
      fclose (in);
    
    //  printf ("Filter file saved '%s'\n", outfilename);
    
    // rename files
    int result;
    QString bakFileName = infilename + ".bak";
    // rename input file to filename.bak
    result = rename((const char*)infilename,
		    (const char*)bakFileName);
    if (result != 0)
      fprintf(stderr, "rename '%s' to '%s' failed: (%d): %s\n",
	      (const char*)infilename, (const char*)bakFileName,
	      errno, strerror(errno));

    // rename the output file to the input filename
    result = rename((const char*)outfilename,
		    (const char*)infilename);

    if (result != 0)
      fprintf(stderr, "rename '%s' to '%s' failed: (%d): %s\n",
	      (const char*)outfilename, (const char*)infilename,
	      errno, strerror(errno));

     if (sType)
       free(sType);
  }
  
  // re-read the filters from file
  loadFilters();
  
  return true;
} // end saveFilters