J'ai tout repris à 0 pour faire l'envoi avec la commande curl, et n'utiliser que bash pour tout le script.
Du coup j'ai commencé par la version KDE/pix.nofrag.com que je jette en pature ici vite fait pour ceux qui veulent tester
imgupload#!/bin/bash
# Configuration
FILENAME=$1
GRAPHICAL=kdialog
. ~/.imgupload/pix.nofrag.com
# Verifier le fichier avant envoi
FILESIZE=`du -b $FILENAME | awk '{print $1}'`
if [ $FILESIZE -gt $MAX_FILESIZE ]; then
echo "Erreur, le fichier $FILENAME est trop lourd ($FILESIZE octets pour une limite de $MAX_FILESIZE maxi)"
if [ "$GRAPHICAL" = "kdialog" ]; then
kdialog --error "Erreur, le fichier $FILENAME est trop lourd ($FILESIZE octets pour une limite de $MAX_FILESIZE maxi)"
fi
exit 1
fi
# Envoyer le fichier, et enregistrer la page résultat
TEMPFILE=`tempfile`
if [ "$GRAPHICAL" = "" ]; then
curl $URL -F monimage=@$FILENAME -F submit=Upload -H "Expect:" -o $TEMPFILE --progress-bar
else
PROGRESSBAR=`kdialog --progressbar "Téléchargement de $FILENAME en cours..." 100`
PROGRESS=`tempfile`
curl $URL -F monimage=@$FILENAME -F submit=Upload -H "Expect:" -o $TEMPFILE --progress-bar >& $PROGRESS &
UPLOADFINISHED=0
PROGRESSVALUE=0
until [ "$UPLOADFINISHED" == "1" ]; do
sleep 0.2
cat $PROGRESS
PROGRESSVALUE=`tail -c 7 $PROGRESS | sed 's/,.*$//'`
if [ "$PROGRESSVALUE" == "100" ]; then
UPLOADFINISHED=1
fi
dcop $PROGRESSBAR setProgress $PROGRESSVALUE
done
sleep 0.5
dcop $PROGRESSBAR close
rm $PROGRESS
fi
# Analyser la page pour extraire les donnees
THUMBNAIL=`$EXTRACT_THUMBNAIL`
VIEWPAGE=`$EXTRACT_VIEWPAGE`
if [ ! $THUMBNAIL -o ! $VIEWPAGE ]; then
echo "Erreur inattendue, impossible de récupérer les infos de la page $TEMPFILE"
if [ "$GRAPHICAL" = "kdialog" ]; then
kdialog --error "Erreur inattendue, impossible de récupérer les infos de la page $TEMPFILE"
kdialog --textbox $TEMPFILE 400 200
fi
exit 2
fi
rm $TEMPFILE
# Resultat de l'upload : le code a placer dans un forum
BBCODE=[url=$VIEWPAGE][img]$THUMBNAIL[/img][/url]
# Mettre dans le presse-papier
if [ `which xclip` ]; then
echo $BBCODE | xclip
echo "BBCode stocké dans votre presse-papier (clic du milieu) :"
if [ "$GRAPHICAL" == "kdialog" ]; then
kdialog --dontagain imgupload:bbcodeclipboard --msgbox "BBCode stocké dans votre presse-papier (bouton central de votre souris, ou les deux boutons en même temps, pour le coller dans un texte) : $BBCODE"
fi
fi
echo $BBCODE
~/.imgupload/pix.nofrag.comURL=pix.nofrag.com
MAX_FILESIZE=2000000
EXTRACT_THUMBNAIL="awk '/\[img\](.*t\.\w*)\[\/img\]/ { print \$0 }' \$TEMPFILE | sed 's/^.*\[img\]//' | sed 's/\[\/img\].*$//'"
EXTRACT_VIEWPAGE="echo \$THUMBNAIL | sed 's/t\..*$/.html/'"
Pour celui qui veut tester, le script nécessite les paquets
curl et
xclip (et éventuellement
kdialog pour la barre de progression & cie). J'aurais pu utiliser dcop et klipper pour le presse-papier, mais autant utiliser xclip directement comme ça ça m'évitera de faire un traitement différent pour KDE ou Gnome (encore que c'est pas la mort, mais si au moins cette partie du script pouvait être simple 😛).
Pour ne pas utiliser kdialog il faut vider la variable "GRAPHICAL" au début du script.
Pour le moment pas de switch, le script ne prend qu'un argument : le fichier à envoyer.
Les « features » en objectif final :
- La gestion des interfaces kdialog/xdialog/zenity pour coller à tous les WM.
- Un historique des fichiers envoyés (conservé dans ~/.imgupload/history).
- Une interface graphique pour naviguer dans cet historique.
- Un fichier de conf pour déterminer l'utilisation d'un hébergeur (au départ je ferai 3 fichiers : pix, hiboox, et imageshack).
- Des switchs pour désactiver les alertes, les barres de progression, etc... si on en veut pas (pour accélérer le traitement par exemple).
- Pouvoir gérer l'envoi de plusieurs images avec un seul appel au script (dans le presse-papier il mettra tous les BBCodes nécessaires).
- Un fichier de préférences pour les options par défaut.