#!/bin/sh
# Multicast File Sharing
# Joel Bryan Juliano <joelbryan.juliano@gmail.com>

set -u
 
 # Setup the variables

 export LD_LIBRARY_PATH=/usr/lib:/usr/lib/multicast-filesharing${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
 export SUPERUSER=/usr/bin/sudo
 export REPLACE=/usr/bin/rpl
 export GUI=/usr/lib/multicast-filesharing/multicast-filesharing-gui
 export STREAMEDITOR=/usr/bin/sed
 
 DIALOG_ICON=/usr/share/icons/Tango/scalable/devices/network-wireless.svg
 DAEMON_CONFIG=/etc/flamethrower/flamethrower.conf
 DAEMON_ENABLED=$(cat $DAEMON_CONFIG | grep START_FLAMETHROWER_DAEMON | cut -d = -f2);
 DAEMON_CHECK_USER=$(cat $DAEMON_CONFIG | grep \\[$USERNAME\\]);
 DAEMON_CHECK_BANDWIDTH=$(cat $DAEMON_CONFIG | grep MAX_BITRATE | cut -d = -f2 | tail -n1);
 DAEMON_CHECK_DUPLEX=$(cat $DAEMON_CONFIG | grep FULL_DUPLEX | cut -d = -f2 | head -n1);
 CURRENT_DATE="`date '+%b %d, %Y'`"
 
 DOWNLOAD_DIR="$HOME/Distributed/Downloads"
 UPLOAD_DIR="$HOME/Distributed/Uploads"
 MULTICAST_BASE_DIR="$HOME/Distributed"
 
 export DIALOG_WARNING="/usr/bin/zenity --warning --text"
 export DIALOG_INFO="/usr/bin/zenity --info"
 export DIALOG_PROGRESS="/usr/bin/zenity --window-icon $DIALOG_ICON --progress --pulsate --auto-close"
 
 SWITCH_ROOT () {
 
 IS_ROOT=$(exec /usr/bin/gksudo -u root -k -m \
 	 "The software requires permission to modify the system. Please enter the system password" \
	 /bin/echo "IS_ROOT")

 if [ ! -z "$IS_ROOT" ]; then 
 echo "SUDO Succesfull"; else
 echo "SUDO is not executed properly";
 fi
 
 if [ -z "$IS_ROOT" ]; then
 $DIALOG_WARNING 'You do not have necessary permission to change the system.';
  exit 0;
 fi

}
 
 # Function probe if enabled (user-level)
 
 if [ -e "$UPLOAD_DIR" ]; then
 OPT_DAEMON="ENABLED";
 else
 OPT_DAEMON="DISABLED";
 fi

 if [ $DAEMON_CHECK_DUPLEX = on ]; then
 OPT_DUPLEX="ENABLED";
 else
 OPT_DUPLEX="DISABLED";
 fi 
 
$GUI $OPT_DAEMON $DAEMON_CHECK_BANDWIDTH $OPT_DUPLEX | (
 { read DAEMON_STATUS; read BANDWIDTH; read DUPLEX; }
 
 if [ "$BANDWIDTH" = "NULL" ]; then
 exit 0;
 fi
 
 BANDWIDTH_VALUE=$(echo $BANDWIDTH | cut -d. -f1);
 FORMAT_BANDWIDTH=$(echo $BANDWIDTH_VALUE"M");
 
 if [ "$DAEMON_STATUS" = "ENABLE" ]; then
 
 mkdir -p "$DOWNLOAD_DIR" 2> /dev/null;
 mkdir -p "$UPLOAD_DIR" 2> /dev/null;
 mkdir -p "$MULTICAST_BASE_DIR/.bin/" 2> /dev/null
 
 echo \
"
[Desktop Entry]
Encoding=UTF-8
Name=Upload to Network
Comment=Upload the files to Network
Exec=$MULTICAST_BASE_DIR/.bin/upload
Icon=network-wireless
Terminal=false
StartupNotify=true
Type=Application
Categories=GNOME;GTK;
OnlyShowIn=GNOME;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=multicast-filesharing
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=0.1" \
> "$MULTICAST_BASE_DIR/Upload.desktop";
 ln -sf /usr/share/applications/multicast-filesharing.desktop "$MULTICAST_BASE_DIR/multicast-filesharing.desktop";
 
 
 echo \
 "
 #!/bin/sh
 DIALOG_ICON=/usr/share/icons/Tango/scalable/devices/network-wireless.svg
 DIALOG_PROGRESS=\"/usr/bin/zenity --window-icon $DIALOG_ICON --progress --pulsate --auto-close\"
 ( /usr/bin/flamethrower --module \"$USERNAME\" --directory \"$DOWNLOAD_DIR\" ) | \
 $DIALOG_PROGRESS --title \"Upload files\" --text \"Uploading files to the Network\"
 " > "$MULTICAST_BASE_DIR/.bin/upload";
 chmod u+x "$MULTICAST_BASE_DIR/.bin/upload";
 
 echo \
"
Downloads
Uploads
" > "$MULTICAST_BASE_DIR/.hidden"
 
 ln -sf "$MULTICAST_BASE_DIR/Downloads" "$MULTICAST_BASE_DIR/Downloaded Files from the Network"
 ln -sf "$MULTICAST_BASE_DIR/Uploads" "$MULTICAST_BASE_DIR/My Shares"
 
 if [ -z "$DAEMON_CHECK_USER" ]; then
 touch "/tmp/$USERNAME.multicast-filesharing";
 cp "$DAEMON_CONFIG" "/tmp/$USERNAME.multicast-filesharing"; 
 echo \
 "\n[$USERNAME]\nDIR = \"$UPLOAD_DIR\" " >> "/tmp/$USERNAME.multicast-filesharing";
 SWITCH_ROOT;
 $SUPERUSER mv "/tmp/$USERNAME.multicast-filesharing" "$DAEMON_CONFIG";
 fi

 SWITCH_ROOT;
 $SUPERUSER update-rc.d flamethrower defaults
 $SUPERUSER /etc/init.d/flamethrower restart
 
 fi
 
 if [ "$DAEMON_STATUS" = "DISABLE" ]; then
  if [ -e $UPLOAD_DIR ]; then
  mkdir -p "$MULTICAST_BASE_DIR/Backup/$CURRENT_DATE"
  mv "$DOWNLOAD_DIR" "$MULTICAST_BASE_DIR/Backup/$CURRENT_DATE"
  mv "$UPLOAD_DIR" "$MULTICAST_BASE_DIR/Backup/$CURRENT_DATE"
  rm -rf "$MULTICAST_BASE_DIR/Upload.desktop"
  rm -rf "$MULTICAST_BASE_DIR/Downloaded Files from the Network"
  rm -rf "$MULTICAST_BASE_DIR/My Shares"
  
  SWITCH_ROOT;
  $SUPERUSER update-rc.d -f flamethrower remove
  $SUPERUSER /etc/init.d/flamethrower stop
  fi
 fi
 
 if [ "$DUPLEX" = "ENABLE" ]; then
  if  [ $DAEMON_CHECK_DUPLEX = off ]; then
  SWITCH_ROOT;
  $SUPERUSER $REPLACE "FULL_DUPLEX =$DAEMON_CHECK_DUPLEX" "FULL_DUPLEX = on" "$DAEMON_CONFIG";
  $SUPERUSER /etc/init.d/flamethrower restart
  fi
 fi
 
 if [ "$DUPLEX" = "DISABLE" ]; then
  if [ $DAEMON_CHECK_DUPLEX = on ]; then
  SWITCH_ROOT;
  $SUPERUSER $REPLACE "FULL_DUPLEX =$DAEMON_CHECK_DUPLEX" "FULL_DUPLEX = off" "$DAEMON_CONFIG";
  $SUPERUSER /etc/init.d/flamethrower restart
  fi
 fi
 
 if [ ! $DAEMON_CHECK_BANDWIDTH = $FORMAT_BANDWIDTH ]; then
 SWITCH_ROOT;
 $SUPERUSER $REPLACE "MAX_BITRATE =$DAEMON_CHECK_BANDWIDTH" "MAX_BITRATE = $FORMAT_BANDWIDTH" "$DAEMON_CONFIG";
 $SUPERUSER /etc/init.d/flamethrower restart
 fi
 
 if [ "$DAEMON_STATUS" = "ENABLE" ]; then
  $DIALOG_INFO --text "Check the Distributed folder on your Home to begin multicast filesharing"
 fi
 
);
