From b8c927a2a68d98803060dfcada6c539d3e3bd1ef Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Sun, 1 Apr 2018 14:20:19 +0100
Subject: [PATCH] Import video to pertube from file

---
 src/freedombone-app-peertube | 114 +++++++++++++++++++++++++++--------
 1 file changed, 90 insertions(+), 24 deletions(-)

diff --git a/src/freedombone-app-peertube b/src/freedombone-app-peertube
index af984e8f4..63c246877 100755
--- a/src/freedombone-app-peertube
+++ b/src/freedombone-app-peertube
@@ -149,56 +149,120 @@ function peertube_disable_signups {
     systemctl restart peertube
 }
 
+function peertube_import_from_file {
+    read_config_param MY_USERNAME
+    read_config_param PEERTUBE_DOMAIN_NAME
+    read_config_param ONION_ONLY
+
+    data2=$(mktemp 2>/dev/null)
+    dialog --backtitle $"Freedombone Control Panel" \
+           --title $"Import Video from file" \
+           --form $"Enter your PeerTube login details and video title" 10 65 4 \
+           $"Username:" 1 1 "$MY_USERNAME" 1 18 16 15 \
+           $"Password:" 2 1 "" 2 18 40 10000 \
+           $"Video Title:" 3 1 "" 3 18 40 1000 \
+           $"NSFW:" 4 1 $"no" 4 18 4 4 \
+           2> "$data2"
+    sel=$?
+    case $sel in
+        1) rm -f "$data2"
+           return;;
+        255) rm -f "$data2"
+             return;;
+    esac
+    peertubeuser=$(sed -n 1p < "$data2")
+    peertubepassword=$(sed -n 2p < "$data2")
+    peertubetitle=$(sed -n 3p < "$data2")
+    peertubensfw=$(sed -n 4p < "$data2")
+    rm -f "$data2"
+
+    peertubedomain="http://localhost:${PEERTUBE_PORT}"
+
+    data2=$(mktemp 2>/dev/null)
+    dialog --title "Choose the video file (select with spacebar)" --fselect "/home/$MY_USERNAME/" 30 60 2> "$data2"
+    selected_file=$(cat "$data2")
+    rm -f "$data2"
+    if [ ! "$selected_file" ]; then
+        return
+    fi
+    if [[ "$selected_file" != *'.ogv' && "$selected_file" != *'.mp4' && "$selected_file" != *'.webm' ]]; then
+        dialog --title $"Import video from file" \
+               --msgbox $"The video should be in ogv, mp4 or webm format" 6 75
+        return
+    fi
+
+    cd $PEERTUBE_DIR || exit 32468356
+    import_script=$PEERTUBE_DIR/dist/server/tools/upload.js
+    if [ ! -f $import_script ]; then
+        dialog --title $"Import videos" \
+               --msgbox $"upload script was not found" 6 75
+        return
+    fi
+
+    nsfwstr=
+    if [[ "$peertubensfw" == *'y'* || "$peertubensfw" == *'Y'* ]]; then
+        nsfwstr='--nsfw'
+    fi
+
+    titlestr=
+    if [ "$peertubetitle" ]; then
+        titlestr="-n \"$peertubetitle\""
+    fi
+
+    clear
+    node $import_script $nsfwstr "$titlestr" -u "$peertubedomain" -U "$peertubeuser" --password "$peertubepassword" -f "$selected_file"
+
+    dialog --title $"Import video from file" \
+           --msgbox $"Video imported from $selected_file" 6 75
+}
+
 function peertube_import_videos {
     read_config_param MY_USERNAME
     read_config_param PEERTUBE_DOMAIN_NAME
     read_config_param ONION_ONLY
 
-    data=$(mktemp 2>/dev/null)
+    data2=$(mktemp 2>/dev/null)
     dialog --backtitle $"Freedombone Control Panel" \
-           --title $"Import Videos" \
-           --form "Enter a channel of video URL for YouTube/Vimeo/Dailymotion" 10 75 4 \
+           --title $"Import Videos from legacy sites" \
+           --form $"Enter a channel of video URL for YouTube/Vimeo/Dailymotion" 10 75 4 \
            $"Username:" 1 1 "$MY_USERNAME" 1 28 16 15 \
            $"Password:" 2 1 "" 2 28 40 10000 \
            $"Video/Channel URL:" 3 1 "" 3 28 40 10000 \
-           2> "$data"
+           2> "$data2"
     sel=$?
     case $sel in
-        1) rm -f "$data"
+        1) rm -f "$data2"
            return;;
