#---
## @Synopsis libfreshmeatxml
#---

##
## @Globals none
function quill_fmxml_grab_from_xml() {
  xml_grep --text_only "${1}" "${2}"
}

##
## @Globals SPELL_NAME FRESHMEAT_XML_URL FRESHMEAT_PROJECT_URL SPELL_DESC_NAME
## @Globals FRESHMEAT_PROJECT_FILE FRESHMEAT_FILE QUILL_TMP_DIR SPELL_SRC_URL
## @Globals SPELL_SRC_URL SPELL_LICENSE SPELL_SHORT_DESCRIPTION
function quill_fmxml_core() {
  # so it is set even if we end prematurely, useful when adding spells
  # gets properly overwritten later on
  SPELL_NAME="$1"

  # if the argument looks like a url then use that, otherwise
  # assume the argument is the name of the spell and construct a
  # url for where we think freshmeat.net stores their xml data
  if grep -q "http://" <<< "${1}" ; then
    FRESHMEAT_XML_URL="$1"
  else
    FRESHMEAT_XML_URL="http://freshmeat.net/projects-xml/${1}/${1}.xml"
    FRESHMEAT_PROJECT_URL="http://freshmeat.net/projects/${1}/"
  fi

  # check if we already have the xml file, if we dont, download it
  FRESHMEAT_FILE="${QUILL_TMP_DIR}/${1}.xml"
  FRESHMEAT_PROJECT_FILE="${QUILL_TMP_DIR}/${1}.fm"
  if [[ ! -e ${FRESHMEAT_PROJECT_FILE} ]]; then
    message -n "Attempting to retrieve project page ... "
    wget -q -Uquill -O ${FRESHMEAT_PROJECT_FILE} "${FRESHMEAT_PROJECT_URL}" ||
      { error_msg "Error: unable to fetch project page" && return 1; }
    tr "\r" " " < ${FRESHMEAT_PROJECT_FILE} > ${FRESHMEAT_PROJECT_FILE}.tmp
    mv ${FRESHMEAT_PROJECT_FILE}.tmp ${FRESHMEAT_PROJECT_FILE}
    message "Done"
  fi

  if [[ ! -e ${FRESHMEAT_FILE} ]]; then
    message -n "Attempting to retrieve project XML page ... "
    wget -q -Uquill -O ${FRESHMEAT_FILE} "${FRESHMEAT_XML_URL}" ||
      { error_msg "Error: unable to fetch project XML page" && return 1; }
    message "Done"
  fi

  # check that the project was found - exsists
  local not_found='Error: project not found.'
  if grep -q "$not_found" "$FRESHMEAT_FILE"; then
    error_msg "$not_found"
    rm "$FRESHMEAT_FILE"
    return 1
  fi

  # fill in variables from xml file
  SPELL_NAME=$(quill_fmxml_grab_from_xml projectname_short ${FRESHMEAT_FILE} |tr 'A-Z' 'a-z')
  SPELL_NAME="${SPELL_NAME:-$1}"
  SPELL_DESC_NAME="${SPELL_NAME}"
  local tmp_url
  for each in url_bz2 url_tgz url_zip; do
    tmp_url="$(quill_fmxml_grab_from_xml $each ${FRESHMEAT_FILE})"
    if [[ $tmp_url ]] ; then
      SPELL_SRC_URL="$(grep "$each" ${FRESHMEAT_PROJECT_FILE} | grep -v "\<img\ src\>" | sed -e "s: *<a href.*\">\(.*\)</a><br>:\1:")"
      break
    fi
  done
  SPELL_URL="$(grep "url_homepage" ${FRESHMEAT_PROJECT_FILE} | grep -v "\<img\ src\>" | sed -e "s: *<a href.*\">\(.*\)</a><br>:\1:")"
  SPELL_LICENSE="$(quill_fmxml_grab_from_xml license ${FRESHMEAT_FILE})"
  if grep -q "(.*)" <<< "${SPELL_LICENSE}"; then
    SPELL_LICENSE="$(awk '{print $NF}' <<< "$SPELL_LICENSE" | tr -d '()')"
  fi
  SPELL_SHORT_DESCRIPTION="$(quill_fmxml_grab_from_xml desc_short ${FRESHMEAT_FILE}|sed 's/\r//g')"
  quill_fmxml_grab_from_xml desc_full ${FRESHMEAT_FILE} |fmt > ${QUILL_TMP_DIR}/${SPELL_NAME}
}
#---
##
## This software is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This software is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this software; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
##
#---

