Author: locilka
Date: Tue Jul 1 11:36:55 2008
New Revision: 48705
URL: http://svn.opensuse.org/viewcvs/yast?rev=48705&view=rev
Log:
Added new WebpinPackageSearch YCP module.
Added:
trunk/packager/src/modules/WebpinPackageSearch.ycp
Modified:
trunk/packager/package/yast2-packager.changes
Modified: trunk/packager/package/yast2-packager.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/package/yast2-packager.changes?rev=48705&r1=48704&r2=48705&view=diff
==============================================================================
--- trunk/packager/package/yast2-packager.changes (original)
+++ trunk/packager/package/yast2-packager.changes Tue Jul 1 11:36:55 2008
@@ -1,4 +1,9 @@
-------------------------------------------------------------------
+Tue Jul 1 11:35:36 CEST 2008 - locilka@suse.cz
+
+- Added new WebpinPackageSearch YCP module.
+
+-------------------------------------------------------------------
Wed Jun 18 17:47:15 CEST 2008 - lslezak@suse.cz
- add an update repository obtained via suse_register (fate#302990)
Added: trunk/packager/src/modules/WebpinPackageSearch.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/packager/src/modules/WebpinPackageSearch.ycp?rev=48705&view=auto
==============================================================================
--- trunk/packager/src/modules/WebpinPackageSearch.ycp (added)
+++ trunk/packager/src/modules/WebpinPackageSearch.ycp Tue Jul 1 11:36:55 2008
@@ -0,0 +1,133 @@
+/**
+ * File:
+ * WebpinPackageSearch.ycp
+ *
+ * Module:
+ * WebpinPackageSearch
+ *
+ * Summary:
+ * YaST API to api.opensuse-community.org
+ *
+ * Authors:
+ * Lukas Ocilka
+ * Katarina Machalkova
+ */
+
+{
+module "WebpinPackageSearch";
+
+textdomain "packager";
+
+import "HTTP";
+import "SuSERelease";
+import "Directory";
+import "FileUtils";
+import "URL";
+
+string temporary_file = Directory::tmpdir + "/package_search_webpin.xml";
+
+string base_url = "http://api.opensuse-community.org/searchservice/";
+
+string already_guessed = nil;
+
+string GuessCurrentDistribution () {
+ if (already_guessed != nil)
+ return already_guessed;
+
+ string rel_name = SuSERelease::ReleaseName();
+ string rel_version = SuSERelease::ReleaseVersion();
+
+ if (regexpmatch (rel_version, "\.")) {
+ rel_version = mergestring (splitstring (rel_version, "\."), "");
+ }
+
+ already_guessed = sformat ("%1_%2", rel_name, rel_version);
+ return already_guessed;
+}
+
+/**
+ * Searches for packages using Webpin XML API.
+ *
+ * @param string search_for text
+ * @param string distribution, e.g., openSUSE_10.3, it is guessed from the system if nil
+ * @param map search_in which defines in which sources it searches,
+ * possible keys: name, description, contents
+ *
+ * @example
+ * SearchForPackages ("install", $[
+ * "name" : true,
+ * "description" : true,
+ * "contents" : false,
+ * ])
+ */
+global list SearchForPackages (string search_for, string distribution, map search_in) {
+ y2milestone ("Searching for %1 in %2", search_for, search_in);
+
+ if (search_for == nil || search_for == "") {
+ y2error ("empty search string");
+ return [];
+ }
+
+ // search URL is the same for both
+ boolean name_or_descr = (search_in["name"]:false || search_in["description"]:false);
+
+ string search_path = nil;
+
+ if (search_in["contents"]:false && name_or_descr) {
+ search_path = "Search/Simple/";
+ } else if (name_or_descr) {
+ search_path = "Search/ByName/";
+ } else if (search_in["contents"]:false) {
+ search_path = "Search/ByContents/";
+ } else {
+ y2warning ("empty search result");
+ return [];
+ }
+
+ if (distribution == nil) {
+ distribution = GuessCurrentDistribution();
+ y2milestone ("Distribution not set, guessing '%1'", distribution);
+ }
+
+ string url = base_url + search_path + distribution + "/" + URL::EscapeString (search_for, URL::transform_map_passwd);
+
+ map response = HTTP::Get (url, temporary_file);
+
+ list <map> ret_list = [];
+
+ if (! FileUtils::Exists (temporary_file)) {
+ y2error ("Cannot read file: %1", temporary_file);
+ return nil;
+ }
+
+ map search_result = (map) SCR::Read (.anyxml, temporary_file);
+
+ integer counter = -1;
+ map one_entry = $[];
+
+ foreach (map one_package, (list