neoboot2
BIN
NeoBoot/bin/fontforneoboot.ttf
Normal file
BIN
NeoBoot/bin/libpngneo
Normal file
BIN
NeoBoot/bin/nanddump_arm
Normal file
BIN
NeoBoot/bin/nanddump_mips
Normal file
BIN
NeoBoot/bin/neobm
Normal file
BIN
NeoBoot/bin/neoinitarm
Normal file
181
NeoBoot/bin/neoinitarmvu
Normal file
@@ -0,0 +1,181 @@
|
||||
#!/bin/sh
|
||||
#script mod by gutosie
|
||||
#neo init arm
|
||||
IMAGE=/media/neoboot/ImageBoot
|
||||
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
|
||||
NEO=/media/neoboot
|
||||
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
|
||||
MODPROBE=/sbin/modprobe
|
||||
BOXNAME=`cat /etc/hostname`
|
||||
FINDBOOT=/media/*/ImageBoot/.neonextboot
|
||||
CELBOOT=`cat $FINDBOOT`
|
||||
|
||||
if [ $CELBOOT = "Flash" ] || [ -e /tmp/.init_reboot ] ; then
|
||||
exec /sbin/init.sysvinit $1
|
||||
else
|
||||
LIBDIR=/lib/modules/`uname -r`
|
||||
if [ ! -d $LIBDIR ]; then
|
||||
LIBDIR=/lib/modules/`ls /lib/modules | tail -n 1`
|
||||
fi
|
||||
if [ `mount | grep /proc | wc -l` -lt 1 ]; then
|
||||
/bin/mount -t proc proc /proc > /dev/null 2>&1
|
||||
/bin/mount -t sysfs sysfs /sys > /dev/null 2>&1
|
||||
/sbin/depmod -Ae > /dev/null 2>&1
|
||||
fi
|
||||
sleep 2
|
||||
mnttest="nouuid"
|
||||
if [ -e $NEOBOOT/bin/install ]; then
|
||||
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
selectinstall=`cat $NEOBOOT/bin/install`
|
||||
for item in $orgimag1; do
|
||||
selectmnt=`blkid | sed "/$selectinstall/!d" | cut -d":" -f1`
|
||||
if [ $selectmnt == $item ]; then
|
||||
echo "selectmnt=" $selectmnt
|
||||
mnttest="uuid"
|
||||
mount $selectmnt $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e $NEO/ImageBoot ]; then
|
||||
echo "NEOBOOT hasn't been installed on: " $selectmnt
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT has been installed on: " $selectmnt
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -e $NEOBOOT/bin/install2 ]; then
|
||||
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
selectinstall2=`cat $NEOBOOT/bin/install2`
|
||||
for item in $orgimag1; do
|
||||
selectmnt=`blkid | sed "/$selectinstall/!d" | cut -d":" -f1`
|
||||
if [ $selectmnt == $item ]; then
|
||||
echo "selectmnt=" $selectmnt
|
||||
mnttest="uuid"
|
||||
mount $selectmnt $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e $NEO/ImageBoot ]; then
|
||||
echo "NEOBOOT hasn't been installed on: " $selectmnt
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT has been installed on: " $selectmnt
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ ! -e $NEO ]; then
|
||||
mkdir $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ $mnttest="nouuid" ] ; then
|
||||
echo "NeoBoot mount by Device"
|
||||
DEVICES1=`find /dev/sd??`
|
||||
for DEVICE in $DEVICES1;
|
||||
do
|
||||
if [ -e $NEO ]; then
|
||||
echo "neoboot checking installation on: " $DEVICE
|
||||
mount $DEVICE $NEO > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ ! -e $NEO/ImageBoot ]; then
|
||||
echo "NeoBoot hasn't been installed on: " $DEVICE
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOTt has been installed on: " $DEVICE
|
||||
break;
|
||||
fi
|
||||
done
|
||||
elif [ $mnttest="uuid" ]; then
|
||||
echo "NEOBOOT mount by UUID"
|
||||
fi
|
||||
if [ ! -e $IMAGEBOOT ]; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > $IMAGEBOOT
|
||||
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
reboot -f
|
||||
fi
|
||||
|
||||
cat /etc/videomode > /proc/stb/video/videomode
|
||||
|
||||
TARGET=Flash
|
||||
if [ -f $IMAGEBOOT ]; then
|
||||
TARGET=`cat $IMAGEBOOT`
|
||||
fi
|
||||
if [ $TARGET = "Flash" ]; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
/bin/umount $NEO > /dev/null 2>&1
|
||||
/bin/umount /media/usb > /dev/null 2>&1
|
||||
/bin/umount /media/hdd > /dev/null 2>&1
|
||||
else
|
||||
#echo 3 > /proc/sys/vm/drop_caches
|
||||
if [ -d $NEO/ImageBoot/$TARGET ]; then
|
||||
if [ -f $NEO/ImageBoot/$TARGET/etc/init.d/udev ]; then
|
||||
sed -ie s!"\$4"!"\$3"!g $NEO/ImageBoot/$TARGET/etc/init.d/udev
|
||||
fi
|
||||
sleep 1
|
||||
/bin/mount -o bind /dev $NEO/ImageBoot/$TARGET/dev
|
||||
/bin/mount -o bind /proc $NEO/ImageBoot/$TARGET/proc
|
||||
/bin/mount -o bind /sys $NEO/ImageBoot/$TARGET/sys
|
||||
rm $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
|
||||
mkdir $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
|
||||
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
for item in $orgimag; do
|
||||
ohdd=`echo $item | cut -d"/" -f3`
|
||||
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
|
||||
if [ $nhdd == '$NEO' ]; then
|
||||
echo $nhdd
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
else
|
||||
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo ok
|
||||
fi
|
||||
done
|
||||
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
#/bin/mount /dev/sda1 /media/neoboot/ImageBoot/$TARGET/media/hdd
|
||||
|
||||
######### test boot new imaga>>>>
|
||||
if [ -e $IMAGE/$TARGET/.control_ok ]; then
|
||||
echo "No Error - Booting image normal ... "; sleep 2
|
||||
sync
|
||||
else
|
||||
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
|
||||
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
|
||||
sync
|
||||
else
|
||||
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
|
||||
sync
|
||||
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
|
||||
echo "Restart STB - Back to Flash... "
|
||||
sleep 7; reboot -f
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
######### test boot new image<<<<<
|
||||
|
||||
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
|
||||
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init.sysvinit
|
||||
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
|
||||
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init
|
||||
else
|
||||
echo " "
|
||||
echo " NEOBOOT - ERROR !!! "
|
||||
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
|
||||
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
|
||||
echo " Powrot do image Flash... "
|
||||
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " > $IMAGEBOOT
|
||||
/usr/bin/showiframe $NEOBOOT/error.mvi > /dev/null 2>&1
|
||||
sync; sleep 10; exec /sbin/init.sysvinit $1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ -f /sbin/init.sysvinit ]; then
|
||||
exec /sbin/init.sysvinit $1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
350
NeoBoot/bin/neoinitmips
Normal file
@@ -0,0 +1,350 @@
|
||||
#!/bin/sh
|
||||
#DESCRIPTION = This script mod. by gutosie
|
||||
#NeoBoot INIT Version: 6.00
|
||||
#Scrypt Unix Shell - init for neoboot
|
||||
|
||||
IMAGE=/media/neoboot/ImageBoot
|
||||
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
|
||||
NEO=/media/neoboot
|
||||
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
|
||||
MODPROBE=/sbin/modprobe
|
||||
BOXNAME=`cat /etc/hostname`
|
||||
FINDBOOT=/media/*/ImageBoot/.neonextboot
|
||||
|
||||
|
||||
if [ -e /tmp/.init_reboot ]; then
|
||||
rm /tmp/.init_reboot
|
||||
break;
|
||||
|
||||
else
|
||||
if [ -e $FINDBOOT ] ; then
|
||||
CELBOOT=`cat $FINDBOOT`
|
||||
if [ $CELBOOT = "Flash" ]; then
|
||||
exec /sbin/init.sysvinit $*
|
||||
exit 0
|
||||
else
|
||||
echo " "
|
||||
break;
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "====================================================> "
|
||||
echo " "
|
||||
echo " -=*[ NEOBOOT - BOOT UP ]*=- "
|
||||
echo " NEO BOOT INIT Version: 6.00 Update 6.15 16-11-2017 "
|
||||
echo " q(-_-)p "
|
||||
echo " "
|
||||
echo "====================================================> "
|
||||
|
||||
/etc/init.d/sysfs.sh
|
||||
/etc/init.d/modutils.sh
|
||||
|
||||
echo "NEOBOOT is starting mdev"
|
||||
echo " "
|
||||
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
|
||||
/etc/init.d/mdev > /dev/null 2>&1
|
||||
|
||||
mknod /dev/sda b 8 0
|
||||
mknod /dev/sda1 b 8 1
|
||||
mknod /dev/sda2 b 8 2
|
||||
mknod /dev/sdb b 8 16
|
||||
mknod /dev/sdb1 b 8 17
|
||||
mknod /dev/sdb2 b 8 18
|
||||
mknod /dev/sdc b 8 32
|
||||
mknod /dev/sdc1 b 8 33
|
||||
mknod /dev/sdc2 b 8 34
|
||||
mknod /dev/sdd b 8 48
|
||||
mknod /dev/sdd1 b 8 49
|
||||
mknod /dev/sdd2 b 8 50
|
||||
|
||||
mkdir /dev/input
|
||||
mknod /dev/input/event0 c 13 64
|
||||
|
||||
mknod /dev/fb0 c 29 0
|
||||
mkdir /dev/fb
|
||||
ln -s ../fb0 /dev/fb/0
|
||||
|
||||
sleep 1
|
||||
|
||||
if [ -e /etc/videomode ]; then
|
||||
cat /etc/videomode > /proc/stb/video/videomode
|
||||
fi
|
||||
if [ -e /etc/videomode2 ]; then
|
||||
cat /etc/videomode2 > /proc/stb/video/videomode
|
||||
fi
|
||||
|
||||
(
|
||||
if [ -d /proc/stb ]; then
|
||||
while true; do
|
||||
if [ -e /dev/dvb/adapter0/video0 ]; then
|
||||
break;
|
||||
fi;
|
||||
done;
|
||||
fi;
|
||||
[ -e /etc/dropbear/dropbear_rsa_host_key ] && /usr/bin/showiframe $NEOBOOT/neowait.mvi;
|
||||
|
||||
) &
|
||||
|
||||
DEVICES1=`find /dev/sd??`
|
||||
for DEVICE in $DEVICES1;
|
||||
do
|
||||
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
|
||||
mount $DEVICE /media/neoboot > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
|
||||
umount /media/neoboot > /dev/null 2>&1
|
||||
fi
|
||||
done
|
||||
|
||||
LIBDIR=/lib/modules/`uname -r`
|
||||
if [ ! -d $LIBDIR ]; then
|
||||
LIBDIR=/lib/modules/`ls /lib/modules | tail -n 1`
|
||||
fi
|
||||
|
||||
|
||||
if [ `mount | grep /proc | wc -l` -lt 1 ]; then
|
||||
/bin/mount -a
|
||||
/bin/mount -t proc proc /proc > /dev/null 2>&1
|
||||
/bin/mount -t sysfs sysfs /sys > /dev/null 2>&1
|
||||
/sbin/depmod -Ae > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
echo "NeoBoot is starting mdev"
|
||||
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
|
||||
/etc/init.d/mdev > /dev/null 2>&1
|
||||
|
||||
|
||||
sleep 1
|
||||
echo " "
|
||||
echo "Search NEOBOOT... "
|
||||
#sed=grep
|
||||
mnttest="nouuid"
|
||||
if [ -e $NEOBOOT/bin/install ]; then
|
||||
orgimag1=`mount | grep '/sd/!d' | cut -d" " -f1`
|
||||
selectinstall=`cat $NEOBOOT/bin/install`
|
||||
for item in $orgimag1; do
|
||||
selectmnt=`blkid | grep "/$selectinstall/!d" | cut -d":" -f1`
|
||||
if [ $selectmnt == $item ]; then
|
||||
echo "selectmnt=" $selectmnt
|
||||
mnttest="uuid"
|
||||
mount $selectmnt $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e $IMAGE ]; then
|
||||
echo "NEOBOOT hasn't been installed on: " $selectmnt
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT has been installed on: " $selectmnt
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! -e $NEO ]; then
|
||||
mkdir $NEO > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ $mnttest == "nouuid" ]; then
|
||||
echo "NEOBOOT mount by Device"
|
||||
DEVICES1=`find /dev/sd??`
|
||||
for DEVICE in $DEVICES1;
|
||||
do
|
||||
if [ -e $NEO ]; then
|
||||
echo "NEOBOOT checking installation on: " $DEVICE
|
||||
mount $DEVICE $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e $IMAGE ]; then
|
||||
echo "NEOBOOT hasn't been installed on:" $DEVICE
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT has been installed on: " $DEVICE
|
||||
break;
|
||||
fi
|
||||
done
|
||||
elif [ $mnttest == "uuid" ]; then
|
||||
echo "NEOBOOT mount by UUID"
|
||||
fi
|
||||
|
||||
#dodatkowe szukanie neoboota
|
||||
#mount /dev/sdb1 $NEO > /dev/null 2>&1 # <<< tu mozesz zmienic sdb1 i wpisac Twoje montowanie dysku dla neoboot
|
||||
|
||||
echo "NEOBOOT is loading modules."
|
||||
for mod in dvb; do
|
||||
echo "=======================> NeoBoot is loading modules"
|
||||
$MODPROBE $mod
|
||||
done
|
||||
|
||||
if [ -f $LIBDIR/kernel/fs/autofs4/autofs4.ko ]; then
|
||||
/sbin/insmod $LIBDIR/kernel/fs/autofs4/autofs4.ko > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
|
||||
if [ -e $NEOBOOT/bin/fbclear ]; then
|
||||
$NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
|
||||
if [ -e $NEOBOOT/bin/neobm ]; then
|
||||
echo " Neo-Boot start boot manager "
|
||||
echo " Waiting to change image - 20s "
|
||||
echo " "
|
||||
chmod 0755 $NEOBOOT/bin/neobm
|
||||
$NEOBOOT/neologo.mvi > /dev/null 2>&1
|
||||
sleep 1
|
||||
$NEOBOOT/bin/neobm > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ ! -e $IMAGEBOOT ]; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > $IMAGEBOOT
|
||||
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
reboot -f
|
||||
fi
|
||||
|
||||
|
||||
TARGETIMAGE=`cat $IMAGEBOOT`
|
||||
if [ $TARGETIMAGE = "BlackHoleVU" ] || [ $TARGETIMAGE = "BlackHoleVU+" ] ; then
|
||||
if ! [ -e $NEO/ImagesUpload/.kernel/used_bh_kernel ]; then
|
||||
rm -f $IMAGEBOOT
|
||||
echo "Flash " >> $IMAGEBOOT
|
||||
echo "Halt init image - " $TARGETIMAGE
|
||||
echo "Start image Flash... "
|
||||
$NEOBOOT/bh.mvi > /dev/null 2>&1
|
||||
sync; sleep 1
|
||||
exec /sbin/init.sysvinit $*
|
||||
exit 0
|
||||
else
|
||||
break;
|
||||
fi
|
||||
fi
|
||||
|
||||
sync
|
||||
|
||||
TARGET=Flash
|
||||
if [ -f $IMAGEBOOT ]; then
|
||||
TARGET=`cat $IMAGEBOOT`
|
||||
fi
|
||||
|
||||
if [ $TARGET = "Flash" ]; then
|
||||
echo "____________________________________"
|
||||
echo "____________________________________"
|
||||
echo " "
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
echo "____________________________________"
|
||||
echo "____________________________________"
|
||||
/bin/umount $NEO > /dev/null 2>&1
|
||||
/bin/umount /media/usb > /dev/null 2>&1
|
||||
/bin/umount /media/hdd > /dev/null 2>&1
|
||||
/usr/bin/showiframe /usr/share/bootlogo.mvi > /dev/null 2>&1
|
||||
echo "----------------------------------"
|
||||
echo " BOOT UP IMAGE FROM FLASH "
|
||||
echo "----------------------------------"
|
||||
else
|
||||
echo " "
|
||||
echo "NEOBOOT is booting image" $TARGET " from " $DEVICE
|
||||
echo " "
|
||||
if [ -d $IMAGE/$TARGET ]; then
|
||||
if [ -f $IMAGE/$TARGET/etc/init.d/udev ]; then
|
||||
sed -ei s!"\$4"!"\$3"!g $IMAGE/$TARGET/etc/init.d/udev
|
||||
fi
|
||||
|
||||
if [ -f $IMAGE/$TARGET/usr/share/bootlogo.mvi ]; then
|
||||
/usr/bin/showiframe $IMAGE/$TARGET/usr/share/bootlogo.mvi > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
|
||||
/bin/mount -o bind /dev $IMAGE/$TARGET/dev
|
||||
/bin/mount -o bind /proc $IMAGE/$TARGET/proc
|
||||
/bin/mount -o bind /sys $IMAGE/$TARGET/sys
|
||||
rm $IMAGE/$TARGET/media/neoboot > /dev/null 2>&1
|
||||
mkdir $IMAGE/$TARGET/media/neoboot > /dev/null 2>&1
|
||||
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
for item in $orgimag; do
|
||||
ohdd=`echo $item | cut -d"/" -f3`
|
||||
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
|
||||
if [ $nhdd == '$NEO' ]; then
|
||||
echo $nhdd
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
else
|
||||
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh ]; then
|
||||
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
fi
|
||||
echo "----------------------------------------"
|
||||
echo " -=*[ BOOT UP IMAGE FROM DISK ]*=- "
|
||||
echo "----------------------------------------"
|
||||
|
||||
|
||||
if [ ! -f /media/neoboot/ImageBoot/$TARGET/media/neoboot/ImageBoot/.neonextboot ]; then
|
||||
/bin/mount -o bind /media/neoboot /media/neoboot/ImageBoot/$TARGET/media/neoboot
|
||||
fi
|
||||
|
||||
DEVICES1=`ls /media`
|
||||
for DEVICE in $DEVICES1;
|
||||
do
|
||||
if [ -f /media/$DEVICE/ImageBoot/.neonextboot ]; then
|
||||
/bin/mount -o bind /media/neoboot /media/neoboot/ImageBoot/$TARGET/media/$DEVICE
|
||||
fi
|
||||
done
|
||||
|
||||
cd /media/neoboot/ImageBoot/$TARGET;
|
||||
|
||||
######### test boot new imaga>>>>
|
||||
if [ -e $IMAGE/$TARGET/.control_ok ]; then
|
||||
echo "No Error - Booting image normal ... "; sleep 2
|
||||
sync
|
||||
else
|
||||
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
|
||||
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
|
||||
sync
|
||||
else
|
||||
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
|
||||
sync
|
||||
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
|
||||
echo "Restart STB - Back to Flash... "
|
||||
sleep 7; reboot -f
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
######### test boot new image<<<<<
|
||||
|
||||
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
|
||||
exec /usr/sbin/chroot . /sbin/init.sysvinit $*
|
||||
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
|
||||
exec /usr/sbin/chroot . /sbin/init $*
|
||||
else
|
||||
echo " "
|
||||
echo " NEOBOOT - ERROR !!! "
|
||||
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
|
||||
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
|
||||
echo " Powrot do image Flash... "
|
||||
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " >> $IMAGEBOOT
|
||||
/usr/bin/showiframe $NEOBOOT/error.mvi > /dev/null 2>&1
|
||||
sync; sleep 10; exec /sbin/init.sysvinit $*
|
||||
|
||||
fi
|
||||
exit 0
|
||||
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f /sbin/init.sysvinit ]; then
|
||||
exec /sbin/init.sysvinit $*
|
||||
fi
|
||||
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
|
||||
160
NeoBoot/bin/neoinitmipsvu
Normal file
@@ -0,0 +1,160 @@
|
||||
#!/bin/sh
|
||||
#script mod by gutosie
|
||||
IMAGE=/media/neoboot/ImageBoot
|
||||
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
|
||||
NEO=/media/neoboot
|
||||
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
|
||||
MODPROBE=/sbin/modprobe
|
||||
BOXNAME=`cat /etc/hostname`
|
||||
FINDBOOT=/media/*/ImageBoot/.neonextboot
|
||||
CELBOOT=`cat $FINDBOOT`
|
||||
|
||||
if [ $CELBOOT = "Flash" ] || [ -e /tmp/.init_reboot ] ; then
|
||||
exec /sbin/init.sysvinit $1
|
||||
else
|
||||
LIBDIR=/lib/modules/`uname -r`
|
||||
if [ ! -d $LIBDIR ]; then
|
||||
LIBDIR=/lib/modules/`ls /lib/modules | tail -n 1`
|
||||
fi
|
||||
if [ `mount | grep /proc | wc -l` -lt 1 ]; then
|
||||
/bin/mount -a
|
||||
/bin/mount -t proc proc /proc > /dev/null 2>&1
|
||||
/bin/mount -t sysfs sysfs /sys > /dev/null 2>&1
|
||||
/sbin/depmod -Ae > /dev/null 2>&1
|
||||
fi
|
||||
sleep 2
|
||||
mnttest="nouuid"
|
||||
if [ -e $NEOBOOT/bin/install ]; then
|
||||
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
selectinstall=`cat $NEOBOOT/bin/install`
|
||||
for item in $orgimag1; do
|
||||
selectmnt=`blkid | sed '/$selectinstall/!d' | cut -d":" -f1`
|
||||
if [ $selectmnt == $item ]; then
|
||||
echo "selectmnt=" $selectmnt
|
||||
mnttest="uuid"
|
||||
mount $selectmnt $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ ! -e $NEO/ImageBoot ]; then
|
||||
echo "NEOBOOT hasn't been installed on: " $selectmnt
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT has been installed on: " $selectmnt
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ ! -e $NEO ]; then
|
||||
mkdir $NEO > /dev/null 2>&1
|
||||
fi
|
||||
if [ $mnttest == "nouuid" ] ; then
|
||||
echo "NeoBoot mount by Device"
|
||||
DEVICES1=`find /dev/sd??`
|
||||
for DEVICE in $DEVICES1;
|
||||
do
|
||||
if [ -e $NEO ]; then
|
||||
echo "neoboot checking installation on: " $DEVICE
|
||||
mount $DEVICE $NEO > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ ! -e $NEO/ImageBoot ]; then
|
||||
echo "NeoBoot hasn't been installed on: " $DEVICE
|
||||
umount $NEO > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOTt has been installed on: " $DEVICE
|
||||
break;
|
||||
fi
|
||||
done
|
||||
elif [ $mnttest == "uuid" ]; then
|
||||
echo "NEOBOOT mount by UUID"
|
||||
fi
|
||||
if [ ! -e $IMAGEBOOT ]; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > $IMAGEBOOT
|
||||
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
reboot -f
|
||||
fi
|
||||
TARGET=Flash
|
||||
if [ -f $IMAGEBOOT ]; then
|
||||
TARGET=`cat $IMAGEBOOT`
|
||||
fi
|
||||
if [ $TARGET = "Flash" ]; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
/bin/umount $NEO > /dev/null 2>&1
|
||||
/bin/umount /media/usb > /dev/null 2>&1
|
||||
/bin/umount /media/hdd > /dev/null 2>&1
|
||||
else
|
||||
echo "NEOBOOT is booting" $TARGET " from " $DEVICE
|
||||
echo 3 > /proc/sys/vm/drop_caches
|
||||
if [ -d $NEO/ImageBoot/$TARGET ]; then
|
||||
if [ -f $NEO/ImageBoot/$TARGET/etc/init.d/udev ]; then
|
||||
sed -ie s!"\$4"!"\$3"!g $NEO/ImageBoot/$TARGET/etc/init.d/udev
|
||||
fi
|
||||
sleep 1
|
||||
/bin/mount -o bind /dev $NEO/ImageBoot/$TARGET/dev
|
||||
/bin/mount -o bind /proc $NEO/ImageBoot/$TARGET/proc
|
||||
/bin/mount -o bind /sys $NEO/ImageBoot/$TARGET/sys
|
||||
rm $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
|
||||
mkdir $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
|
||||
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
|
||||
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
for item in $orgimag; do
|
||||
ohdd=`echo $item | cut -d"/" -f3`
|
||||
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
|
||||
if [ $nhdd == '$NEO' ]; then
|
||||
echo $nhdd
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
else
|
||||
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
echo ok
|
||||
fi
|
||||
done
|
||||
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
|
||||
|
||||
|
||||
######### test boot new imaga>>>>
|
||||
if [ -e $IMAGE/$TARGET/.control_ok ]; then
|
||||
echo "No Error - Booting image normal ... "; sleep 2
|
||||
sync
|
||||
else
|
||||
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
|
||||
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
|
||||
sync
|
||||
else
|
||||
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
|
||||
sync
|
||||
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
|
||||
echo "Restart STB - Back to Flash... "
|
||||
sleep 7; reboot -f
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
######### test boot new image<<<<
|
||||
|
||||
|
||||
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
|
||||
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init.sysvinit
|
||||
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
|
||||
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init
|
||||
else
|
||||
echo " "
|
||||
echo " NEOBOOT - ERROR !!! "
|
||||
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
|
||||
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
|
||||
echo " Powrot do image Flash... "
|
||||
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " >> $IMAGEBOOT
|
||||
sync; sleep 10; exec /sbin/init.sysvinit $1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ -f /sbin/init.sysvinit ]; then
|
||||
exec /sbin/init.sysvinit $1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
BIN
NeoBoot/bin/nfidump
Normal file
38
NeoBoot/bin/rebootbot
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
echo " ***** gutosie _(*_*)_ TEST FIRST BOOT IMAGE - rebootbot ***** "
|
||||
|
||||
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
|
||||
sync
|
||||
echo "Error - Back to Flash... "
|
||||
sleep 5; reboot -f
|
||||
fi
|
||||
|
||||
IMAGE=/media/neoboot/ImageBoot
|
||||
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
|
||||
TARGET=Flash
|
||||
if [ -f $IMAGEBOOT ]; then
|
||||
TARGET=`cat $IMAGEBOOT`
|
||||
fi
|
||||
$IMAGE/$TARGET
|
||||
|
||||
if [ -e $IMAGE/$TARGET/.control_ok ]; then
|
||||
echo "No Error - Booting image normal ... "; sleep 2
|
||||
sync
|
||||
else
|
||||
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
|
||||
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
|
||||
sync
|
||||
else
|
||||
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
|
||||
ln -sfn /sbin/init.sysvinit /sbin/init
|
||||
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
|
||||
sync
|
||||
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
|
||||
echo "Restart STB - Back to Flash... "
|
||||
sleep 7; reboot -f
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
189
NeoBoot/bin/utilsbh
Normal file
@@ -0,0 +1,189 @@
|
||||
from re import sub
|
||||
from Tools.Directories import fileExists, resolveFilename, SCOPE_CURRENT_SKIN
|
||||
import xml.etree.cElementTree
|
||||
entities = [('ä', u'\xe4'),
|
||||
('ä', u'\xe4'),
|
||||
('ü', u'\xfc'),
|
||||
('ü', u'\xfc'),
|
||||
('ö', u'\xf6'),
|
||||
('ö', u'\xf6'),
|
||||
('Ä', u'\xc4'),
|
||||
('Ä', u'\xc4'),
|
||||
('Ü', u'\xdc'),
|
||||
('Ü', u'\xdc'),
|
||||
('Ö', u'\xd6'),
|
||||
('Ö', u'\xd6'),
|
||||
('ß', u'\xdf'),
|
||||
('ß', u'\xdf'),
|
||||
('…', u'...'),
|
||||
('–', u'-'),
|
||||
(' ', u' '),
|
||||
('"', u'"'),
|
||||
('&', u'&'),
|
||||
(''', u"'"),
|
||||
('<', u'<'),
|
||||
('>', u'>'),
|
||||
('<', u'<'),
|
||||
('>', u'>'),
|
||||
(' ', u' '),
|
||||
('&', u'&'),
|
||||
('"', u'"'),
|
||||
(''', u"'")]
|
||||
|
||||
def nab_strip_html(html):
|
||||
html = html.replace('\n', ' ')
|
||||
html = sub('\\s\\s+', ' ', html)
|
||||
html = sub('<br(\\s+/)?>', '\n', html)
|
||||
html = sub('</?(p|ul|ol)(\\s+.*?)?>', '\n', html)
|
||||
html = sub('<li(\\s+.*?)?>', '-', html)
|
||||
html = html.replace('</li>', '\n')
|
||||
return nab_strip_pass1(html)
|
||||
|
||||
|
||||
def nab_strip_pass1(html):
|
||||
html = sub('<(.*?)>', '', html)
|
||||
html.replace('Ä', '\xc3\x84')
|
||||
html.replace('ä', '\xc3\xa4')
|
||||
html.replace('ä', '\xc3\xa4')
|
||||
html.replace('ü', '\xc3\xbc')
|
||||
html.replace('ü', '\xc3\xbc')
|
||||
html.replace('ö', '\xc3\xb6')
|
||||
html.replace('ö', '\xc3\xb6')
|
||||
html.replace('Ä', '\xc3\x84')
|
||||
html.replace('Ä', '\xc3\x84')
|
||||
html.replace('Ü', '\xc3\x9c')
|
||||
html.replace('Ü', '\xc3\x9c')
|
||||
html.replace('Ö', '\xc3\x96')
|
||||
html.replace('Ö', '\xc3\x96')
|
||||
html.replace('ß', '\xc3\x9f')
|
||||
html.replace('ß', '\xc3\x9f')
|
||||
html.replace('<', '<')
|
||||
html.replace('>', '>')
|
||||
html.replace(' ', ' ')
|
||||
html.replace('&', '&')
|
||||
html.replace('"', '"')
|
||||
html.replace(''', "'")
|
||||
return html
|
||||
|
||||
|
||||
def nab_Read_CCCinfoCfg():
|
||||
myhost = '127.0.0.1'
|
||||
myuser = mypass = ''
|
||||
myport = '16001'
|
||||
if fileExists('/etc/delcccaminfo'):
|
||||
f = open('/etc/delcccaminfo', 'r')
|
||||
for line in f.readlines():
|
||||
line = line.strip()
|
||||
if line.find('HOST ADDRESS:') != -1:
|
||||
myhost = line[13:]
|
||||
elif line.find('WEBINFO USERNAME:') != -1:
|
||||
myuser = line[17:]
|
||||
elif line.find('WEBINFO PASSWORD:') != -1:
|
||||
mypass = line[17:]
|
||||
elif line.find('WEBINFO LISTEN PORT:') != -1:
|
||||
myport = line[20:]
|
||||
|
||||
f.close()
|
||||
myurl = 'http://' + myhost + ':' + myport
|
||||
if myuser and mypass:
|
||||
myurl = 'http://' + myuser + ':' + mypass + '@' + myhost + ':' + myport
|
||||
return [myhost,
|
||||
myuser,
|
||||
mypass,
|
||||
myport,
|
||||
myurl]
|
||||
|
||||
|
||||
def nab_Write_CCCinfoCfg(mycfg):
|
||||
out = open('/etc/delcccaminfo', 'w')
|
||||
strview = 'HOST ADDRESS:' + mycfg[0] + '\n'
|
||||
out.write(strview)
|
||||
strview = 'WEBINFO USERNAME:' + mycfg[1] + '\n'
|
||||
out.write(strview)
|
||||
strview = 'WEBINFO PASSWORD:' + mycfg[2] + '\n'
|
||||
out.write(strview)
|
||||
strview = 'WEBINFO LISTEN PORT:' + mycfg[3] + '\n'
|
||||
out.write(strview)
|
||||
out.close()
|
||||
|
||||
|
||||
def DeliteGetSkinPath():
|
||||
myskinpath = resolveFilename(SCOPE_CURRENT_SKIN, '')
|
||||
if myskinpath == '/usr/share/enigma2/':
|
||||
myskinpath = '/usr/share/enigma2/skin_default/'
|
||||
return myskinpath
|
||||
|
||||
|
||||
def nab_Detect_Machine():
|
||||
machine = 'dm8000'
|
||||
if fileExists('/etc/bhmachine'):
|
||||
f = open('/etc/bhmachine', 'r')
|
||||
machine = f.readline().strip()
|
||||
f.close()
|
||||
return machine
|
||||
|
||||
|
||||
def BhU_get_Version():
|
||||
ver = ''
|
||||
if fileExists('/boot/blackhole/version'):
|
||||
f = open('/boot/blackhole/version', 'r')
|
||||
ver = f.readline().strip()
|
||||
f.close()
|
||||
return ver
|
||||
|
||||
|
||||
def BhU_check_proc_version():
|
||||
ver = ''
|
||||
if fileExists('/boot/blackhole/version'):
|
||||
f = open('/boot/blackhole/version', 'r')
|
||||
ver = f.readline().strip()
|
||||
f.close()
|
||||
return ver
|
||||
|
||||
|
||||
def BhU_checkSkinVersion(skinfile):
|
||||
version = '2.0.0'
|
||||
authors = ['Army', 'Matrix10', 'capa']
|
||||
ret = 'Sorry this skin is not compatible with the current Black Hole image version.'
|
||||
curversion = int(version.replace('.', ''))
|
||||
fullfile = '/usr/share/enigma2/' + skinfile
|
||||
checkver = False
|
||||
checkauth = False
|
||||
if fileExists(fullfile):
|
||||
f = open(fullfile)
|
||||
for line in f.readlines():
|
||||
if line.find('black hole version:') != -1:
|
||||
parts = line.strip().split(':')
|
||||
ver = int(parts[1].strip().replace('.', ''))
|
||||
if ver >= curversion:
|
||||
checkver = True
|
||||
elif line.find('skin author:') != -1:
|
||||
parts = line.strip().split(':')
|
||||
auth = parts[1].strip()
|
||||
for a in authors:
|
||||
if a == auth:
|
||||
checkauth = True
|
||||
|
||||
f.close()
|
||||
if checkver == True:
|
||||
if checkauth == True:
|
||||
ret = 'passed'
|
||||
return ret
|
||||
|
||||
|
||||
def BhU_find_hdd():
|
||||
hdd = ''
|
||||
hdds = ['sda',
|
||||
'sdb',
|
||||
'sdc',
|
||||
'sdd',
|
||||
'sde',
|
||||
'sdf']
|
||||
for device in hdds:
|
||||
filename = '/sys/block/%s/removable' % device
|
||||
if fileExists(filename):
|
||||
if file(filename).read().strip() == '0':
|
||||
hdd = device
|
||||
break
|
||||
|
||||
return hdd
|
||||
1
NeoBoot/bin/version
Normal file
@@ -0,0 +1 @@
|
||||
1.4.1
|
||||
6
NeoBoot/ex_init.py
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
import sys, extract
|
||||
if len(sys.argv) < 14:
|
||||
pass
|
||||
else:
|
||||
extract.NEOBootMainEx(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7], sys.argv[8], sys.argv[9], sys.argv[10], sys.argv[11], sys.argv[12], sys.argv[13], sys.argv[14])
|
||||
1074
NeoBoot/extract.py
Normal file
966
NeoBoot/files/Harddisk.py
Normal file
@@ -0,0 +1,966 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#from __future__ import print_function
|
||||
#from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
import os
|
||||
import time
|
||||
from Tools.Directories import fileExists, fileCheck, pathExists
|
||||
from Tools.CList import CList
|
||||
from Components.SystemInfo import SystemInfo
|
||||
from Components.Console import Console
|
||||
from Task import LoggingTask
|
||||
import Task
|
||||
|
||||
def readFile(filename):
|
||||
file = open(filename)
|
||||
data = file.read().strip()
|
||||
file.close()
|
||||
return data
|
||||
|
||||
|
||||
def getProcMounts():
|
||||
try:
|
||||
mounts = open('/proc/mounts', 'r')
|
||||
except IOError as ex:
|
||||
print '[Harddisk] Failed to open /proc/mounts', ex
|
||||
return []
|
||||
|
||||
result = [ line.strip().split(' ') for line in mounts ]
|
||||
for item in result:
|
||||
item[1] = item[1].replace('\\040', ' ')
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def getNonNetworkMediaMounts():
|
||||
return [ x[1] for x in getProcMounts() if x[1].startswith('/media/') and not x[0].startswith('//') ]
|
||||
|
||||
|
||||
def isFileSystemSupported(filesystem):
|
||||
try:
|
||||
for fs in open('/proc/filesystems', 'r'):
|
||||
if fs.strip().endswith(filesystem):
|
||||
return True
|
||||
|
||||
return False
|
||||
except Exception as ex:
|
||||
print '[Harddisk] Failed to read /proc/filesystems:', ex
|
||||
|
||||
|
||||
def findMountPoint(path):
|
||||
path = os.path.abspath(path)
|
||||
while not os.path.ismount(path):
|
||||
path = os.path.dirname(path)
|
||||
|
||||
return path
|
||||
|
||||
|
||||
DEVTYPE_UDEV = 0
|
||||
DEVTYPE_DEVFS = 1
|
||||
|
||||
class Harddisk():
|
||||
|
||||
def __init__(self, device, removable = False):
|
||||
self.device = device
|
||||
if os.access('/dev/.udev', 0):
|
||||
self.type = DEVTYPE_UDEV
|
||||
elif os.access('/dev/.devfsd', 0):
|
||||
self.type = DEVTYPE_DEVFS
|
||||
else:
|
||||
print '[Harddisk] Unable to determine structure of /dev'
|
||||
self.type = -1
|
||||
self.card = False
|
||||
self.max_idle_time = 0
|
||||
self.idle_running = False
|
||||
self.last_access = time.time()
|
||||
self.last_stat = 0
|
||||
self.timer = None
|
||||
self.is_sleeping = False
|
||||
self.dev_path = ''
|
||||
self.disk_path = ''
|
||||
self.mount_path = None
|
||||
self.mount_device = None
|
||||
self.phys_path = os.path.realpath(self.sysfsPath('device'))
|
||||
self.removable = removable
|
||||
self.internal = 'pci' in self.phys_path or 'ahci' in self.phys_path or 'sata' in self.phys_path
|
||||
try:
|
||||
data = open('/sys/block/%s/queue/rotational' % device, 'r').read().strip()
|
||||
self.rotational = int(data)
|
||||
except:
|
||||
self.rotational = True
|
||||
|
||||
if self.type == DEVTYPE_UDEV:
|
||||
self.dev_path = '/dev/' + self.device
|
||||
self.disk_path = self.dev_path
|
||||
self.card = 'sdhci' in self.phys_path
|
||||
elif self.type == DEVTYPE_DEVFS:
|
||||
tmp = readFile(self.sysfsPath('dev')).split(':')
|
||||
s_major = int(tmp[0])
|
||||
s_minor = int(tmp[1])
|
||||
for disc in os.listdir('/dev/discs'):
|
||||
dev_path = os.path.realpath('/dev/discs/' + disc)
|
||||
disk_path = dev_path + '/disc'
|
||||
try:
|
||||
rdev = os.stat(disk_path).st_rdev
|
||||
except OSError:
|
||||
continue
|
||||
|
||||
if s_major == os.major(rdev) and s_minor == os.minor(rdev):
|
||||
self.dev_path = dev_path
|
||||
self.disk_path = disk_path
|
||||
break
|
||||
|
||||
self.card = self.device[:2] == 'hd' and 'host0' not in self.dev_path
|
||||
print '[Harddisk] new device', self.device, '->', self.dev_path, '->', self.disk_path
|
||||
if not removable and not self.card:
|
||||
self.startIdle()
|
||||
return
|
||||
|
||||
def __lt__(self, ob):
|
||||
return self.device < ob.device
|
||||
|
||||
def partitionPath(self, n):
|
||||
if self.type == DEVTYPE_UDEV:
|
||||
if self.dev_path.startswith('/dev/mmcblk0'):
|
||||
return self.dev_path + 'p' + n
|
||||
else:
|
||||
return self.dev_path + n
|
||||
elif self.type == DEVTYPE_DEVFS:
|
||||
return self.dev_path + '/part' + n
|
||||
|
||||
def sysfsPath(self, filename):
|
||||
return os.path.join('/sys/block/', self.device, filename)
|
||||
|
||||
def stop(self):
|
||||
if self.timer:
|
||||
self.timer.stop()
|
||||
self.timer.callback.remove(self.runIdle)
|
||||
|
||||
def bus(self):
|
||||
ret = _('External')
|
||||
if self.type == DEVTYPE_UDEV:
|
||||
type_name = ' (SD/MMC)'
|
||||
elif self.type == DEVTYPE_DEVFS:
|
||||
type_name = ' (CF)'
|
||||
if self.card:
|
||||
ret += type_name
|
||||
else:
|
||||
if self.internal:
|
||||
ret = _('Internal')
|
||||
if not self.rotational:
|
||||
ret += ' (SSD)'
|
||||
return ret
|
||||
|
||||
def diskSize(self):
|
||||
cap = 0
|
||||
try:
|
||||
line = readFile(self.sysfsPath('size'))
|
||||
cap = int(line)
|
||||
return cap / 1000 * 512 / 1000
|
||||
except:
|
||||
dev = self.findMount()
|
||||
if dev:
|
||||
try:
|
||||
stat = os.statvfs(dev)
|
||||
cap = int(stat.f_blocks * stat.f_bsize)
|
||||
return cap / 1000 / 1000
|
||||
except:
|
||||
pass
|
||||
|
||||
return cap
|
||||
|
||||
def capacity(self):
|
||||
cap = self.diskSize()
|
||||
if cap == 0:
|
||||
return ''
|
||||
if cap < 1000:
|
||||
return _('%03d MB') % cap
|
||||
return _('%d.%03d GB') % (cap / 1000, cap % 1000)
|
||||
|
||||
def model(self):
|
||||
try:
|
||||
if self.device[:2] == 'hd':
|
||||
return readFile('/proc/ide/' + self.device + '/model')
|
||||
if self.device[:2] == 'sd':
|
||||
vendor = readFile(self.sysfsPath('device/vendor'))
|
||||
model = readFile(self.sysfsPath('device/model'))
|
||||
return vendor + '(' + model + ')'
|
||||
if self.device.startswith('mmcblk0'):
|
||||
return readFile(self.sysfsPath('device/name'))
|
||||
raise Exception, '[Harddisk] no hdX or sdX or mmcX'
|
||||
except Exception as e:
|
||||
print '[Harddisk] Failed to get model:', e
|
||||
return '-?-'
|
||||
|
||||
def free(self):
|
||||
dev = self.findMount()
|
||||
if dev:
|
||||
try:
|
||||
stat = os.statvfs(dev)
|
||||
return stat.f_bfree / 1000 * (stat.f_bsize / 1024)
|
||||
except:
|
||||
pass
|
||||
|
||||
return -1
|
||||
|
||||
def numPartitions(self):
|
||||
numPart = -1
|
||||
if self.type == DEVTYPE_UDEV:
|
||||
try:
|
||||
devdir = os.listdir('/dev')
|
||||
except OSError:
|
||||
return -1
|
||||
|
||||
for filename in devdir:
|
||||
if filename.startswith(self.device):
|
||||
numPart += 1
|
||||
|
||||
elif self.type == DEVTYPE_DEVFS:
|
||||
try:
|
||||
idedir = os.listdir(self.dev_path)
|
||||
except OSError:
|
||||
return -1
|
||||
|
||||
for filename in idedir:
|
||||
if filename.startswith('disc'):
|
||||
numPart += 1
|
||||
if filename.startswith('part'):
|
||||
numPart += 1
|
||||
|
||||
return numPart
|
||||
|
||||
def mountDevice(self):
|
||||
for parts in getProcMounts():
|
||||
if os.path.realpath(parts[0]).startswith(self.dev_path):
|
||||
self.mount_device = parts[0]
|
||||
self.mount_path = parts[1]
|
||||
return parts[1]
|
||||
|
||||
return None
|
||||
|
||||
def enumMountDevices(self):
|
||||
for parts in getProcMounts():
|
||||
if os.path.realpath(parts[0]).startswith(self.dev_path):
|
||||
yield parts[1]
|
||||
|
||||
def findMount(self):
|
||||
if self.mount_path is None:
|
||||
return self.mountDevice()
|
||||
else:
|
||||
return self.mount_path
|
||||
|
||||
def unmount(self):
|
||||
dev = self.mountDevice()
|
||||
if dev is None:
|
||||
return 0
|
||||
else:
|
||||
cmd = 'umount ' + dev
|
||||
print '[Harddisk]', cmd
|
||||
res = os.system(cmd)
|
||||
return res >> 8
|
||||
|
||||
def createPartition(self):
|
||||
cmd = 'printf "8,\n;0,0\n;0,0\n;0,0\ny\n" | sfdisk -f -uS ' + self.disk_path
|
||||
res = os.system(cmd)
|
||||
return res >> 8
|
||||
|
||||
def mkfs(self):
|
||||
return 1
|
||||
|
||||
def mount(self):
|
||||
if self.mount_device is None:
|
||||
dev = self.partitionPath('1')
|
||||
else:
|
||||
dev = self.mount_device
|
||||
try:
|
||||
fstab = open('/etc/fstab')
|
||||
lines = fstab.readlines()
|
||||
fstab.close()
|
||||
except IOError:
|
||||
return -1
|
||||
|
||||
for line in lines:
|
||||
parts = line.strip().split(' ')
|
||||
fspath = os.path.realpath(parts[0])
|
||||
if fspath == dev:
|
||||
print '[Harddisk] mounting:', fspath
|
||||
cmd = 'mount -t auto ' + fspath
|
||||
res = os.system(cmd)
|
||||
return res >> 8
|
||||
|
||||
res = -1
|
||||
if self.type == DEVTYPE_UDEV:
|
||||
res = os.system('hdparm -z ' + self.disk_path)
|
||||
from time import sleep
|
||||
sleep(3)
|
||||
return res >> 8
|
||||
|
||||
def fsck(self):
|
||||
return 1
|
||||
|
||||
def killPartitionTable(self):
|
||||
zero = 512 * '\x00'
|
||||
h = open(self.dev_path, 'wb')
|
||||
for i in range(9):
|
||||
h.write(zero)
|
||||
|
||||
h.close()
|
||||
|
||||
def killPartition(self, n):
|
||||
zero = 512 * '\x00'
|
||||
part = self.partitionPath(n)
|
||||
h = open(part, 'wb')
|
||||
for i in range(3):
|
||||
h.write(zero)
|
||||
|
||||
h.close()
|
||||
|
||||
def createInitializeJob(self):
|
||||
job = Task.Job(_('Initializing storage device...'))
|
||||
size = self.diskSize()
|
||||
print '[HD] size: %s MB' % size
|
||||
task = UnmountTask(job, self)
|
||||
task = Task.PythonTask(job, _('Removing partition table'))
|
||||
task.work = self.killPartitionTable
|
||||
task.weighting = 1
|
||||
task = Task.LoggingTask(job, _('Rereading partition table'))
|
||||
task.weighting = 1
|
||||
task.setTool('hdparm')
|
||||
task.args.append('-z')
|
||||
task.args.append(self.disk_path)
|
||||
task = Task.ConditionTask(job, _('Waiting for partition'), timeoutCount=20)
|
||||
task.check = lambda : not os.path.exists(self.partitionPath('1'))
|
||||
task.weighting = 1
|
||||
if os.path.exists('/usr/sbin/parted'):
|
||||
use_parted = True
|
||||
elif size > 2097151:
|
||||
addInstallTask(job, 'parted')
|
||||
use_parted = True
|
||||
else:
|
||||
use_parted = False
|
||||
task = Task.LoggingTask(job, _('Creating partition'))
|
||||
task.weighting = 5
|
||||
if use_parted:
|
||||
task.setTool('parted')
|
||||
if size < 1024:
|
||||
alignment = 'min'
|
||||
else:
|
||||
alignment = 'opt'
|
||||
if size > 2097151:
|
||||
parttype = 'gpt'
|
||||
else:
|
||||
parttype = 'msdos'
|
||||
task.args += ['-a',
|
||||
alignment,
|
||||
'-s',
|
||||
self.disk_path,
|
||||
'mklabel',
|
||||
parttype,
|
||||
'mkpart',
|
||||
'primary',
|
||||
'0%',
|
||||
'100%']
|
||||
else:
|
||||
task.setTool('sfdisk')
|
||||
task.args.append('-f')
|
||||
task.args.append('-uS')
|
||||
task.args.append(self.disk_path)
|
||||
if size > 128000:
|
||||
print '[HD] Detected >128GB disk, using 4k alignment'
|
||||
task.initial_input = '8,,L\n;0,0\n;0,0\n;0,0\ny\n'
|
||||
else:
|
||||
task.initial_input = ',,L\n;\n;\n;\ny\n'
|
||||
task = Task.ConditionTask(job, _('Waiting for partition'))
|
||||
task.check = lambda : os.path.exists(self.partitionPath('1'))
|
||||
task.weighting = 1
|
||||
task = MkfsTask(job, _('Creating filesystem'))
|
||||
big_o_options = ['dir_index']
|
||||
if isFileSystemSupported('ext4'):
|
||||
task.setTool('mkfs.ext4')
|
||||
if size > 20000:
|
||||
try:
|
||||
version = map(int, open('/proc/version', 'r').read().split(' ', 4)[2].split('.', 2)[:2])
|
||||
if version[0] > 3 or version[0] > 2 and version[1] >= 2:
|
||||
task.args += ['-C', '262144']
|
||||
big_o_options.append('bigalloc')
|
||||
except Exception as ex:
|
||||
print 'Failed to detect Linux version:', ex
|
||||
|
||||
else:
|
||||
task.setTool('mkfs.ext3')
|
||||
if size > 250000:
|
||||
task.args += ['-T',
|
||||
'largefile',
|
||||
'-N',
|
||||
'262144']
|
||||
big_o_options.append('sparse_super')
|
||||
elif size > 16384:
|
||||
task.args += ['-T', 'largefile']
|
||||
big_o_options.append('sparse_super')
|
||||
elif size > 2048:
|
||||
task.args += ['-T',
|
||||
'largefile',
|
||||
'-N',
|
||||
str(size * 32)]
|
||||
task.args += ['-m0',
|
||||
'-O',
|
||||
','.join(big_o_options),
|
||||
self.partitionPath('1')]
|
||||
task = MountTask(job, self)
|
||||
task.weighting = 3
|
||||
task = Task.ConditionTask(job, _('Waiting for mount'), timeoutCount=20)
|
||||
task.check = self.mountDevice
|
||||
task.weighting = 1
|
||||
return job
|
||||
|
||||
def initialize(self):
|
||||
return -5
|
||||
|
||||
def check(self):
|
||||
return -5
|
||||
|
||||
def createCheckJob(self):
|
||||
job = Task.Job(_('Checking filesystem...'))
|
||||
if self.findMount():
|
||||
UnmountTask(job, self)
|
||||
dev = self.mount_device
|
||||
else:
|
||||
dev = self.partitionPath('1')
|
||||
task = Task.LoggingTask(job, 'fsck')
|
||||
task.setTool('fsck.ext3')
|
||||
task.args.append('-f')
|
||||
task.args.append('-p')
|
||||
task.args.append(dev)
|
||||
MountTask(job, self)
|
||||
task = Task.ConditionTask(job, _('Waiting for mount'))
|
||||
task.check = self.mountDevice
|
||||
return job
|
||||
|
||||
def getDeviceDir(self):
|
||||
return self.dev_path
|
||||
|
||||
def getDeviceName(self):
|
||||
return self.disk_path
|
||||
|
||||
def readStats(self):
|
||||
try:
|
||||
l = open('/sys/block/%s/stat' % self.device).read()
|
||||
except IOError:
|
||||
return (-1, -1)
|
||||
|
||||
data = l.split(None, 5)
|
||||
return (int(data[0]), int(data[4]))
|
||||
|
||||
def startIdle(self):
|
||||
from enigma import eTimer
|
||||
if self.bus() == _('External'):
|
||||
Console().ePopen(('sdparm',
|
||||
'sdparm',
|
||||
'--set=SCT=0',
|
||||
self.disk_path))
|
||||
else:
|
||||
Console().ePopen(('hdparm',
|
||||
'hdparm',
|
||||
'-S0',
|
||||
self.disk_path))
|
||||
self.timer = eTimer()
|
||||
self.timer.callback.append(self.runIdle)
|
||||
self.idle_running = True
|
||||
self.setIdleTime(self.max_idle_time)
|
||||
|
||||
def runIdle(self):
|
||||
if not self.max_idle_time:
|
||||
return
|
||||
t = time.time()
|
||||
idle_time = t - self.last_access
|
||||
stats = self.readStats()
|
||||
l = sum(stats)
|
||||
if l != self.last_stat and l >= 0:
|
||||
self.last_stat = l
|
||||
self.last_access = t
|
||||
idle_time = 0
|
||||
self.is_sleeping = False
|
||||
if idle_time >= self.max_idle_time and not self.is_sleeping:
|
||||
self.setSleep()
|
||||
self.is_sleeping = True
|
||||
|
||||
def setSleep(self):
|
||||
if self.bus() == _('External'):
|
||||
Console().ePopen(('sdparm',
|
||||
'sdparm',
|
||||
'--flexible',
|
||||
'--readonly',
|
||||
'--command=stop',
|
||||
self.disk_path))
|
||||
else:
|
||||
Console().ePopen(('hdparm',
|
||||
'hdparm',
|
||||
'-y',
|
||||
self.disk_path))
|
||||
|
||||
def setIdleTime(self, idle):
|
||||
self.max_idle_time = idle
|
||||
if self.idle_running:
|
||||
if not idle:
|
||||
self.timer.stop()
|
||||
else:
|
||||
self.timer.start(idle * 100, False)
|
||||
|
||||
def isSleeping(self):
|
||||
return self.is_sleeping
|
||||
|
||||
|
||||
class Partition():
|
||||
|
||||
def __init__(self, mountpoint, device = None, description = '', force_mounted = False):
|
||||
self.mountpoint = mountpoint
|
||||
self.description = description
|
||||
self.force_mounted = mountpoint and force_mounted
|
||||
self.is_hotplug = force_mounted
|
||||
self.device = device
|
||||
|
||||
def __str__(self):
|
||||
return 'Partition(mountpoint=%s,description=%s,device=%s)' % (self.mountpoint, self.description, self.device)
|
||||
|
||||
def stat(self):
|
||||
if self.mountpoint:
|
||||
return os.statvfs(self.mountpoint)
|
||||
raise OSError, 'Device %s is not mounted' % self.device
|
||||
|
||||
def free(self):
|
||||
try:
|
||||
s = self.stat()
|
||||
return s.f_bavail * s.f_bsize
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
return None
|
||||
|
||||
def total(self):
|
||||
try:
|
||||
s = self.stat()
|
||||
return s.f_blocks * s.f_bsize
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
return None
|
||||
|
||||
def tabbedDescription(self):
|
||||
if self.mountpoint.startswith('/media/net') or self.mountpoint.startswith('/media/autofs'):
|
||||
return self.description
|
||||
return self.description + '\t' + self.mountpoint
|
||||
|
||||
def mounted(self, mounts = None):
|
||||
if self.force_mounted:
|
||||
return True
|
||||
else:
|
||||
if self.mountpoint:
|
||||
if mounts is None:
|
||||
mounts = getProcMounts()
|
||||
for parts in mounts:
|
||||
if self.mountpoint.startswith(parts[1]):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def filesystem(self, mounts = None):
|
||||
if self.mountpoint:
|
||||
if mounts is None:
|
||||
mounts = getProcMounts()
|
||||
for fields in mounts:
|
||||
if self.mountpoint.endswith('/') and not self.mountpoint == '/':
|
||||
if fields[1] + '/' == self.mountpoint:
|
||||
return fields[2]
|
||||
elif fields[1] == self.mountpoint:
|
||||
return fields[2]
|
||||
|
||||
return ''
|
||||
|
||||
|
||||
def addInstallTask(job, package):
|
||||
task = Task.LoggingTask(job, 'update packages')
|
||||
task.setTool('opkg')
|
||||
task.args.append('update')
|
||||
task = Task.LoggingTask(job, 'Install ' + package)
|
||||
task.setTool('opkg')
|
||||
task.args.append('install')
|
||||
task.args.append(package)
|
||||
|
||||
|
||||
class HarddiskManager():
|
||||
|
||||
def __init__(self):
|
||||
self.hdd = []
|
||||
self.cd = ''
|
||||
self.partitions = []
|
||||
self.devices_scanned_on_init = []
|
||||
self.on_partition_list_change = CList()
|
||||
self.enumerateBlockDevices()
|
||||
p = (('/media/hdd', _('Hard disk')),
|
||||
('/media/card', _('Card')),
|
||||
('/media/cf', _('Compact flash')),
|
||||
('/media/mmc1', _('MMC card')),
|
||||
('/media/net', _('Network mount')),
|
||||
('/media/net1', _('Network mount %s') % '1'),
|
||||
('/media/net2', _('Network mount %s') % '2'),
|
||||
('/media/net3', _('Network mount %s') % '3'),
|
||||
('/media/ram', _('Ram disk')),
|
||||
('/media/usb', _('USB stick')),
|
||||
('/', _('Internal flash')))
|
||||
known = set([ os.path.normpath(a.mountpoint) for a in self.partitions if a.mountpoint ])
|
||||
for m, d in p:
|
||||
if m not in known and os.path.ismount(m):
|
||||
self.partitions.append(Partition(mountpoint=m, description=d))
|
||||
|
||||
def getBlockDevInfo(self, blockdev):
|
||||
HasMMC = fileExists('/proc/cmdline') and 'root=/dev/mmcblk' in open('/proc/cmdline', 'r').read()
|
||||
devpath = '/sys/block/' + blockdev
|
||||
error = False
|
||||
removable = False
|
||||
blacklisted = False
|
||||
is_cdrom = False
|
||||
partitions = []
|
||||
try:
|
||||
if os.path.exists(devpath + '/removable'):
|
||||
removable = bool(int(readFile(devpath + '/removable')))
|
||||
if os.path.exists(devpath + '/dev'):
|
||||
dev = int(readFile(devpath + '/dev').split(':')[0])
|
||||
else:
|
||||
dev = None
|
||||
blacklisted = dev in [1,
|
||||
7,
|
||||
31,
|
||||
253,
|
||||
254] + (['HasMMC'] and [179] or [])
|
||||
if blockdev[0:2] == 'sr':
|
||||
is_cdrom = True
|
||||
if blockdev[0:2] == 'hd':
|
||||
try:
|
||||
media = readFile('/proc/ide/%s/media' % blockdev)
|
||||
if 'cdrom' in media:
|
||||
is_cdrom = True
|
||||
except IOError:
|
||||
error = True
|
||||
|
||||
if not is_cdrom and os.path.exists(devpath):
|
||||
for partition in os.listdir(devpath):
|
||||
if partition[0:len(blockdev)] != blockdev:
|
||||
continue
|
||||
partitions.append(partition)
|
||||
|
||||
else:
|
||||
self.cd = blockdev
|
||||
except IOError:
|
||||
error = True
|
||||
|
||||
medium_found = True
|
||||
try:
|
||||
open('/dev/' + blockdev).close()
|
||||
except IOError as err:
|
||||
if err.errno == 159:
|
||||
medium_found = False
|
||||
|
||||
return (error,
|
||||
blacklisted,
|
||||
removable,
|
||||
is_cdrom,
|
||||
partitions,
|
||||
medium_found)
|
||||
|
||||
def enumerateBlockDevices(self):
|
||||
print '[Harddisk] enumerating block devices...'
|
||||
for blockdev in os.listdir('/sys/block'):
|
||||
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.addHotplugPartition(blockdev)
|
||||
if not error and not blacklisted and medium_found:
|
||||
for part in partitions:
|
||||
self.addHotplugPartition(part)
|
||||
|
||||
self.devices_scanned_on_init.append((blockdev,
|
||||
removable,
|
||||
is_cdrom,
|
||||
medium_found))
|
||||
|
||||
def getAutofsMountpoint(self, device):
|
||||
r = self.getMountpoint(device)
|
||||
if r is None:
|
||||
return '/media/' + device
|
||||
else:
|
||||
return r
|
||||
|
||||
def getMountpoint(self, device):
|
||||
dev = '/dev/%s' % device
|
||||
for item in getProcMounts():
|
||||
if item[0] == dev:
|
||||
return item[1]
|
||||
|
||||
return None
|
||||
|
||||
def addHotplugPartition(self, device, physdev = None):
|
||||
if not physdev:
|
||||
dev, part = self.splitDeviceName(device)
|
||||
try:
|
||||
physdev = os.path.realpath('/sys/block/' + dev + '/device')[4:]
|
||||
except OSError:
|
||||
physdev = dev
|
||||
print "couldn't determine blockdev physdev for device", device
|
||||
|
||||
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
|
||||
if not blacklisted and medium_found:
|
||||
description = self.getUserfriendlyDeviceName(device, physdev)
|
||||
p = Partition(mountpoint=self.getMountpoint(device), description=description, force_mounted=True, device=device)
|
||||
self.partitions.append(p)
|
||||
if p.mountpoint:
|
||||
self.on_partition_list_change('add', p)
|
||||
l = len(device)
|
||||
if l and (not device[l - 1].isdigit() or device == 'mmcblk0'):
|
||||
self.hdd.append(Harddisk(device, removable))
|
||||
self.hdd.sort()
|
||||
SystemInfo['Harddisk'] = True
|
||||
return (error,
|
||||
blacklisted,
|
||||
removable,
|
||||
is_cdrom,
|
||||
partitions,
|
||||
medium_found)
|
||||
|
||||
def addHotplugAudiocd(self, device, physdev = None):
|
||||
if not physdev:
|
||||
dev, part = self.splitDeviceName(device)
|
||||
try:
|
||||
physdev = os.path.realpath('/sys/block/' + dev + '/device')[4:]
|
||||
except OSError:
|
||||
physdev = dev
|
||||
print "couldn't determine blockdev physdev for device", device
|
||||
|
||||
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
|
||||
if not blacklisted and medium_found:
|
||||
description = self.getUserfriendlyDeviceName(device, physdev)
|
||||
p = Partition(mountpoint='/media/audiocd', description=description, force_mounted=True, device=device)
|
||||
self.partitions.append(p)
|
||||
self.on_partition_list_change('add', p)
|
||||
SystemInfo['Harddisk'] = False
|
||||
return (error,
|
||||
blacklisted,
|
||||
removable,
|
||||
is_cdrom,
|
||||
partitions,
|
||||
medium_found)
|
||||
|
||||
def removeHotplugPartition(self, device):
|
||||
for x in self.partitions[:]:
|
||||
if x.device == device:
|
||||
self.partitions.remove(x)
|
||||
if x.mountpoint:
|
||||
self.on_partition_list_change('remove', x)
|
||||
|
||||
l = len(device)
|
||||
if l and not device[l - 1].isdigit():
|
||||
for hdd in self.hdd:
|
||||
if hdd.device == device:
|
||||
hdd.stop()
|
||||
self.hdd.remove(hdd)
|
||||
break
|
||||
|
||||
SystemInfo['Harddisk'] = len(self.hdd) > 0
|
||||
|
||||
def HDDCount(self):
|
||||
return len(self.hdd)
|
||||
|
||||
def HDDList(self):
|
||||
list = []
|
||||
for hd in self.hdd:
|
||||
hdd = hd.model() + ' - ' + hd.bus()
|
||||
cap = hd.capacity()
|
||||
if cap != '':
|
||||
hdd += ' (' + cap + ')'
|
||||
list.append((hdd, hd))
|
||||
|
||||
return list
|
||||
|
||||
def getCD(self):
|
||||
return self.cd
|
||||
|
||||
def getMountedPartitions(self, onlyhotplug = False, mounts = None):
|
||||
if mounts is None:
|
||||
mounts = getProcMounts()
|
||||
parts = [ x for x in self.partitions if (x.is_hotplug or not onlyhotplug) and x.mounted(mounts) ]
|
||||
devs = set([ x.device for x in parts ])
|
||||
for devname in devs.copy():
|
||||
if not devname:
|
||||
continue
|
||||
dev, part = self.splitDeviceName(devname)
|
||||
if part and dev in devs:
|
||||
devs.remove(dev)
|
||||
|
||||
return [ x for x in parts if not x.device or x.device in devs ]
|
||||
|
||||
def splitDeviceName(self, devname):
|
||||
dev = devname[:3]
|
||||
part = devname[3:]
|
||||
for p in part:
|
||||
if not p.isdigit():
|
||||
return (devname, 0)
|
||||
|
||||
return (dev, part and int(part) or 0)
|
||||
|
||||
def getUserfriendlyDeviceName(self, dev, phys):
|
||||
dev, part = self.splitDeviceName(dev)
|
||||
description = _('External Storage %s') % dev
|
||||
try:
|
||||
description = readFile('/sys' + phys + '/model')
|
||||
except IOError as s:
|
||||
print "couldn't read model: ", s
|
||||
|
||||
if part and part != 1:
|
||||
description += _(' (Partition %d)') % part
|
||||
return description
|
||||
|
||||
def addMountedPartition(self, device, desc):
|
||||
for x in self.partitions:
|
||||
if x.mountpoint == device:
|
||||
return
|
||||
|
||||
self.partitions.append(Partition(mountpoint=device, description=desc))
|
||||
|
||||
def removeMountedPartition(self, mountpoint):
|
||||
for x in self.partitions[:]:
|
||||
if x.mountpoint == mountpoint:
|
||||
self.partitions.remove(x)
|
||||
self.on_partition_list_change('remove', x)
|
||||
|
||||
def setDVDSpeed(self, device, speed = 0):
|
||||
ioctl_flag = int(21282)
|
||||
if not device.startswith('/'):
|
||||
device = '/dev/' + device
|
||||
try:
|
||||
from fcntl import ioctl
|
||||
cd = open(device)
|
||||
ioctl(cd.fileno(), ioctl_flag, speed)
|
||||
cd.close()
|
||||
except Exception as ex:
|
||||
print '[Harddisk] Failed to set %s speed to %s' % (device, speed), ex
|
||||
|
||||
|
||||
class UnmountTask(Task.LoggingTask):
|
||||
|
||||
def __init__(self, job, hdd):
|
||||
Task.LoggingTask.__init__(self, job, _('Unmount'))
|
||||
self.hdd = hdd
|
||||
self.mountpoints = []
|
||||
|
||||
def prepare(self):
|
||||
try:
|
||||
dev = self.hdd.disk_path.split('/')[-1]
|
||||
open('/dev/nomount.%s' % dev, 'wb').close()
|
||||
except Exception as e:
|
||||
print 'ERROR: Failed to create /dev/nomount file:', e
|
||||
|
||||
self.setTool('umount')
|
||||
self.args.append('-f')
|
||||
for dev in self.hdd.enumMountDevices():
|
||||
self.args.append(dev)
|
||||
self.postconditions.append(Task.ReturncodePostcondition())
|
||||
self.mountpoints.append(dev)
|
||||
|
||||
if not self.mountpoints:
|
||||
print 'UnmountTask: No mountpoints found?'
|
||||
self.cmd = 'true'
|
||||
self.args = [self.cmd]
|
||||
|
||||
def afterRun(self):
|
||||
for path in self.mountpoints:
|
||||
try:
|
||||
os.rmdir(path)
|
||||
except Exception as ex:
|
||||
print "Failed to remove path '%s':" % path, ex
|
||||
|
||||
|
||||
class MountTask(Task.LoggingTask):
|
||||
|
||||
def __init__(self, job, hdd):
|
||||
Task.LoggingTask.__init__(self, job, _('Mount'))
|
||||
self.hdd = hdd
|
||||
|
||||
def prepare(self):
|
||||
try:
|
||||
dev = self.hdd.disk_path.split('/')[-1]
|
||||
os.unlink('/dev/nomount.%s' % dev)
|
||||
except Exception as e:
|
||||
print 'ERROR: Failed to remove /dev/nomount file:', e
|
||||
|
||||
if self.hdd.mount_device is None:
|
||||
dev = self.hdd.partitionPath('1')
|
||||
else:
|
||||
dev = self.hdd.mount_device
|
||||
fstab = open('/etc/fstab')
|
||||
lines = fstab.readlines()
|
||||
fstab.close()
|
||||
for line in lines:
|
||||
parts = line.strip().split(' ')
|
||||
fspath = os.path.realpath(parts[0])
|
||||
if os.path.realpath(fspath) == dev:
|
||||
self.setCmdline('mount -t auto ' + fspath)
|
||||
self.postconditions.append(Task.ReturncodePostcondition())
|
||||
return
|
||||
|
||||
if self.hdd.type == DEVTYPE_UDEV:
|
||||
self.setCmdline('sleep 2; hdparm -z ' + self.hdd.disk_path)
|
||||
self.postconditions.append(Task.ReturncodePostcondition())
|
||||
return
|
||||
|
||||
|
||||
class MkfsTask(Task.LoggingTask):
|
||||
|
||||
def prepare(self):
|
||||
self.fsck_state = None
|
||||
return
|
||||
|
||||
def processOutput(self, data):
|
||||
print '[Mkfs]', data
|
||||
if 'Writing inode tables:' in data:
|
||||
self.fsck_state = 'inode'
|
||||
elif 'Creating journal' in data:
|
||||
self.fsck_state = 'journal'
|
||||
self.setProgress(80)
|
||||
elif 'Writing superblocks ' in data:
|
||||
self.setProgress(95)
|
||||
elif self.fsck_state == 'inode':
|
||||
if '/' in data:
|
||||
try:
|
||||
d = data.strip(' \x08\r\n').split('/', 1)
|
||||
if '\x08' in d[1]:
|
||||
d[1] = d[1].split('\x08', 1)[0]
|
||||
self.setProgress(80 * int(d[0]) / int(d[1]))
|
||||
except Exception as e:
|
||||
print '[Mkfs] E:', e
|
||||
|
||||
return
|
||||
self.log.append(data)
|
||||
|
||||
|
||||
harddiskmanager = HarddiskManager()
|
||||
|
||||
def isSleepStateDevice(device):
|
||||
ret = os.popen('hdparm -C %s' % device).read()
|
||||
if 'SG_IO' in ret or 'HDIO_DRIVE_CMD' in ret:
|
||||
return None
|
||||
elif 'drive state is: standby' in ret or 'drive state is: idle' in ret:
|
||||
return True
|
||||
elif 'drive state is: active/idle' in ret:
|
||||
return False
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def internalHDDNotSleeping(external = False):
|
||||
state = False
|
||||
if harddiskmanager.HDDCount():
|
||||
for hdd in harddiskmanager.HDDList():
|
||||
if hdd[1].internal or external:
|
||||
if hdd[1].idle_running and hdd[1].max_idle_time and not hdd[1].isSleeping():
|
||||
state = True
|
||||
|
||||
return state
|
||||
|
||||
|
||||
harddiskmanager = HarddiskManager()
|
||||
SystemInfo['ext4'] = isFileSystemSupported('ext4')
|
||||
17
NeoBoot/files/NeoBoot.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f /media/neoboot/NeoBoot_Backup.tar.gz ] ; then
|
||||
rm -R /media/neoboot/NeoBoot_Backupt.tar.gz
|
||||
/bin/tar -czf /media/neoboot/NeoBoot_Backup.tar.gz /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot*/
|
||||
echo " "
|
||||
echo "Kopia o nazwie NeoBoot_Backup.tar.gz zostala utworzona w lokalizacji: /media/neoboot . "
|
||||
echo " "
|
||||
else
|
||||
/bin/tar -czf /media/neoboot/NeoBoot_Backup.tar.gz /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot*/
|
||||
echo " "
|
||||
echo "Kopia o nazwie NeoBoot_Backup.tar.gz zostala utworzona w lokalizacji: /media/neoboot/ . "
|
||||
echo " "
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
50
NeoBoot/files/S50fat.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
# script gutosie
|
||||
|
||||
if [ ! -e /usr/bin/ipkg ]; then
|
||||
ln -sfn /usr/bin/opkg /usr/bin/ipkg
|
||||
fi
|
||||
if [ ! -e /usr/bin/ipkg-cl ]; then
|
||||
ln -sfn /usr/bin/opkg-cl /usr/bin/ipkg-cl
|
||||
fi
|
||||
|
||||
if [ -f /etc/vtiversion.info ] || [ -f /etc/bhversion ] || [ ! -e /boot/zImage.* ]; then
|
||||
/etc/init.d/networking stop; sync; /etc/init.d/networking start
|
||||
fi
|
||||
|
||||
if [ -f /etc/init.d/inadyn-mt ] ; then
|
||||
/etc/init.d/inadyn-mt start
|
||||
fi
|
||||
|
||||
if [ -f /home/root/*.tar.gz ] ; then
|
||||
/bin/tar -xzvf /home/root/*.tar.gz -C /; rm /home/root/*.tar.gz
|
||||
fi
|
||||
|
||||
if [ ! -e /media/usb ] ; then
|
||||
mkdir -p /media/usb
|
||||
fi
|
||||
|
||||
if [ ! -e /media/hdd ] ; then
|
||||
mkdir -p /media/hdd
|
||||
fi
|
||||
|
||||
if [ ! -e /media//media/neoboot ] ; then
|
||||
mkdir -p /media/media/neoboot
|
||||
fi
|
||||
|
||||
mount -a -t auto
|
||||
rdate -s ntp.task.gda.pl
|
||||
|
||||
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ] ; then
|
||||
/usr/bin/enigma2_pre_start.sh
|
||||
fi
|
||||
|
||||
if [ -f /etc/rcS.d/S50fat.sh ] ; then
|
||||
ln -s /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/S50fat.sh /etc/rcS.d/S50neo.sh
|
||||
telnetd on
|
||||
echo ok
|
||||
rm -f /etc/rcS.d/S50fat.sh
|
||||
echo "file S50fat.sh delete"
|
||||
fi
|
||||
wget -O /dev/null -q "http://localhost/web/message?text=UWAGA!!!...+Uruchom+NeoBoot+by+potwierdzic+start+image...%0AOperacja+w+toku...&type=2&timeout=08"
|
||||
echo ok
|
||||
523
NeoBoot/files/Task.py
Normal file
@@ -0,0 +1,523 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#from __future__ import print_function
|
||||
#from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
from Tools.CList import CList
|
||||
|
||||
class Job(object):
|
||||
NOT_STARTED, IN_PROGRESS, FINISHED, FAILED = range(4)
|
||||
|
||||
def __init__(self, name):
|
||||
self.tasks = []
|
||||
self.resident_tasks = []
|
||||
self.workspace = '/tmp'
|
||||
self.current_task = 0
|
||||
self.callback = None
|
||||
self.name = name
|
||||
self.finished = False
|
||||
self.end = 100
|
||||
self.__progress = 0
|
||||
self.weightScale = 1
|
||||
self.afterEvent = None
|
||||
self.state_changed = CList()
|
||||
self.status = self.NOT_STARTED
|
||||
self.onSuccess = None
|
||||
return
|
||||
|
||||
def fromDescription(self, description):
|
||||
pass
|
||||
|
||||
def createDescription(self):
|
||||
return None
|
||||
|
||||
def getProgress(self):
|
||||
if self.current_task == len(self.tasks):
|
||||
return self.end
|
||||
t = self.tasks[self.current_task]
|
||||
jobprogress = t.weighting * t.progress / float(t.end) + sum([ task.weighting for task in self.tasks[:self.current_task] ])
|
||||
return int(jobprogress * self.weightScale)
|
||||
|
||||
progress = property(getProgress)
|
||||
|
||||
def getStatustext(self):
|
||||
return {self.NOT_STARTED: _('Waiting'),
|
||||
self.IN_PROGRESS: _('In progress'),
|
||||
self.FINISHED: _('Finished'),
|
||||
self.FAILED: _('Failed')}[self.status]
|
||||
|
||||
def task_progress_changed_CB(self):
|
||||
self.state_changed()
|
||||
|
||||
def addTask(self, task):
|
||||
task.job = self
|
||||
task.task_progress_changed = self.task_progress_changed_CB
|
||||
self.tasks.append(task)
|
||||
|
||||
def start(self, callback):
|
||||
self.callback = callback
|
||||
self.restart()
|
||||
|
||||
def restart(self):
|
||||
self.status = self.IN_PROGRESS
|
||||
self.state_changed()
|
||||
self.runNext()
|
||||
sumTaskWeightings = sum([ t.weighting for t in self.tasks ]) or 1
|
||||
self.weightScale = self.end / float(sumTaskWeightings)
|
||||
|
||||
def runNext(self):
|
||||
if self.current_task == len(self.tasks):
|
||||
if len(self.resident_tasks) == 0:
|
||||
self.status = self.FINISHED
|
||||
self.state_changed()
|
||||
self.callback(self, None, [])
|
||||
self.callback = None
|
||||
else:
|
||||
print 'still waiting for %d resident task(s) %s to finish' % (len(self.resident_tasks), str(self.resident_tasks))
|
||||
else:
|
||||
self.tasks[self.current_task].run(self.taskCallback)
|
||||
self.state_changed()
|
||||
return
|
||||
|
||||
def taskCallback(self, task, res, stay_resident = False):
|
||||
cb_idx = self.tasks.index(task)
|
||||
if stay_resident:
|
||||
if cb_idx not in self.resident_tasks:
|
||||
self.resident_tasks.append(self.current_task)
|
||||
print 'task going resident:', task
|
||||
else:
|
||||
print 'task keeps staying resident:', task
|
||||
return
|
||||
if len(res):
|
||||
print '>>> Error:', res
|
||||
self.status = self.FAILED
|
||||
self.state_changed()
|
||||
self.callback(self, task, res)
|
||||
if cb_idx != self.current_task:
|
||||
if cb_idx in self.resident_tasks:
|
||||
print 'resident task finished:', task
|
||||
self.resident_tasks.remove(cb_idx)
|
||||
if res == []:
|
||||
self.state_changed()
|
||||
self.current_task += 1
|
||||
self.runNext()
|
||||
|
||||
def retry(self):
|
||||
self.restart()
|
||||
|
||||
def abort(self):
|
||||
if self.current_task < len(self.tasks):
|
||||
self.tasks[self.current_task].abort()
|
||||
for i in self.resident_tasks:
|
||||
self.tasks[i].abort()
|
||||
|
||||
def cancel(self):
|
||||
self.abort()
|
||||
|
||||
def __str__(self):
|
||||
return 'Components.Task.Job name=%s #tasks=%s' % (self.name, len(self.tasks))
|
||||
|
||||
|
||||
class Task(object):
|
||||
|
||||
def __init__(self, job, name):
|
||||
self.name = name
|
||||
self.immediate_preconditions = []
|
||||
self.global_preconditions = []
|
||||
self.postconditions = []
|
||||
self.returncode = None
|
||||
self.initial_input = None
|
||||
self.job = None
|
||||
self.end = 100
|
||||
self.weighting = 100
|
||||
self.__progress = 0
|
||||
self.cmd = None
|
||||
self.cwd = '/tmp'
|
||||
self.args = []
|
||||
self.cmdline = None
|
||||
self.task_progress_changed = None
|
||||
self.output_line = ''
|
||||
job.addTask(self)
|
||||
self.container = None
|
||||
return
|
||||
|
||||
def setCommandline(self, cmd, args):
|
||||
self.cmd = cmd
|
||||
self.args = args
|
||||
|
||||
def setTool(self, tool):
|
||||
self.cmd = tool
|
||||
self.args = [tool]
|
||||
self.global_preconditions.append(ToolExistsPrecondition())
|
||||
self.postconditions.append(ReturncodePostcondition())
|
||||
|
||||
def setCmdline(self, cmdline):
|
||||
self.cmdline = cmdline
|
||||
|
||||
def checkPreconditions(self, immediate = False):
|
||||
not_met = []
|
||||
if immediate:
|
||||
preconditions = self.immediate_preconditions
|
||||
else:
|
||||
preconditions = self.global_preconditions
|
||||
for precondition in preconditions:
|
||||
if not precondition.check(self):
|
||||
not_met.append(precondition)
|
||||
|
||||
return not_met
|
||||
|
||||
def _run(self):
|
||||
if self.cmd is None and self.cmdline is None:
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
from enigma import eConsoleAppContainer
|
||||
self.container = eConsoleAppContainer()
|
||||
self.container.appClosed.append(self.processFinished)
|
||||
self.container.stdoutAvail.append(self.processStdout)
|
||||
self.container.stderrAvail.append(self.processStderr)
|
||||
if self.cwd is not None:
|
||||
self.container.setCWD(self.cwd)
|
||||
if not self.cmd and self.cmdline:
|
||||
print 'execute:', self.container.execute(self.cmdline), self.cmdline
|
||||
else:
|
||||
print 'execute:', self.container.execute(self.cmd, *self.args), ' '.join(self.args)
|
||||
if self.initial_input:
|
||||
self.writeInput(self.initial_input)
|
||||
return
|
||||
return
|
||||
|
||||
def run(self, callback):
|
||||
failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False)
|
||||
if failed_preconditions:
|
||||
print '[Task] preconditions failed'
|
||||
callback(self, failed_preconditions)
|
||||
return
|
||||
self.callback = callback
|
||||
try:
|
||||
self.prepare()
|
||||
self._run()
|
||||
except Exception as ex:
|
||||
print '[Task] exception:', ex
|
||||
self.postconditions = [FailedPostcondition(ex)]
|
||||
self.finish()
|
||||
|
||||
def prepare(self):
|
||||
pass
|
||||
|
||||
def cleanup(self, failed):
|
||||
pass
|
||||
|
||||
def processStdout(self, data):
|
||||
self.processOutput(data)
|
||||
|
||||
def processStderr(self, data):
|
||||
self.processOutput(data)
|
||||
|
||||
def processOutput(self, data):
|
||||
self.output_line += data
|
||||
while True:
|
||||
i = self.output_line.find('\n')
|
||||
if i == -1:
|
||||
break
|
||||
self.processOutputLine(self.output_line[:i + 1])
|
||||
self.output_line = self.output_line[i + 1:]
|
||||
|
||||
def processOutputLine(self, line):
|
||||
print '[Task %s]' % self.name, line[:-1]
|
||||
|
||||
def processFinished(self, returncode):
|
||||
self.returncode = returncode
|
||||
self.finish()
|
||||
|
||||
def abort(self):
|
||||
if self.container:
|
||||
self.container.kill()
|
||||
self.finish(aborted=True)
|
||||
|
||||
def finish(self, aborted = False):
|
||||
self.afterRun()
|
||||
not_met = []
|
||||
if aborted:
|
||||
not_met.append(AbortedPostcondition())
|
||||
else:
|
||||
for postcondition in self.postconditions:
|
||||
if not postcondition.check(self):
|
||||
not_met.append(postcondition)
|
||||
|
||||
self.cleanup(not_met)
|
||||
self.callback(self, not_met)
|
||||
|
||||
def afterRun(self):
|
||||
pass
|
||||
|
||||
def writeInput(self, input):
|
||||
self.container.write(input)
|
||||
|
||||
def getProgress(self):
|
||||
return self.__progress
|
||||
|
||||
def setProgress(self, progress):
|
||||
if progress > self.end:
|
||||
progress = self.end
|
||||
if progress < 0:
|
||||
progress = 0
|
||||
self.__progress = progress
|
||||
if self.task_progress_changed:
|
||||
self.task_progress_changed()
|
||||
|
||||
progress = property(getProgress, setProgress)
|
||||
|
||||
def __str__(self):
|
||||
return 'Components.Task.Task name=%s' % self.name
|
||||
|
||||
|
||||
class LoggingTask(Task):
|
||||
|
||||
def __init__(self, job, name):
|
||||
Task.__init__(self, job, name)
|
||||
self.log = []
|
||||
|
||||
def processOutput(self, data):
|
||||
print '[%s]' % self.name, data,
|
||||
self.log.append(data)
|
||||
|
||||
|
||||
class PythonTask(Task):
|
||||
|
||||
def _run(self):
|
||||
from twisted.internet import threads
|
||||
from enigma import eTimer
|
||||
self.aborted = False
|
||||
self.pos = 0
|
||||
threads.deferToThread(self.work).addBoth(self.onComplete)
|
||||
self.timer = eTimer()
|
||||
self.timer.callback.append(self.onTimer)
|
||||
self.timer.start(5)
|
||||
|
||||
def work(self):
|
||||
raise NotImplemented, 'work'
|
||||
|
||||
def abort(self):
|
||||
self.aborted = True
|
||||
if self.callback is None:
|
||||
self.finish(aborted=True)
|
||||
return
|
||||
|
||||
def onTimer(self):
|
||||
self.setProgress(self.pos)
|
||||
|
||||
def onComplete(self, result):
|
||||
self.postconditions.append(FailedPostcondition(result))
|
||||
self.timer.stop()
|
||||
del self.timer
|
||||
self.finish()
|
||||
|
||||
|
||||
class ConditionTask(Task):
|
||||
|
||||
def __init__(self, job, name, timeoutCount = None):
|
||||
Task.__init__(self, job, name)
|
||||
self.timeoutCount = timeoutCount
|
||||
|
||||
def _run(self):
|
||||
self.triggerCount = 0
|
||||
|
||||
def prepare(self):
|
||||
from enigma import eTimer
|
||||
self.timer = eTimer()
|
||||
self.timer.callback.append(self.trigger)
|
||||
self.timer.start(1000)
|
||||
|
||||
def cleanup(self, failed):
|
||||
if hasattr(self, 'timer'):
|
||||
self.timer.stop()
|
||||
del self.timer
|
||||
|
||||
def check(self):
|
||||
return True
|
||||
|
||||
def trigger(self):
|
||||
self.triggerCount += 1
|
||||
try:
|
||||
if self.timeoutCount is not None and self.triggerCount > self.timeoutCount:
|
||||
raise Exception, 'Timeout elapsed, sorry'
|
||||
res = self.check()
|
||||
except Exception as e:
|
||||
self.postconditions.append(FailedPostcondition(e))
|
||||
res = True
|
||||
|
||||
if res:
|
||||
self.finish()
|
||||
return
|
||||
|
||||
|
||||
class JobManager:
|
||||
|
||||
def __init__(self):
|
||||
self.active_jobs = []
|
||||
self.failed_jobs = []
|
||||
self.job_classes = []
|
||||
self.in_background = False
|
||||
self.visible = False
|
||||
self.active_job = None
|
||||
return
|
||||
|
||||
def AddJob(self, job, onSuccess = None, onFail = None):
|
||||
job.onSuccess = onSuccess
|
||||
if onFail is None:
|
||||
job.onFail = self.notifyFailed
|
||||
else:
|
||||
job.onFail = onFail
|
||||
self.active_jobs.append(job)
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def kick(self):
|
||||
if self.active_job is None:
|
||||
if self.active_jobs:
|
||||
self.active_job = self.active_jobs.pop(0)
|
||||
self.active_job.start(self.jobDone)
|
||||
return
|
||||
|
||||
def notifyFailed(self, job, task, problems):
|
||||
from Tools import Notifications
|
||||
from Screens.MessageBox import MessageBox
|
||||
if problems[0].RECOVERABLE:
|
||||
Notifications.AddNotificationWithCallback(self.errorCB, MessageBox, _('Error: %s\nRetry?') % problems[0].getErrorMessage(task))
|
||||
return True
|
||||
else:
|
||||
Notifications.AddNotification(MessageBox, job.name + '\n' + _('Error') + ': %s' % problems[0].getErrorMessage(task), type=MessageBox.TYPE_ERROR)
|
||||
return False
|
||||
|
||||
def jobDone(self, job, task, problems):
|
||||
print 'job', job, 'completed with', problems, 'in', task
|
||||
if problems:
|
||||
if not job.onFail(job, task, problems):
|
||||
self.errorCB(False)
|
||||
else:
|
||||
self.active_job = None
|
||||
if job.onSuccess:
|
||||
job.onSuccess(job)
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def popupTaskView(self, job):
|
||||
if not self.visible:
|
||||
from Tools import Notifications
|
||||
from Screens.TaskView import JobView
|
||||
self.visible = True
|
||||
Notifications.AddNotification(JobView, job)
|
||||
|
||||
def errorCB(self, answer):
|
||||
if answer:
|
||||
print 'retrying job'
|
||||
self.active_job.retry()
|
||||
else:
|
||||
print 'not retrying job.'
|
||||
self.failed_jobs.append(self.active_job)
|
||||
self.active_job = None
|
||||
self.kick()
|
||||
return
|
||||
|
||||
def getPendingJobs(self):
|
||||
list = []
|
||||
if self.active_job:
|
||||
list.append(self.active_job)
|
||||
list += self.active_jobs
|
||||
return list
|
||||
|
||||
|
||||
class Condition:
|
||||
RECOVERABLE = False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('An unknown error occurred!') + ' (%s @ task %s)' % (self.__class__.__name__, task.__class__.__name__)
|
||||
|
||||
|
||||
class WorkspaceExistsPrecondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
return os.access(task.job.workspace, os.W_OK)
|
||||
|
||||
|
||||
class DiskspacePrecondition(Condition):
|
||||
|
||||
def __init__(self, diskspace_required):
|
||||
self.diskspace_required = diskspace_required
|
||||
self.diskspace_available = 0
|
||||
|
||||
def check(self, task):
|
||||
import os
|
||||
try:
|
||||
s = os.statvfs(task.job.workspace)
|
||||
self.diskspace_available = s.f_bsize * s.f_bavail
|
||||
return self.diskspace_available >= self.diskspace_required
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('Not enough disk space. Please free up some disk space and try again. (%d MB required, %d MB available)') % (self.diskspace_required / 1024 / 1024, self.diskspace_available / 1024 / 1024)
|
||||
|
||||
|
||||
class ToolExistsPrecondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
import os
|
||||
if task.cmd[0] == '/':
|
||||
self.realpath = task.cmd
|
||||
print '[Task.py][ToolExistsPrecondition] WARNING: usage of absolute paths for tasks should be avoided!'
|
||||
return os.access(self.realpath, os.X_OK)
|
||||
self.realpath = task.cmd
|
||||
path = os.environ.get('PATH', '').split(os.pathsep)
|
||||
path.append(task.cwd + '/')
|
||||
absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path))
|
||||
if absolutes:
|
||||
self.realpath = absolutes[0]
|
||||
return True
|
||||
return False
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return _('A required tool (%s) was not found.') % self.realpath
|
||||
|
||||
|
||||
class AbortedPostcondition(Condition):
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return 'Cancelled upon user request'
|
||||
|
||||
|
||||
class ReturncodePostcondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
return task.returncode == 0
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
if hasattr(task, 'log') and task.log:
|
||||
log = ''.join(task.log).strip()
|
||||
log = log.split('\n')[-3:]
|
||||
log = '\n'.join(log)
|
||||
return log
|
||||
else:
|
||||
return _('Error code') + ': %s' % task.returncode
|
||||
|
||||
|
||||
class FailedPostcondition(Condition):
|
||||
|
||||
def __init__(self, exception):
|
||||
self.exception = exception
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
if isinstance(self.exception, int):
|
||||
if hasattr(task, 'log'):
|
||||
log = ''.join(task.log).strip()
|
||||
log = log.split('\n')[-4:]
|
||||
log = '\n'.join(log)
|
||||
return log
|
||||
else:
|
||||
return _('Error code') + ' %s' % self.exception
|
||||
return str(self.exception)
|
||||
|
||||
def check(self, task):
|
||||
return self.exception is None or self.exception == 0
|
||||
|
||||
|
||||
job_manager = JobManager()
|
||||
23
NeoBoot/files/__init__.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from Components.Language import language
|
||||
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
|
||||
import os, gettext
|
||||
PluginLanguageDomain = 'NeoBoot'
|
||||
PluginLanguagePath = 'Extensions/NeoBoot/locale'
|
||||
|
||||
def localeInit():
|
||||
lang = language.getLanguage()[:2]
|
||||
os.environ['LANGUAGE'] = lang
|
||||
print '[NeoBoot] set language to ', lang
|
||||
gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath))
|
||||
|
||||
def _(txt):
|
||||
t = gettext.dgettext(PluginLanguageDomain, txt)
|
||||
if t == txt:
|
||||
print '[NeoBoot] fallback to default translation for', txt
|
||||
t = gettext.dgettext('enigma2', txt)
|
||||
return t
|
||||
|
||||
localeInit()
|
||||
language.addCallback(localeInit)
|
||||
BIN
NeoBoot/files/__init__.pyo
Normal file
449
NeoBoot/files/devices.py
Normal file
@@ -0,0 +1,449 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __init__ import _
|
||||
from enigma import getDesktop
|
||||
from Plugins.Plugin import PluginDescriptor
|
||||
from Screens.ChoiceBox import ChoiceBox
|
||||
from Screens.InputBox import InputBox
|
||||
from Screens.Screen import Screen
|
||||
from enigma import eTimer
|
||||
from Screens.MessageBox import MessageBox
|
||||
from Screens.Standby import TryQuitMainloop
|
||||
from Components.ActionMap import ActionMap
|
||||
from Components.Label import Label
|
||||
from Components.Pixmap import Pixmap
|
||||
from Components.ConfigList import ConfigListScreen
|
||||
from Components.config import getConfigListEntry, config, ConfigSelection, NoSave, configfile
|
||||
from Components.Console import Console
|
||||
from Components.Sources.List import List
|
||||
from Components.Sources.StaticText import StaticText
|
||||
from Plugins.Extensions.NeoBoot.files.Harddisk import Harddisk
|
||||
from Tools.LoadPixmap import LoadPixmap
|
||||
from Tools.Directories import fileExists, resolveFilename, SCOPE_CURRENT_SKIN
|
||||
from os import system, rename, path, mkdir, remove, listdir
|
||||
from time import sleep
|
||||
import fileinput
|
||||
import re
|
||||
import os
|
||||
|
||||
class ManagerDevice(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen name="ManagerDevice" position="center,center" size="1235,748">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="35,16" size="253,52" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="315,15" size="279,50" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="647,18" size="263,48" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="965,19" size="269,51" alphatest="on" />\n\t\t<widget name="key_red" position="14,17" zPosition="1" size="258,48" font="Regular;30" halign="center" valign="center" backgroundColor="un9f1313" transparent="1" />\n\t\t<widget name="key_green" position="297,17" zPosition="1" size="298,48" font="Regular;30" halign="center" valign="center" backgroundColor="un1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="631,18" zPosition="1" size="268,48" font="Regular;30" halign="center" valign="center" backgroundColor="una08500" transparent="1" />\n\t\t<widget name="key_blue" position="940,21" zPosition="1" size="266,45" font="Regular;30" halign="center" valign="center" backgroundColor="un18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="12,76" size="1212,651" scrollbarMode="showOnDemand">\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 5), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 60), size = (900, 100), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (160, 160,), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 33),gFont("Regular", 33)],\n\t\t\t\t"itemHeight": 140\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="32,92" size="1182,69" font="Regular;30" halign="center" transparent="1" />\n\t</screen>'
|
||||
else:
|
||||
skin = '<screen position="center,center" size="640,460">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="325,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="475,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="325,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />\n\t\t <widget name="key_blue" position="475,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="10,50" size="620,450" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 0), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 30), size = (600, 50), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (80, 80), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 24),gFont("Regular", 20)],\n\t\t\t\t"itemHeight": 85\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="50,90" size="600,40" font="Regular;22" halign="center" transparent="1"/>\n\t</screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
Screen.setTitle(self, _('Mount Manager'))
|
||||
self['key_red'] = Label(_('Initialize'))
|
||||
self['key_green'] = Label(_('SetupMounts'))
|
||||
self['key_yellow'] = Label(_('Unmount'))
|
||||
self['key_blue'] = Label(_('Exit'))
|
||||
self['lab1'] = Label()
|
||||
self.onChangedEntry = []
|
||||
self.list = []
|
||||
self['list'] = List(self.list)
|
||||
self['list'].onSelectionChanged.append(self.selectionChanged)
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'MenuActions'], {'back': self.close,
|
||||
'red': self.Format,
|
||||
'green': self.SetupMounts,
|
||||
'yellow': self.Unmount,
|
||||
'blue': self.Mount})
|
||||
self.activityTimer = eTimer()
|
||||
self.activityTimer.timeout.get().append(self.updateList2)
|
||||
self.updateList()
|
||||
self.onShown.append(self.setWindowTitle)
|
||||
|
||||
def setWindowTitle(self):
|
||||
self.setTitle(_('Mount Manager'))
|
||||
|
||||
def createSummary(self):
|
||||
return DeviceManagerSummary
|
||||
|
||||
def selectionChanged(self):
|
||||
if len(self.list) == 0:
|
||||
return
|
||||
self.sel = self['list'].getCurrent()
|
||||
seldev = self.sel
|
||||
if self.sel:
|
||||
try:
|
||||
name = str(self.sel[0])
|
||||
desc = str(self.sel[1].replace('\t', ' '))
|
||||
except:
|
||||
name = ''
|
||||
desc = ''
|
||||
|
||||
else:
|
||||
name = ''
|
||||
desc = ''
|
||||
for cb in self.onChangedEntry:
|
||||
cb(name, desc)
|
||||
|
||||
def updateList(self, result = None, retval = None, extra_args = None):
|
||||
scanning = _('Wait please while scanning for devices...')
|
||||
self['lab1'].setText(scanning)
|
||||
self.activityTimer.start(10)
|
||||
|
||||
def updateList2(self):
|
||||
self.activityTimer.stop()
|
||||
self.list = []
|
||||
list2 = []
|
||||
f = open('/proc/partitions', 'r')
|
||||
for line in f.readlines():
|
||||
parts = line.strip().split()
|
||||
if not parts:
|
||||
continue
|
||||
device = parts[3]
|
||||
if not re.search('sd[a-z][1-9]', device):
|
||||
continue
|
||||
if device in list2:
|
||||
continue
|
||||
self.buildMy_rec(device)
|
||||
list2.append(device)
|
||||
|
||||
f.close()
|
||||
self['list'].list = self.list
|
||||
self['lab1'].hide()
|
||||
|
||||
def buildMy_rec(self, device):
|
||||
mypath = SkinPath()
|
||||
device2 = re.sub('[0-9]', '', device)
|
||||
devicetype = path.realpath('/sys/block/' + device2 + '/device')
|
||||
d2 = device
|
||||
name = _('HARD DISK: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
|
||||
model = file('/sys/block/' + device2 + '/device/model').read()
|
||||
model = str(model).replace('\n', '')
|
||||
des = ''
|
||||
if devicetype.find('usb') != -1:
|
||||
name = _('USB: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
name = name + model
|
||||
self.Console = Console()
|
||||
self.Console.ePopen("sfdisk -l /dev/sd? | grep swap | awk '{print $(NF-9)}' >/tmp/devices.tmp")
|
||||
sleep(0.5)
|
||||
f = open('/tmp/devices.tmp', 'r')
|
||||
swapdevices = f.read()
|
||||
f.close()
|
||||
if path.exists('/tmp/devices.tmp'):
|
||||
remove('/tmp/devices.tmp')
|
||||
swapdevices = swapdevices.replace('\n', '')
|
||||
swapdevices = swapdevices.split('/')
|
||||
f = open('/proc/mounts', 'r')
|
||||
for line in f.readlines():
|
||||
if line.find(device) != -1:
|
||||
parts = line.strip().split()
|
||||
d1 = parts[1]
|
||||
dtype = parts[2]
|
||||
rw = parts[3]
|
||||
break
|
||||
continue
|
||||
elif device in swapdevices:
|
||||
parts = line.strip().split()
|
||||
d1 = _('None')
|
||||
dtype = 'swap'
|
||||
rw = _('None')
|
||||
break
|
||||
continue
|
||||
else:
|
||||
d1 = _('None')
|
||||
dtype = _('unavailable')
|
||||
rw = _('None')
|
||||
|
||||
f.close()
|
||||
size = Harddisk(device).diskSize()
|
||||
if float(size) / 1024 / 1024 >= 1:
|
||||
des = _('Size: ') + str(round(float(size) / 1024 / 1024, 2)) + _('TB')
|
||||
elif size / 1024 >= 1:
|
||||
des = _('Size: ') + str(round(float(size) / 1024, 2)) + _('GB')
|
||||
elif size >= 1:
|
||||
des = _('Size: ') + str(size) + _('MB')
|
||||
else:
|
||||
des = _('Size: ') + _('unavailable')
|
||||
if des != '':
|
||||
if rw.startswith('rw'):
|
||||
rw = ' R/W'
|
||||
elif rw.startswith('ro'):
|
||||
rw = ' R/O'
|
||||
else:
|
||||
rw = ''
|
||||
des += '\t' + _('Mount: ') + d1 + '\n' + _('Device: ') + '/dev/' + device + '\t' + _('Type: ') + dtype + rw
|
||||
png = LoadPixmap(mypixmap)
|
||||
res = (name, des, png)
|
||||
self.list.append(res)
|
||||
|
||||
def SetupMounts(self):
|
||||
self.session.openWithCallback(self.updateList, DevicesConf)
|
||||
|
||||
def Format(self):
|
||||
from Screens.HarddiskSetup import HarddiskSelection
|
||||
self.session.openWithCallback(self.updateList, HarddiskSelection)
|
||||
|
||||
def Mount(self):
|
||||
self.close()
|
||||
|
||||
def Unmount(self):
|
||||
sel = self['list'].getCurrent()
|
||||
if sel:
|
||||
des = sel[1]
|
||||
des = des.replace('\n', '\t')
|
||||
parts = des.strip().split('\t')
|
||||
mountp = parts[1].replace(_('Mount: '), '')
|
||||
device = parts[2].replace(_('Device: '), '')
|
||||
system('umount ' + mountp)
|
||||
try:
|
||||
mounts = open('/proc/mounts')
|
||||
mountcheck = mounts.readlines()
|
||||
mounts.close()
|
||||
for line in mountcheck:
|
||||
parts = line.strip().split(' ')
|
||||
if path.realpath(parts[0]).startswith(device):
|
||||
self.session.open(MessageBox, _("Can't unmount partition, make sure it is not being used for swap or record/timeshift paths"), MessageBox.TYPE_INFO, timeout=10)
|
||||
|
||||
except IOError:
|
||||
return -1
|
||||
|
||||
self.updateList()
|
||||
|
||||
def saveMypoints(self):
|
||||
sel = self['list'].getCurrent()
|
||||
if sel:
|
||||
parts = sel[1].split()
|
||||
self.device = parts[5]
|
||||
self.mountp = parts[3]
|
||||
self.Console.ePopen('umount ' + self.device)
|
||||
if self.mountp.find('/media/hdd') < 0:
|
||||
self.Console.ePopen('umount /media/hdd')
|
||||
self.Console.ePopen('/sbin/blkid | grep ' + self.device, self.add_fstab, [self.device, self.mountp])
|
||||
else:
|
||||
self.session.open(MessageBox, _('This Device is already mounted as HDD.'), MessageBox.TYPE_INFO, timeout=10, close_on_any_key=True)
|
||||
|
||||
def add_fstab(self, result = None, retval = None, extra_args = None):
|
||||
self.device = extra_args[0]
|
||||
self.mountp = extra_args[1]
|
||||
self.device_uuid = 'UUID=' + result.split('UUID=')[1].split(' ')[0].replace('"', '')
|
||||
if not path.exists(self.mountp):
|
||||
mkdir(self.mountp, 493)
|
||||
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if '/media/hdd' not in l ])
|
||||
rename('/etc/fstab.tmp', '/etc/fstab')
|
||||
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device not in l ])
|
||||
rename('/etc/fstab.tmp', '/etc/fstab')
|
||||
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device_uuid not in l ])
|
||||
rename('/etc/fstab.tmp', '/etc/fstab')
|
||||
out = open('/etc/fstab', 'a')
|
||||
line = self.device_uuid + '\t/media/hdd\tauto\tdefaults\t0 0\n'
|
||||
out.write(line)
|
||||
out.close()
|
||||
self.Console.ePopen('mount -a', self.updateList)
|
||||
|
||||
def restBo(self, answer):
|
||||
if answer is True:
|
||||
self.session.open(TryQuitMainloop, 2)
|
||||
else:
|
||||
self.updateList()
|
||||
self.selectionChanged()
|
||||
|
||||
|
||||
class DevicesConf(Screen, ConfigListScreen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen name="DevicesConf" position="center,center" size="976,728" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="109,16" size="251,63" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="551,15" size="257,63" alphatest="on" />\n\t\t<widget name="key_red" position="110,13" zPosition="1" size="252,67" font="Regular;35" halign="center" valign="center" backgroundColor="#FF0000" transparent="1" />\n\t\t<widget name="key_green" position="549,15" zPosition="1" size="262,65" font="Regular;35" halign="center" valign="center" backgroundColor="#008000" transparent="1" />\n\t\t<widget name="config" position="31,113" size="898,489" font="Regular;25" scrollbarMode="showOnDemand" />\n\t\t<widget name="Linconn" position="34,621" size="904,32" font="Regular;33" halign="center" valign="center" backgroundColor="#FF0000" />\n\t</screen>'
|
||||
else:
|
||||
skin = '<screen position="center,center" size="640,460" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="config" position="30,60" size="580,275" scrollbarMode="showOnDemand"/>\n\t\t<widget name="Linconn" position="30,375" size="580,20" font="Regular;18" halign="center" valign="center" backgroundColor="#9f1313"/>\n\t</screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self.list = []
|
||||
ConfigListScreen.__init__(self, self.list)
|
||||
Screen.setTitle(self, _('Choose where to mount your devices to:'))
|
||||
self['key_green'] = Label(_('Save'))
|
||||
self['key_red'] = Label(_('Cancel'))
|
||||
self['Linconn'] = Label(_('Wait please while scanning your %s %s devices...n\\ Szukam dysku...'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'green': self.saveMypoints,
|
||||
'red': self.close,
|
||||
'back': self.close})
|
||||
self.updateList()
|
||||
|
||||
def updateList(self):
|
||||
self.list = []
|
||||
list2 = []
|
||||
self.Console = Console()
|
||||
self.Console.ePopen("sfdisk -l /dev/sd? | grep swap | awk '{print $(NF-9)}' >/tmp/devices.tmp")
|
||||
sleep(0.5)
|
||||
f = open('/tmp/devices.tmp', 'r')
|
||||
swapdevices = f.read()
|
||||
f.close()
|
||||
if path.exists('/tmp/devices.tmp'):
|
||||
remove('/tmp/devices.tmp')
|
||||
swapdevices = swapdevices.replace('\n', '')
|
||||
swapdevices = swapdevices.split('/')
|
||||
f = open('/proc/partitions', 'r')
|
||||
for line in f.readlines():
|
||||
parts = line.strip().split()
|
||||
if not parts:
|
||||
continue
|
||||
device = parts[3]
|
||||
if not re.search('sd[a-z][1-9]', device):
|
||||
continue
|
||||
if device in list2:
|
||||
continue
|
||||
if device in swapdevices:
|
||||
continue
|
||||
self.buildMy_rec(device)
|
||||
list2.append(device)
|
||||
|
||||
f.close()
|
||||
self['config'].list = self.list
|
||||
self['config'].l.setList(self.list)
|
||||
self['Linconn'].hide()
|
||||
|
||||
def buildMy_rec(self, device):
|
||||
mypath = SkinPath()
|
||||
device2 = re.sub('[0-9]', '', device)
|
||||
devicetype = path.realpath('/sys/block/' + device2 + '/device')
|
||||
d2 = device
|
||||
name = _('HARD DISK: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
|
||||
model = file('/sys/block/' + device2 + '/device/model').read()
|
||||
model = str(model).replace('\n', '')
|
||||
des = ''
|
||||
if devicetype.find('usb') != -1:
|
||||
name = _('USB: ')
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
|
||||
name = name + model
|
||||
f = open('/proc/mounts', 'r')
|
||||
for line in f.readlines():
|
||||
if line.find(device) != -1:
|
||||
parts = line.strip().split()
|
||||
d1 = parts[1]
|
||||
dtype = parts[2]
|
||||
break
|
||||
continue
|
||||
else:
|
||||
d1 = _('None')
|
||||
dtype = _('unavailable')
|
||||
|
||||
f.close()
|
||||
size = Harddisk(device).diskSize()
|
||||
if float(size) / 1024 / 1024 >= 1:
|
||||
des = _('Size: ') + str(round(float(size) / 1024 / 1024, 2)) + _('TB')
|
||||
elif size / 1024 >= 1:
|
||||
des = _('Size: ') + str(round(float(size) / 1024, 2)) + _('GB')
|
||||
elif size >= 1:
|
||||
des = _('Size: ') + str(size) + _('MB')
|
||||
else:
|
||||
des = _('Size: ') + _('unavailable')
|
||||
item = NoSave(ConfigSelection(default='/media/' + device, choices=[('/media/' + device, '/media/' + device),
|
||||
('/media/hdd', '/media/hdd'),
|
||||
('/media/hdd2', '/media/hdd2'),
|
||||
('/media/hdd3', '/media/hdd3'),
|
||||
('/media/usb', '/media/usb'),
|
||||
('/media/usb1', '/media/usb1'),
|
||||
('/media/usb2', '/media/usb2'),
|
||||
('/media/usb3', '/media/usb3')]))
|
||||
if dtype == 'Linux':
|
||||
dtype = 'ext3'
|
||||
else:
|
||||
dtype = 'auto'
|
||||
item.value = d1.strip()
|
||||
text = name + ' ' + des + ' /dev/' + device
|
||||
res = getConfigListEntry(text, item, device, dtype)
|
||||
if des != '' and self.list.append(res):
|
||||
pass
|
||||
|
||||
def saveMypoints(self):
|
||||
system('mount media -a')
|
||||
system('cp -r -f /etc/fstab /etc/fstab.org')
|
||||
self.Console = Console()
|
||||
mycheck = False
|
||||
for x in self['config'].list:
|
||||
self.device = x[2]
|
||||
self.mountp = x[1].value
|
||||
self.type = x[3]
|
||||
self.Console.ePopen('umount ' + self.device)
|
||||
self.Console.ePopen('/sbin/blkid | grep ' + self.device + ' && opkg list-installed ntfs-3g', self.add_fstab, [self.device, self.mountp])
|
||||
|
||||
message = _('Continues mounting equipment...')
|
||||
ybox = self.session.openWithCallback(self.delay, MessageBox, message, type=MessageBox.TYPE_INFO, timeout=5, enable_input=False)
|
||||
ybox.setTitle(_('Please, wait....'))
|
||||
|
||||
def delay(self, val):
|
||||
#if fileExists('/etc/init.d/volatile-media.sh'):
|
||||
#system('mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org')
|
||||
message = _('Completed assembly of disks.\nReturn to installation ?')
|
||||
ybox = self.session.openWithCallback(self.myclose, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('MOUNTING....'))
|
||||
|
||||
def myclose(self, answer):
|
||||
if answer is True:
|
||||
self.messagebox = self.session.open(MessageBox, _('Return to installation...'), MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
else:
|
||||
self.messagebox = self.session.open(MessageBox, _('Return to installation...'), MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
|
||||
def add_fstab(self, result = None, retval = None, extra_args = None):
|
||||
print '[MountManager] RESULT:', result
|
||||
if result:
|
||||
self.device = extra_args[0]
|
||||
self.mountp = extra_args[1]
|
||||
self.device_uuid = 'UUID=' + result.split('UUID=')[1].split(' ')[0].replace('"', '')
|
||||
self.device_type = result.split('TYPE=')[1].split(' ')[0].replace('"', '')
|
||||
if self.device_type.startswith('ext'):
|
||||
self.device_type = 'auto'
|
||||
elif self.device_type.startswith('ntfs') and result.find('ntfs-3g') != -1:
|
||||
self.device_type = 'ntfs-3g'
|
||||
elif self.device_type.startswith('ntfs') and result.find('ntfs-3g') == -1:
|
||||
self.device_type = 'ntfs'
|
||||
if not path.exists(self.mountp):
|
||||
mkdir(self.mountp, 493)
|
||||
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device not in l ])
|
||||
rename('/etc/fstab.tmp', '/etc/fstab')
|
||||
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device_uuid not in l ])
|
||||
rename('/etc/fstab.tmp', '/etc/fstab')
|
||||
out = open('/etc/fstab', 'a')
|
||||
line = self.device_uuid + '\t' + self.mountp + '\t' + self.device_type + '\tdefaults\t0 0\n'
|
||||
out.write(line)
|
||||
out.close()
|
||||
system('cp -r -f /etc/fstab /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files')
|
||||
self.device_uuid2 = result.split('UUID=')[1].split(' ')[0].replace('"', '')
|
||||
if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager2'):
|
||||
out1 = open('/etc/devicemanager.cfg', 'a')
|
||||
line1 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
out1.write(line1)
|
||||
out1.close()
|
||||
elif fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager'):
|
||||
out2 = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg', 'a')
|
||||
line2 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
|
||||
out2.write(line2)
|
||||
out2.close()
|
||||
system('mount -a')
|
||||
|
||||
|
||||
class DeviceManagerSummary(Screen):
|
||||
|
||||
def __init__(self, session, parent):
|
||||
Screen.__init__(self, session, parent=parent)
|
||||
self['entry'] = StaticText('')
|
||||
self['desc'] = StaticText('')
|
||||
self.onShow.append(self.addWatcher)
|
||||
self.onHide.append(self.removeWatcher)
|
||||
|
||||
def addWatcher(self):
|
||||
self.parent.onChangedEntry.append(self.selectionChanged)
|
||||
self.parent.selectionChanged()
|
||||
|
||||
def removeWatcher(self):
|
||||
self.parent.onChangedEntry.remove(self.selectionChanged)
|
||||
|
||||
def selectionChanged(self, name, desc):
|
||||
self['entry'].text = name
|
||||
self['desc'].text = desc
|
||||
|
||||
|
||||
def SkinPath():
|
||||
myskinpath = resolveFilename(SCOPE_CURRENT_SKIN, '')
|
||||
if myskinpath == '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/':
|
||||
myskinpath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/'
|
||||
return myskinpath
|
||||
409
NeoBoot/files/images.py
Normal file
@@ -0,0 +1,409 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#from __future__ import print_function
|
||||
from Plugins.Extensions.NeoBoot.__init__ import _
|
||||
from Components.Button import Button
|
||||
from Components.ActionMap import ActionMap
|
||||
from Components.MenuList import MenuList
|
||||
from Components.Sources.List import List
|
||||
from Components.PluginList import resolveFilename
|
||||
from Components.Task import Task, Job, job_manager, Condition
|
||||
from Screens.Console import Console
|
||||
from Screens.MessageBox import MessageBox
|
||||
from Screens.Screen import Screen
|
||||
from Screens.Console import Console
|
||||
from Screens.TaskView import JobView
|
||||
from Tools.Downloader import downloadWithProgress
|
||||
from Tools.LoadPixmap import LoadPixmap
|
||||
from Tools.Directories import fileExists, SCOPE_PLUGINS
|
||||
import urllib2
|
||||
import os
|
||||
import shutil
|
||||
import math
|
||||
from Plugins.Extensions.NeoBoot.files.stbbranding import getBoxType, getMachineBuild, getTypBoxa
|
||||
|
||||
class ChooseOnLineImage(Screen):
|
||||
skin = """
|
||||
<screen name="ChooseOnLineImage" position="center,center" size="880,620" title="%s" >
|
||||
<widget source="list" render="Listbox" position="10,0" size="870,610" scrollbarMode="showOnDemand" transparent="1">
|
||||
<convert type="TemplatedMultiContent">
|
||||
{"template": [
|
||||
MultiContentEntryText(pos = (0, 10), size = (830, 30), font=0, flags = RT_HALIGN_RIGHT, text = 0),
|
||||
MultiContentEntryPixmapAlphaBlend(pos = (10, 0), size = (480, 60), png = 1),
|
||||
MultiContentEntryText(pos = (0, 40), size = (830, 30), font=1, flags = RT_VALIGN_TOP | RT_HALIGN_RIGHT, text = 3),
|
||||
],
|
||||
"fonts": [gFont("Regular", 28),gFont("Regular", 20)],
|
||||
"itemHeight": 65
|
||||
}
|
||||
</convert>
|
||||
</widget>
|
||||
</screen>""" % (_('NeoBoot - Download OnLine Images'))
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self.list = []
|
||||
self['list'] = List(self.list)
|
||||
self.updateList()
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
|
||||
'back': self.close})
|
||||
|
||||
def KeyOk(self):
|
||||
self.sel = self['list'].getCurrent()
|
||||
returnValue = self.sel[2]
|
||||
if returnValue is not None:
|
||||
self.session.openWithCallback(self.quit, DownloadOnLineImage, returnValue)
|
||||
return
|
||||
|
||||
def updateList(self):
|
||||
self.list = []
|
||||
mypath = resolveFilename(SCOPE_PLUGINS)
|
||||
mypath = mypath + 'Extensions/NeoBoot/software/png/'
|
||||
mypixmap = mypath + 'openatv.png'
|
||||
png = LoadPixmap(mypixmap)
|
||||
name = _('OpenATV-6.0')
|
||||
desc = _('Download latest OpenATV Image')
|
||||
idx = 'openatv'
|
||||
res = (name,
|
||||
png,
|
||||
idx,
|
||||
desc)
|
||||
self.list.append(res)
|
||||
mypixmap = mypath + 'openpli.png'
|
||||
png = LoadPixmap(mypixmap)
|
||||
name = _('OpenPLi')
|
||||
desc = _('Download latest OpenPLi Image')
|
||||
idx = 'openpli'
|
||||
res = (name,
|
||||
png,
|
||||
idx,
|
||||
desc)
|
||||
self.list.append(res)
|
||||
mypixmap = mypath + 'openvix.png'
|
||||
png = LoadPixmap(mypixmap)
|
||||
name = _('OpenVIX')
|
||||
desc = _('Download latest OpenVIX Image')
|
||||
idx = 'openvix'
|
||||
res = (name,
|
||||
png,
|
||||
idx,
|
||||
desc)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
def quit(self):
|
||||
self.close()
|
||||
|
||||
|
||||
class DownloadOnLineImage(Screen):
|
||||
skin = '\n\t<screen position="center,center" size="560,500" title="NeoBoot - Download Image">\n\t\t<ePixmap position="0,460" zPosition="1" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />\n\t\t<ePixmap position="140,460" zPosition="1" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />\n\t\t<widget name="key_red" position="0,460" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t\t<widget name="key_green" position="140,460" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t\t<widget name="imageList" position="10,10" zPosition="1" size="550,450" font="Regular;20" scrollbarMode="showOnDemand" transparent="1" />\n\t</screen>'
|
||||
|
||||
def __init__(self, session, distro):
|
||||
Screen.__init__(self, session)
|
||||
self.session = session
|
||||
Screen.setTitle(self, _('NeoBoot - Download Image'))
|
||||
self['key_green'] = Button(_('Install'))
|
||||
self['key_red'] = Button(_('Exit'))
|
||||
self.filename = None
|
||||
self.imagelist = []
|
||||
self.simulate = False
|
||||
self.imagePath = '/media/neoboot/ImagesUpload'
|
||||
self.distro = distro
|
||||
if self.distro == 'openatv':
|
||||
self.feed = 'openatv'
|
||||
self.feedurl = 'http://images.mynonpublic.com/openatv/6.0'
|
||||
elif self.distro == 'openpli':
|
||||
self.feed = 'openpli'
|
||||
self.feedurl = 'http://openpli.org/download'
|
||||
elif self.distro == 'openvix':
|
||||
self.feed = 'openvix'
|
||||
self.feedurl = 'http://www.openvix.co.uk'
|
||||
elif self.distro == 'opendroid':
|
||||
self.feed = 'opendroid'
|
||||
self.feedurl = 'http://images.opendroid.org/5.5/'
|
||||
else:
|
||||
self.close()
|
||||
self['imageList'] = MenuList(self.imagelist)
|
||||
self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'green': self.green,
|
||||
'red': self.quit,
|
||||
'cancel': self.quit}, -2)
|
||||
self.onLayoutFinish.append(self.layoutFinished)
|
||||
return
|
||||
|
||||
def quit(self):
|
||||
self.close()
|
||||
|
||||
def box(self):
|
||||
box = getBoxType()
|
||||
urlbox = getBoxType()
|
||||
if self.distro == 'openatv':
|
||||
if box in ('xpeedlx1', 'xpeedlx2'):
|
||||
box = 'xpeedlx'
|
||||
req = urllib2.Request(self.feedurl)
|
||||
stb = 'no Image for this Box on this Side'
|
||||
try:
|
||||
response = urllib2.urlopen(req)
|
||||
tmp = response.readlines()
|
||||
for line in tmp:
|
||||
if '<a href="' in line:
|
||||
if box in line:
|
||||
stb = '1'
|
||||
break
|
||||
|
||||
except:
|
||||
stb = 'no Image for this Box on this Side'
|
||||
|
||||
if self.distro == 'openvix':
|
||||
if box in ('xpeedlx1', 'xpeedlx2', 'xpeedlx3', 'uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'vusolo2', 'vusolose', 'vuultimo', 'vuuno', 'vuduo2', 'vuduo', 'sf8', 'mutant2400', 'gbquad', 'gbquadplus', 'gb800ueplus', 'gb800seplus', 'gb800se'):
|
||||
if box in 'vusolo2':
|
||||
box = 'vusolo2'
|
||||
urlbox = 'Vu%2BSolo2'
|
||||
stb = '1'
|
||||
elif box in 'vusolose':
|
||||
box = 'vusolose'
|
||||
urlbox = 'Vu%2BSolose'
|
||||
stb = '1'
|
||||
elif box in 'vuultimo':
|
||||
box = 'vuultimo'
|
||||
urlbox = 'VuUltimo'
|
||||
stb = '1'
|
||||
elif box in 'vuuno':
|
||||
box = 'vuuno'
|
||||
urlbox = 'Vu%2BUno'
|
||||
stb = '1'
|
||||
elif box in 'vuduo2':
|
||||
box = 'vuduo2'
|
||||
urlbox = 'Vu%2BDuo2'
|
||||
stb = '1'
|
||||
elif box in 'vuduo':
|
||||
box = 'vuduo'
|
||||
urlbox = 'Vu%2BDuo'
|
||||
stb = '1'
|
||||
elif box in 'mutant2400':
|
||||
box = 'mutant2400'
|
||||
urlbox = 'Mutant-HD2400'
|
||||
stb = '1'
|
||||
elif box in 'gbquad':
|
||||
box = 'gbquad'
|
||||
urlbox = 'GiGaBlue-HD-QUAD'
|
||||
stb = '1'
|
||||
elif box in 'gbquadplus':
|
||||
box = 'gbquadplus'
|
||||
urlbox = 'GiGaBlue-HD-QUAD-PLUS'
|
||||
stb = '1'
|
||||
elif box in 'gb800se':
|
||||
box = 'gb800se'
|
||||
urlbox = 'GiGaBlue-HD800SE'
|
||||
stb = '1'
|
||||
elif box in 'gb800ueplus':
|
||||
box = 'gb800ueplus'
|
||||
urlbox = 'GiGaBlue-HD800UE-PLUS'
|
||||
stb = '1'
|
||||
elif box in 'gb800seplus':
|
||||
box = 'gb800seplus'
|
||||
urlbox = 'GiGaBlue-HD800SE-PLUS'
|
||||
stb = '1'
|
||||
else:
|
||||
stb = 'no Image for this Box on this Side'
|
||||
elif self.distro == 'openpli':
|
||||
if box in ('vusolo2', 'vusolose', 'vuultimo', 'vuuno', 'vuduo2', 'vuduo', 'mutant2400', 'quadbox2400', 'xp1000', 'formuler1', 'formuler3'):
|
||||
if box in 'vusolo2':
|
||||
box = 'vusolo2'
|
||||
urlbox = 'vuplus/vusolo2/'
|
||||
stb = '1'
|
||||
if box in 'vusolose':
|
||||
box = 'vusolose'
|
||||
urlbox = 'vuplus/vusolose/'
|
||||
stb = '1'
|
||||
elif box in 'vuultimo':
|
||||
box = 'vuultimo'
|
||||
urlbox = 'vuplus/vuultimo/'
|
||||
stb = '1'
|
||||
elif box in 'vuuno':
|
||||
box = 'vuuno'
|
||||
urlbox = 'vuplus/vuuno/'
|
||||
stb = '1'
|
||||
elif box in 'vuduo2':
|
||||
box = 'vuduo2'
|
||||
urlbox = 'vuplus/vuduo2/'
|
||||
stb = '1'
|
||||
elif box in 'vuduo':
|
||||
box = 'vuduo'
|
||||
urlbox = 'vuplus/vuduo/'
|
||||
stb = '1'
|
||||
else:
|
||||
stb = 'no Image for this Box on this Side'
|
||||
return (box, urlbox, stb)
|
||||
|
||||
def green(self, ret = None):
|
||||
sel = self['imageList'].l.getCurrentSelection()
|
||||
if sel == None:
|
||||
print 'Nothing to select !!'
|
||||
return
|
||||
else:
|
||||
file_name = self.imagePath + '/' + sel
|
||||
self.filename = file_name
|
||||
self.sel = sel
|
||||
box = self.box()
|
||||
self.hide()
|
||||
if self.distro == 'openvix':
|
||||
typboxa = getTypBoxa()
|
||||
url = self.feedurl + '/openvix-builds/' + typboxa + '/' + sel
|
||||
elif self.distro == 'openpli':
|
||||
url = 'http://downloads.pli-images.org/builds/' + box[0] + '/' + sel
|
||||
print '[NeoBoot] Image download url: ', url
|
||||
try:
|
||||
u = urllib2.urlopen(url)
|
||||
except:
|
||||
self.session.open(MessageBox, _('The URL to this image is not correct !!'), type=MessageBox.TYPE_ERROR)
|
||||
self.close()
|
||||
|
||||
f = open(file_name, 'wb')
|
||||
f.close()
|
||||
meta = u.info()
|
||||
file_size = int(meta.getheaders('Content-Length')[0])
|
||||
print 'Downloading: %s Bytes: %s' % (sel, file_size)
|
||||
job = ImageDownloadJob(url, file_name, sel)
|
||||
job.afterEvent = 'close'
|
||||
job_manager.AddJob(job)
|
||||
job_manager.failed_jobs = []
|
||||
self.session.openWithCallback(self.ImageDownloadCB, JobView, job, backgroundable=False, afterEventChangeable=False)
|
||||
return
|
||||
return
|
||||
|
||||
def ImageDownloadCB(self, ret):
|
||||
if ret:
|
||||
return
|
||||
elif job_manager.active_job:
|
||||
job_manager.active_job = None
|
||||
self.close()
|
||||
return
|
||||
else:
|
||||
if len(job_manager.failed_jobs) == 0:
|
||||
self.session.openWithCallback(self.startInstall, MessageBox, _('Do you want to install this image now?'), default=False)
|
||||
else:
|
||||
self.session.open(MessageBox, _('Download Failed !!'), type=MessageBox.TYPE_ERROR)
|
||||
return
|
||||
return
|
||||
|
||||
def startInstall(self, ret = None):
|
||||
if ret:
|
||||
from Plugins.Extensions.NeoBoot.plugin import InstalacjaImage
|
||||
self.session.openWithCallback(self.quit, InstalacjaImage)
|
||||
else:
|
||||
self.close()
|
||||
|
||||
def layoutFinished(self):
|
||||
box = self.box()[0]
|
||||
urlbox = self.box()[1]
|
||||
stb = self.box()[2]
|
||||
print '[NeoBoot] FEED URL: ', self.feedurl
|
||||
print '[NeoBoot] BOXTYPE: ', box
|
||||
print '[NeoXBoot] URL-BOX: ', urlbox
|
||||
self.imagelist = []
|
||||
if stb != '1':
|
||||
url = self.feedurl
|
||||
elif self.distro in 'openatv':
|
||||
url = '%s/index.php?open=%s' % (self.feedurl, box)
|
||||
elif self.distro == 'openvix':
|
||||
typboxa = getTypBoxa()
|
||||
url = '%s/openvix-builds/%s' % (self.feedurl, typboxa)
|
||||
elif self.distro == 'openpli':
|
||||
url = '%s/%s' % (self.feedurl, urlbox)
|
||||
else:
|
||||
url = self.feedurl
|
||||
print '[NeoBoot] URL: ', url
|
||||
req = urllib2.Request(url)
|
||||
try:
|
||||
response = urllib2.urlopen(req)
|
||||
except urllib2.URLError as e:
|
||||
print 'URL ERROR: %s' % e
|
||||
return
|
||||
|
||||
try:
|
||||
the_page = response.read()
|
||||
except urllib2.HTTPError as e:
|
||||
print 'HTTP download ERROR: %s' % e.code
|
||||
return
|
||||
|
||||
lines = the_page.split('\n')
|
||||
tt = len(box)
|
||||
if stb == '1':
|
||||
for line in lines:
|
||||
if line.find("<a href='%s/" % box) > -1:
|
||||
t = line.find("<a href='%s/" % box)
|
||||
if self.feed in 'openatv':
|
||||
self.imagelist.append(line[t + tt + 10:t + tt + tt + 39])
|
||||
elif line.find('<a href="http://downloads.pli-images.org/builds/' + box + '/') > -1:
|
||||
line = line[-43 - tt:-9]
|
||||
self.imagelist.append(line)
|
||||
elif line.find('href="openvix-') > -1:
|
||||
t4 = line.find('openvix-')
|
||||
t5 = line.find('.zip"')
|
||||
self.imagelist.append(line[t4:t5 + 4])
|
||||
|
||||
else:
|
||||
self.imagelist.append(stb)
|
||||
self['imageList'].l.setList(self.imagelist)
|
||||
|
||||
|
||||
class ImageDownloadJob(Job):
|
||||
|
||||
def __init__(self, url, filename, file):
|
||||
Job.__init__(self, _('Downloading %s' % file))
|
||||
ImageDownloadTask(self, url, filename)
|
||||
|
||||
|
||||
class DownloaderPostcondition(Condition):
|
||||
|
||||
def check(self, task):
|
||||
return task.returncode == 0
|
||||
|
||||
def getErrorMessage(self, task):
|
||||
return self.error_message
|
||||
|
||||
|
||||
class ImageDownloadTask(Task):
|
||||
|
||||
def __init__(self, job, url, path):
|
||||
Task.__init__(self, job, _('Downloading'))
|
||||
self.postconditions.append(DownloaderPostcondition())
|
||||
self.job = job
|
||||
self.url = url
|
||||
self.path = path
|
||||
self.error_message = ''
|
||||
self.last_recvbytes = 0
|
||||
self.error_message = None
|
||||
self.download = None
|
||||
self.aborted = False
|
||||
return
|
||||
|
||||
def run(self, callback):
|
||||
self.callback = callback
|
||||
self.download = downloadWithProgress(self.url, self.path)
|
||||
self.download.addProgress(self.download_progress)
|
||||
self.download.start().addCallback(self.download_finished).addErrback(self.download_failed)
|
||||
print '[ImageDownloadTask] downloading', self.url, 'to', self.path
|
||||
|
||||
def abort(self):
|
||||
print '[ImageDownloadTask] aborting', self.url
|
||||
if self.download:
|
||||
self.download.stop()
|
||||
self.aborted = True
|
||||
|
||||
def download_progress(self, recvbytes, totalbytes):
|
||||
if recvbytes - self.last_recvbytes > 10000:
|
||||
self.progress = int(100 * (float(recvbytes) / float(totalbytes)))
|
||||
self.name = _('Downloading') + ' ' + '%d of %d kBytes' % (recvbytes / 1024, totalbytes / 1024)
|
||||
self.last_recvbytes = recvbytes
|
||||
|
||||
def download_failed(self, failure_instance = None, error_message = ''):
|
||||
self.error_message = error_message
|
||||
if error_message == '' and failure_instance is not None:
|
||||
self.error_message = failure_instance.getErrorMessage()
|
||||
Task.processFinished(self, 1)
|
||||
return
|
||||
|
||||
def download_finished(self, string = ''):
|
||||
if self.aborted:
|
||||
self.finish(aborted=True)
|
||||
else:
|
||||
Task.processFinished(self, 0)
|
||||
16
NeoBoot/files/module_neoboot.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
#DESCRIPTION=This script by gutosie
|
||||
|
||||
opkg update
|
||||
opkg install --force-reinstall mtd-utils
|
||||
opkg install --force-reinstall mtd-utils-ubifs
|
||||
opkg install --force-reinstall mtd-utils-jffs2
|
||||
opkg install --force-reinstall kernel-module-nandsim
|
||||
opkg install --force-reinstall python-subprocess
|
||||
opkg install --force-reinstall python-argparse
|
||||
opkg install --force-reinstall curl
|
||||
opkg install --force-reinstall liblzo2-2
|
||||
opkg install --force-reinstall python-imaging
|
||||
opkg install --force-maintainer --force-reinstall --force-overwrite kernel-image
|
||||
opkg configure update-modules
|
||||
cd
|
||||
8
NeoBoot/files/neobootup.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
#DESCRIPTION=This script by gutosie
|
||||
|
||||
touch /tmp/.init_reboot
|
||||
|
||||
if [ -f /etc/init.d/neobootmount.sh ] ; then
|
||||
sync; rm -f /etc/init.d/neobootmount.sh;
|
||||
fi
|
||||
424
NeoBoot/files/stbbranding.py
Normal file
@@ -0,0 +1,424 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#from __future__ import print_function
|
||||
#from Plugins.Extensions.NeoBoot.__init__ import _ , Log, PluginPath
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
from Tools.Directories import fileExists, SCOPE_PLUGINS
|
||||
|
||||
def Log(param = ''):
|
||||
global LogFileObj
|
||||
#first close object if exists
|
||||
if param.lower() in ['open','write','append','close']:
|
||||
if LogFileObj is not None:
|
||||
LogFileObj.close()
|
||||
if LogFileObj.closed:
|
||||
LogFileObj = None
|
||||
try:
|
||||
with open('/tmp/NeoBoot.log','a') as f:
|
||||
f.write('LogFile closed properly\n')
|
||||
f.close()
|
||||
except Exception:
|
||||
print("ERROR closing LogFile!!!")
|
||||
else:
|
||||
print("ERROR closing LogFile!!!")
|
||||
#second create object if does not exist
|
||||
if LogFileObj is None:
|
||||
if param.lower() in ['open','write']:
|
||||
LogFileObj = open(LogFile, "w")
|
||||
elif param.lower() in ['append']:
|
||||
LogFileObj = open(LogFile, "a")
|
||||
elif param.lower() in ['close']:
|
||||
pass
|
||||
elif param.lower() in ['flush']:
|
||||
LogFileObj.flush()
|
||||
return LogFileObj
|
||||
|
||||
def clearMemory():
|
||||
with open("/proc/sys/vm/drop_caches", "w") as f:
|
||||
f.write("1\n")
|
||||
f.close()
|
||||
###############################################
|
||||
|
||||
#typ procesora arm lub mips
|
||||
def getCPUtype():
|
||||
cpu='UNKNOWN'
|
||||
if os.path.exists('/proc/cpuinfo'):
|
||||
with open('/proc/cpuinfo', 'r') as f:
|
||||
lines = f.read()
|
||||
f.close()
|
||||
if lines.find('ARMv7') != -1:
|
||||
cpu='ARMv7'
|
||||
elif lines.find('mips') != -1:
|
||||
cpu='MIPS'
|
||||
return cpu
|
||||
|
||||
#zwraca typ chipa prcesora
|
||||
def getCPUSoC():
|
||||
chipset='UNKNOWN'
|
||||
if os.path.exists('/proc/stb/info/chipset'):
|
||||
with open('/proc/stb/info/chipset', 'r') as f:
|
||||
chipset = f.readline().strip()
|
||||
f.close()
|
||||
if chipset == '7405(with 3D)':
|
||||
chipset = '7405'
|
||||
return chipset
|
||||
|
||||
def getCPUSoCModel():
|
||||
devicetree='UNKNOWN'
|
||||
if os.path.exists('/proc/device-tree/model'):
|
||||
with open('/proc/device-tree/model', 'r') as f:
|
||||
devicetree = f.readline().strip()
|
||||
f.close()
|
||||
return devicetree
|
||||
|
||||
#zwraca wybrane image w neoboot do uruchomienia
|
||||
def getImageNeoBoot():
|
||||
imagefile='UNKNOWN'
|
||||
if os.path.exists('/media/neoboot/ImageBoot/.neonextboot'):
|
||||
with open('/media/neoboot/ImageBoot/.neonextboot', 'r') as f:
|
||||
imagefile = f.readline().strip()
|
||||
f.close()
|
||||
return imagefile
|
||||
|
||||
#zwraca model vuplus
|
||||
def getBoxVuModel():
|
||||
vumodel='UNKNOWN'
|
||||
if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"):
|
||||
with open('/proc/stb/info/vumodel', 'r') as f:
|
||||
vumodel = f.readline().strip()
|
||||
f.close()
|
||||
elif fileExists("/proc/stb/info/boxtype") and not fileExists("/proc/stb/info/vumodel"):
|
||||
with open('/proc/stb/info/boxtype', 'r') as f:
|
||||
vumodel = f.readline().strip()
|
||||
f.close()
|
||||
return vumodel
|
||||
|
||||
def getVuModel():
|
||||
if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"):
|
||||
brand = "Vu+"
|
||||
f = open("/proc/stb/info/vumodel",'r')
|
||||
procmodel = f.readline().strip()
|
||||
f.close()
|
||||
model = procmodel.title().replace("olose", "olo SE").replace("olo2se", "olo2 SE").replace("2", "²")
|
||||
return model
|
||||
|
||||
#zwraca nazwe stb z pliku hostname
|
||||
def getBoxHostName():
|
||||
if os.path.exists('/etc/hostname'):
|
||||
with open('/etc/hostname', 'r') as f:
|
||||
myboxname = f.readline().strip()
|
||||
f.close()
|
||||
return myboxname
|
||||
|
||||
#zwraca vuplus/vumodel
|
||||
def getTunerModel(): #< neoboot.py
|
||||
BOX_NAME = ''
|
||||
if os.path.isfile('/proc/stb/info/vumodel') and not os.path.isfile("/proc/stb/info/boxtype"):
|
||||
BOX_NAME = open('/proc/stb/info/vumodel').read().strip()
|
||||
ImageFolder = 'vuplus/%s' % BOX_NAME
|
||||
elif os.path.isfile('proc/stb/info/boxtype'):
|
||||
BOX_NAME = open('/proc/stb/info/boxtype').read().strip()
|
||||
elif os.path.isfile('proc/stb/info/model') and not os.path.isfile("/proc/stb/info/mid"):
|
||||
BOX_NAME = open('/proc/stb/info/model').read().strip()
|
||||
return BOX_NAME
|
||||
|
||||
def getBoxModelVU():
|
||||
try:
|
||||
if os.path.isfile('/proc/stb/info/vumodel'):
|
||||
return open('/proc/stb/info/vumodel').read().strip().upper()
|
||||
except:
|
||||
pass
|
||||
|
||||
return _('unavailable')
|
||||
|
||||
#zwraca strukture folderu zip - vuplus/vumodel
|
||||
def getImageFolder():
|
||||
if os.path.isfile('/proc/stb/info/vumodel'):
|
||||
BOX_NAME = getBoxModelVU()
|
||||
ImageFolder = 'vuplus/' + BOX_NAME
|
||||
return ImageFolder
|
||||
|
||||
#zwraca nazwe kernela z /lib/modules
|
||||
def getKernelVersion():
|
||||
try:
|
||||
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
|
||||
except:
|
||||
return _('unknown')
|
||||
|
||||
# czysci pamiec
|
||||
def runCMDS(cmdsList):
|
||||
clearMemory()
|
||||
if isinstance(cmdsList, (list, tuple)):
|
||||
myCMD = '\n'.join(cmdsList)# + '\n'
|
||||
ret = os.system(myCMD)
|
||||
return rett
|
||||
|
||||
#####################################
|
||||
|
||||
def getImageDistro():
|
||||
if fileExists('/etc/issue.net'):
|
||||
try:
|
||||
obraz = open('/etc/issue.net', 'r').readlines()
|
||||
imagetype = obraz[0][:-1]
|
||||
image = imagetype[0:-2]
|
||||
return image
|
||||
except:
|
||||
False
|
||||
|
||||
elif fileExists('/etc/vtiversion.info'):
|
||||
image = 'VTI'
|
||||
return image
|
||||
|
||||
def getKernelVersionString():
|
||||
try:
|
||||
result = popen('uname -r', 'r').read().strip('\n').split('-')
|
||||
kernel_version = result[0]
|
||||
return kernel_version
|
||||
except:
|
||||
pass
|
||||
|
||||
return 'unknown'
|
||||
|
||||
|
||||
def getKernelImageVersion():
|
||||
try:
|
||||
from glob import glob
|
||||
lines = open(glob('/var/lib/opkg/info/kernel-*.control')[0], 'r').readlines()
|
||||
kernelimage = lines[1][:-1]
|
||||
except:
|
||||
kernelimage = getKernelVersionString
|
||||
|
||||
return kernelimage
|
||||
|
||||
def getTypBoxa():
|
||||
if not fileExists('/etc/typboxa'):
|
||||
os.system('touch /etc/typboxa')
|
||||
f2 = open('/etc/hostname', 'r')
|
||||
mypath2 = f2.readline().strip()
|
||||
f2.close()
|
||||
if mypath2 == 'vuuno':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Uno ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuultimo':
|
||||
out = open('/etc/typboxa', 'w')
|
||||
out.write('Vu+Ultimo ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuduo':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Duo ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuduo2':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Duo2 ')
|
||||
out.close()
|
||||
elif mypath2 == 'vusolo':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Solo ')
|
||||
out.close()
|
||||
elif mypath2 == 'vusolo2':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Solo2 ')
|
||||
out.close()
|
||||
elif mypath2 == 'vusolose':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Solo-SE ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuvzero':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Zero ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuuno4k':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Uno4k ')
|
||||
out.close()
|
||||
elif mypath2 == 'vuultimo4k':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Ultimo4k ')
|
||||
out.close()
|
||||
elif mypath2 == 'vusolo4k':
|
||||
out = open('/etc/typboxa ', 'w')
|
||||
out.write('Vu+Solo4k ')
|
||||
out.close()
|
||||
elif mypath2 == 'mbmini':
|
||||
out = open('/etc/typboxa', 'w')
|
||||
out.write('Miraclebox-Mini ')
|
||||
out.close()
|
||||
elif mypath2 == 'mutant51':
|
||||
out = open('/etc/typboxa', 'w')
|
||||
out.write('Mutant 51 ')
|
||||
out.close()
|
||||
elif mypath2 == 'sf4008':
|
||||
out = open('/etc/typboxa', 'w')
|
||||
out.write('Ocatgon sf4008 ')
|
||||
out.close()
|
||||
try:
|
||||
lines = open('/etc/typboxa', 'r').readlines()
|
||||
typboxa = lines[0][:-1]
|
||||
except:
|
||||
typboxa = 'not detected'
|
||||
|
||||
return typboxa
|
||||
|
||||
def getImageVersionString():
|
||||
try:
|
||||
if os.path.isfile('/var/lib/opkg/status'):
|
||||
st = os.stat('/var/lib/opkg/status')
|
||||
else:
|
||||
st = os.stat('/usr/lib/ipkg/status')
|
||||
tm = time.localtime(st.st_mtime)
|
||||
if tm.tm_year >= 2015:
|
||||
return time.strftime('%Y-%m-%d %H:%M:%S', tm)
|
||||
except:
|
||||
pass
|
||||
|
||||
return _('unavailable')
|
||||
|
||||
def getModelString():
|
||||
try:
|
||||
file = open('/proc/stb/info/boxtype', 'r')
|
||||
model = file.readline().strip()
|
||||
file.close()
|
||||
return model
|
||||
except IOError:
|
||||
return 'unknown'
|
||||
|
||||
def getChipSetString():
|
||||
try:
|
||||
f = open('/proc/stb/info/chipset', 'r')
|
||||
chipset = f.read()
|
||||
f.close()
|
||||
return str(chipset.lower().replace('\n', '').replace('bcm', ''))
|
||||
except IOError:
|
||||
return 'unavailable'
|
||||
|
||||
def getCPUString():
|
||||
try:
|
||||
file = open('/proc/cpuinfo', 'r')
|
||||
lines = file.readlines()
|
||||
for x in lines:
|
||||
splitted = x.split(': ')
|
||||
if len(splitted) > 1:
|
||||
splitted[1] = splitted[1].replace('\n', '')
|
||||
if splitted[0].startswith('system type'):
|
||||
system = splitted[1].split(' ')[0]
|
||||
elif splitted[0].startswith('Processor'):
|
||||
system = splitted[1].split(' ')[0]
|
||||
|
||||
file.close()
|
||||
return system
|
||||
except IOError:
|
||||
return 'unavailable'
|
||||
|
||||
def getCpuCoresString():
|
||||
try:
|
||||
file = open('/proc/cpuinfo', 'r')
|
||||
lines = file.readlines()
|
||||
for x in lines:
|
||||
splitted = x.split(': ')
|
||||
if len(splitted) > 1:
|
||||
splitted[1] = splitted[1].replace('\n', '')
|
||||
if splitted[0].startswith('processor'):
|
||||
if int(splitted[1]) > 0:
|
||||
cores = 2
|
||||
else:
|
||||
cores = 1
|
||||
|
||||
file.close()
|
||||
return cores
|
||||
except IOError:
|
||||
return 'unavailable'
|
||||
|
||||
def getEnigmaVersionString():
|
||||
import enigma
|
||||
enigma_version = enigma.getEnigmaVersionString()
|
||||
if '-(no branch)' in enigma_version:
|
||||
enigma_version = enigma_version[:-12]
|
||||
return enigma_version
|
||||
|
||||
def getKernelVersionString():
|
||||
try:
|
||||
f = open('/proc/version', 'r')
|
||||
kernelversion = f.read().split(' ', 4)[2].split('-', 2)[0]
|
||||
f.close()
|
||||
return kernelversion
|
||||
except:
|
||||
return _('unknown')
|
||||
|
||||
def getHardwareTypeString():
|
||||
try:
|
||||
if os.path.isfile('/proc/stb/info/boxtype'):
|
||||
return open('/proc/stb/info/boxtype').read().strip().upper() + ' (' + open('/proc/stb/info/board_revision').read().strip() + '-' + open('/proc/stb/info/version').read().strip() + ')'
|
||||
if os.path.isfile('/proc/stb/info/vumodel'):
|
||||
return 'VU+' + open('/proc/stb/info/vumodel').read().strip().upper() + '(' + open('/proc/stb/info/version').read().strip().upper() + ')'
|
||||
if os.path.isfile('/proc/stb/info/model'):
|
||||
return open('/proc/stb/info/model').read().strip().upper()
|
||||
except:
|
||||
pass
|
||||
|
||||
return _('unavailable')
|
||||
|
||||
def getImageTypeString():
|
||||
try:
|
||||
return open('/etc/issue').readlines()[-2].capitalize().strip()[:-6]
|
||||
except:
|
||||
pass
|
||||
|
||||
return _('undefined')
|
||||
|
||||
def getMachineBuild():
|
||||
try:
|
||||
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
|
||||
except:
|
||||
return 'unknown'
|
||||
|
||||
def getVuBoxModel():
|
||||
if fileExists('/proc/stb/info/vumodel'):
|
||||
try:
|
||||
l = open('/proc/stb/info/vumodel')
|
||||
model = l.read()
|
||||
l.close()
|
||||
BOX_NAME = str(model.lower().strip())
|
||||
l.close()
|
||||
BOX_MODEL = 'vuplus'
|
||||
except:
|
||||
BOX_MODEL = 'not detected'
|
||||
|
||||
return BOX_MODEL
|
||||
|
||||
def getMachineProcModel():
|
||||
if os.path.isfile('/proc/stb/info/vumodel'):
|
||||
BOX_NAME = getBoxModel()
|
||||
BOX_MODEL = getVuBoxModel()
|
||||
if BOX_MODEL == 'vuplus':
|
||||
if BOX_NAME == 'duo':
|
||||
GETMACHINEPROCMODEL = 'bcm7335'
|
||||
elif BOX_NAME == 'solo':
|
||||
GETMACHINEPROCMODEL = 'bcm7325'
|
||||
elif BOX_NAME == 'solo2':
|
||||
GETMACHINEPROCMODEL = 'bcm7346'
|
||||
elif BOX_NAME == 'solose':
|
||||
GETMACHINEPROCMODEL = 'bcm7241'
|
||||
elif BOX_NAME == 'ultimo' or BOX_NAME == 'uno':
|
||||
GETMACHINEPROCMODEL = 'bcm7413'
|
||||
elif BOX_NAME == 'zero':
|
||||
GETMACHINEPROCMODEL = 'bcm7362'
|
||||
elif BOX_NAME == 'duo2':
|
||||
GETMACHINEPROCMODEL = 'bcm7425'
|
||||
elif BOX_NAME == 'ultimo4k':
|
||||
GETMACHINEPROCMODEL = 'bcm7444S'
|
||||
elif BOX_NAME == 'uno4k':
|
||||
GETMACHINEPROCMODEL = 'bcm7252S'
|
||||
elif BOX_NAME == 'solo4k':
|
||||
GETMACHINEPROCMODEL = 'bcm7376'
|
||||
elif BOX_NAME == 'zero4K':
|
||||
GETMACHINEPROCMODEL = 'bcm72604'
|
||||
elif BOX_NAME == 'uno4kse':
|
||||
GETMACHINEPROCMODEL = ''
|
||||
procmodel = getMachineProcModel()
|
||||
return procmodel
|
||||
|
||||
|
||||
boxbrand = sys.modules[__name__]
|
||||
|
||||
582
NeoBoot/files/targetimage.sh
Normal file
@@ -0,0 +1,582 @@
|
||||
#!/bin/sh
|
||||
#script - gutosie
|
||||
|
||||
KERNEL=`uname -r`
|
||||
IMAGE=/media/neoboot/ImageBoot
|
||||
IMAGENEXTBOOT=/media/neoboot/ImageBoot/.neonextboot
|
||||
BOXNAME=$( cat /etc/hostname)
|
||||
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
VUMODEL=$( cat /proc/stb/info/vumodel )
|
||||
fi
|
||||
|
||||
if [ -f /proc/stb/info/boxtype ]; then
|
||||
BOXTYPE=$( cat /proc/stb/info/boxtype )
|
||||
fi
|
||||
|
||||
if [ -f /proc/stb/info/chipset ]; then
|
||||
CHIPSET=$( cat /proc/stb/info/chipset )
|
||||
fi
|
||||
|
||||
if [ -f /tmp/zImage.ipk ]; then
|
||||
rm -f /tmp/zImage.ipk
|
||||
fi
|
||||
|
||||
if [ -f /tmp/zImage ]; then
|
||||
rm -f /tmp/zImage
|
||||
fi
|
||||
|
||||
if [ -f $IMAGENEXTBOOT ]; then
|
||||
TARGET=`cat $IMAGENEXTBOOT`
|
||||
else
|
||||
TARGET=Flash
|
||||
fi
|
||||
|
||||
if [ $TARGET = "Flash" ]; then
|
||||
if [ -e /.multinfo ]; then
|
||||
if [ ! -e /proc/stb/info/boxtype ]; then
|
||||
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Instalacja kernel do /dev/mmcblk0p1..."
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p1
|
||||
fi
|
||||
true
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p1..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
cat /dev/mmcblk0p1 | grep "kernel"
|
||||
fi
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "zero4k" ]; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Instalacja kernel do /dev/mmcblk0p4..."
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p4
|
||||
fi
|
||||
true
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p4..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
cat /dev/mmcblk0p4 | grep "kernel"
|
||||
fi
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "duo4k" ]; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Instalacja kernel do /dev/mmcblk0p6..."
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p6
|
||||
fi
|
||||
true
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p6..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
cat /dev/mmcblk0p6 | grep "kernel"
|
||||
fi
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ]; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd2..."
|
||||
flash_eraseall /dev/mtd2
|
||||
sleep 2
|
||||
echo "Instalacja kernel do /dev/mtd2..."
|
||||
nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel do /dev/mtd2..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd1..."
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd1
|
||||
echo "Instalacja kernel do /dev/mtd1..."
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd1 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel do /dev/mtd1..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
sleep 5; reboot -d -f -h -i
|
||||
fi
|
||||
#MiracleBox Ultra - test
|
||||
|
||||
|
||||
|
||||
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
|
||||
if [ -f /proc/stb/info/boxtype ]; then
|
||||
#if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
#echo "Kasowanie kernel z /dev/mtd2..."
|
||||
#flash_erase /dev/mtd2 0 0
|
||||
#sleep 2
|
||||
#echo "Instalacja kernel do /dev/mtd2..."
|
||||
#nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
#update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
#fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel do /dev/mtd2..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
|
||||
fi
|
||||
fi
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
sleep 5; reboot -d -f -h -i
|
||||
##################
|
||||
#Edision OSmini - test
|
||||
|
||||
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ] || [ $BOXNAME = "osmini" ]; then
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd0..."
|
||||
flash_eraseall /dev/mtd0
|
||||
sleep 2
|
||||
echo "Instalacja kernel do /dev/mtd0..."
|
||||
nandwrite -p /dev/mtd0 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel do /dev/mtd0..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
|
||||
fi
|
||||
fi
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
sleep 5; reboot -d -f -h -i
|
||||
##################
|
||||
fi
|
||||
|
||||
else
|
||||
if [ ! -e /.multinfo ]; then
|
||||
if [ ! -e /media/neoboot/ImagesUpload/.kernel/used_flash_kernel ]; then
|
||||
if [ ! -e /proc/stb/info/boxtype ]; then
|
||||
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Instalacja kernel do /dev/mmcblk0p1..."
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p1
|
||||
fi
|
||||
true
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p1..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
cat /dev/mmcblk0p1 | grep "kernel"
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "zero4k" ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Instalacja kernel do /dev/mmcblk0p4..."
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p4
|
||||
fi
|
||||
true
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
cat /dev/mmcblk0p4 | grep "kernel"
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd1..."
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd1
|
||||
echo "Wgrywanie kernel do /dev/mtd1..."
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd1 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
fi
|
||||
|
||||
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd2..."
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd2
|
||||
echo "Wgrywanie kernel do /dev/mtd2..."
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo " NEOBOOT - zainstalowano kernel-image - " $TARGET "Za chwile nastapi restart systemu !!!"
|
||||
sleep 5 ; reboot -d -f -h -i
|
||||
|
||||
|
||||
fi
|
||||
#Ultra
|
||||
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
|
||||
#if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
#echo "Kasowanie kernel z /dev/mtd2..."
|
||||
#sleep 2
|
||||
#flash_eraseall /dev/mtd2 0 0
|
||||
#echo "Wgrywanie kernel do /dev/mtd2..."
|
||||
#sleep 2
|
||||
#nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
#update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
#fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
fi
|
||||
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
|
||||
sleep 5; reboot -d -f -h -i
|
||||
#OSmini
|
||||
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ]; then
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
|
||||
echo "Kasowanie kernel z /dev/mtd0..."
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd0
|
||||
echo "Wgrywanie kernel do /dev/mtd0..."
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd0 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
|
||||
fi
|
||||
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
|
||||
echo "Przenoszenie pliku kernel do /tmp..."
|
||||
sleep 2
|
||||
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
|
||||
echo "Instalacja kernel zImage.ipk..."
|
||||
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
|
||||
fi
|
||||
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
|
||||
sleep 5; reboot -d -f -h -i
|
||||
else
|
||||
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
|
||||
sleep 5; reboot -d -f -h -i
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
|
||||
if [ -f /proc/stb/info/vumodel ]; then
|
||||
if [ ! -e /proc/stb/info/boxtype ]; then
|
||||
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
|
||||
echo "Instalacja kernel do /dev/mmcblk0p1..."
|
||||
sleep 2
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/tmp/zImage of=/dev/mmcblk0p1
|
||||
fi
|
||||
rm -f /tmp/zImage
|
||||
true
|
||||
cat /dev/mmcblk0p1 | grep "kernel"1
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " VUPLUS z procesorem arm zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
fi
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -fR $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
|
||||
echo "Instalacja kernel do /dev/mmcblk0p1..."
|
||||
sleep 2
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/tmp/zImage of=/dev/mmcblk0p1
|
||||
fi
|
||||
rm -f /tmp/zImage
|
||||
true
|
||||
cat /dev/mmcblk0p1 | grep "kernel"
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " VU+ zmieniony."
|
||||
sleep 2
|
||||
echo "Za chwile nastapi restart systemu..."
|
||||
sleep 2
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
sleep 2
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
fi
|
||||
|
||||
sleep 5; reboot -d -f -h -i
|
||||
|
||||
elif [ $VUMODEL = "zero4k" ]; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
sleep 5; reboot -d -f -h -i
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
|
||||
echo "Instalacja kernel do /dev/mmcblk0p4..."
|
||||
sleep 2
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/tmp/zImage of=/dev/mmcblk0p4
|
||||
fi
|
||||
rm -f /tmp/zImage
|
||||
true
|
||||
cat /dev/mmcblk0p4 | grep "kernel"
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " VUPLUS z procesorem arm zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
sleep 5; reboot -d -f -h -i
|
||||
fi
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -fR $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
|
||||
echo "Instalacja kernel do /dev/mmcblk0p4..."
|
||||
sleep 2
|
||||
if [ -d /proc/stb ] ; then
|
||||
dd if=/tmp/zImage of=/dev/mmcblk0p4
|
||||
fi
|
||||
rm -f /tmp/zImage
|
||||
true
|
||||
cat /dev/mmcblk0p4 | grep "kernel"
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " VU+ zmieniony."
|
||||
sleep 2
|
||||
echo "Za chwile nastapi restart systemu..."
|
||||
sleep 2
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
sleep 2
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
sleep 5
|
||||
fi
|
||||
|
||||
reboot -d -f -h -i
|
||||
|
||||
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ] ; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd2"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd2
|
||||
echo "Wgrywanie kernel do /dev/mtd2"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd2 //tmp/vmlinux.gz
|
||||
rm -f //tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"t
|
||||
fi
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd2"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd2
|
||||
echo "Wgrywanie kernel do /dev/mtd2"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd2 /tmp/vmlinux.gz
|
||||
rm -f /tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
fi
|
||||
sleep 5; reboot -d -f -h -i
|
||||
|
||||
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
else
|
||||
echo "Kasowanie kernel z /dev/mtd1"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd1
|
||||
echo "Wgrywanie kernel do /dev/mtd1"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd1 //$IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
fi
|
||||
else
|
||||
echo "Kasowanie kernel z /dev/mtd1"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd1
|
||||
echo "Wgrywanie kernel do /dev/mtd1"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd1 //$IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
fi
|
||||
sleep 5; reboot -d -f -h -i
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
#Ultra
|
||||
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd2"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd2 0 0
|
||||
echo "Wgrywanie kernel do /dev/mtd2"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd2 //tmp/vmlinux.gz
|
||||
rm -f //tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"t
|
||||
fi
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd2"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd2 0 0
|
||||
echo "Wgrywanie kernel do /dev/mtd2"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd2 /tmp/vmlinux.gz
|
||||
rm -f /tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
fi
|
||||
sleep 5; reboot -d -f -h -i
|
||||
|
||||
###############################
|
||||
#OSmini
|
||||
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ] ; then
|
||||
if [ -e /.multinfo ] ; then
|
||||
INFOBOOT=$( cat /.multinfo )
|
||||
if [ $TARGET = $INFOBOOT ] ; then
|
||||
echo "NEOBOOT is booting image from " $TARGET
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd0"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd0
|
||||
echo "Wgrywanie kernel do /dev/mtd0"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd0 //tmp/vmlinux.gz
|
||||
rm -f //tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"t
|
||||
fi
|
||||
else
|
||||
echo "Przenoszenie pliku kernel do /tmp"
|
||||
sleep 2
|
||||
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
|
||||
echo "Kasowanie kernel z /dev/mtd0"
|
||||
sleep 2
|
||||
flash_eraseall /dev/mtd0
|
||||
echo "Wgrywanie kernel do /dev/mtd0"
|
||||
sleep 2
|
||||
nandwrite -p /dev/mtd0 /tmp/vmlinux.gz
|
||||
rm -f /tmp/vmlinux.gz
|
||||
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
|
||||
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
|
||||
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
|
||||
echo "Typ procesora: " $CHIPSET " STB"
|
||||
fi
|
||||
sleep 5; reboot -d -f -h -i
|
||||
|
||||
#else
|
||||
#echo "$TARGET " > /media/neoboot/ImageBoot/.neonextboot
|
||||
#echo "Error - Nie wpierany model STB !!! "
|
||||
#exit 0
|
||||
#fi
|
||||
else
|
||||
echo "$TARGET " > /media/neoboot/ImageBoot/.neonextboot
|
||||
echo "Error - Nie wpierany model STB !!! "
|
||||
echo "Prawdopodobnie nie wspieramy tego modelu STB !!!"
|
||||
exit 0
|
||||
|
||||
fi
|
||||
fi
|
||||
exit 0
|
||||
954
NeoBoot/files/tools.py
Normal file
@@ -0,0 +1,954 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __init__ import _
|
||||
import codecs
|
||||
from enigma import getDesktop
|
||||
from Components.ActionMap import ActionMap
|
||||
from Components.Label import Label
|
||||
from Components.ScrollLabel import ScrollLabel
|
||||
from Components.Pixmap import Pixmap
|
||||
from Components.Sources.List import List
|
||||
from Components.ConfigList import ConfigListScreen
|
||||
from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
|
||||
from Components.config import getConfigListEntry, config, ConfigYesNo, ConfigText, ConfigSelection, NoSave
|
||||
from Plugins.Extensions.NeoBoot.plugin import Plugins
|
||||
from Plugins.Plugin import PluginDescriptor
|
||||
from Screens.Standby import TryQuitMainloop
|
||||
from Screens.MessageBox import MessageBox
|
||||
from Screens.Console import Console
|
||||
from Screens.Screen import Screen
|
||||
from Tools.LoadPixmap import LoadPixmap
|
||||
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, fileExists, pathExists, createDir
|
||||
from os import system, listdir, mkdir, chdir, getcwd, rename as os_rename, remove as os_remove, popen
|
||||
from os.path import dirname, isdir, isdir as os_isdir
|
||||
from enigma import eTimer
|
||||
from Plugins.Extensions.NeoBoot.files.stbbranding import getKernelVersionString
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import struct, shutil
|
||||
|
||||
PLUGINVERSION = '7.00'
|
||||
|
||||
def getKernelVersion():
|
||||
try:
|
||||
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
|
||||
except:
|
||||
return _('unknown')
|
||||
|
||||
def getCPUtype():
|
||||
cpu='UNKNOWN'
|
||||
if os.path.exists('/proc/cpuinfo'):
|
||||
with open('/proc/cpuinfo', 'r') as f:
|
||||
lines = f.read()
|
||||
f.close()
|
||||
if lines.find('ARMv7') != -1:
|
||||
cpu='ARMv7'
|
||||
elif lines.find('mips') != -1:
|
||||
cpu='MIPS'
|
||||
return cpu
|
||||
|
||||
if os.path.exists('/etc/hostname'):
|
||||
with open('/etc/hostname', 'r') as f:
|
||||
myboxname = f.readline().strip()
|
||||
f.close()
|
||||
|
||||
if os.path.exists('/proc/stb/info/vumodel'):
|
||||
with open('/proc/stb/info/vumodel', 'r') as f:
|
||||
vumodel = f.readline().strip()
|
||||
f.close()
|
||||
|
||||
if os.path.exists('/proc/stb/info/boxtype'):
|
||||
with open('/proc/stb/info/boxtype', 'r') as f:
|
||||
boxtype = f.readline().strip()
|
||||
f.close()
|
||||
|
||||
class BoundFunction:
|
||||
__module__ = __name__
|
||||
|
||||
def __init__(self, fnc, *args):
|
||||
self.fnc = fnc
|
||||
self.args = args
|
||||
|
||||
def __call__(self):
|
||||
self.fnc(*self.args)
|
||||
|
||||
|
||||
class MBTools(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '\n <screen name="NeoBoot" position="center,center" size="1159,750" title="Narzedzia NeoBoota">\n\t\t<widget source="list" render="Listbox" position="15,27" size="1131,720" scrollbarMode="showOnDemand">\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (820, 46), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (66, 66), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 35)],\n \t\t\t"itemHeight": 50\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
|
||||
else:
|
||||
skin = '\n <screen position="center,center" size="590,330" title="Narzedzia NeoBoota">\n\t\t<widget source="list" render="Listbox" position="10,16" size="570,300" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (520, 36), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (36, 36), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 22)],\n \t\t\t"itemHeight": 36\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
|
||||
__module__ = __name__
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self.list = []
|
||||
self['list'] = List(self.list)
|
||||
self.updateList()
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
|
||||
'back': self.close})
|
||||
|
||||
def updateList(self):
|
||||
self.list = []
|
||||
mypath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot'
|
||||
if not fileExists(mypath + 'icons'):
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/ok.png'
|
||||
png = LoadPixmap(mypixmap)
|
||||
|
||||
res = (_('Wykonaj kopi\xc4\x99 obrazu z NeoBoota'), png, 0)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Przywr\xc3\xb3\xc4\x87 kopi\xc4\x99 obrazu do NeoBoota'), png, 1)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84'), png, 2)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Usu\xc5\x84 image ZIP z katalogu ImagesUpload '), png, 3)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Odinstalowanie NeoBoota'), png, 4)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Reinstalacja NeoBoota'), png, 5)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Zaktualizuj NeoBoota na wszystkich obrazach.'), png, 6)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Kopia Zapasowa NeoBoota'), png, 7)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Aktualizacja listy TV na zainstalowanych image.'), png, 8)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Aktualizacja IPTVPlayer na zainstalowanych image.'), png, 9)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Usuniecie hasla do root.'), png, 10)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Sprawdz poprawnosc instalacji neoboota'), png, 11)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Zahaszuj montowanie VolatileMedia '), png, 12)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Informacje NeoBoota'), png, 13)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
res = (_('Wspierane tunery sat'), png, 14)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
def KeyOk(self):
|
||||
self.sel = self['list'].getCurrent()
|
||||
if self.sel:
|
||||
self.sel = self.sel[2]
|
||||
if self.sel == 0 and self.session.open(MBBackup):
|
||||
pass
|
||||
if self.sel == 1 and self.session.open(MBRestore):
|
||||
pass
|
||||
if self.sel == 2 and self.session.open(MenagerDevices):
|
||||
pass
|
||||
if self.sel == 3 and self.session.open(MBDeleUpload):
|
||||
pass
|
||||
if self.sel == 4 and self.session.open(UnistallMultiboot):
|
||||
pass
|
||||
if self.sel == 5 and self.session.open(ReinstllNeoBoot):
|
||||
pass
|
||||
if self.sel == 6 and self.session.open(UpdateNeoBoot):
|
||||
pass
|
||||
if self.sel == 7 and self.session.open(BackupMultiboot):
|
||||
pass
|
||||
if self.sel == 8 and self.session.open(ListTv):
|
||||
pass
|
||||
if self.sel == 9 and self.session.open(IPTVPlayer):
|
||||
pass
|
||||
if self.sel == 10 and self.session.open(SetPasswd):
|
||||
pass
|
||||
if self.sel == 11 and self.session.open(CheckInstall):
|
||||
pass
|
||||
if self.sel == 12 and self.session.open(VolatileMedia):
|
||||
pass
|
||||
if self.sel == 13 and self.session.open(MultiBootMyHelp):
|
||||
pass
|
||||
if self.sel == 14 and self.session.open(TunerInfo):
|
||||
pass
|
||||
|
||||
class MBBackup(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = ' <screen position="center,center" size="850,750" title="Wykonaj kopie zapasowa obrazu z NeoBoota">\n\t\t\n <widget name="lab1" position="24, 5" size="819, 62" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n\n <widget name="lab2" position="22, 82" size="819, 61" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n\n <widget name="lab3" position="21, 150" size="819, 62" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n \n <widget source="list" render="Listbox" itemHeight="40" selectionPixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/selektor.png" font="Regular;25" position="20, 218" zPosition="1" size="820, 376" scrollbarMode="showOnDemand" transparent="1">\n\t\t\t\n <convert type="StringList" font="Regular;35" />\n\n </widget>\n\n <ePixmap position="336, 596" size="181, 29" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n\n <widget name="key_red" position="307, 629" zPosition="2" size="251, 77" font="Regular;35" halign="center" valign="center" backgroundColor="red" transparent="1" foregroundColor="red" />\n\n </screen>'
|
||||
else:
|
||||
skin = ' <screen position="center,center" size="700,550" title="Wykonaj kopie zapasowa obrazu z NeoBoota">\n\t\t\n <widget name="lab1" position="20,20" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\n <widget name="lab2" position="20,50" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\n <widget name="lab3" position="20,100" size="660,30" font="Regular;22" halign="center" valign="center" transparent="1"/>\n \n <widget source="list" render="Listbox" position="40,130" zPosition="1" size="620,360" scrollbarMode="showOnDemand" transparent="1" >\n\t\t\t\n <convert type="StringList" />\n</widget>\n<ePixmap position="280,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n\n <widget name="key_red" position="280,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" />\n\n </screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('')
|
||||
self['lab2'] = Label('')
|
||||
self['lab3'] = Label(_('Wybierz obraz z kt\xc3\xb3rego chcesz zrobi\xc4\x87 kopie'))
|
||||
self['key_red'] = Label(_('Kopia Zapasowa'))
|
||||
self['list'] = List([])
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'ok': self.backupImage,
|
||||
'red': self.backupImage})
|
||||
self.backupdir = '/media/neoboot/NeoBootImageBackup'
|
||||
self.availablespace = '0'
|
||||
self.onShow.append(self.updateInfo)
|
||||
|
||||
def updateInfo(self):
|
||||
device = '/media/neoboot'
|
||||
usfree = '0'
|
||||
devicelist = ['cf',
|
||||
'hdd',
|
||||
'card',
|
||||
'usb',
|
||||
'usb2']
|
||||
for d in devicelist:
|
||||
test = '/media/' + d + '/ImageBoot/.neonextboot'
|
||||
if fileExists(test):
|
||||
device = '/media/' + d
|
||||
|
||||
rc = system('df > /tmp/ninfo.tmp')
|
||||
f = open('/proc/mounts', 'r')
|
||||
for line in f.readlines():
|
||||
if line.find('/hdd') != -1:
|
||||
self.backupdir = '/media/neoboot/NeoBootImageBackup'
|
||||
device = '/media/neoboot'
|
||||
|
||||
f.close()
|
||||
if pathExists(self.backupdir) == 0 and createDir(self.backupdir):
|
||||
pass
|
||||
if fileExists('/tmp/ninfo.tmp'):
|
||||
f = open('/tmp/ninfo.tmp', 'r')
|
||||
for line in f.readlines():
|
||||
line = line.replace('part1', ' ')
|
||||
parts = line.strip().split()
|
||||
totsp = len(parts) - 1
|
||||
if parts[totsp] == device:
|
||||
if totsp == 5:
|
||||
usfree = parts[3]
|
||||
else:
|
||||
usfree = parts[2]
|
||||
break
|
||||
|
||||
f.close()
|
||||
os_remove('/tmp/ninfo.tmp')
|
||||
self.availablespace = usfree[0:-3]
|
||||
strview = _('Masz zainstalowane nas\xc5\xa7\xc4\x99puj\xc4\x85ce obrazy')
|
||||
self['lab1'].setText(strview)
|
||||
strview = _('Masz jeszcze wolne: ') + self.availablespace + ' MB'
|
||||
self['lab2'].setText(strview)
|
||||
imageslist = ['Flash']
|
||||
for fn in listdir('/media/neoboot/ImageBoot'):
|
||||
dirfile = '/media/neoboot/ImageBoot/' + fn
|
||||
if os_isdir(dirfile) and imageslist.append(fn):
|
||||
pass
|
||||
|
||||
self['list'].list = imageslist
|
||||
|
||||
def backupImage(self):
|
||||
image = self['list'].getCurrent()
|
||||
if image:
|
||||
self.backimage = image.strip()
|
||||
myerror = ''
|
||||
if self.backimage == 'Flash':
|
||||
myerror = _('Niestety nie mo\xc5\xbcna wykona\xc4\x87 kopii zapasowej z flesza t\xc4\x85 wtyczk\xc4\x85\nZainstaluj backupsuite do kopii obrazu z pamieci flesza')
|
||||
if int(self.availablespace) < 150:
|
||||
myerror = _('Brak miejca do zrobienia kopii obrazu. Potrzebne jest 150 Mb wolnego miejsca na kopie obrazu.')
|
||||
if myerror == '':
|
||||
message = _('Wykona\xc4\x87 kopi\xc4\x99 obrazu:') + image + ' teraz ?'
|
||||
ybox = self.session.openWithCallback(self.dobackupImage, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('Potwierdzenie kopii zapasowej'))
|
||||
else:
|
||||
self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO)
|
||||
|
||||
def dobackupImage(self, answer):
|
||||
if answer is True:
|
||||
cmd = "echo -e '\n\n%s '" % _('Prosz\xc4\x99 czeka\xc4\x87, NeoBoot dzia\xc5\x82a, wykonywanie kopii zapasowej moze zajac kilka chwil, proces w toku...')
|
||||
cmd1 = '/bin/tar -cf ' + self.backupdir + '/' + self.backimage + '.tar /media/neoboot/ImageBoot/' + self.backimage + ' > /dev/null 2>&1'
|
||||
cmd2 = 'mv -f ' + self.backupdir + '/' + self.backimage + '.tar ' + self.backupdir + '/' + self.backimage + '.mb'
|
||||
cmd3 = "echo -e '\n\n%s '" % _('NeoBoot: Kopia Zapasowa KOMPLETNA !')
|
||||
self.session.open(Console, _('NeoBoot: Kopia Zapasowa Obrazu'), [cmd,
|
||||
cmd1,
|
||||
cmd2,
|
||||
cmd3])
|
||||
self.close()
|
||||
|
||||
|
||||
class MBRestore(Screen):
|
||||
__module__ = __name__
|
||||
skin = ' \n\t<screen position="center,center" size="700,550" title="NeoBoot Przywracanie Obrazu">\n <widget name="lab1" position="20,20" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n <widget name="lab2" position="20,50" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n <widget name="lab3" position="20,100" size="660,30" font="Regular;22" halign="center" valign="center" transparent="1"/>\n <widget source="list" render="Listbox" position="40,130" zPosition="1" size="620,380" scrollbarMode="showOnDemand" transparent="1" >\n\t\t\t<convert type="StringList" />\n </widget>\n <ePixmap position="140,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n <ePixmap position="420,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/greencor.png" alphatest="on" zPosition="1" />\n <widget name="key_red" position="140,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" />\n <widget name="key_green" position="420,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="green" transparent="1" />\n </screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('')
|
||||
self['lab2'] = Label('')
|
||||
self['lab3'] = Label(_('Wybierz kopi\xc4\x99 kt\xc3\xb3r\xc4\x85 chcesz przywr\xc3\xb3ci\xc4\x87'))
|
||||
self['key_red'] = Label(_('Restore'))
|
||||
self['key_green'] = Label(_('Delete'))
|
||||
self['list'] = List([])
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'ok': self.restoreImage,
|
||||
'red': self.restoreImage,
|
||||
'green': self.deleteback})
|
||||
self.backupdir = '/media/neoboot/NeoBootImageBackup'
|
||||
self.availablespace = '0'
|
||||
self.onShow.append(self.updateInfo)
|
||||
|
||||
def updateInfo(self):
|
||||
device = '/media/neoboot'
|
||||
usfree = '0'
|
||||
devicelist = ['cf',
|
||||
'CF',
|
||||
'hdd',
|
||||
'card',
|
||||
'sd',
|
||||
'SD',
|
||||
'usb',
|
||||
'USB',
|
||||
'usb2']
|
||||
for d in devicelist:
|
||||
test = '/media/' + d + '/ImageBoot/.neonextboot'
|
||||
if fileExists(test):
|
||||
device = '/media/' + d
|
||||
|
||||
rc = system('df > /tmp/ninfo.tmp')
|
||||
f = open('/proc/mounts', 'r')
|
||||
for line in f.readlines():
|
||||
if line.find('/neoboot') != -1:
|
||||
self.backupdir = '/media/neoboot/NeoBootImageBackup'
|
||||
|
||||
f.close()
|
||||
if pathExists(self.backupdir) == 0 and createDir(self.backupdir):
|
||||
pass
|
||||
if fileExists('/tmp/ninfo.tmp'):
|
||||
f = open('/tmp/ninfo.tmp', 'r')
|
||||
for line in f.readlines():
|
||||
line = line.replace('part1', ' ')
|
||||
parts = line.strip().split()
|
||||
totsp = len(parts) - 1
|
||||
if parts[totsp] == device:
|
||||
if totsp == 5:
|
||||
usfree = parts[3]
|
||||
else:
|
||||
usfree = parts[2]
|
||||
break
|
||||
|
||||
f.close()
|
||||
os_remove('/tmp/ninfo.tmp')
|
||||
self.availablespace = usfree[0:-3]
|
||||
strview = _('Kopie Zapasowe znajduj\xc4\x85 si\xc4\x99 w katalogu /media/neoboot/NeoBootImageBackup')
|
||||
self['lab1'].setText(strview)
|
||||
strview = _('Ilo\xc5\x9b\xc4\x87 wolnego miejsca w Superbocie: ') + self.availablespace + ' MB'
|
||||
self['lab2'].setText(strview)
|
||||
imageslist = []
|
||||
for fn in listdir(self.backupdir):
|
||||
imageslist.append(fn)
|
||||
|
||||
self['list'].list = imageslist
|
||||
|
||||
def deleteback(self):
|
||||
image = self['list'].getCurrent()
|
||||
if image:
|
||||
self.delimage = image.strip()
|
||||
message = _('Wybierz obraz do przywr\xc3\xb3cenia lub usuni\xc4\x99cia:\n ') + image + '?'
|
||||
ybox = self.session.openWithCallback(self.dodeleteback, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('Potwierdzenie Usuni\xc4\x99cia'))
|
||||
|
||||
def dodeleteback(self, answer):
|
||||
if answer is True:
|
||||
cmd = "echo -e '\n\n%s '" % _('SuperBoot usuwanie plik\xc3\xb3w kopi zapasowej.....')
|
||||
cmd1 = 'rm ' + self.backupdir + '/' + self.delimage
|
||||
self.session.open(Console, _('SuperBoot: Pliki kopii zapasowej usuni\xc4\x99te'), [cmd, cmd1])
|
||||
self.updateInfo()
|
||||
|
||||
def restoreImage(self):
|
||||
image = self['list'].getCurrent()
|
||||
if image:
|
||||
curimage = 'Flash'
|
||||
if fileExists('/.neonextboot'):
|
||||
f = open('/.neonextboot', 'r')
|
||||
curimage = f.readline().strip()
|
||||
f.close()
|
||||
self.backimage = image.strip()
|
||||
imagename = self.backimage[0:-3]
|
||||
myerror = ''
|
||||
if curimage == imagename:
|
||||
myerror = _('Sorry you cannot overwrite the image currently booted from. Please, boot from Flash to restore this backup.')
|
||||
if myerror == '':
|
||||
message = _('Przed przywracaniem sprawdz czy masz wolne miejsce na swoim urz\xc4\x85dzeniu - 300Mb \nCzy chcesz przywr\xc3\xb3ci\xc4\x87 ten obraz:\n ') + image + '?'
|
||||
ybox = self.session.openWithCallback(self.dorestoreImage, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('Potwierdzenie Przywracania'))
|
||||
else:
|
||||
self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO)
|
||||
|
||||
def dorestoreImage(self, answer):
|
||||
if answer is True:
|
||||
imagename = self.backimage[0:-3]
|
||||
cmd = "echo -e '\n\n%s '" % _('Wait please, NeoBoot is working: ....Restore in progress....')
|
||||
cmd1 = 'mv -f ' + self.backupdir + '/' + self.backimage + ' ' + self.backupdir + '/' + imagename + '.tar'
|
||||
cmd2 = '/bin/tar -xf ' + self.backupdir + '/' + imagename + '.tar -C /'
|
||||
cmd3 = 'mv -f ' + self.backupdir + '/' + imagename + '.tar ' + self.backupdir + '/' + imagename + '.mb'
|
||||
cmd4 = 'sync'
|
||||
cmd5 = "echo -e '\n\n%s '" % _('Superboot: Restore COMPLETE !')
|
||||
self.session.open(Console, _('NeoBoot: Restore Image'), [cmd,
|
||||
cmd1,
|
||||
cmd2,
|
||||
cmd3,
|
||||
cmd4,
|
||||
cmd5])
|
||||
self.close()
|
||||
|
||||
def myclose(self):
|
||||
self.close()
|
||||
|
||||
def myclose2(self, message):
|
||||
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
|
||||
|
||||
class MenagerDevices(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Uruchomic Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84 ?')
|
||||
self['key_red'] = Label(_('Uruchom'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.MD})
|
||||
|
||||
def MD(self):
|
||||
try:
|
||||
if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg'):
|
||||
system('rm -f /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg')
|
||||
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
|
||||
self.session.open(ManagerDevice)
|
||||
if fileExists('/etc/devicemanager.cfg'):
|
||||
system(' rm -f /etc/devicemanager.cfg')
|
||||
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
|
||||
self.session.open(ManagerDevice)
|
||||
if fileExists('/etc/fstab.org'):
|
||||
system('rm /etc/fstab; mv /etc/fstab.org /etc/fstab; rm /etc/fstab.org ')
|
||||
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
|
||||
self.session.open(ManagerDevice)
|
||||
elif not fileExists('/etc/fstab.org'):
|
||||
system('cp -f /etc/fstab /etc/fstab.org')
|
||||
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
|
||||
self.session.open(ManagerDevice)
|
||||
else:
|
||||
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
|
||||
self.session.open(ManagerDevice)
|
||||
except:
|
||||
False
|
||||
|
||||
|
||||
class UnistallMultiboot(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Odinstaluj NeoBoota">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Czy odinstalowa\xc4\x87 NeoBoota ?')
|
||||
self['key_red'] = Label(_('Odinstaluj'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.usun})
|
||||
|
||||
def usun(self):
|
||||
message = _('Je\xc5\x9bli wybierzesz Tak, zostan\xc4\x85 przywr\xc3\xb3cone ustawienia obrazu pli \nMultibot zostanie tylko odinstalowany. \nBedziesz m\xc3\xb3g\xc5\x82 go zainstalowa\xc4\x87 ponownie')
|
||||
ybox = self.session.openWithCallback(self.reinstallneoboot, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('Delete Confirmation'))
|
||||
|
||||
def reinstallneoboot(self, answer):
|
||||
if answer is True:
|
||||
cmd0 = "echo -e '\n\nPrzywracanie ustawie\xc5\x84.....'"
|
||||
cmd = "echo -e '\n%s '" % _('Czekaj usuwam...')
|
||||
cmd1 = 'rm /sbin/multinit; sleep 2'
|
||||
cmd1a = "echo -e '\nNeoBoot usuwanie mened\xc5\xbcera rozruchu....'"
|
||||
cmd2 = 'rm /sbin/init; sleep 2'
|
||||
cmd3 = 'ln -sfn /sbin/init.sysvinit /sbin/init'
|
||||
cmd4 = 'chmod 777 /sbin/init; sleep 2'
|
||||
cmd4a = "echo -e '\nNeoBoot restoring media mounts....'"
|
||||
cmd5 = 'mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; sleep 2'
|
||||
cmd6 = 'rm /media/neoboot/ImageBoot/.neonextboot;rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location; sleep 2'
|
||||
cmd7 = 'rm /media/neoboot/ImageBoot/.Flash; rm /media/neoboot/ImageBoot/.version'
|
||||
cmd7a = "echo -e '\n\nOdinstalowywanie neoboota...'"
|
||||
cmd8 = 'mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; sleep 2'
|
||||
cmd8a = "echo -e '\n\nPrzywracanie montowania.'"
|
||||
cmd9 = 'mv /etc/fstab.org /etc/fstab; sleep 2'
|
||||
cmd9a = "echo -e '\n\nNeoBoot odinstalowany, mozesz zrobic reinstalacje.'"
|
||||
self.session.openWithCallback(self.close, Console, _('NeoBoot is reinstall...'), [cmd0,
|
||||
cmd,
|
||||
cmd1,
|
||||
cmd1a,
|
||||
cmd2,
|
||||
cmd3,
|
||||
cmd4,
|
||||
cmd4a,
|
||||
cmd5,
|
||||
cmd6,
|
||||
cmd7,
|
||||
cmd7a,
|
||||
cmd8,
|
||||
cmd8a,
|
||||
cmd9,
|
||||
cmd9a])
|
||||
self.close()
|
||||
|
||||
|
||||
class ReinstllNeoBoot(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Update NeoBoot">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Przywrocic kopie NeoBoota z lokalizacji /media/neoboot ?')
|
||||
self['key_red'] = Label(_('Backup'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.reinstallMB})
|
||||
|
||||
def reinstallMB(self):
|
||||
system('/bin/tar -xzvf /media/neoboot/NeoBoot_Backup.tar.gz -C /')
|
||||
self.close()
|
||||
|
||||
|
||||
class UpdateNeoBoot(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Update NeoBoot">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Aktualizowac neoboota na wszystkich obrazach ?')
|
||||
self['key_red'] = Label(_('Zainstaluj'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.mbupload})
|
||||
|
||||
def mbupload(self):
|
||||
self.session.open(MyUpgrade2)
|
||||
|
||||
|
||||
class MyUpgrade2(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen position="center,center" size="900,450" title="NeoBoot">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
|
||||
else:
|
||||
skin = '<screen position="center,center" size="400,200" title="NeoBoot">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label(_('[NeoBoot]Prosze czeka\xc4\x87, aktualizacja w toku...'))
|
||||
self.activityTimer = eTimer()
|
||||
self.activityTimer.timeout.get().append(self.updateInfo)
|
||||
self.onShow.append(self.startShow)
|
||||
|
||||
def startShow(self):
|
||||
self.activityTimer.start(10)
|
||||
|
||||
def updateInfo(self):
|
||||
self.activityTimer.stop()
|
||||
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
|
||||
mypath2 = f2.readline().strip()
|
||||
f2.close()
|
||||
if mypath2 != 'Flash':
|
||||
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash STB'))
|
||||
self.close()
|
||||
else:
|
||||
for fn in listdir('/media/neoboot/ImageBoot'):
|
||||
dirfile = '/media/neoboot/ImageBoot/' + fn
|
||||
if isdir(dirfile):
|
||||
target = dirfile + '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot'
|
||||
cmd = 'rm -r ' + target + ' > /dev/null 2>&1'
|
||||
system(cmd)
|
||||
cmd = 'cp -r /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot ' + target
|
||||
system(cmd)
|
||||
|
||||
out = open('/media/neoboot/ImageBoot/.version', 'w')
|
||||
out.write(PLUGINVERSION)
|
||||
out.close()
|
||||
self.myClose(_('NeoBoot successfully updated. You can restart the plugin now.\nHave fun !!'))
|
||||
|
||||
def myClose(self, message):
|
||||
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
|
||||
class MBDeleUpload(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="NeoBoot - wyczy\xc5\x9b\xc4\x87 pobrane image">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Czy na pewno chcesz usun\xc4\x85\xc4\x87 obraz z katalogu ImagesUpload ?\n\nJe\xc5\x9bli wybierzesz czerwony przycisk na pilocie to usuniesz wszystkie obrazy ZIP z katalogu ImagesUpload')
|
||||
self['key_red'] = Label(_('Wyczy\xc5\x9b\xc4\x87'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.usunup})
|
||||
|
||||
def usunup(self):
|
||||
message = _('Czy napewno chcesz wyczy\xc5\x9bci\xc4\x87')
|
||||
ybox = self.session.openWithCallback(self.pedeleup, MessageBox, message, MessageBox.TYPE_YESNO)
|
||||
ybox.setTitle(_('Czyszenie z pobranych obraz\xc3\xb3w'))
|
||||
|
||||
def pedeleup(self, answer):
|
||||
if answer is True:
|
||||
cmd = "echo -e '\n\n%s '" % _('Czekaj usuwam.....')
|
||||
cmd1 = 'rm /media/neoboot/ImagesUpload/*.zip'
|
||||
self.session.open(Console, _('Usuwanie pobranych obraz\xc3\xb3w....'), [cmd, cmd1])
|
||||
self.close()
|
||||
|
||||
|
||||
class BackupMultiboot(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="590,330" title="Backup NeoBoot">\n\t\t<widget source="list" render="Listbox" position="10,16" size="570,300" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (520, 36), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (36, 36), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 22)],\n \t\t\t"itemHeight": 36\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self.list = []
|
||||
self['list'] = List(self.list)
|
||||
self.downList()
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
|
||||
'back': self.close})
|
||||
|
||||
def downList(self):
|
||||
self.list = []
|
||||
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/ok.png'
|
||||
png = LoadPixmap(mypixmap)
|
||||
res = (_('Wykonac kompletna kopie NeoBoota ?'), png, 0)
|
||||
self.list.append(res)
|
||||
self['list'].list = self.list
|
||||
|
||||
def KeyOk(self):
|
||||
self.sel = self['list'].getCurrent()
|
||||
if self.sel:
|
||||
self.sel = self.sel[2]
|
||||
if self.sel == 0:
|
||||
cmd = 'sh /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/NeoBoot.sh -i'
|
||||
self.session.open(Console, _('Kopia zapasowa zostanie zapisana w lokalizacji /media/neoboot. Trwa wykonywanie....'), [cmd])
|
||||
self.close()
|
||||
|
||||
|
||||
class SetPasswd(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Czy skasowac haslo ?')
|
||||
self['key_red'] = Label(_('Uruchom'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.passwd})
|
||||
|
||||
def passwd(self):
|
||||
os.system('passwd -d root')
|
||||
restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('GUI needs a restart.\nDo you want to Restart the GUI now?'), MessageBox.TYPE_YESNO)
|
||||
restartbox.setTitle(_('Restart GUI now?'))
|
||||
|
||||
def restartGUI(self, answer):
|
||||
if answer is True:
|
||||
self.session.open(TryQuitMainloop, 3)
|
||||
else:
|
||||
self.close()
|
||||
|
||||
class ReinstallKernel(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Module kernel">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Reinstalacja j\xc4\x85dra.\n\nZainstalowa\xc4\x87 ?')
|
||||
self['key_red'] = Label(_('Instalacja'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.kernel_image})
|
||||
|
||||
def kernel_image(self):
|
||||
if fileExists('/.multinfo'):
|
||||
if myboxname == 'vuuno4k' or myboxname == 'vuultimo4k' or myboxname == 'vusolo4k' or myboxname == 'vuzero4k' or myboxname == 'vuuno4kse' or myboxname == 'vuunose4k' or myboxname == 'bm750' or myboxname == 'vuduo' or myboxname == 'vuuno' or myboxname == 'vuultimo' or myboxname == 'vusolo' or myboxname == 'vusolo2' or myboxname == 'vusolose' or myboxname == 'vuduo2' or myboxname == 'vuzero' or myboxname == 'vuduo':
|
||||
cmd1 = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (vumodel, vumodel)
|
||||
self.session.open(Console, _('NeoBoot....'), [cmd1])
|
||||
elif myboxname == 'sf4008' :
|
||||
cmd1 = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (boxtype, boxtype)
|
||||
self.session.open(Console, _('NeoBoot....'), [cmd1])
|
||||
else:
|
||||
self.messagebox = self.session.open(MessageBox, _('Canceled ... NeoBoot will not work properly !!! NeoBoot works only on VuPlus box !!!'), MessageBox.TYPE_INFO, 20)
|
||||
|
||||
self.messagebox = self.session.open(MessageBox, _('NeoBoot installd kernel-image...'), MessageBox.TYPE_INFO, 4)
|
||||
self.close()
|
||||
else:
|
||||
if myboxname == 'vuuno4k' or myboxname == 'vuultimo4k' or myboxname == 'vusolo4k' or myboxname == 'bm750' or myboxname == 'vuduo' or myboxname == 'vuuno' or myboxname == 'vuultimo' or myboxname == 'vusolo' or myboxname == 'vusolo2' or myboxname == 'vusolose' or myboxname == 'vuduo2' or myboxname == 'vuzero' or myboxname == 'vuduo':
|
||||
cmd1 = 'opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (vumodel, vumodel)
|
||||
self.session.open(Console, _('NeoBoot....'), [cmd1])
|
||||
elif myboxname == 'sf4008' :
|
||||
cmd1 = 'opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (boxtype, boxtype)
|
||||
self.session.open(Console, _('NeoBoot....'), [cmd1])
|
||||
else:
|
||||
self.messagebox = self.session.open(MessageBox, _('Canceled ... NeoBoot will not work properly !!! NeoBoot works only on VuPlus box !!!'), MessageBox.TYPE_INFO, 20)
|
||||
|
||||
self.messagebox = self.session.open(MessageBox, _('NeoBoot installd kernel-image...'), MessageBox.TYPE_INFO, 4)
|
||||
self.close()
|
||||
out = open('/media/neoboot/ImagesUpload/.kernel/used_flash_kernel', 'w')
|
||||
out.write('Used Kernel: Flash')
|
||||
out.close()
|
||||
|
||||
class ListTv(Screen):
|
||||
__module__ = __name__
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen position="center,center" size="900,450" title="NeoBoot">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
|
||||
else:
|
||||
skin = '<screen position="center,center" size="400,200" title="NeoBoot">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label(_('NeoBoot: Upgrading in progress\nPlease wait...'))
|
||||
self.activityTimer = eTimer()
|
||||
self.activityTimer.timeout.get().append(self.updateInfo)
|
||||
self.onShow.append(self.startShow)
|
||||
|
||||
def startShow(self):
|
||||
self.activityTimer.start(10)
|
||||
|
||||
def updateInfo(self):
|
||||
self.activityTimer.stop()
|
||||
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
|
||||
mypath2 = f2.readline().strip()
|
||||
f2.close()
|
||||
if mypath2 != 'Flash':
|
||||
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.'))
|
||||
self.close()
|
||||
else:
|
||||
os.system('mv /etc/enigma2 /etc/enigma2.tmp')
|
||||
os.system('mkdir -p /etc/enigma2')
|
||||
os.system('cp -f /etc/enigma2.tmp/*.tv /etc/enigma2')
|
||||
os.system('cp -f /etc/enigma2.tmp/*.radio /etc/enigma2')
|
||||
os.system('cp -f /etc/enigma2.tmp/lamedb /etc/enigma2')
|
||||
for fn in listdir('/media/neoboot/ImageBoot'):
|
||||
dirfile = '/media/neoboot/ImageBoot/' + fn
|
||||
if isdir(dirfile):
|
||||
target = dirfile + '/etc/'
|
||||
cmd = 'cp -r -f /etc/enigma2 ' + target
|
||||
system(cmd)
|
||||
target1 = dirfile + '/etc/tuxbox'
|
||||
cmd = 'cp -r -f /etc/tuxbox/satellites.xml ' + target1
|
||||
system(cmd)
|
||||
target2 = dirfile + '/etc/tuxbox'
|
||||
cmd = 'cp -r -f /etc/tuxbox/terrestrial.xml ' + target2
|
||||
system(cmd)
|
||||
|
||||
os.system('rm -f -R /etc/enigma2')
|
||||
os.system('mv /etc/enigma2.tmp /etc/enigma2/')
|
||||
self.myClose(_('NeoBoot successfully updated list tv.\nHave fun !!'))
|
||||
|
||||
def myClose(self, message):
|
||||
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
|
||||
|
||||
class IPTVPlayer(Screen):
|
||||
__module__ = __name__
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen position="center,center" size="900,450" title="IPTVPlayer">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
|
||||
else:
|
||||
skin = '<screen position="center,center" size="400,200" title="IPTVPlayer">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label(_('NeoBoot: Upgrading in progress\nPlease wait...'))
|
||||
self.activityTimer = eTimer()
|
||||
self.activityTimer.timeout.get().append(self.updateInfo)
|
||||
self.onShow.append(self.startShow)
|
||||
|
||||
def startShow(self):
|
||||
self.activityTimer.start(10)
|
||||
|
||||
def updateInfo(self):
|
||||
self.activityTimer.stop()
|
||||
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
|
||||
mypath2 = f2.readline().strip()
|
||||
f2.close()
|
||||
if mypath2 != 'Flash':
|
||||
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.'))
|
||||
self.close()
|
||||
elif not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer'):
|
||||
self.myClose(_('Sorry, IPTVPlayer not found.'))
|
||||
self.close()
|
||||
else:
|
||||
for fn in listdir('/media/neoboot/ImageBoot'):
|
||||
dirfile = '/media/neoboot/ImageBoot/' + fn
|
||||
if isdir(dirfile):
|
||||
target = dirfile + '/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer'
|
||||
cmd = 'rm -r ' + target + ' > /dev/null 2>&1'
|
||||
system(cmd)
|
||||
cmd = 'cp -r /usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer ' + target
|
||||
system(cmd)
|
||||
|
||||
self.myClose(_('NeoBoot successfully updated IPTVPlayer.\nHave fun !!'))
|
||||
|
||||
def myClose(self, message):
|
||||
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
|
||||
self.close()
|
||||
|
||||
class SetPasswd(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Czy skasowac haslo ?')
|
||||
self['key_red'] = Label(_('Uruchom'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.passwd})
|
||||
|
||||
def passwd(self):
|
||||
os.system('passwd -d root')
|
||||
restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('GUI needs a restart.\nDo you want to Restart the GUI now?'), MessageBox.TYPE_YESNO)
|
||||
restartbox.setTitle(_('Restart GUI now?'))
|
||||
|
||||
def restartGUI(self, answer):
|
||||
if answer is True:
|
||||
self.session.open(TryQuitMainloop, 3)
|
||||
else:
|
||||
self.close()
|
||||
|
||||
class CheckInstall(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Sprawdzanie poprawnosci zainstalwoanych modulow dla NeoBoota')
|
||||
self['key_red'] = Label(_('Uruchom'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.neocheck})
|
||||
|
||||
def neocheck(self):
|
||||
try:
|
||||
cmd = ' /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/module_neoboot.sh -i'
|
||||
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd,
|
||||
cmd])
|
||||
self.close()
|
||||
|
||||
except:
|
||||
False
|
||||
|
||||
class VolatileMedia(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="Zablokowac pomoc w montowaniu dyskow ?">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('Haszowanie montowania ?')
|
||||
self['key_red'] = Label(_('Uruchom'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.Media})
|
||||
|
||||
def Media(self):
|
||||
box = self.session.openWithCallback(self.restartGUI, MessageBox, _('Zmienic montowanie ?\n\nWybierz Tak by zmienic.\nWybierz Nie by porzucic zmiany lub przywrocic.'), MessageBox.TYPE_YESNO)
|
||||
box.setTitle(_('MONTOWANIE '))
|
||||
|
||||
def restartGUI(self, answer):
|
||||
if answer is True:
|
||||
try:
|
||||
if fileExists('/etc/init.d/volatile-media.sh'):
|
||||
cmd = ' mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org'
|
||||
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd])
|
||||
self.close()
|
||||
#else:
|
||||
self.messagebox = self.session.open(MessageBox, _('Plik volatile-media.sh w lokalizacji /etc/init.d/\nzostal zmianiony na volatile-media.sh.org'), MessageBox.TYPE_INFO, 10)
|
||||
except:
|
||||
False
|
||||
else:
|
||||
try:
|
||||
if fileExists('/etc/init.d/volatile-media.sh.org'):
|
||||
cmd = ' mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh'
|
||||
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd])
|
||||
self.close()
|
||||
#else:
|
||||
self.messagebox = self.session.open(MessageBox, _('Plik volatile-media.sh.org w lokalizacji /etc/init.d/\nzostal zmianiony na org. naze volatile-media.sh'), MessageBox.TYPE_INFO, 10)
|
||||
except:
|
||||
False
|
||||
|
||||
|
||||
|
||||
class MultiBootMyHelp(Screen):
|
||||
screenwidth = getDesktop(0).size().width()
|
||||
if screenwidth and screenwidth == 1920:
|
||||
skin = '<screen name=" NeoBoot" position="center,center" size="1920,1080" title="NeoBoot - Opis" flags="wfNoBorder">\n<eLabel text="INFORMACJE NeoBoot" font="Regular; 35" position="69,66" size="1777,96" halign="center" foregroundColor="yellow" backgroundColor="black" transparent="1" /><widget name="lab1" position="69,162" size="1780,885" font="Regular;35" />\n</screen>'
|
||||
else:
|
||||
skin = '<screen name=" NeoBoot" position="center,center" size="1280,720" title="NeoBoot - Opis">\n<widget name="lab1" position="18,19" size="1249,615" font="Regular;20" />\n</screen>'
|
||||
__module__ = __name__
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = ScrollLabel('')
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'DirectionActions'], {'back': self.close,
|
||||
'ok': self.close,
|
||||
'up': self['lab1'].pageUp,
|
||||
'left': self['lab1'].pageUp,
|
||||
'down': self['lab1'].pageDown,
|
||||
'right': self['lab1'].pageDown})
|
||||
self['lab1'].hide()
|
||||
self.updatetext()
|
||||
|
||||
def updatetext(self):
|
||||
message = ''
|
||||
message += 'NeoBoot Wersja ' + PLUGINVERSION + ' Enigma2\n\n'
|
||||
message += 'NeoBoot opiera si\xc4\x99 na EGAMIBoot < mod by gutosie >\n\n'
|
||||
message += 'Autor EGAMIBoota zezwolil na rozwijanie i edycje NeoBoot - Thanks/Dzi\xc4\x99ki\n\n'
|
||||
message += 'nfidump by gutemine - Thanks/Dzi\xc4\x99ki\n\n'
|
||||
message += 'ubi_reader by Jason Pruitt - Thanks/Dzi\xc4\x99ki\n\n'
|
||||
message += 'T\xc5\x82umaczenie: gutosie\n\n'
|
||||
message += _('Podziekowania wszystkim tu niewspomnianym za udzielenie pomocy w ulepszaniu NeoBoota \n\n')
|
||||
message += _('Udanej zabawy :)\n\n')
|
||||
self['lab1'].show()
|
||||
self['lab1'].setText(message)
|
||||
|
||||
|
||||
class TunerInfo(Screen):
|
||||
__module__ = __name__
|
||||
skin = '\n\t<screen position="center,center" size="700,300" title="NeoBoot - Tunery Sat">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
|
||||
|
||||
def __init__(self, session):
|
||||
Screen.__init__(self, session)
|
||||
self['lab1'] = Label('NeoBoot: Lista wspieranych modeli STB.')
|
||||
self['key_red'] = Label(_('Uruchom - Red'))
|
||||
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
|
||||
'red': self.iNFO})
|
||||
|
||||
def iNFO(self):
|
||||
try:
|
||||
cmd = ' cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.info'
|
||||
cmd1 = ''
|
||||
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd,
|
||||
cmd1])
|
||||
self.close()
|
||||
|
||||
except:
|
||||
False
|
||||
|
||||
|
||||
|
||||
def myboot(session, **kwargs):
|
||||
session.open(MBTools)
|
||||
|
||||
|
||||
def Plugins(path, **kwargs):
|
||||
global pluginpath
|
||||
pluginpath = path
|
||||
return PluginDescriptor(name='NeoBoot', description='MENU NeoBoot', icon=None, where=PluginDescriptor.WHERE_PLUGINMENU, fnc=myboot)
|
||||
BIN
NeoBoot/images/1chan_p1_bar.png
Normal file
|
After Width: | Height: | Size: 431 B |
BIN
NeoBoot/images/1channel_sel.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
NeoBoot/images/1frame_base-fs8.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
NeoBoot/images/1matrix.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
NeoBoot/images/arrowdown.png
Normal file
|
After Width: | Height: | Size: 854 B |
BIN
NeoBoot/images/arrowleft.png
Normal file
|
After Width: | Height: | Size: 310 B |
BIN
NeoBoot/images/arrowup.png
Normal file
|
After Width: | Height: | Size: 868 B |
BIN
NeoBoot/images/baza.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
NeoBoot/images/bg500.png
Normal file
|
After Width: | Height: | Size: 604 B |
BIN
NeoBoot/images/blue.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
NeoBoot/images/blue25.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
NeoBoot/images/bluecor.png
Normal file
|
After Width: | Height: | Size: 331 B |
BIN
NeoBoot/images/border_menu.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
NeoBoot/images/border_menu1.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
NeoBoot/images/button.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
NeoBoot/images/button880x70.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
NeoBoot/images/chan_p1_bar.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
NeoBoot/images/chan_p_bar.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
NeoBoot/images/channel_sel.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
NeoBoot/images/dev_cf.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
NeoBoot/images/dev_hdd.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
NeoBoot/images/dev_sd.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
NeoBoot/images/dev_usb.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
NeoBoot/images/div-v.png
Normal file
|
After Width: | Height: | Size: 154 B |
BIN
NeoBoot/images/dot.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
NeoBoot/images/dot1.png
Normal file
|
After Width: | Height: | Size: 624 B |
BIN
NeoBoot/images/frame1250x850.png
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
NeoBoot/images/frame835x500.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
NeoBoot/images/frame_base-fs8.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
NeoBoot/images/green25.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
NeoBoot/images/greencor.png
Normal file
|
After Width: | Height: | Size: 331 B |
BIN
NeoBoot/images/key_1.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
NeoBoot/images/key_2.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
NeoBoot/images/key_3.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
NeoBoot/images/key_4.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
NeoBoot/images/linia.png
Normal file
|
After Width: | Height: | Size: 1001 B |
BIN
NeoBoot/images/listselection1060x42-fs8.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
NeoBoot/images/listselection1150x50-fs8.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
NeoBoot/images/listselection1195x50.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
NeoBoot/images/listselection300x25-fs8.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
NeoBoot/images/listselection500x40-fs8.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
NeoBoot/images/listselection700x32-fs8.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
NeoBoot/images/listselection800x35.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
NeoBoot/images/matrix.png
Normal file
|
After Width: | Height: | Size: 255 KiB |
BIN
NeoBoot/images/matrixhd.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
NeoBoot/images/mb.png
Normal file
|
After Width: | Height: | Size: 946 B |
BIN
NeoBoot/images/menu.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
NeoBoot/images/numer.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
NeoBoot/images/numery.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
NeoBoot/images/ok.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
NeoBoot/images/pasek.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
NeoBoot/images/pasek2.png
Normal file
|
After Width: | Height: | Size: 461 B |
BIN
NeoBoot/images/ping.png
Normal file
|
After Width: | Height: | Size: 228 B |
BIN
NeoBoot/images/red-big.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
NeoBoot/images/red25.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
NeoBoot/images/redcor.png
Normal file
|
After Width: | Height: | Size: 331 B |
BIN
NeoBoot/images/scroll.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
NeoBoot/images/sel500.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
NeoBoot/images/sel660x35.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
NeoBoot/images/selektor.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
NeoBoot/images/selektor1.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
NeoBoot/images/sep.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
NeoBoot/images/separator.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
NeoBoot/images/separator2.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
NeoBoot/images/skin.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
NeoBoot/images/transp.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
NeoBoot/images/transp1.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
NeoBoot/images/updown.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
NeoBoot/images/usb.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
NeoBoot/images/yellow25.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
NeoBoot/images/yellowcor.png
Normal file
|
After Width: | Height: | Size: 331 B |