Announcement

Collapse
No announcement yet.

The Ultimate Google Drive Automation Guide

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • The Ultimate Google Drive Automation Guide

    SYNOPSIS
    This guide details the steps required to automate the synchronization of movies and TV shows to Google Drive.


    PREREQUISITES
    1. Seedbox with root access

    2. ruTorrent/rTorrent

    3. Autotools ruTorrent plugin



    SECTIONS
    Section 1: Grive Installation

    Section 2: Filebot Installation

    Section 3: Autotools & Script Configuration

    Section 4: Google Drive Configuration

    Bonus Section: STRM Creation



    UPDATE 30/07/17

    Redundant guide. As Rclone has developed and evolved, it has overtaken Grive2 in performance, consequently I don't recommend this guide. See my post here for updated scripts:

    [RELEASE] gdrive - Google Drive Video/Music Add-on



    If you wish to skip Sections 1-3, you may run this script (for Ubuntu/Debian users).

    Login as root and paste this command in your terminal:


    Code:
    wget --no-check-certificate https://raw.githubusercontent.com/SteveMalso/RuTorrent-Grive/master/drivescript.sh && bash drivescript.sh



    Section 1: Grive Installation



    I've used Grive(2), Rclone and Drive and found that Grive generates more than triple the upload speed on my seedbox compared to the other clients. To download and install Grive, perform the following steps.

    In your terminal punch in these commands:


    Code:
    sudo apt-get -y install git cmake build-essential libgcrypt11-dev libyajl-dev libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev
    
    cd && git clone https://github.com/vitalif/grive2.git && cd grive2 && mkdir build && cd build && cmake .. && make -j4 && sudo make install && cd && rm -rf grive2

    Create a folder that will be used to temporary store files that will be uploaded to your Google Drive by entering this command into your terminal:

    Code:
    cd && mkdir gdrive && cd gdrive && grive -a

    You will be asked to paste a link into your browser and input the authentication code. After you have entered your code, press Ctrl + C when "Reading remote server file list" displays.






    Section 2: Filebot Installation



    The following installation guide applies to Ubuntu/Debian.


    Install Java 8 by pasting this command in your terminal:

    Code:
    sudo add-apt-repository -y ppa:webupd8team/java && sudo apt-get -y update && sudo apt-get -y install oracle-java8-installer

    Install Filebot by pasting this command in your terminal:


    Code:
    [[ `uname -m` = "i686" ]] && wget -O filebot-i386.deb 'http://filebot.sourceforge.net/download.php?type=deb&arch=i386' || wget -O filebot-amd64.deb 'http://filebot.sourceforge.net/download.php?type=deb&arch=amd64' && sudo dpkg --force-depends -i filebot-*.deb && rm filebot-*.deb




    Section 3: Autotools & Script Configuration



    Navigate to your autotools settings within rutorrent and enable "automove if torrent's label matches"

    Change the operation type to: Move

    Check "add torrent's label to path"

    See my settings in the spoiler:

    Spoiler Alert!




    Paste the following in your terminal:


    Code:
    cd && touch gdrive.sh && chmod +x gdrive.sh && nano gdrive.sh


    Paste the following code in the file:

    Code:
    #!/bin/bash
    
    cd "$sync_folder"
    while [ -f queue ]; do sleep 1; done
    
    if [ "$skipped" == "no" ]; then
       readarray -t filebot <<< "$renamed"
       for folder in "${filebot[@]}"; do
         grive -s "$folder"
         rm -rf "$folder"
       done
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       readarray -t extractedfiles <<< "$(find "$base_path" -name '*.rar' -or -name '*.zip' | rev | cut -f 2- -d '.' | rev)"
       rm -rf "${extractedfiles[@]}"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
    fi
    
    if [[ -f "$base_path/$name" ]]; then
     if [[ "$name" = *.rar || "$name" = *.zip ]] && [[ "$label" =~ "$movie_label" ]]; then
       mkdir "symlinks"
       mkdir "$name (MV)"
       unrar e -r -o- "$name" "$sync_folder/symlinks"
       unzip "$name" -d "$sync_folder/symlinks"
       unrar e -r -o- "$sync_folder/symlinks/*.rar" "$sync_folder/symlinks"
       unzip "$sync_folder/symlinks/*.zip" -d "$sync_folder/symlinks"
       find "$sync_folder/symlinks" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (MV)" \;
       grive -s "$name (MV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "symlinks"   
       rm -rf "$name (MV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
     elif [[ "$name" = *.rar || "$name" = *.zip ]] && [[ "$label" =~ "$tv_label" ]]; then
       mkdir "symlinks"
       mkdir "$name (TV)"
       unrar e -r -o- "$name" "$sync_folder/symlinks"
       unzip "$name" -d "$sync_folder/symlinks"
       unrar e -r -o- "$sync_folder/symlinks/*.rar" "$sync_folder/symlinks"
       unzip "$sync_folder/symlinks/*.zip" -d "$sync_folder/symlinks"
       find "$sync_folder/symlinks" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (TV)" \;
       grive -s "$name (TV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "symlinks"   
       rm -rf "$name (TV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
     elif [[ "$name" != *.rar || "$name" != *.zip ]] && [[ "$label" =~ "$movie_label" ]]; then
       mkdir "$name (MV)"
       ln -s "$base_path/$name" "$sync_folder/$name (MV)"
       grive -s "$name (MV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "$name (MV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
     elif [[ "$name" != *.rar || "$name" != *.zip ]] && [[ "$label" =~ "$tv_label" ]]; then
       mkdir "$name (TV)"
       ln -s "$base_path/$name" "$sync_folder/$name (TV)"
       grive -s "$name (TV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "$name (TV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
    fi
    fi
    
    if [[ -d "$base_path" && "$label" =~ "$movie_label" ]]; then
       mkdir "symlinks"
       mkdir "$name (MV)"
       unrar e -r -o- "$base_path/*.rar" "$sync_folder/symlinks"
       unzip "$base_path/*.zip" -d "$sync_folder/symlinks"
       find "$sync_folder/symlinks" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (MV)" \;
       find "$base_path" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (MV)" \;
       grive -s "$name (MV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "symlinks"
       rm -rf "$name (MV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit 
     elif [[ -d "$base_path" && "$label" =~ "$tv_label" ]]; then
       mkdir "symlinks"
       mkdir "$name (TV)"
       unrar e -r -o- "$base_path/*.rar" "$sync_folder/symlinks"
       unzip "$base_path/*.zip" -d "$sync_folder/symlinks"
       find "$sync_folder/symlinks" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (TV)" \;
       find "$base_path" -not -type d -not -name '*.zip' -not -name '*.r*' -exec ln -s {} "$sync_folder/$name (TV)" \;
       grive -s "$name (TV)"
       mkdir "Upload Completed"
       grive -s "Upload Completed"
       rm -rf "Upload Completed"
       rm -rf "symlinks"
       rm -rf "$name (TV)"
       echo "sleep 60 && rm queue" >> queue
       bash queue &
       exit
    fi


    Paste the following in your terminal:

    Code:
    cd && mkdir gqueue && touch gqueue.sh && chmod +x gqueue.sh && nano gqueue.sh


    Paste the following code in the file:

    Code:
    #!/bin/bash
    
    export sync_folder=$1
    export skipped=$2
    export base_path=$3
    export name=$4
    export label=$5
    export movie_label=$6
    export tv_label=$7
    export renamed=$8
    
    while pgrep -fl gdrive.sh; do sleep 60; done
    mv ~/gqueue/* ~/gdrive
    bash ~/gdrive.sh &


    We need to edit move.php that's found inside the autotools sub-directory of rutorrent. To do this enter the command below. If it doesn't work for you, your path to move.php is different to mine. Use this command to locate it:
    sudo find / -name move.php


    Code:
    sudo nano /var/www/rutorrent/plugins/autotools/move.php


    Copy and paste the code below at the end of move.php, just above "
    Debug("--- end ---");"
    Change the values in the variables (coloured yellow
    ) to reflect your own data.

    Code:
    $tv_label = "[COLOR=#ffff00]TV[/COLOR]";
    $movie_label = "[COLOR=#ffff00]Movie[/COLOR]";
    $sync_folder = "[COLOR=#ffff00]/home/yourusername[/COLOR]/gdrive";
    $bash_script = "[COLOR=#ffff00]/home/yourusername[/COLOR]/gqueue.sh";
    $queue_folder = "[COLOR=#ffff00]/home/yourusername[/COLOR]/gqueue";
    
    if (strpos($base_path, $movie_label) !== false || strpos($base_path, $tv_label) !== false) {
       $filebot = shell_exec("filebot -script fn:amc --output \"$queue_folder\" --action symlink --conflict skip -non-strict --def unsorted=y artwork=n excludeList=\".excludes\" ut_dir=\"$base_path\" ut_kind=\"multi\" ut_title=\"$name\" ut_label=\"$label\" movieFormat=\"{n} ({y}) (MV)/{n} - ({fn})\" seriesFormat=\"{n} (TV)/Season {s.pad(2)}/Episode {e.pad(2)}/{s00e00} - ({fn})\" exec=\"Operation Successful {folder}\"");
    if (strpos($filebot, "Execute: Operation Successful") === false) { 
       $skipped = "yes";
       exec("bash \"$bash_script\" \"$sync_folder\" \"$skipped\" \"$base_path\" \"$name\" \"$label\" \"$movie_label\" \"$tv_label\" > /dev/null 2>&1 &");
    }  else {
       $skipped = "no";
       $renamed1 = explode("\n", $filebot);
       $renamed2 = preg_grep("/Execute: Operation Successful/", $renamed1);
       $renamed3 = str_replace("Execute: Operation Successful $queue_folder/", "", $renamed2);
       $renamed4 = preg_replace('/\/(.*)/', "", $renamed3);
       $renamed5 = array_unique($renamed4);
       $renamed6 = implode("\n", $renamed5);
       exec("bash \"$bash_script\" \"$sync_folder\" \"$skipped\" \"$base_path\" \"$name\" \"$label\" \"$movie_label\" \"$tv_label\" \"$renamed6\" > /dev/null 2>&1 &");
    }
    }





    Section 4: Google Drive Configuration



    Create a movie and TV folder inside your Google Drive.

    Go to Google Apps Script to create a script. The script below will automatically move folders into your movie and TV folders.


    Copy and paste the code below into your script ensuring that you change the email and folder ID's (
    coloured yellow). A folders ID can be obtained by navigating to the folder in Google Drive and then copying the text in your URL bar that is infront of /folders/

    Example:

    https://drive.google.com/drive/u/1/folders/455CVFCcsU3434

    455CVFCcsU3434 is your folder ID


    Code:
    function MoveFolders() {
      
        var initiate = DriveApp.getRootFolder().getFoldersByName("Upload Completed");
        
      if (initiate.hasNext()) {
        var remove = initiate.next();
        remove.setTrashed(true);    
        var folders = DriveApp.getRootFolder().getFolders();
         
      while (folders.hasNext()) {
        var folder = folders.next();
        var folderName = folder.getName();
    
      if (folderName.indexOf("(MV)") >= 0) {
        var folderRename = folderName.replace(" (MV)", "");
        folder.setName(folderRename);
        var date = new Date().toLocaleString();
        MailApp.sendEmail("[COLOR=#ffff00][email protected][/COLOR]", "Upload Complete: " +folderRename, "Uploaded on " +date);
        var destination = DriveApp.getFolderById("[COLOR=#ffff00]YourMovieFolderID[/COLOR]");
        destination.addFolder(folder);
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
    
        }
        
      if (folderName.indexOf("(TV)") >= 0) {
        var folderRename = folderName.replace(" (TV)", "");
        folder.setName(folderRename);
        var date = new Date().toLocaleString();
        MailApp.sendEmail("[COLOR=#ffff00][email protected][/COLOR]", "Upload Complete: " +folderRename, "Uploaded on " +date);
        var destination = DriveApp.getFolderById("[COLOR=#ffff00]YourTVFolderID[/COLOR]");
        var duplicates1 = destination.getFoldersByName(folderRename);
            
      if (!duplicates1.hasNext()) {
        destination.addFolder(folder);
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
       
        } else {
                  
        var duplicate1 = duplicates1.next();
        var subfolders1 = folder.getFolders();
       
      while (subfolders1.hasNext()) {
        var subfolder1 = subfolders1.next();
        duplicate1.addFolder(subfolder1); 
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
                 
        var duplicates2 = duplicate1.getFoldersByName(subfolder1);
        duplicates2.next();
        
      while (duplicates2.hasNext()) {
        var duplicate2 = duplicates2.next();    
        var subfolders2 = subfolder1.getFolders();
    
      while (subfolders2.hasNext()) {
        var subfolder2 = subfolders2.next();
        duplicate2.addFolder(subfolder2);
        duplicate1.removeFolder(subfolder1); 
        
                  }
                }
              }
            }
          }
        }
      }
    }

    Save your script then navigate to current projects triggers which is represented by a clock icon that is next to a cloud icon. Create a trigger. I have mine running every minute. Save and exit.



    Bonus Section: Kodi Movie/TV Posters Configuration (For GDrive Users)



    Step 1

    Create a TV and movie folder dedicated to storing STRM files in Google Drive.


    Step 2 - Skip this step if you haven't used my scripts before

    For those who have used my scripts in the past, perform this step to create STRM files for your existing TV shows/Movies. Create a google script and paste the script below into it. Change the
    yellow text to reflect your own particulars. Run it once, allow it to finish and then delete it.

    Code:
    function STRMcreation() {
    
        var movieFolders = DriveApp.getFolderById("[COLOR=#ffff00]YourMovieFolderID[/COLOR]").getFolders();
        var strmMovieFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourMovieSTRMFolderID[/COLOR]");
      
      while (movieFolders.hasNext()) {
        var movieFolder = movieFolders.next();
        var movieName = movieFolder.getName();
        var movieFiles = movieFolder.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
    
      while (movieFiles.hasNext()) {
        var movieFile = movieFiles.next(); 
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + movieFile.getId() + "&title=" + movieFile.getName();
        strmMovieFolder.createFile(movieName + ".strm", string, MimeType.PLAIN_TEXT);
       
      }
    }
      
        var tvFolders = DriveApp.getFolderById("[COLOR=#ffff00]YourTVFolderID[/COLOR]").getFolders();
        var strmTvFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourTVSTRMFolderID[/COLOR]");
      
      while (tvFolders.hasNext()) {
        var tvShowFolder = tvFolders.next();
        var tvShow = tvShowFolder.getName();
        var strmTvShowFolder = strmTvFolder.createFolder(tvShow);
    
        var tvSeasonFolders = tvShowFolder.getFolders();
     
      while (tvSeasonFolders.hasNext()) {
        var tvSeasonFolder = tvSeasonFolders.next();
        var tvSeason = tvSeasonFolder.getName();
        var strmSeasonFolder = strmTvShowFolder.createFolder(tvSeason);
        
        var tvEpisodeFolders = tvSeasonFolder.getFolders();
        
      while (tvEpisodeFolders.hasNext()) {
        var tvEpisodeFolder = tvEpisodeFolders.next();
        var tvEpisodeFiles = tvEpisodeFolder.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
            
      while (tvEpisodeFiles.hasNext()) {
        var tvEpisodeFile = tvEpisodeFiles.next();
        var tvEpisode = tvEpisodeFile.getName();
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + tvEpisodeFile.getId() + "&title=" + tvEpisode;
        strmSeasonFolder.createFile(tvEpisode + ".strm", string, MimeType.PLAIN_TEXT);
           
            }        
          }
        }
      }
    }

    Step 3

    Replace the script you created in Section 4 with this script. This script has been modified so that it also creates STRM files. Change the
    yellow text to mirror your own details.


    Code:
        movieFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourMovieFolderID[/COLOR]");
        tvFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourTVFolderID[/COLOR]");
        strmMovieFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourMovieSTRMFolderID[/COLOR]");
        strmTvFolder = DriveApp.getFolderById("[COLOR=#ffff00]YourTVSTRMFolderID[/COLOR]");
        email = "[COLOR=#ffff00][email protected][/COLOR]";
    
    function MoveFolders() {
      
        var initiate = DriveApp.getRootFolder().getFoldersByName("Upload Completed");
        
      if (initiate.hasNext()) {
        var remove = initiate.next();
        remove.setTrashed(true);    
      
        var folders = DriveApp.getRootFolder().getFolders();
        var date = new Date().toLocaleString();
         
      while (folders.hasNext()) {
        var folder = folders.next();
        var folderName = folder.getName();
    
      if (folderName.indexOf("(MV)") >= 0) {
        var folderRename = folderName.replace(" (MV)", "");
        folder.setName(folderRename);
        movieFolder.addFolder(folder);
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
    
        var movieFiles = folder.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
    
      while (movieFiles.hasNext()) {
        var movieFile = movieFiles.next(); 
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + movieFile.getId() + "&title=" + movieFile.getName();
        strmMovieFolder.createFile(folderRename + ".strm", string, MimeType.PLAIN_TEXT);
        MailApp.sendEmail(email, "Uploaded Movie: " + folderRename, "Uploaded on " + date);
        
      }
    }
            
      if (folderName.indexOf("(TV)") >= 0) {
        var folderRename = folderName.replace(" (TV)", "");
        folder.setName(folderRename);
        var duplicates1 = tvFolder.getFoldersByName(folderRename);
            
      if (!duplicates1.hasNext()) {
        tvFolder.addFolder(folder);
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
        
        var strmTvShowFolder = strmTvFolder.createFolder(folderRename);
        var tvSeasonFolders = folder.getFolders();
     
      while (tvSeasonFolders.hasNext()) {
        var tvSeasonFolder = tvSeasonFolders.next();
        var tvSeason = tvSeasonFolder.getName();
        var strmSeasonFolder = strmTvShowFolder.createFolder(tvSeason);
        
        var tvEpisodeFolders = tvSeasonFolder.getFolders();
        
      while (tvEpisodeFolders.hasNext()) {
        var tvEpisodeFolder = tvEpisodeFolders.next();
        var tvEpisodeFiles = tvEpisodeFolder.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
            
      while (tvEpisodeFiles.hasNext()) {
        var tvEpisodeFile = tvEpisodeFiles.next();
        var tvEpisode = tvEpisodeFile.getName();
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + tvEpisodeFile.getId() + "&title=" + tvEpisode;
        strmSeasonFolder.createFile(tvEpisode + ".strm", string, MimeType.PLAIN_TEXT);
        
          }
        } 
      } 
    }   
     
      else {
                  
        var duplicate1 = duplicates1.next();
        var subfolders1 = folder.getFolders();
       
      while (subfolders1.hasNext()) {
        var subfolder1 = subfolders1.next();
        duplicate1.addFolder(subfolder1); 
        var pull = DriveApp.getRootFolder();
        pull.removeFolder(folder);
        
        var strmTvShowFolders = strmTvFolder.getFoldersByName(folderRename);
       
      while (strmTvShowFolders.hasNext()) {
        var strmTvShowFolder = strmTvShowFolders.next();
        var strmSeasonFolders = strmTvShowFolder.getFoldersByName(subfolder1);
    
      if (!strmSeasonFolders.hasNext()) { 
        var strmSeasonFolder = strmTvShowFolder.createFolder(subfolder1);
        var subfolders2 = subfolder1.getFolders();
        
      while (subfolders2.hasNext()) {
        var subfolder2 = subfolders2.next();    
        var tvEpisodeFiles = subfolder2.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
        
      while (tvEpisodeFiles.hasNext()) {
        var tvEpisodeFile = tvEpisodeFiles.next();
        var tvEpisode = tvEpisodeFile.getName();
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + tvEpisodeFile.getId() + "&title=" + tvEpisode;
        strmSeasonFolder.createFile(tvEpisode + ".strm", string, MimeType.PLAIN_TEXT);
         
        }
      }
    }
    
      else {
                 
        var duplicates2 = duplicate1.getFoldersByName(subfolder1);
        duplicates2.next();
        
      while (duplicates2.hasNext()) {
        var duplicate2 = duplicates2.next();    
        var subfolders2 = subfolder1.getFolders();
    
      while (subfolders2.hasNext()) {
        var subfolder2 = subfolders2.next();
        duplicate2.addFolder(subfolder2);
        duplicate1.removeFolder(subfolder1); 
        
        var strmSeasonFolders = strmTvShowFolder.getFoldersByName(subfolder1);
       
      while (strmSeasonFolders.hasNext()) {
        var strmSeasonFolder = strmSeasonFolders.next();
        var tvEpisodeFiles = subfolder2.searchFiles("mimeType contains 'video' and not fullText contains '.sub'");
       
      while (tvEpisodeFiles.hasNext()) {
        var tvEpisodeFile = tvEpisodeFiles.next();
        var tvEpisode = tvEpisodeFile.getName();
        var string = "plugin://plugin.video.gdrive/?mode=video&username=script&filename=" + tvEpisodeFile.getId() + "&title=" + tvEpisode;
        strmSeasonFolder.createFile(tvEpisode + ".strm", string, MimeType.PLAIN_TEXT);
    
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            MailApp.sendEmail(email, "Uploaded TV Show: " + folderRename, "Uploaded on " + date);
          }
        }
      }
    }

    Step 4

    For Windows users download the official
    Google Drive client. When installed, sync the folders containing the movie and TV STRM files.

    For Android users download a Google sync app. When installed, sync the folders containing the movie and TV STRM files.


    Step 5

    Launch Kodi. Navigate to Videos -> Files -> Add videos -> Select your synced TV/Movie STRM folder -> Select the appropriate media scraper.


    Step 6 - Not required, but recommended

    Install the Watchdog Kodi Add-on. This will automatically update your library when a new STRM file is synced.
    Last edited by SEEKED; July 29, 2017, 10:35 AM.

  • #2
    WoW this is a good HowTo keep it up.

    Comment


    • #3
      Originally posted by DieHard007 View Post
      WoW this is a good HowTo keep it up.
      Cheers mate.

      The code has evolved substantially since I first posted this thread. So to anyone whose been using it, ensure it's the latest revision.

      Comment


      • #4
        Thanks, I was just looking for the same thing.

        YOU ARE A TIME SAVER MY FRIEND!

        Comment


        • #5
          Originally posted by DRiFTKiNG View Post
          Thanks, I was just looking for the same thing.

          YOU ARE A TIME SAVER MY FRIEND!
          No worries my man. Glad you found it useful.

          Added a new section focusing on STRM creation.

          Comment


          • #6
            guess what, i am doing the same. works wonder~

            Comment


            • #7
              Can I use this guide with encrypt data before upload to google cloud ?

              Comment


              • #8
                Thanks for sharing this tutorial!
                I like to use simple google slides themes for my study presentations.

                Comment

                Working...
                X