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