-        255) rm -f "$data"
+        255) rm -f "$data2"
              return;;
     esac
-    peertubeuser=$(sed -n 1p < "$data")
-    peertubepassword=$(sed -n 2p < "$data")
-    video_url=$(sed -n 3p < "$data")
-    rm -f "$data"
+    peertubeuser=$(sed -n 1p < "$data2")
+    peertubepassword=$(sed -n 2p < "$data2")
+    video_url=$(sed -n 3p < "$data2")
+    rm -f "$data2"
 
-    peertubedomain="https://$PEERTUBE_DOMAIN_NAME"
-    if [[ "$ONION_ONLY" != 'no' ]]; then
-        peertubedomain="http://$(cat /var/lib/tor/hidden_service_peertube/hostname)"
-    fi
+    peertubedomain="http://localhost:${PEERTUBE_PORT}"
 
     if [ ${#peertubeuser} -lt 3 ]; then
-        dialog --title $"Import videos" \
+        dialog --title $"Import videos from legacy sites" \
                --msgbox $"Username was not valid" 6 75
         return
     fi
 
     if [ ${#peertubepassword} -lt 3 ]; then
-        dialog --title $"Import videos" \
+        dialog --title $"Import videos from legacy sites" \
                --msgbox $"Password was not valid" 6 75
         return
     fi
 
     if [[ "$video_url" == *' '* || "$video_url" == *','* || "$video_url" == *'@'* ]]; then
-        dialog --title $"Import videos" \
+        dialog --title $"Import videos from legacy sites" \
                --msgbox $"Video/channel URL was not valid" 6 75
         return
     fi
 
     if [ ${#video_url} -lt 8 ]; then
-        dialog --title $"Import videos" \
+        dialog --title $"Import videos from legacy sites" \
                --msgbox $"Video/channel URL was not valid" 6 75
         return
     fi
@@ -206,7 +270,7 @@ function peertube_import_videos {
     cd $PEERTUBE_DIR || exit 32468356
     import_script=$PEERTUBE_DIR/dist/server/tools/import-videos.js
     if [ ! -f $import_script ]; then
-        dialog --title $"Import videos" \
+        dialog --title $"Import videos from legacy sites" \
                --msgbox $"import-videos script was not found" 6 75
         return
     fi
@@ -214,7 +278,7 @@ function peertube_import_videos {
     clear
     node $import_script -u "$peertubedomain" -U "$peertubeuser" --password "$peertubepassword" -t "$video_url"
 
-    dialog --title $"Import videos" \
+    dialog --title $"Import videos from legacy sites" \
            --msgbox $"Video/s imported from $video_url" 6 75
 }
 
@@ -224,11 +288,12 @@ function configure_interactive_peertube {
         data=$(mktemp 2>/dev/null)
         dialog --backtitle $"Freedombone Control Panel" \
                --title $"PeerTube" \
-               --radiolist $"Choose an operation:" 11 70 5 \
+               --radiolist $"Choose an operation:" 12 70 6 \
                1 $"Set administrator email address" off \
                2 $"Disable or enable signups" off \
-               3 $"Import videos" off \
-               4 $"Exit" on 2> "$data"
+               3 $"Import videos from YouTube/Vimeo/Dailymotion" off \
+               4 $"Import video from file" off \
+               5 $"Exit" on 2> "$data"
         sel=$?
         case $sel in
             1) break;;
@@ -238,7 +303,8 @@ function configure_interactive_peertube {
             1) peertube_set_admin_email;;
             2) peertube_disable_signups;;
             3) peertube_import_videos;;
-            4) rm -f "$data"
+            4) peertube_import_from_file;;
+            5) rm -f "$data"
                break;;
         esac
         rm -f "$data"
-- 
GitLab