Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugal-mono-tools.git;a=commitdiff;h=707dd724977564243879176b71fd963e1b610e90

commit 707dd724977564243879176b71fd963e1b610e90
Author: bouleetbil <[email protected]>
Date:   Wed Aug 25 23:07:31 2010 +0200

*added search packages
*use dirs repo directly instead pacman (more quiclky)

diff --git a/frugal-mono-tools/MainWindow.cs b/frugal-mono-tools/MainWindow.cs
index 0cb265b..6988839 100644
--- a/frugal-mono-tools/MainWindow.cs
+++ b/frugal-mono-tools/MainWindow.cs
@@ -20,6 +20,7 @@ using System.Net;
using System.IO;
using Gtk;
using WebKit;
+using System.Collections.Generic;
using frugalmonotools;

public partial class MainWindow : Gtk.Window
@@ -76,8 +77,7 @@ public partial class MainWindow : Gtk.Window
i++;
}
CBO_Repo.Model=modelRepoList;
-               // Add some data to the store
-               pkgListStore.AppendValues ("Garbage");
+
// Assign the model to the TreeView
treeviewpkg.Model = pkgListStore;

@@ -466,7 +466,16 @@ public partial class MainWindow : Gtk.Window

protected virtual void OnBTNSearchClicked (object sender, System.EventArgs e)
{
-
+               try{
+                       List<Package> 
packages=Pkg.Search(SAI_pkg.Text,Pkg.repoSelected);
+                       pkgListStore.Clear();
+                       foreach (Package package in packages)
+                       {
+                               // Add some data to the store
+                               pkgListStore.AppendValues (package.pkgname);
+                       }
+               }
+               catch{}
}

