#!/bin/sh
# 2005-2006, 2009 (c) Etersoft www.etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain
#
# Open package Url in BROWSER
# Параметры:
# - название спек-файла
#

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod rpm web

PAGEURL="http://sisyphus.ru/srpm/Sisyphus"

#############################

Usage="Usage: $name [-c -f -p -s] spec or package..."
function mygetopts()
{
name=${0##*/}
Descr="$name - open package Url in browser"

phelp()
{
	echog "$Descr"
	echog "$Usage"
	echog "Options:"
	echog " -c - check URL"
	echog " -p - open package page at sisyphus.ru"
	echog " -s - open source dir in browser"
	echog "Ext. options:"
	echog " -f - print failed URL only"
}

while getopts :hcfsp opt; do
    case $opt in
    h) phelp; exit 0;;
    c) CHECKONLY=1 ;;
	s) ABOUTDIR=1 ;;
	p) SISYPHUSRU=1 ;;
	f) FAILEDONLY=1; CHECKONLY=1 ;;
    +?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;;
#    ?)  echog "$name: $OPTARG: bad option.  Use -h for help." 1>&2 ; exit 2;;
	?) OPTIND=$((OPTIND-1)); break;
    esac
done

# remove args that were options
if [ $# -gt 0 ]; then 
	shift $((OPTIND - 1))
fi

# pass other options to RPM:
LISTRPMARGS=$@
}

parse_cmd_pre_spec "$@"

mygetopts $LISTARGS

#TODO: fix
# $LISTNAMES | wc -w
if [ -n "$2" ] ; then
	echo
	# more than 1 arg
	#PARALL=1
	#test `ps a | wc -l` -gt 70 && sleep 3
fi

get_pkginfo()
{
	local i=${1}
	if [ -f ${i} ]
	then
		if [ -z ${i/*rpm/} ]
		then
			# it is rpm package
			RPM_URL=$(querypackage ${i} URL)
			SOURCE=
		else
			RPM_URL=$(eval_spec ${i} | get_var "Url")
			SOURCE=$(eval_spec ${i} | get_var "Source")
		fi
	else
		# will it package name
		RPM_URL=$(querypackage ${i} URL)
		SOURCE=$(querypackage ${i} SOURCE)
	fi
}

get_pagepkginfo()
{
	local i=${1}
	local PKGNAME
	if [ -f ${i} ]
	then
		if [ -z ${i/*rpm/} ]
		then
			PKGNAME=$(get_sourcepkg_name "$i")
		else
			PKGNAME=$(get_name ${i})
		fi
	else
		# installed package name
		PKGNAME=$(get_sourcepkg_name "$i")
	fi
	if [ -z "$PKGNAME" ] ; then
		PKGNAME="$i"
	fi
	RPM_URL=$PAGEURL/$PKGNAME
}

for i in $LISTNAMES $LISTRPMARGS
do
	if [ -n "$SISYPHUSRU" ] ; then
		get_pagepkginfo $i
		if [ -n "$ABOUTDIR" ] ; then
			RPM_URL=$RPM_URL/get
		fi
	else
		get_pkginfo $i
		if [ -n "$ABOUTDIR" ] ; then
			RPM_URL=`dirname $SOURCE`
		fi

		[ "$RPM_URL" = "(none)" ] && RPM_URL=""
		if [ -z "${RPM_URL}" ] ; then
			warning "Cannot get package URL, open from $PAGEURL"
			get_pagepkginfo $i
		fi
	fi

	if [ -z "$CHECKONLY" ] ; then
		echog "Opening URL '$RPM_URL' with browser '$BROWSER'"
		$BROWSER $RPM_URL &
		continue
	fi

	# Check package URL
	if [ -z "$PARALL" ] ; then
		echog -n "Checking URL '$RPM_URL' from package $i ..."
		$GET $RPM_URL -s -d
	else
		( RESULT=`$GET $RPM_URL -s -d` ;
		if [ -n "$FAILEDONLY" ] ; then
			test ${RESULT/ *} = "200" || printf "%-40s %s   %s\n" $i $RPM_URL "${RESULT}"
		else
			echog "Checking URL '$RPM_URL' from package $i ... $RESULT" ; 
		fi
		) &
	fi
done
