Basic Zip Archive Filter
- From: "Kevin Kubasik" <kevin kubasik net>
- To: dashboard-hackers <dashboard-hackers gnome org>
- Subject: Basic Zip Archive Filter
- Date: Sun, 12 Mar 2006 18:01:42 -0500
It doesn't do much, but I've felt that we should at least index the
files stored in an archive for the longest time, so I'm starting that
project. I'll add the tar/gzip variants later tonight.
This indexes the names of all the files in an archive, as well as the
metadata dc:numFiles
I'm looking for feedback, so be brutal ;)
Cheers,
Kevin Kubasik
//
// FilterZip.cs: Very simplistic Zip filter, just gets names of all files in archive
//
// Author:
// Kevin Kubasik <kevin kubasik net>
//
using System;
using System.IO;
using System.Diagnostics;
using Beagle.Util;
using Beagle.Daemon;
namespace Beagle.Filters {
public class FilterZip : Beagle.Daemon.Filter {
StreamReader reader= null;
public FilterZip(){
AddSupportedFlavor (FilterFlavor.NewFromMimeType ("application/zip"));
AddSupportedFlavor (FilterFlavor.NewFromExtension (".zip"));
SnippetMode = true;
}
override protected void DoPull (){
Process pc = new Process ();
pc.StartInfo.FileName = "zipinfo";
// FIXME: We probably need to quote special chars in the path
pc.StartInfo.Arguments = String.Format ("-2 " + FileInfo.FullName);
pc.StartInfo.RedirectStandardInput = false;
pc.StartInfo.RedirectStandardOutput = true;
pc.StartInfo.UseShellExecute = false;
try {
pc.Start ();
} catch (System.ComponentModel.Win32Exception) {
Logger.Log.Warn ("Unable to find zipinfo in path; ZIP archive not indexed.");
Finished ();
return;
}
// Try to not kill CPU
pc.PriorityClass = ProcessPriorityClass.Idle;
StreamReader pout = pc.StandardOutput;
string str;
while ((str = pout.ReadLine()) != null) {
AppendText (str);
AppendStructuralBreak ();
}
pout.Close ();
pc.WaitForExit ();
pc.Close ();
Finished ();
}
override protected void DoPullProperties (){
Process pc = new Process ();
pc.StartInfo.FileName = "zipinfo";
// FIXME: We probably need to quote special chars in the path
pc.StartInfo.Arguments = String.Format ("-h " + FileInfo.FullName);
pc.StartInfo.RedirectStandardInput = false;
pc.StartInfo.RedirectStandardOutput = true;
pc.StartInfo.UseShellExecute = false;
try {
pc.Start ();
} catch (System.ComponentModel.Win32Exception) {
Logger.Log.Warn ("Unable to find zipinfo in path; ZIP archive not indexed.");
Finished ();
return;
}
// Try to not kill CPU
StreamReader pout = pc.StandardOutput;
string str = null;
string[] tokens = null;
str = pout.ReadLine();
tokens = str.Split (' ');
AddProperty (Beagle.Property.NewKeyword ("dc:numFiles",tokens[tokens.Length-2]));
pout.Close ();
pc.WaitForExit ();
pc.Close ();
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]