protected virtual void selectRepo (object sender, System.EventArgs e)
diff --git a/frugal-mono-tools/PacmanG2.cs b/frugal-mono-tools/PacmanG2.cs
index 4a9fb78..c5368a5 100644
--- a/frugal-mono-tools/PacmanG2.cs
+++ b/frugal-mono-tools/PacmanG2.cs
@@ -17,37 +17,117 @@
*/
using System;
using System.Runtime.InteropServices;
+using System.Collections;
using System.Collections.Generic;
-
+using Mono.Unix.Native;
+using System.IO;
namespace frugalmonotools
{

+       public class Package
+       {
+                       public string pkgname;
+                       public string pkgversion;
+                       public string pkggroup;
+                       public string pkgdescription;
+
+       }
public class PacmanG2
{
//don't use c# binding generated by swig
+               const int PM_LOG_DEBUG=0x01;
+               const int PM_OPT_LOGCB = 1;
+               const int PM_OPT_LOGMASK =2;
+               const int PM_OPT_USESYSLOG=3;
+               const int PM_OPT_ROOT=4;
+               const int PM_OPT_DBPATH=5;
+               const int PM_OPT_CACHEDIR=6;
+               const int PM_OPT_LOGFILE=7;
+               const int PM_OPT_LOCALDB=8;
+               const int PM_OPT_SYNCDB=9;
+               const int PM_OPT_NOUPGRADE=10;
+               const int PM_OPT_NOEXTRACT=11;
+               const int PM_OPT_IGNOREPKG=12;
+               const int PM_OPT_UPGRADEDELAY=13;
+               /* Download */
+               const int PM_OPT_PROXYHOST=14;
+               const int PM_OPT_PROXYPORT=15;
+               const int PM_OPT_XFERCOMMAND=16;
+               const int PM_OPT_NOPASSIVEFTP=17;
+               const int PM_OPT_DLCB=18;
+               const int PM_OPT_DLFNM=19;
+               const int PM_OPT_DLOFFSET=20;
+               const int PM_OPT_DLT0=21;
+               const int PM_OPT_DLT=22;
+               const int PM_OPT_DLRATE=23;
+               const int PM_OPT_DLXFERED1=24;
+               const int PM_OPT_DLETA_H=25;
+               const int PM_OPT_DLETA_M=26;
+               const int PM_OPT_DLETA_S=27;
+               /* End of download */
+               const int PM_OPT_HOLDPKG=28;
+               const int PM_OPT_CHOMP=29;
+               const int PM_OPT_NEEDLES=30;
+               const int PM_OPT_MAXTRIES=31;
+               const int PM_OPT_OLDDELAY=32;
+               const int PM_OPT_DLREMAIN=33;
+               const int PM_OPT_DLHOWMANY=34;
+               const int PM_OPT_HOOKSDIR=35;
+               //const
+               private const string ROOT_PATH="/";
+               private const string PACMANG2_BDD="var/lib/pacman-g2/";
+               private const int pm_errno = -1;
+               private const string cch_pacmanconf ="/etc/pacman-g2.conf";
+
+               //long maxPathLen = Syscall.pathconf("/", 
PathconfName._PC_PATH_MAX);
+
+               [StructLayout(LayoutKind.Sequential)]
+               public struct _pmlist_t
+               {
+                       object data;
+                       int prev;
+               int next;
+               int last;
+               }
+               [StructLayout(LayoutKind.Sequential)]
+               public struct _pmdb_t
+               {
+                       string path;
+                       [ MarshalAs( UnmanagedType.ByValTStr,
+               SizeConst=128 )]
+                       String treename;
+               }
+
[DllImport("libpacman.so")]
private static extern int pacman_initialize(string root);
[DllImport("libpacman.so")]
private static extern int pacman_parse_config(string file, EnumRepoProcDelegate 
callback,string this_section);
private delegate void EnumRepoProcDelegate(string section, string lParam);
[DllImport("libpacman.so")]
-               private static extern void pacman_db_register(string treename);
-               //const
-               private const int pm_errno = -1;
-               private const string cch_pacmanconf ="/etc/pacman-g2.conf";
+               private static extern _pmdb_t pacman_db_register(string 
treename);
+               /*
+               [DllImport("libpacman.so")]
+               private static extern int pacman_set_option(int parm, string 
data);
+               [DllImport("libpacman.so")]
+               private static extern _pmlist_t pacman_db_search(_pmdb_t 
pmdb_t);
+               */
+
+               _pmdb_t pmdb_t;

//public
-               public List<string> fwRepo = new List<string>();
+               public string repoSelected="";
+               public List<string> fwRepo = new List<string>();

private void EnumRepoProc(string section, string lParam)
{
fwRepo.Add(section);
}
+
public PacmanG2 ()
{
try{
EnumRepoProcDelegate _cd_db = new EnumRepoProcDelegate(EnumRepoProc);
-                               if (pacman_initialize("/")!=pm_errno)
+                               if (pacman_initialize(ROOT_PATH)!=pm_errno)
{
pacman_parse_config(cch_pacmanconf,_cd_db,"");
}
@@ -58,7 +138,37 @@ namespace frugalmonotools

public void SelectRepo(string repo)
{
-                       pacman_db_register (repo);
+                       pmdb_t=pacman_db_register(repo);
+                       repoSelected=repo;
+               }
+
+               public List<Package> Search(string strSearch,string repo)
+               {
+                       //don't use pacman more quickly to use .net directly
+                       List<Package> packages = new List<Package>();
+                       string dirpkg=ROOT_PATH+PACMANG2_BDD+repo+"/";
+                       string[] dirs= Directory.GetDirectories(dirpkg, 
"*"+strSearch+"*");
+                       if (repo=="") return null;
+
+                       //Console.WriteLine("The number of packages is {0}.", 
dirs.Length);
+            foreach (string dir in dirs)
+            {
+                               Package package = new Package();
+
+                               string tmpname=dir.Replace(dirpkg,"");
+                               package.pkgname=tmpname;
+                               package.pkgdescription="";
+                               package.pkggroup="";
+                               package.pkgversion="";
+                //TODO extract description/group from file desc and extract 
version from name
+                               packages.Add(package);
+            }
+                       return packages;
+               }
+
+               private string extractNamePackage(string file)
+               {
+                       return "";
}
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to