Просмотр исходного кода

Merge pull request #672 from causefx/cero-dev

Cero dev
causefx 8 лет назад
Родитель
Сommit
39903b773a

+ 9 - 0
.gitignore

@@ -46,6 +46,9 @@ Network Trash Folder
 Temporary Items
 .apdisk
 
+# Files from my local computer
+php_errors.log
+
 # =========================
 # Organizr files
 # =========================
@@ -58,6 +61,8 @@ org.log
 org*.log
 test.php
 users.db
+speedtest.db
+chatpack.db
 config/cacert.pem
 config/config.php
 config/config*.bak.php
@@ -67,3 +72,7 @@ config/users*.db
 config/users*.bak.db
 config/tmp/*
 images/cache/*
+backups/*
+backups/
+backups
+test*.php

+ 13 - 2
ajax.php

@@ -64,9 +64,14 @@ switch ($_SERVER['REQUEST_METHOD']) {
 				echo getPlexStreams(12, PLEXSHOWNAMES, $GLOBALS['USER']->role);
 				die();
 				break;
+			case 'ombi-requests':
+				qualifyUser(PLEXHOMEAUTH, true);
+				echo buildOmbiList($GLOBALS['USER']->role, $GLOBALS['USER']->username);
+				die();
+				break;
 			case 'emby-recent':
 				qualifyUser(EMBYHOMEAUTH, true);
-				echo getEmbyRecent($_GET['type'], 12);
+				echo getEmbyRecent(array("Movie" => EMBYRECENTMOVIE, "Episode" => EMBYRECENTTV, "MusicAlbum" => EMBYRECENTMUSIC, "Series" => EMBYRECENTTV));
 				die();
 				break;
 			case 'plex-recent':
@@ -123,6 +128,9 @@ switch ($_SERVER['REQUEST_METHOD']) {
             default: // Stuff that you need admin for
                 qualifyUser('admin', true);
                 switch ($action) {
+					case 'ombi-action':
+                        sendResult(ombiAction($_POST['id'], $_POST['action_type'], $_POST['type']), "search", "OMBI ", "action completed successfully", "an error occured");
+                        break;
 					case 'get-emails':
 						$response = printEmails(getEmails($_POST['type']));
 						break;
@@ -150,6 +158,10 @@ switch ($_SERVER['REQUEST_METHOD']) {
                     case 'remove-images':
                         removeFiles('images/'.(isset($_POST['file'])?$_POST['file']:''));
                         sendNotification(true);
+                        break;
+					case 'remove-file':
+                        removeFiles($_POST['file']);
+                        sendNotification(true);
                         break;
                     case 'update-config':
 						$response['notify'] = sendNotification(updateConfig($_POST));
@@ -226,4 +238,3 @@ if ($response) {
 } else {
 	sendNotification(false, 'Error: No Output Specified!');
 }
-

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
bower_components/bootstrap/dist/css/bootstrap.min.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
bower_components/jquery/dist/jquery.min.js


+ 0 - 96
chatAJAX.php

@@ -1,96 +0,0 @@
-<?php
-
-define("CHATDB", "chat.db");
-
-if (!file_exists(CHATDB)) {
-    
-    try{
-        $db = new PDO('sqlite:'.CHATDB);
-
-        $sql ="
-          CREATE TABLE IF NOT EXISTS MESSAGES 
-          (ID INTEGER PRIMARY KEY AUTOINCREMENT,
-          USER TEXT NOT NULL,
-          EMAIL TEXT NOT NULL,
-          MESSAGE TEXT NOT NULL,
-          TIME TIMESTAMP NOT NULL DEFAULT((julianday('now') - 2440587.5)*86400.0))";
-
-        $ret = $db->exec($sql);
-        sleep(0.5);
-        $ret = $db->exec('PRAGMA journal_mode = wal;');
-        sleep(0.5);
-        
-
-        header("Refresh:0");
-    }
-    catch(PDOException $e){
-       die('Failed to execute query:'. $e->getMessage());
-    }
-
-   $db=null;
-    
-}elseif(file_exists(CHATDB)) {
-    
-   try{
-        $db = new PDO('sqlite:'.CHATDB);
-    }
-    catch(PDOException $e){
-        die('Failed to connect:'. $e->getMessage());
-    }
-}
-
-//check to see if the ajax call was to update db
-
-if (isset($_POST['text'])){
-
-    $msg=$_POST['text'];
-    $us=$_POST['user'];
-    $email=$_POST['email'];
-
-    $sql ="INSERT INTO MESSAGES (USER,MESSAGE,EMAIL) VALUES(?, ?, ?)";
-
-    try{
-        $ret = $db->prepare($sql);
-        $ret->execute([$us,$msg, $email]);
-    }
-    catch(PDOException $e){
-        console.log('Failed to update db:'. $e->getMessage());
-    }
-}else{
-    //the script will run for 20 seconds after the initial ajax call
-    $time=time()+20;
-
-    while(time()<$time){
-        if ($_POST['time']){
-            $prevtime=$_POST['time'];
-        }
-        else {
-            $prevtime=0;
-        }
-        //query to see if there are new messages
-
-        $sql ="SELECT TIME,USER,MESSAGE,EMAIL FROM MESSAGES WHERE TIME>? ORDER BY TIME ASC";
-
-        try{
-            $ret = $db->prepare($sql);
-            $ret->execute([$prevtime]);
-
-            $resarr = $ret->fetchAll(PDO::FETCH_ASSOC);
-
-            //if there are no new messages in the db, sleep for half a second and then run loop again
-            if (!$resarr)
-                sleep(0.5);
-            else{
-                echo json_encode($resarr);
-                break;
-            }
-        }
-        catch(PDOException $e){
-            console.log('Failed to get messages:'. $e->getMessage());
-        }
-    }
-}
-
-$db=null;
-
-?>

+ 100 - 101
chatjs.php

@@ -1,4 +1,4 @@
-<?php 
+<?php
 require_once("user.php");
 $USER = new User("registration_callback");
 $userpic = md5( strtolower( trim( $USER->email ) ) );
@@ -24,9 +24,8 @@ function formatAMPM(date) {
 var isMobile = false; //initiate as false
 var d = new Date();
 var timezone = d.getTimezoneOffset();
-console.log(timezone)
 // device detection
-if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) 
+if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
     || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) isMobile = true;
 /*
  * JavaScript MD5
@@ -313,74 +312,74 @@ if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine
 $(document).ready(function()
 {
     // init
-    
+
     $(window).focus();
     var tabinfocus = true;
     $("#chat").hide();
 
-    
+
     // allowed characters in username
-    
+
     $("#username").keyup(function()
     {
         var text = $(this).val();
         $(this).val(text.replace(/[^a-zA-Z0-9 ]/g, ""));
     });
-    
+
     // enter username
-    
+
     var user = "";
-    
+
     user = "<?php echo $USER->username; ?>";
-    
+
     // choose avatar, check username, start chat
-    
+
     var avatar = "";
     avatar = "https://www.gravatar.com/avatar/" + md5('<?php echo $USER->email; ?>') + "?d=mm";
 
     startchat();
-    
+
     // start chat
-    
+
     function startchat()
     {
         // zoom chat to fit viewport
-        
+
         if( $(window).innerWidth() > 630 )  // if not mobile
         {
             var ratio = $(window).innerHeight() / 660;  // browser viewport by chat height
-        
+
             //$("#chat").css("zoom", ratio);
             //$("#chat").css("-moz-transform-origin", "0 0");
-            //$("#chat").css("-moz-transform", "scale(" + ratio + ")");      
+            //$("#chat").css("-moz-transform", "scale(" + ratio + ")");
         }
-        
+
         // update favicon to user avatar
-        
+
         //$("#favicon").remove();
-        //var userfavicon = "<link id=\"favicon\" type=\"image/x-icon\"" + 
+        //var userfavicon = "<link id=\"favicon\" type=\"image/x-icon\"" +
                           " rel=\"shortcut icon\" href=\"img/" + avatar + ".ico\">";
         //$(userfavicon).appendTo("head");
-        
+
         // start chat
         $("#chat").show();
         $("#message").focus();
-        
+
         refresh();
     }
-    
+
     // allowed characters in message
-    
 
-    
+
+
     // log message
-    
+
     $("#message").focus().keypress(function(event)
     {
         if( event.keyCode === 13 )
         {
             event.preventDefault();
-            
+
             if( $("#content").is(":visible") )
             {
                 var message = $("#message").val();
@@ -394,20 +393,20 @@ $(document).ready(function()
                     url: "chat/logmessage.php",
                     data: data,
                     cache: false
-                });    
+                });
             }
         }
     });
-    
+
     // log emoticon
-    
+
     $(".emoticonimg").click(function()
     {
         var emoticonselected = $(this);
         emoticonselected.hide();
         var emoticonid = $(this).attr("id");
         var data = "messagedata=" + "specialchar" + emoticonid + "###" + user + "###" + avatar;
-        
+
         $.ajax
         ({
             type: "POST",
@@ -420,9 +419,9 @@ $(document).ready(function()
             }
         });
     });
-    
+
     // show upload form
-    
+
     $("#showuploadform").click(function()
     {
         $("#showuploadform").hide();
@@ -430,30 +429,30 @@ $(document).ready(function()
         $("#uploadform").show();
         $("#emoticons").hide();
         $("#loadingwrapper").hide();
-        
+
         var r = Math.floor((Math.random() * 14) + 1);
         var randomemoticon = "chat/img/emoticon" + r + ".png";
         $("#showemoticonsimg").attr("src", randomemoticon);
-        
+
         refresh();  // also use as manual content refresh
     });
-    
+
     // upload image
-    
+
     $("#form").submit(function(event)
     {
         event.preventDefault();
-        
+
         $("#uploadform").hide();
         $("#showemoticons").hide();
         $("#loadingwrapper").show();
-        
+
         var filedata = $("#uploadimage").prop("files")[0];
-        var formdata = new FormData();             
+        var formdata = new FormData();
         formdata.append("image", filedata);
         var datavars = user + "###" + avatar;
         formdata.append("datavars", datavars);
-        
+
         $.ajax
         ({
             type: "POST",
@@ -472,11 +471,11 @@ $(document).ready(function()
                 $("#content").show();
                 $("#emoticons").show();
             }
-        }); 
+        });
     });
-    
+
     // show emoticons
-    
+
     $("#showemoticons").click(function()
     {
         $("#showuploadform").show();
@@ -486,18 +485,18 @@ $(document).ready(function()
         $("#content").show();
         $("#emoticons").show();
     });
-    
+
     // refresh content
-    
+
     var content = $("#messages");
     var newcontent = content.html();
-    
+
     function refresh()
-    {   
+    {
         setTimeout(function()
         {
             var data = "user=" + user;
-            
+
             $.ajax
             ({
                 type: "POST",
@@ -505,11 +504,11 @@ $(document).ready(function()
                 data: data,
                 cache: false,
                 success: function(result)
-                {   
+                {
                     // check who is still online
-                                    
+
                     var datetoday = new Date();
-                    var timenow = datetoday.getTime() / 1000;  
+                    var timenow = datetoday.getTime() / 1000;
 
                     $.ajax
                 ({
@@ -521,7 +520,7 @@ $(document).ready(function()
                         var oldonlineusers = $("#onlineusers").html();
                         var newonlineusers = '';
                         var onlinecount = 0;
-                        
+
                         if( onlineusers.length <= 0 )  // no user typing
                         {
                             newonlineusers += "No Users Online";
@@ -529,7 +528,7 @@ $(document).ready(function()
 
                         }
                         else
-                        {   
+                        {
                             if( onlineusers.length >= 1 )  // one user typing
                             {
                                 jQuery.each( onlineusers, function( i, val ) {
@@ -541,18 +540,18 @@ $(document).ready(function()
                                         status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-danger"> </span>';
                                         color = "red";
                                     }else{
-                                        status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-success"> </span>';                       
-                                        color = "blue";                       
+                                        status = '<span style="min-height: 14px;margin-top: 10px;" class="pull-right badge badge-success"> </span>';
+                                        color = "blue";
                                     }
                                     if( timecheck < timenow - 3600 )
                                     {
-                                        newonlineusers += '';      
+                                        newonlineusers += '';
                                     }else{
-                                        newonlineusers += '<div class="member-info"><img style="height:40px" src="'+val[2]+'" alt="admin" class="img-circle"><span class="member-name" style="position: absolute;margin-top: 10px;">'+val[0]+'</span>'+status+'</div>'; 
+                                        newonlineusers += '<div class="member-info"><img style="height:40px" src="'+val[2]+'" alt="admin" class="img-circle"><span class="member-name" style="position: absolute;margin-top: 10px;">'+val[0]+'</span>'+status+'</div>';
                                         i++;
                                         onlinecount++;
                                     }
-                                    
+
                                     $("img[alt^='"+val[0]+"']").each(function()
                                     {
                                         var timestamp = val[1];
@@ -573,7 +572,7 @@ $(document).ready(function()
 
                                         }
                                     });
-                                    
+
                                 });
                             }
                         }
@@ -587,24 +586,24 @@ $(document).ready(function()
                     }
                 });
 
-                    
-                    
+
+
                     // new messages
-                    
+
                     var newmessages = result.split("###endofmessage###");
 
                     for( var i=0; i<newmessages.length; i++ )
                     {
-                        
+
                         var message = newmessages[i];
-                        
+
                         if( message != "" )
                         {
                             var messagekeypos = message.indexOf("avatarandtext");
                             var messagekey = message.substr(messagekeypos + 19, 32);
                             var contentdom = document.getElementById("messages");
                             var messagedom = document.getElementById(messagekey);
-                            
+
                             if( $.contains(contentdom, messagedom) == false )
                             {
                                 // append new message
@@ -627,11 +626,11 @@ $(document).ready(function()
                                                 }else {
                                                     newdate = moment(new Date($this+'Z')).format('lll');
                                                 }
-                                                $(this).text(newdate); 
+                                                $(this).text(newdate);
                                             });
                                         });
                                     }
-                                    
+
                                     // new message tab alert
 
                                     var userwriting = user + "writing";
@@ -644,9 +643,9 @@ $(document).ready(function()
                                             newmessagealert(message);
                                         }
                                     }
-                                    
+
                                     // refresh eventlisteners of messages to set likes
-                        
+
                                     $(".messagelike").unbind().click(function()
                                     {
                                         if( this.innerHTML.indexOf("target=") == -1 &&
@@ -659,9 +658,9 @@ $(document).ready(function()
                             }
                         }
                     }
-                    
+
                     // get and show likes
-                    
+
                     $.ajax
                     ({
                         url: "chat/getlikes.php",
@@ -673,13 +672,13 @@ $(document).ready(function()
                             var unlikedmessages = likesandunlikes[1];
                             var likes = JSON.parse(likedmessages);
                             var unlikes = JSON.parse(unlikedmessages);
-                            
+
                             for( var i=0; i<likes.length; i++ )
                             {
                                 var likeid = "#like" + likes[i];
                                 $(likeid).show();
                             }
-                            
+
                             for( var i=0; i<unlikes.length; i++ )
                             {
                                 var unlikeid = "#like" + unlikes[i];
@@ -687,34 +686,34 @@ $(document).ready(function()
                             }
                         }
                     });
-                    
+
                     // hide intro
-                    
+
                     if( result != "" )
                     {
-                        $("#intro").hide();        
+                        $("#intro").hide();
                     }
-                    
+
                     // loop
-                    
+
                     refresh();
                 }
             });
-            
+
             // update if current user is typing
-            
+
             if( $("#message").val() != "" )
             {
-                istyping(user, 1);      
+                istyping(user, 1);
             }
             else if( $("#message").val() == "" )
             {
-                istyping(user, 0);     
+                istyping(user, 0);
             }
-            
+
         }, 1250);
     }
-    
+
     // tab focus
     window.onload = function()
     {
@@ -748,9 +747,9 @@ $(document).ready(function()
                 console.log("not in focus");
             }
         }
- 
+
     };
-    
+
     window.onblur = function()
     {
         if(window.chatLoaded === true){
@@ -758,11 +757,11 @@ $(document).ready(function()
             console.log("not in focus");
         }
     };
-    
+
     // new message tab alert
-    
+
     function newmessagealert(message)
-    {   
+    {
 
 
         if( !tabinfocus )
@@ -791,20 +790,20 @@ $(document).ready(function()
                     }
                 });
             }
-                        
+
             // sound
-                        
+
             var audio = $("#tabalert")[0];
             audio.play();
         }
     }
-    
+
     // like message
-    
+
     function likemessage(messageid)
     {
         var data = "messageid=" + messageid;
-        
+
         $.ajax
         ({
             type: "POST",
@@ -813,15 +812,15 @@ $(document).ready(function()
             cache: false
         });
     }
-    
+
     // update which users are typing
-    
+
     function istyping(u, t)
     {
         // set typing user
-        
+
         var data = "datavars=" + u + "###" + t;
-                
+
         $.ajax
         ({
             type: "POST",
@@ -831,7 +830,7 @@ $(document).ready(function()
             success: function(result)
             {
                 // get typing users
-                
+
                 $.ajax
                 ({
                     url: "chat/gettyping.php",
@@ -839,7 +838,7 @@ $(document).ready(function()
                     success: function(result)
                     {
                         var typingusers = JSON.parse(result);
-                        
+
                         if( typingusers.length == 0 )  // no user typing
                         {
                             $("#istyping").html("");
@@ -873,4 +872,4 @@ $(document).ready(function()
             }
         });
     }
-});
+});

+ 45 - 43
check.php

@@ -3,20 +3,22 @@ if (file_exists('config/config.php')) {
     require_once("user.php");
     $db = DATABASE_LOCATION.'users.db';
     $folder = USER_HOME;
+	$USER = new User("registration_callback");
+	qualifyUser("admin", true);
 }
 
 function check($extension) {
-    
-    if (extension_loaded($extension)) : 
+
+    if (extension_loaded($extension)) :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-success">';
         echo '<div class="panel-heading">';
         echo '<h3 class="panel-title">'. $extension . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $extension . ' is loaded and ready to rock-n-roll!  Good 2 Go!';
-        echo '</div></div></div>'; 
-    
+        echo $extension . ' is installed!';
+        echo '</div></div></div>';
+
     else :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-danger">';
@@ -25,38 +27,38 @@ function check($extension) {
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
         echo $extension . ' is NOT loaded!  Please install it before proceeding';
-        
+
         if($extension == "PDO_SQLITE") :
-            
+
             echo '<br/> If you are on Windows, please uncomment this line in php.ini: ;extension=php_pdo_sqlite.dll<br/>If you are on Ununtu, please install php5.3-sqlite or php7-sqlite depending on your version of PHP, then restart PHP service';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
-    endif;  
-    
+
+        echo '</div></div></div>';
+
+    endif;
+
 }
 
 function checkFunction($function) {
-    
-    if (function_exists($function)) : 
+
+    if (function_exists($function)) :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-success">';
         echo '<div class="panel-heading">';
         echo '<h3 class="panel-title">'. $function . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $function . ' is loaded and ready to rock-n-roll!  Good 2 Go!';
-    
+        echo $function . ' is installed!';
+
         if($function == "MAIL") :
-            
+
             echo '<br/> **Please make sure you can send email prior to installing as this is needed for password resets**';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
+
+        echo '</div></div></div>';
+
     else :
         echo '<div class="col-lg-3">';
         echo '<div class="panel panel-danger">';
@@ -64,26 +66,26 @@ function checkFunction($function) {
         echo '<h3 class="panel-title">'. $function . '</h3>';
         echo '</div>';
         echo '<div style="color: gray" class="panel-body">';
-        echo $function . ' is NOT loaded!  Please install it before proceeding'; 
-    
+        echo $function . ' is NOT loaded!  Please install it before proceeding';
+
         if($function == "MAIL") :
-            
+
             echo '<br/> **If you do not want to use password resets, this is okay not being installed**  EDIT LINE 31 on user.php to "false" [const use_mail = false]';
-        
+
         endif;
-    
-        echo '</div></div></div>'; 
-    
-    endif;  
-    
+
+        echo '</div></div></div>';
+
+    endif;
+
 }
 
 function getFilePermission($file) {
-        
+
     if (file_exists($file)) :
-    
+
         $length = strlen(decoct(fileperms($file)))-3;
-    
+
         if($file{strlen($file)-1}=='/') :
 
             $name = "Folder";
@@ -101,8 +103,8 @@ function getFilePermission($file) {
             echo '<h3 class="panel-title">'. $file . '<permissions style="float: right;">Permissions: ' . substr(decoct(fileperms($file)),$length) . '</permissions></h3>';
             echo '</div>';
             echo '<div style="color: gray" class="panel-body">';
-            echo $file . ' is writable and ready to rock-n-roll!  Good 2 Go!';
-            echo '</div></div></div>'; 
+            echo $file . ' is writable!';
+            echo '</div></div></div>';
         else :
             echo '<div class="col-lg-6">';
             echo '<div class="panel panel-danger">';
@@ -111,10 +113,10 @@ function getFilePermission($file) {
             echo '</div>';
             echo '<div style="color: gray" class="panel-body">';
             echo $file . ' is NOT writable!  Please change the permissions to make it writtable by the PHP User.';
-            echo '</div></div></div>'; 
+            echo '</div></div></div>';
 
         endif;
-        
+
     endif;
 }
 
@@ -125,7 +127,7 @@ function getFilePermission($file) {
 <html lang="en" class="no-js">
 
     <head>
-        
+
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta http-equiv="X-UA-Compatible" content="IE=edge">
@@ -138,7 +140,7 @@ function getFilePermission($file) {
         <script src="bower_components/jquery/dist/jquery.min.js"></script>
         <script src="bower_components/jquery.nicescroll/jquery.nicescroll.min.js"></script>
 		<script src="bower_components/slimScroll/jquery.slimscroll.min.js"></script>
-        
+
     </head>
 
     <body id="body-check" class="gray-bg" style="padding: 0;">
@@ -147,13 +149,13 @@ function getFilePermission($file) {
 
             <!--Content-->
             <div id="content"  style="margin:0 20px; overflow:hidden">
-                
+
                 <h1><center>Check Requirements & Permissions</center></h1>
 
                 <div class="row">
-                
+
                 <?php
-                
+
                 check("PDO_SQLITE");
                 check("PDO");
                 check("SQLITE3");

+ 33 - 0
config/configDefaults.php

@@ -4,16 +4,23 @@ return array(
 	"user_home" => false,
 	"timezone" => "",
 	"plexURL" => "",
+	"plexTabURL" => "",
 	"plexToken" => "",
 	"plexRecentMovie" => "false",
 	"plexRecentTV" => "false",
 	"plexRecentMusic" => "false",
 	"plexPlayingNow" => "false",
+	"plexRecentMovieAuth" => "false",
+	"plexRecentTVAuth" => "false",
+	"plexRecentMusicAuth" => "false",
+	"plexPlayingNowAuth" => "false",
  	"plexShowNames" => false,
 	"plexHomeAuth" => false,
 	"plexSearch" => false,
+	"plexSearchAuth" => false,
 	"plexRecentItems" => "20",
 	"plexPlaylists" => "false",
+	"plexPlaylistsAuth" => "false",
 	"plexTabName" => "",
 	"embyURL" => "",
 	"embyToken" => "",
@@ -41,6 +48,9 @@ return array(
 	"sabnzbdURL" => "",
 	"sabnzbdKey" => "",
 	"sabnzbdHomeAuth" => false,
+	"ombiURL" => "",
+	"ombiKey" => "",
+	"ombiAuth" => false,
 	"headphonesURL" => "",
 	"headphonesKey" => "",
 	"headphonesHomeAuth" => false,
@@ -99,4 +109,27 @@ return array(
 	"couchURL" => "",
 	"couchAPI" => "",
 	"couchHomeAuth" => false,
+	"weather" => "false",
+	"weatherAuth" => "false",
+	"speedtestAuth" => "false",
+	"recentRefresh" => "600000",
+	"requestRefresh" => "600000",
+	"nowPlayingRefresh" => "15000",
+	"embyRecentMovieAuth" => "false",
+	"embyRecentTVAuth" => "false",
+	"embyRecentMusicAuth" => "false",
+	"embyPlayingNowAuth" => "false",
+	"homepageOrdercustomhtml" => '1',
+	"homepageOrdernotice" => '2',
+	"homepageOrderplexsearch" => '3',
+	"homepageOrderspeedtest" => '4',
+	"homepageOrdernzbget" => '5',
+	"homepageOrdersabnzbd" => '6',
+	"homepageOrderplexnowplaying" => '7',
+	"homepageOrderplexrecent" => '8',
+	"homepageOrderplexplaylist" => '9',
+	"homepageOrderembynowplaying" => '10',
+	"homepageOrderembyrecent" => '11',
+	"homepageOrderombi" => '12',
+	"homepageOrdercalendar" => '13',
 );

+ 12 - 12
css/style.css

@@ -749,7 +749,7 @@ a.text-info:hover {
   font-size: 19px;
   text-align: center;
   text-align: -webkit-center;
-    
+
 }
 
 .gn-menu .label {
@@ -958,7 +958,7 @@ button::-moz-focus-inner {
 html, body {
   height: 100%;
 }
-::-webkit-scrollbar { 
+::-webkit-scrollbar {
    display: none;
 }
 
@@ -971,10 +971,10 @@ body {
   position: relative;
   background: #F1F4F5;
   overflow-x: hidden;
-  overflow-x:hidden; 
+  overflow-x:hidden;
   /*MS Edge */
   -ms-overflow-style: -ms-autohiding-scrollbar;
-  -ms-overflow-style: none; 
+  -ms-overflow-style: none;
 }
 
 .main-wrapper {
@@ -1167,7 +1167,7 @@ body {
 }
 
 .small-box {
-  padding: 20px 5px;
+  padding: 20px 8px;
 }
 
 .small-box .info {
@@ -2218,7 +2218,7 @@ table.dataTable.no-footer, table.dataTable thead th, table.dataTable thead td {
     .fc-title {
      text-overflow: ellipsis;
      white-space: nowrap;
-     overflow: hidden;   
+     overflow: hidden;
     }
 }
 
@@ -3530,7 +3530,7 @@ ul.inbox-pagination li {
 
 .ns-effect-bouncyflip p {
   padding: 0.5em 0.8em 0.8em 3.5em;
-  padding-left: 0px !important;    
+  padding-left: 0px !important;
 }
 
 .ns-effect-bouncyflip .ns-close::after,
@@ -5964,17 +5964,17 @@ label {
   z-index: 1;
   /*right: -425px;*/
   right: calc(-105%);
-  right: -webkit-calc(-105%);    
+  right: -webkit-calc(-105%);
   -webkit-box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);
           box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);
-  
+
 }
 
 .mini-nav .members-sidebar {
   width: calc(100% - 50px);
   width: -webkit-calc(100% - 50px);
   right: calc(-100%);
-  right: -webkit-calc(-100%); 
+  right: -webkit-calc(-100%);
 }
 
 .members-sidebar .messages {
@@ -6195,7 +6195,7 @@ label {
 }
 
 .content-tools a {
-  color: #76828E; 
+  color: #76828E;
 }
 
 .flot-tooltip {
@@ -6214,7 +6214,7 @@ label {
   }
   .mdi-window-restore {
     display: none !important;
-  }    
+  }
   /*Remove margins from content block*/
   .content {
     margin: 0;

Разница между файлами не показана из-за своего большого размера
+ 219 - 159
functions.php


+ 307 - 408
homepage.php

@@ -8,6 +8,7 @@ ini_set("error_reporting", E_ALL | E_STRICT);
 require_once("user.php");
 require_once("functions.php");
 $USER = new User("registration_callback");
+$group = $USER->role;
 
 // Check if connection to homepage is allowed
 qualifyUser(HOMEPAGEAUTHNEEDED, true);
@@ -33,7 +34,7 @@ foreach(loadAppearance() as $key => $value) {
 
         <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css?v=<?php echo INSTALLEDVERSION; ?>">
         <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css">
-        <link rel="stylesheet" href="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css"> 
+        <link rel="stylesheet" href="bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css">
         <script src="js/menu/modernizr.custom.js"></script>
 
         <link rel="stylesheet" href="bower_components/animate.css/animate.min.css">
@@ -46,8 +47,8 @@ foreach(loadAppearance() as $key => $value) {
         <link rel="stylesheet" type="text/css" href="bower_components/slick/slick.css?v=<?php echo INSTALLEDVERSION; ?>">
         <link rel="stylesheet" href="bower_components/sweetalert/dist/sweetalert.css">
         <link rel="stylesheet" href="bower_components/smoke/dist/css/smoke.min.css?v=<?php echo INSTALLEDVERSION; ?>">
-        
-       
+
+
 
         <!--Scripts-->
         <script src="bower_components/jquery/dist/jquery.min.js"></script>
@@ -62,17 +63,67 @@ foreach(loadAppearance() as $key => $value) {
 
         <script src="js/jqueri_ui_custom/jquery-ui.min.js"></script>
 	    <script src="js/jquery.mousewheel.min.js" type="text/javascript"></script>
-		
+
 		<!--Other-->
 		<script src="js/ajax.js?v=<?php echo INSTALLEDVERSION; ?>"></script>
         <script src="bower_components/sweetalert/dist/sweetalert.min.js"></script>
         <script src="bower_components/smoke/dist/js/smoke.min.js"></script>
-		
+
         <!--[if lt IE 9]>
         <script src="bower_components/html5shiv/dist/html5shiv.min.js"></script>
         <script src="bower_components/respondJs/dest/respond.min.js"></script>
         <![endif]-->
         <style>
+			<?php if($USER->role !== "admin"){ echo '.refreshImage { display: none; }';}?>
+			.requestOptions {
+				position: absolute;
+			    top: 5px;
+			    margin-left: 5px;
+				opacity: 1;
+				z-index: 1;
+			}
+			.slick-slide:focus {
+			    outline: transparent;
+			}
+			.requestOptions:hover {
+				opacity: 1;
+			}
+			.refreshImage{
+				top: -10px;
+				opacity: 0;
+				z-index: 1000;
+			}
+
+			.refreshNP {
+				z-index: 1001;
+			}
+			.w-refresh {
+				opacity: 1;
+			}
+			.ultra-widget.refreshImage .w-refresh.w-p-icon {
+			    opacity: 1;
+			}
+			.refreshImage:hover, .refreshNP:hover{
+				opacity: 1 !important;
+			}
+			.refreshImage .w-refresh {
+			    font-size: 36px;
+			    opacity: 1;
+			    right: 0;
+			    left: 5px;
+			}
+			.refreshImage span.w-refresh:hover::before {
+				content: "Refresh";
+			    font-size: 17px;
+			    float: right;
+			    top: 18px;
+			    position: absolute;
+			    left: 15px;
+			    color: white;
+			    background: black;
+			    border-radius: 5px;
+			    padding: 0px 20px;
+			}
             .fc-day-grid-event{
                 cursor: pointer;
             }
@@ -81,13 +132,55 @@ foreach(loadAppearance() as $key => $value) {
                 margin: 5px 0;
             }
             .slick-image-tall{
-                width: 125px;
-                height: 180px;
+                /*width: 125px;
+                height: 180px;*/
+				width: 100%;
+				height: 200px;
+				padding: 0 2px;
             }
+			.slick-bottom-title {
+				width: 100%;
+				padding: 0 2px;
+			}
+			.requestBottom {
+				width: 100%;
+				padding: 0 2px;
+			    display: inline-flex;
+
+			}
+			.requestLast {
+				border-radius: 0 0 5px 5px;
+			    border-top: 1px solid;
+			}
+			.transparent {
+				background: transparent !important;
+				-webkit-box-shadow: none;
+    			box-shadow: none;
+			}
+			.requestGroup {
+				width: 50%;
+				vertical-align: top !important;
+				margin: 0 0px !important;
+				display: inline-block;
+			}
+			i.mdi.mdi-dots-vertical.mdi-24px {
+			    -webkit-filter: drop-shadow(1px 2px 3px black);
+			    filter: drop-shadow(1px 2px 3px black);
+			}
+			.requestGroup:first-child {
+				border-radius: 0 0 0 5px;
+			}
+			.requestGroup:last-child {
+				border-radius: 0 0 5px 0;
+			}
             .slick-image-short{
-                width: 125px;
+                /*width: 125px;
                 height: 130px;
-                margin-top: 50px;
+                margin-top: 50px;*/
+				width: 100%;
+				height: 130px;
+				margin-top: 70px;
+				padding: 0 2px;
             }
             .overlay{
                 position: absolute;
@@ -130,11 +223,11 @@ foreach(loadAppearance() as $key => $value) {
             }.carousel-image{
                 width: 100px !important;
                 height: 150px !important;
-                border-radius: 3px 0 0 3px;  
+                border-radius: 3px 0 0 3px;
             }.carousel-image.album{
                 width: 150px !important;
                 height: 150px !important;
-                border-radius: 3px 0 0 3px;  
+                border-radius: 3px 0 0 3px;
             }.carousel-control.album {
                 top: 5px !important;
                 width: 4% !important;
@@ -186,7 +279,7 @@ foreach(loadAppearance() as $key => $value) {
 				white-space: normal !important;
 				width: 0% !important;
 				font-size: 12px; !important;
-			}<?php customCSS(); ?>       
+			}<?php customCSS(); ?>
         </style>
     </head>
 
@@ -194,291 +287,33 @@ foreach(loadAppearance() as $key => $value) {
         <div class="main-wrapper" style="position: initial;">
             <div id="content" class="container-fluid">
                 <br/>
-                
-                <?php if (qualifyUser(HOMEPAGENOTICEAUTH) && HOMEPAGENOTICETITLE && HOMEPAGENOTICETYPE && HOMEPAGENOTICEMESSAGE && HOMEPAGENOTICELAYOUT) { echo buildHomepageNotice(HOMEPAGENOTICELAYOUT, HOMEPAGENOTICETYPE, HOMEPAGENOTICETITLE, HOMEPAGENOTICEMESSAGE); } ?>
-                <?php if((PLEXSEARCH == "true" && qualifyUser(PLEXHOMEAUTH))) { ?>
-                <div id="searchPlexRow" class="row">
-                    <div class="col-lg-12">
-                        <div class="content-box box-shadow big-box todo-list">                        
-                            <form id="plexSearchForm" onsubmit="return false;" autocomplete="off">
-                                <div class="">
-                                    <div class="input-group">
-                                        <div style="border-radius: 25px 0 0 25px; border:0" class="input-group-addon gray-bg"><i class="fa fa-search white"></i></div>
-                                        <input id="searchInput" type="text" style="border-radius: 0;" autocomplete="off" name="search-title" class="form-control input-group-addon gray-bg" placeholder="Media Search">
-										<div id="clearSearch" style="border-radius: 0 25px 25px 0;border:0; cursor: pointer;" class="input-group-addon gray-bg"><i class="fa fa-close white"></i></div>
-                                        <button style="display:none" id="plexSearchForm_submit" class="btn btn-primary waves"></button>
-                                    </div>
-                                </div>
-                            </form>
-                            <div id="resultshere" class="table-responsive"></div>
-                        </div>
-                    </div>
-                </div>
-                <?php } ?>
-                <?php if (qualifyUser(HOMEPAGECUSTOMHTML1AUTH) && HOMEPAGECUSTOMHTML1) { echo "<div>" . HOMEPAGECUSTOMHTML1 . "</div>"; } ?>
-
-                <?php if(SPEEDTEST == "true"){ ?>
-                <style type="text/css">
-
-                    .flash {
-                        animation: flash 0.6s linear infinite;
-                    }
-
-                    @keyframes flash {
-                        0% { opacity: 0.6; }
-                        50% { opacity: 1; }
-                    }
-
-                </style>
-                <script type="text/javascript">
-                    var w = null
-                    function runTest() {
-                        document.getElementById('startBtn').style.display = 'none'
-                        document.getElementById('testArea').style.display = ''
-                        document.getElementById('abortBtn').style.display = ''
-                        w = new Worker('bower_components/speed/speedtest_worker.js')
-                        var interval = setInterval(function () { w.postMessage('status') }, 100)
-                        w.onmessage = function (event) {
-                            var data = event.data.split(';')
-                            var status = Number(data[0])
-                            var dl = document.getElementById('download')
-                            var ul = document.getElementById('upload')
-                            var ping = document.getElementById('ping')
-                            var jitter = document.getElementById('jitter')
-                            dl.className = status === 1 ? 'w-name flash' : 'w-name'
-                            ping.className = status === 2 ? 'w-name flash' : 'w-name'
-                            jitter.className = ul.className = status === 3 ? 'w-name flash' : 'w-name'
-                            if (status >= 4) {
-                                clearInterval(interval)
-                                document.getElementById('abortBtn').style.display = 'none'
-                                document.getElementById('startBtn').style.display = ''
-                                w = null
-                            }
-                            if (status === 5) {
-                                document.getElementById('testArea').style.display = 'none'
-                            }
-                            dl.textContent = data[1] + " Mbit/s";
-                            $("#downloadpercent").attr("style", "width: " + data[1] + "%;");
-                            $("#uploadpercent").attr("style", "width: " + data[2] + "%;");
-                            $("#pingpercent").attr("style", "width: " + data[3] + "%;");
-                            $("#jitterpercent").attr("style", "width: " + data[5] + "%;");
-                            ul.textContent = data[2] + " Mbit/s";
-                            ping.textContent = data[3] + " ms";
-                            jitter.textContent = data[5] + " ms";
-                        }
-                        w.postMessage('start {"telemetry_level":"basic"}')
-                        //w.postMessage('start')
-                    }
-                    function abortTest() {
-                        if (w) w.postMessage('abort')
-                    }
-                </script>
-
-                <div class="row" id="testArea" style="display:none">
-
-                    <div class="test col-sm-3 col-lg-3">
-                        <div class="content-box ultra-widget green-bg" data-counter="">
-                            <div id="downloadpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
-                            <div class="w-content">
-                                <div class="w-icon right pull-right"><i class="mdi mdi-cloud-download"></i></div>
-                                <div class="w-descr left pull-left text-center">
-                                    <span class="testName text-uppercase w-name">Download</span>
-                                    <br>
-                                    <span class="w-name counter" id="download" ></span>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-
-                    <div class="test col-sm-3 col-lg-3">
-                        <div class="content-box ultra-widget red-bg" data-counter="">
-                            <div id="uploadpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
-                            <div class="w-content">
-                                <div class="w-icon right pull-right"><i class="mdi mdi-cloud-upload"></i></div>
-                                <div class="w-descr left pull-left text-center">
-                                    <span class="testName text-uppercase w-name">Upload</span>
-                                    <br>
-                                    <span class="w-name counter" id="upload" ></span>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-
-                    <div class="test col-sm-3 col-lg-3">
-                        <div class="content-box ultra-widget yellow-bg" data-counter="">
-                            <div id="pingpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
-                            <div class="w-content">
-                                <div class="w-icon right pull-right"><i class="mdi mdi-timer"></i></div>
-                                <div class="w-descr left pull-left text-center">
-                                    <span class="testName text-uppercase w-name">Latency</span>
-                                    <br>
-                                    <span class="w-name counter" id="ping" ></span>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-
-                    <div class="test col-sm-3 col-lg-3">
-                        <div class="content-box ultra-widget blue-bg" data-counter="">
-                            <div id="jitterpercent" class="progress-bar progress-bar-striped active w-used" style=""></div>
-                            <div class="w-content">
-                                <div class="w-icon right pull-right"><i class="mdi mdi-pulse"></i></div>
-                                <div class="w-descr left pull-left text-center">
-                                    <span class="testName text-uppercase w-name">Jitter</span>
-                                    <br>
-                                    <span class="w-name counter" id="jitter" ></span>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-
-                    <br/>
-
-                </div>
-
-                <div id="abortBtn" class="row" style="display: none" onclick="javascript:abortTest()">
-                    <div class="col-lg-12">
-                        <div class="content-box red-bg" style="cursor: pointer;">
-                            <h1 style="margin: 10px" class="text-uppercase text-center">Abort Speed Test</h1>
-                            <div class="clearfix"></div>
-                        </div>
-                    </div>
-                </div>
-
-                <div id="startBtn" class="row" onclick="javascript:runTest()">
-                    <div class="col-lg-12">
-                        <div class="content-box green-bg" style="cursor: pointer;">
-                            <h1 style="margin: 10px" class="text-uppercase text-center">Run Speed Test</h1>
-                            <div class="clearfix"></div>
-                        </div>
-                    </div>
-                </div>
-                <?php } ?>
-                                
-                <?php if((NZBGETURL != "" && qualifyUser(NZBGETHOMEAUTH)) || (SABNZBDURL != "" && qualifyUser(SABNZBDHOMEAUTH))) { ?>
-                <div id="downloadClientRow" class="row">
-                    <div class="col-xs-12 col-md-12">
-                        <div class="content-box">
-                            <div class="tabbable panel with-nav-tabs panel-default">
-                                <div class="panel-heading">
-                                    <div class="content-tools i-block pull-right">
-                                        <a id="getDownloader" class="repeat-btn">
-                                            <i class="fa fa-repeat"></i>
-                                        </a>
-                                    </div>
-                                    <h3 class="pull-left"><?php if(NZBGETURL != ""){ echo "NZBGet "; } if(SABNZBDURL != ""){ echo "SABnzbd "; } ?></h3>
-                                    <ul class="nav nav-tabs pull-right">
-                                        <li class="active"><a href="#downloadQueue" data-toggle="tab" aria-expanded="true"><?php echo $language->translate("QUEUE");?></a></li>
-                                        <li class=""><a href="#downloadHistory" data-toggle="tab" aria-expanded="false"><?php echo $language->translate("HISTORY");?></a></li>
-                                    </ul>
-                                    <div class="clearfix"></div>
-                                </div>
-                                <div class="panel-body">
-                                    <div class="tab-content">
-                                        <div class="tab-pane fade active in" id="downloadQueue">
-                                            <div class="table-responsive" style="max-height: 300px">
-                                                <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
-                                                    <thead>
-                                                        <tr>
-                                                            <th class="col-xs-7 nzbtable-file-row"><?php echo $language->translate("FILE");?></th>
-                                                            <th class="col-xs-2 nzbtable"><?php echo $language->translate("STATUS");?></th>
-                                                            <th class="col-xs-1 nzbtable"><?php echo $language->translate("CATEGORY");?></th>
-                                                            <th class="col-xs-2 nzbtable"><?php echo $language->translate("PROGRESS");?></th>
-                                                        </tr>
-                                                    </thead>
-                                                    <tbody class="dl-queue sabnzbd"></tbody>
-                                                    <tbody class="dl-queue nzbget"></tbody>
-                                                </table>
-                                            </div>
-                                        </div>
-                                        <div class="tab-pane fade" id="downloadHistory">
-                                            <div class="table-responsive" style="max-height: 300px">
-                                                <table class="table table-striped progress-widget zero-m" style="max-height: 300px">
-                                                    <thead>
-                                                        <tr>
-                                                            <th class="col-xs-7 nzbtable-file-row"><?php echo $language->translate("FILE");?></th>
-                                                            <th class="col-xs-2 nzbtable"><?php echo $language->translate("STATUS");?></th>
-                                                            <th class="col-xs-1 nzbtable"><?php echo $language->translate("CATEGORY");?></th>
-                                                            <th class="col-xs-2 nzbtable"><?php echo $language->translate("PROGRESS");?></th>
-                                                        </tr>
-                                                    </thead>
-                                                    <tbody class="dl-history sabnzbd"></tbody>
-                                                    <tbody class="dl-history nzbget"></tbody>
-                                                </table>
-                                            </div>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <?php } ?>
-				<?php if (qualifyUser(PLEXHOMEAUTH) && PLEXTOKEN) { ?>
-                <div id="plexRowNowPlaying" class="row">
-                    <?php if(PLEXPLAYINGNOW == "true"){ echo getPlexStreams(12, PLEXSHOWNAMES, $USER->role); } ?>
-                </div>
-                <div id="plexRow" class="row">
-                    <div class="col-lg-12">
-                    <?php
-                    if(PLEXRECENTMOVIE == "true" || PLEXRECENTTV == "true" || PLEXRECENTMUSIC == "true"){  
-                        $plexArray = array("movie" => PLEXRECENTMOVIE, "season" => PLEXRECENTTV, "album" => PLEXRECENTMUSIC);
-                        echo getPlexRecent($plexArray);
-                    } 
-                    ?>
-                    </div>
-                </div>
-                <div id="plexPlaylists" class="row">
-                    <div class="col-lg-12">
-                    <?php if(PLEXPLAYLISTS == "true"){ echo getPlexPlaylists($plexArray); } ?>
-                    </div>
-                </div>
-                <?php } ?>
-    
-				<?php if (qualifyUser(EMBYHOMEAUTH) && EMBYTOKEN) { ?>
-                <div id="embyRowNowPlaying" class="row">
-                    <?php if(EMBYPLAYINGNOW == "true"){ echo getEmbyStreams(12, EMBYSHOWNAMES, $USER->role); } ?>
-                </div>
-                <div id="embyRow" class="row">
-                    <div class="col-lg-12">
-                    <?php
-                    if(EMBYRECENTMOVIE == "true" || EMBYRECENTTV == "true" || EMBYRECENTMUSIC == "true"){  
-                        $embyArray = array("Movie" => EMBYRECENTMOVIE, "Episode" => EMBYRECENTTV, "MusicAlbum" => EMBYRECENTMUSIC, "Series" => EMBYRECENTTV);
-                        echo getEmbyRecent($embyArray);
-                    }
-                    ?>
-                    </div>
+				<?php echo buildHomepage($USER->role, $USER->username);?>
 
-                </div>
-				<?php } ?>
-                <?php if ((SONARRURL != "" && qualifyUser(SONARRHOMEAUTH)) || (RADARRURL != "" && qualifyUser(RADARRHOMEAUTH)) || (HEADPHONESURL != "" && qualifyUser(HEADPHONESHOMEAUTH)) || (SICKRAGEURL != "" && qualifyUser(SICKRAGEHOMEAUTH)) || (COUCHURL != "" && qualifyUser(COUCHHOMEAUTH))) { ?>
-                <div id="calendarLegendRow" class="row" style="padding: 0 0 10px 0;">
-                    <div class="col-lg-12 content-form form-inline">
-                        <div class="form-group pull-right">
-                            <span class="swal-legend label label-primary well-sm">Legend</span>&nbsp;
-                            <div class="btn-group" role="group">
-                                <button id="calendarSelected" style="margin-right: 0px;" type="button" class="btn waves btn-default btn-sm dropdown-toggle waves-effect waves-float" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">View All&nbsp;<span class="caret"></span></button>
-                                <ul style="right:0; left: auto" class="dropdown-menu">
-                                    <li><a class="calendarOption" calendarOption="all" href="javascript:void(0)">View All</a></li>
-                                    <?php if(RADARRURL != ""){ echo '<li><a class="calendarOption" calendarOption="film" href="javascript:void(0)">Movies</a></li>'; }?>
-                                    <?php if(SONARRURL != ""){ echo '<li><a class="calendarOption" calendarOption="tv" href="javascript:void(0)">TV Shows</a></li>'; }?>
-                                    <?php if(HEADPHONESURL != ""){ echo '<li><a class="calendarOption" calendarOption="music" href="javascript:void(0)">Music</a></li>'; }?>
-                                </ul>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div id="calendarRow" class="row">
-                    <div class="col-lg-12">
-                        <div id="calendar" class="fc-calendar box-shadow fc fc-ltr fc-unthemed"></div>
-                    </div>
-                </div>
-                <?php } ?>
-            </div>    
+            </div>
         </div>
         <script>
         //Tooltips
         $('[data-toggle="tooltip"]').tooltip();
+
+		$(document).on("click", ".refreshImage", function(e) {
+			parent.$.smkAlert({
+                text: 'Refreshing Image...',
+                type: 'info',
+                time: 1
+            });
+			e.preventDefault;
+			var orginalElement = $(this).parent().find('.refreshImageSource');
+			var original = orginalElement.attr('original-image');
+			orginalElement.attr('src', original);
+			console.log('replaced image with : '+original);
+			setTimeout(function(){
+				parent.$.smkAlert({
+	                text: 'Image Refreshed - Clear Cache Please.',
+	                type: 'info',
+	                time: 3
+	            });
+			}, 1000);
+		});
         $(".swal-legend").click(function () {
             swal({
                 title: "Calendar Legend",
@@ -497,7 +332,7 @@ foreach(loadAppearance() as $key => $value) {
             $('#searchInput').focus();
             e.preventDefault();
         });
-        
+
 		$(document).on("click", ".openTab", function(e) {
             parent.$.smkAlert({
                 text: 'Loading...',
@@ -513,13 +348,13 @@ foreach(loadAppearance() as $key => $value) {
                 SearchType = "show";
             }else if( Type === 'movie'){
                 Type = "movie";
-                SearchType = "movie";            
+                SearchType = "movie";
             }
             if( Type === 'tv' || Type === 'movie' ){
                 ajax_request('POST', 'tvdb-search', {
                     name: Title,
                     type: SearchType,
-                }).done(function(data){ 
+                }).done(function(data){
                     if( data.trakt && data.trakt.tmdb !== null) {
                         $('#calendarExtra').modal('show');
                         var refreshBox = $('#calendarMainID');
@@ -529,7 +364,7 @@ foreach(loadAppearance() as $key => $value) {
                             deletedRefreshBox = refreshPreloader.fadeOut(300, function(){
                                 refreshPreloader.remove();
                             });
-                        },600);               
+                        },600);
                         $.ajax({
                             type: 'GET',
                             url: 'https://api.themoviedb.org/3/'+Type+'/'+data.trakt.tmdb+'?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&append_to_response=videos,credits&language=<?php echo $userLanguage; ?>',
@@ -538,13 +373,18 @@ foreach(loadAppearance() as $key => $value) {
                             complete: function(xhr, status) {
                                 var result = $.parseJSON(xhr.responseText);
                                 if (xhr.statusText === "OK") {
-                                    if( Type === "movie"){ 
+									if(typeof location !== 'undefined'){
+										$('#calendarTrailer').html(convertTrailer(result.videos)+'&nbsp;<span class="label openPlex palette-Amber-600 bg" openTab="'+openTab+'" location="'+location+'" style="width:100%;display:block;cursor:pointer;"><i style="vertical-align:sub;" class="fa fa-play white"></i><text style="vertical-align:sub;"> Watch Now on PLEX</text></span>');
+									}else{
+										$('#calendarTrailer').html(convertTrailer(result.videos));
+									}
+                                    if( Type === "movie"){
                                         $('#calendarTitle').html(result.title);
                                         $('#calendarRating').html('<span class="label label-gray"><i class="fa fa-thumbs-up white"></i> '+result.vote_average+'</span>&nbsp;');
                                         $('#calendarRuntime').html('<span class="label label-gray"><i class="fa fa-clock-o white"></i> '+convertTime(result.runtime)+'</span>&nbsp;');
                                         $('#calendarSummary').text(result.overview);
                                         $('#calendarTagline').text(result.tagline);
-                                        $('#calendarTrailer').html(convertTrailer(result.videos)+'&nbsp;<span class="label openPlex palette-Amber-600 bg" openTab="'+openTab+'" location="'+location+'" style="width:100%;display:block;cursor:pointer;"><i style="vertical-align:sub;" class="fa fa-play white"></i><text style="vertical-align:sub;"> Watch Now on PLEX</text></span>');
+
                                         $('#calendarCast').html(convertCast(result.credits));
                                         $('#calendarGenres').html(convertArray(result.genres, "MOVIE"));
                                         $('#calendarLang').html(convertArray(result.spoken_languages, "MOVIE"));
@@ -557,7 +397,7 @@ foreach(loadAppearance() as $key => $value) {
                                         $('#calendarRuntime').html('<span class="label label-gray"><i class="fa fa-clock-o white"></i> '+convertTime(whatWasIt(result.episode_run_time))+'</span>&nbsp;');
                                         $('#calendarSummary').text(result.overview);
                                         $('#calendarTagline').text("");
-                                        $('#calendarTrailer').html(convertTrailer(result.videos)+'&nbsp;<span class="label openPlex palette-Amber-600 bg" openTab="'+openTab+'" location="'+location+'" style="width:100%;display:block;cursor:pointer;"><i style="vertical-align:sub;" class="fa fa-play white"></i><text style="vertical-align:sub;"> Watch Now on PLEX</text></span>');
+
                                         $('#calendarCast').html(convertCast(result.credits));
                                         $('#calendarGenres').html(convertArray(result.genres, "MOVIE"));
                                         $('#calendarLang').html(convertArray(result.languages, "TV"));
@@ -610,12 +450,110 @@ foreach(loadAppearance() as $key => $value) {
 				window.open(source, '_blank');
 			}
         });
-        
-            
+
+
         function localStorageSupport() {
             return (('localStorage' in window) && window['localStorage'] !== null)
         }
 
+		function loadSlick(){
+			$('div[class*=recentItems-]').each(function() {
+				var needsSlick = true;
+				var name = $(this).attr("data-name");
+				if($(this).hasClass('slick-initialized')){
+					console.log('skipping slick addon for: '+name);
+					needsSlick = false;
+				}
+				if(needsSlick === true){
+	                console.log('creating slick for '+name);
+	                $(this).slick({
+
+	                    slidesToShow: 13,
+	                    slidesToScroll: 13,
+	                    infinite: true,
+						speed: 900,
+	                    lazyLoad: 'ondemand',
+	                    prevArrow: '<a class="zero-m pull-left prev-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-left"></i></a>',
+	                    nextArrow: '<a class="pull-left next-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-right"></i></a>',
+	                    appendArrows: $('.'+name),
+	                    arrows: true,
+	                    responsive: [
+							{
+			                    breakpoint: 1750,
+			                    settings: {
+			                        slidesToShow: 11,
+			                        slidesToScroll: 11,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 1600,
+			                    settings: {
+			                        slidesToShow: 10,
+			                        slidesToScroll: 10,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 1450,
+			                    settings: {
+			                        slidesToShow: 9,
+			                        slidesToScroll: 9,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 1300,
+			                    settings: {
+			                        slidesToShow: 8,
+			                        slidesToScroll: 8,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 1150,
+			                    settings: {
+			                        slidesToShow: 7,
+			                        slidesToScroll: 7,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 1000,
+			                    settings: {
+			                        slidesToShow: 6,
+			                        slidesToScroll: 6,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 850,
+			                    settings: {
+			                        slidesToShow: 5,
+			                        slidesToScroll: 5,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 700,
+			                    settings: {
+			                        slidesToShow: 4,
+			                        slidesToScroll: 4,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 675,
+			                    settings: {
+			                        slidesToShow: 4,
+			                        slidesToScroll: 4,
+			                    }
+		                    },
+		                    {
+			                    breakpoint: 480,
+			                    settings: {
+			                        slidesToShow: 3,
+			                        slidesToScroll: 3,
+			                    }
+		                    }
+		                ]
+	                });
+				}
+            });
+		}
+
         $( document ).ready(function() {
             $('#plexSearchForm').on('submit', function () {
                 var refreshBox = $(this).closest('div.content-box');
@@ -631,6 +569,25 @@ foreach(loadAppearance() as $key => $value) {
                 }).done(function(data){ $('#resultshere').html(data);});
 
             });
+			$(document).on('click', '.requestAction', function(){
+				var type = $(this).parent().attr('request-type');
+				var action = $(this).parent().attr('request-name');
+				var id = $(this).parent().attr('request-id');
+				console.log('OMBI Action: [type: '+type+' | action: '+action+' | id: '+id+']');
+				ajax_request('POST', 'ombi-action', {
+                    id: id,
+					action_type: action,
+					type: type,
+                }).done(function(data){
+					$('<div></div>').load('ajax.php?a=ombi-requests',function() {
+						var element = $(this).find('[id]');
+						var loadedID = 	element.attr('id');
+						$('#'+loadedID).replaceWith(element);
+						console.log('OMBI ACTION Submited and reloaded: '+loadedID);
+						loadSlick();
+					});
+				});
+			});
             $('.repeat-btn').click(function(){
                 var refreshBox = $(this).closest('div.content-box');
                 $("<div class='refresh-preloader'><div class='la-timer la-dark'><div></div></div></div>").appendTo(refreshBox).fadeIn(300);
@@ -645,110 +602,52 @@ foreach(loadAppearance() as $key => $value) {
                 var id = $(this).attr("link");
                 $("div[np^='"+id+"']").toggle();
             });
+			//load slick
+			loadSlick();
 
-            $('div[class*=recentItems-]').each(function() {
-                var name = $(this).attr("data-name");
-                console.log(name);
-                $(this).slick({
-                
-                    slidesToShow: 13,
-                    slidesToScroll: 13,
-                    infinite: true,
-                    lazyLoad: 'ondemand',
-                    prevArrow: '<a class="zero-m pull-left prev-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-left"></i></a>',
-                    nextArrow: '<a class="pull-left next-mail btn btn-default waves waves-button btn-sm waves-effect waves-float"><i class="fa fa-angle-right"></i></a>',
-                    appendArrows: $('.'+name),
-                    arrows: true,
-                    responsive: [
-                    {
-                    breakpoint: 1750,
-                    settings: {
-                        slidesToShow: 12,
-                        slidesToScroll: 12,
-                    }
-                    },
-                    {
-                    breakpoint: 1600,
-                    settings: {
-                        slidesToShow: 11,
-                        slidesToScroll: 11,
-                    }
-                    },
-                    {
-                    breakpoint: 1450,
-                    settings: {
-                        slidesToShow: 10,
-                        slidesToScroll: 10,
-                    }
-                    },
-                    {
-                    breakpoint: 1300,
-                    settings: {
-                        slidesToShow: 9,
-                        slidesToScroll: 9,
-                    }
-                    },
-                    {
-                    breakpoint: 1150,
-                    settings: {
-                        slidesToShow: 8,
-                        slidesToScroll: 8,
-                    }
-                    },
-                    {
-                    breakpoint: 1000,
-                    settings: {
-                        slidesToShow: 7,
-                        slidesToScroll: 7,
-                    }
-                    },
-                    {
-                    breakpoint: 850,
-                    settings: {
-                        slidesToShow: 6,
-                        slidesToScroll: 6,
-                    }
-                    },
-                    {
-                    breakpoint: 700,
-                    settings: {
-                        slidesToShow: 5,
-                        slidesToScroll: 5,
-                    }
-                    },
-                    {
-                    breakpoint: 675,
-                    settings: {
-                        slidesToShow: 4,
-                        slidesToScroll: 4
-                    }
-                    },
-                    {
-                    breakpoint: 480,
-                    settings: {
-                        slidesToShow: 3,
-                        slidesToScroll: 3
-                    }
-                    }
-                    // You can unslick at a given breakpoint now by adding:
-                    // settings: "unslick"
-                    // instead of a settings object
-                ]
-                });
-            });
             //RECENT ITEMS
-            // each filter we click on
+            // each filter we click on for plex
             $(".filter-recent-event > li").on("click", function() {
                 var name = $(this).attr('data-name');
                 var filter = $(this).attr('data-filter');
-                $('#recentContent-title').text('Recently Added '+name);
+                $('#recentContent-title-Plex').text('Plex Recently Added '+name);
+                // now filter the slides.
+                if(filter !== 'item-all'){
+                    $('.recentItems-recent-Plex')
+                        .slick('slickUnfilter')
+                        .slick('slickFilter' , '.'+filter );
+                }else{
+                    $('.recentItems-recent-Plex')
+                        .slick('slickUnfilter')
+                }
+            });
+			$(".filter-recent-event > li").on("click", function() {
+                var name = $(this).attr('data-name');
+                var filter = $(this).attr('data-filter');
+                $('#recentContent-title-Emby').text('Emby Recently Added '+name);
                 // now filter the slides.
                 if(filter !== 'item-all'){
-                    $('.recentItems-recent')
+                    $('.recentItems-recent-Emby')
                         .slick('slickUnfilter')
                         .slick('slickFilter' , '.'+filter );
                 }else{
-                    $('.recentItems-recent')
+                    $('.recentItems-recent-Emby')
+                        .slick('slickUnfilter')
+                }
+            });
+			//REQUEST ITEMS
+            // each filter we click on for emby
+            $(".filter-request-event > li").on("click", function() {
+                var name = $(this).attr('data-name');
+                var filter = $(this).attr('data-filter');
+                $('#requestContent-title').text('Requested '+name);
+                // now filter the slides.
+                if(filter !== 'item-all'){
+                    $('.recentItems-request')
+                        .slick('slickUnfilter')
+                        .slick('slickFilter' , '.'+filter );
+                }else{
+                    $('.recentItems-request')
                         .slick('slickUnfilter')
                 }
             });
@@ -758,7 +657,7 @@ foreach(loadAppearance() as $key => $value) {
                 var name = $(this).attr('data-name');
                 var filter = $(this).attr('data-filter');
                 $('#playlist-title').text(name);
-                
+
                 // now filter the slides.
                 $('.recentItems-playlists')
                     .slick('slickUnfilter')
@@ -829,7 +728,7 @@ foreach(loadAppearance() as $key => $value) {
                 var y = date.getFullYear();
 
                 $('#calendar').fullCalendar({
-                    eventLimit: false, 
+                    eventLimit: false,
                     firstDay: <?php echo CALENDARSTART;?>,
                     height: "auto",
                     defaultView: '<?php echo CALENDARVIEW;?>',
@@ -889,8 +788,8 @@ foreach(loadAppearance() as $key => $value) {
                 {
                     newData =  $.parseJSON(data);
                     $('#calendar').fullCalendar('removeEvents');
-                    $('#calendar').fullCalendar('addEventSource', newData);   
-                    console.log('Calendar Entries Added');      
+                    $('#calendar').fullCalendar('addEventSource', newData);
+                    console.log('Calendar Entries Added');
                 }
             });
             setInterval(function() {
@@ -901,8 +800,8 @@ foreach(loadAppearance() as $key => $value) {
                     {
                         newData =  $.parseJSON(data);
                         $('#calendar').fullCalendar('removeEvents');
-                        $('#calendar').fullCalendar('addEventSource', newData);  
-                        console.log('Calendar refreshed');       
+                        $('#calendar').fullCalendar('addEventSource', newData);
+                        console.log('Calendar refreshed');
                     }
                 });
             }, <?php echo CALENDARREFRESH; ?>);
@@ -990,8 +889,8 @@ foreach(loadAppearance() as $key => $value) {
                     var type = "TV";
                     ajax_request('POST', 'tvdb-get', {
                         id: ID,
-                    }).done(function(data){ 
-                        if( data.trakt && data.trakt.tmdb !== null) {    
+                    }).done(function(data){
+                        if( data.trakt && data.trakt.tmdb !== null) {
                             $('#calendarExtra').modal('show');
                             var refreshBox = $('#calendarMainID');
                             $("<div class='refresh-preloader'><div class='la-timer la-dark'><div></div></div></div>").appendTo(refreshBox).fadeIn(300);
@@ -1000,7 +899,7 @@ foreach(loadAppearance() as $key => $value) {
                                 deletedRefreshBox = refreshPreloader.fadeOut(300, function(){
                                     refreshPreloader.remove();
                                 });
-                            },600);                    
+                            },600);
                             $.ajax({
                                 type: 'GET',
                                 url: 'https://api.themoviedb.org/3/tv/'+data.trakt.tmdb+'?api_key=83cf4ee97bb728eeaf9d4a54e64356a1&append_to_response=videos,credits&language=<?php echo $userLanguage; ?>',
@@ -1083,10 +982,10 @@ foreach(loadAppearance() as $key => $value) {
                    <div style="position: inherit; padding: 15px 0px 30px 0px; margin-top: -20px;">
                         <div class="col-sm-4">
                             <span id="calendarTrailer" class="pull-left" style="width:100%;display: flex;"></span>
-                        </div> 
-                        <div class="col-sm-8">   
+                        </div>
+                        <div class="col-sm-8">
                             <span id="calendarLang" class="pull-right"></span>
-                        </div>                        
+                        </div>
                     </div>
                 </div>
             </div>
@@ -1103,4 +1002,4 @@ foreach(loadAppearance() as $key => $value) {
         </div>
 
     </body>
-</html>
+</html>

BIN
images/no-list.png


BIN
images/no-np.png


BIN
images/ombi-emby.png


BIN
images/ombi-plex.png


BIN
images/ombi.png


Разница между файлами не показана из-за своего большого размера
+ 324 - 274
index.php


+ 16 - 16
lang/de.ini

@@ -312,24 +312,24 @@ CHECK_FRAME = "Frame testen"
 GENERATE_API_KEY = "Generate API Schlüssel"
 ORGANIZR_API_KEY = "Organizr API Schlüssel"
 TEST_EMAIL = "Test E-Mail senden"
-BACKUP_CREATED = "Backup Created"
-BACKUP_ERROR = "Backup Creation Error"
-BACKUP_NOW = "Backup Now"
-BACKUP_LIST = "Backup List"
+BACKUP_CREATED = "Sicherung erstellt"
+BACKUP_ERROR = "Fehler beim erstellen der Sicherung"
+BACKUP_NOW = "Jetzt sichern"
+BACKUP_LIST = "Liste der Sicherungen"
 SPLASH = "Splash"
 PING = "Ping"
 PING_URL = "Ping URL"
 URL = "URL"
-TEST_URL = "Enter URL to Test"
-MORE = "More"
-LESS = "Less"
-ENABLE_SPLASH_SCREEN = "Enable Splash Screen"
-ENABLE_CHAT = "Enable Chat"
-CHAT_AUTH = "Minimum authentication level to access Chat"
-AUTHBACKENDDOMAINFORMAT = "Advanced Domain to use for LDAP i.e. uid=s,ou=People,dc=example,dc=com"
-TOGGLE_ALL = "Toggle All"
-CALENDAR_REFRESH = "Calendar Refresh"
+TEST_URL = "URL zum testen eingeben"
+MORE = "Mehr"
+LESS = "Weniger"
+ENABLE_SPLASH_SCREEN = "Splash Screen aktivieren"
+ENABLE_CHAT = "Chat aktivieren"
+CHAT_AUTH = "Niedrigstes Benutzerlevel, um den Chat zu sehen"
+AUTHBACKENDDOMAINFORMAT = "Erweitere Domäne zu nutzen von LDAP i.e. uid=s,ou=People,dc=example,dc=com"
+TOGGLE_ALL = "Alle wechseln"
+CALENDAR_REFRESH = "Kalender neu laden"
 COUCH_URL = "Couchpotato URL"
-COUCH_KEY = "Couchpotato API/Key"
-DELETE_CHAT_DATABASE = "Delete Chat Database"
-INSTALLED_THEME = "Installed Theme"
+COUCH_KEY = "Couchpotato API/Schlüssel"
+DELETE_CHAT_DATABASE = "Chat Datenbank löschen"
+INSTALLED_THEME = "Installiertes Thema"

+ 8 - 4
lang/en.ini

@@ -284,7 +284,7 @@ USED_BY = "Used By"
 ACCOUNT_MADE = "PLEX Account is now created, Click Join now"
 USERNAME_NAME = "Username or Name"
 ACCOUNT_SUBMITTED = "PLEX Invite Sent|1. Check Email and Accept Invite|2. Close This Modal with Small 'x' on Top Right|3. Sign in"
-PLEX_TAB_NAME = "PLEX Tab Name [only use this if your PLEX URL above is a sub-domain - i.e. https://plex.domain.com]"
+PLEX_TAB_NAME = "PLEX Tab Name [only use this if you proxy your Plex Tab - i.e. https://plex.domain.com or https://domain.com/plex]"
 IPINFO_TOKEN = "Get Token from https://ipinfo.io/account/registration as Default will expire"
 GET_PLEX_TOKEN = "Get PLEX Token"
 EMAIL_INVITE_HEADER = "Join My|Server"
@@ -306,8 +306,8 @@ EMAIL_NEWUSER_BUTTON = "Login"
 EMAIL_NEWUSER_SUBTITLE = "What do I do?"
 EMAIL_NEWUSER_SUBMESSAGE = "Now that you have signed up, you can basically do whatever you like.  Enjoy"
 PLAYLISTS = "Playlists"
-DOWNLOAD_REFRESH = "Refresh Download Queue"
-HISTORY_REFRESH = "Refresh History"
+DOWNLOAD_REFRESH = "Download Queue Refresh Rate"
+HISTORY_REFRESH = "History Refresh Rate"
 CHECK_FRAME = "Test Frame"
 GENERATE_API_KEY = "Generate API Key"
 ORGANIZR_API_KEY = "Organizr API Key"
@@ -328,8 +328,12 @@ ENABLE_CHAT = "Enable Chat"
 CHAT_AUTH = "Minimum authentication level to access Chat"
 AUTHBACKENDDOMAINFORMAT = "Advanced Domain to use for LDAP i.e. uid=s,ou=People,dc=example,dc=com"
 TOGGLE_ALL = "Toggle All"
-CALENDAR_REFRESH = "Calendar Refresh"
+CALENDAR_REFRESH = "Calendar Refresh Rate"
 COUCH_URL = "Couchpotato URL"
 COUCH_KEY = "Couchpotato API/Key"
 DELETE_CHAT_DATABASE = "Delete Chat Database"
 INSTALLED_THEME = "Installed Theme"
+PLEX_TAB_URL = "Plex Tab URL - i.e. https://domain.com/plex or https://plex.domain.com"
+RECENT_REFRESH = "Recent Items Refresh Rate"
+NOW_PLAYING_REFRESH = "Now Playing Refresh Rate"
+REQUEST_REFRESH = "Requests Refresh Rate"

Разница между файлами не показана из-за своего большого размера
+ 370 - 105
settings.php


+ 78 - 53
user.php

@@ -7,17 +7,17 @@
 	 *	entry is assigned a new random token,  which is used in
 	 * salting subsequent password checks.
 	 */
-	
+
 	// Include functions if not already included
 	require_once('functions.php');
-	 
+
     // Autoload frameworks
 	require_once(__DIR__ . '/vendor/autoload.php');
-	
+
     // Lazyload settings
 	$databaseConfig = configLazy(__DIR__ . '/config/config.php');
 
-    if(file_exists('custom.css')) : define('CUSTOMCSS', 'true'); else : define('CUSTOMCSS', 'false'); endif; 
+    if(file_exists('custom.css')) : define('CUSTOMCSS', 'true'); else : define('CUSTOMCSS', 'false'); endif;
     $notifyExplode = explode("-", NOTIFYEFFECT);
     define('FAIL_LOG', 'loginLog.json');
     @date_default_timezone_set(TIMEZONE);
@@ -28,8 +28,6 @@
     }
 
 	define('GUEST_HASH', "guest-".guestHash(0, 5));
-	$group = new User();
-	$group = $group->role;
 
 	class User
 	{
@@ -126,10 +124,10 @@
 		var $group = "";
 		// global database handle
 		var $database = false;
-        
+
         //EMAIL SHIT
         function startEmail($email, $username, $subject, $body){
-            
+
             $mail = new PHPMailer;
             $mail->isSMTP();
             $mail->Host = SMTPHOST;
@@ -151,9 +149,9 @@
             } else {
                 $this->info('E-Mail sent!');
             }
-            
+
         }
-       
+
 		// class object constructor
 		function __construct($registration_callback=false)
 		{
@@ -243,7 +241,7 @@
 				$this->info("<strong>log in error:</strong> password did not pass validation");
 				return false; }
 			// step 2: if validation passed, log the user in
-			return $this->login_user($username, $sha1, $rememberMe == "true", $password); 
+			return $this->login_user($username, $sha1, $rememberMe == "true", $password);
 		}
 		/**
 		 * Called when the requested POST operation is "logout"
@@ -303,12 +301,12 @@
 				$domain = getServerPath();
 				$body = orgEmail(
 					$header = $language->translate('EMAIL_NEWUSER_HEADER'),
-					$title = $language->translate('EMAIL_NEWUSER_TITLE'), 
-					$user = $username, 
+					$title = $language->translate('EMAIL_NEWUSER_TITLE'),
+					$user = $username,
 					$mainMessage =$language->translate('EMAIL_NEWUSER_MESSAGE'),
 					$button = $language->translate('EMAIL_NEWUSER_BUTTON'),
-					$buttonURL = $domain, 
-					$subTitle = $language->translate('EMAIL_NEWUSER_SUBTITLE'), 
+					$buttonURL = $domain,
+					$subTitle = $language->translate('EMAIL_NEWUSER_SUBTITLE'),
 					$subMessage = $language->translate('EMAIL_NEWUSER_SUBMESSAGE')
 					);
                 $this->startEmail($email, $username, $subject, $body);
@@ -348,7 +346,7 @@
 			if($email !="" && preg_match(User::emailregexp, $email)==0) {
 				$this->info("<strong>invite error:</strong> email address did not pass validation");
 				writeLog("error", "$email didn't pass validation");
-				return false; 
+				return false;
 			}
 			// step 2: if validation passed, send the user's information for invite
 			return $this->invite_user($username, $email, $server);
@@ -386,12 +384,12 @@
 			$domain = getServerPath();
 			$body = orgEmail(
 					$header = $language->translate('EMAIL_RESET_HEADER'),
-					$title = $language->translate('EMAIL_RESET_TITLE'), 
-					$user = $username, 
+					$title = $language->translate('EMAIL_RESET_TITLE'),
+					$user = $username,
 					$mainMessage =$language->translate('EMAIL_RESET_MESSAGE')."<br/>".$newpassword,
 					$button = $language->translate('EMAIL_RESET_BUTTON'),
-					$buttonURL = $domain, 
-					$subTitle = $language->translate('EMAIL_RESET_SUBTITLE'), 
+					$buttonURL = $domain,
+					$subTitle = $language->translate('EMAIL_RESET_SUBTITLE'),
 					$subMessage = $language->translate('EMAIL_RESET_SUBMESSAGE')
 					);
             $this->startEmail($email, $username, $subject, $body);
@@ -419,6 +417,12 @@
             unset($_COOKIE['cookiePassword']);
             setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
             setcookie("cookiePassword", '', time() - 3600, '/');
+			unset($_COOKIE['Auth']);
+            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+            setcookie("Auth", '', time() - 3600, '/');
+			unset($_COOKIE['mpt']);
+            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+            setcookie("mpt", '', time() - 3600, '/');
 		}
 		/**
 		 * Validate a username. Empty usernames or names
@@ -452,11 +456,11 @@
 		{
 			// actually logged in?
 			if($this->is_user_active($username)===false) { return false; }
-            
+
 			// logged in, but do the tokens match?
 			$token = $this->get_user_token($username);
             if(MULTIPLELOGIN == "false"){
-            
+
                 if(isset($_COOKIE["Organizr"])){
                     if($_COOKIE["Organizr"] == $token){
                         return true;
@@ -471,28 +475,34 @@
                         unset($_COOKIE['cookiePassword']);
                         setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
                         setcookie("cookiePassword", '', time() - 3600, '/');
+						unset($_COOKIE['Auth']);
+			            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+			            setcookie("Auth", '', time() - 3600, '/');
+						unset($_COOKIE['mpt']);
+			            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+			            setcookie("mpt", '', time() - 3600, '/');
                         return false;
                     }
                 }else{
                     if($token != $_SESSION["token"]) {
-                        
+
                         $this->error("token mismatch for $username");
-                        return false; 
-                    
+                        return false;
+
                     }
                     // active, using the correct token -> authenticated
                      setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
                      return true;
-                    
+
                 }
-                
+
             }else{
-                
+
                 setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
                 return true;
-                
-            }    
-            
+
+            }
+
 		}
 		/**
 		 * Unicode friendly(ish) version of strtolower
@@ -537,7 +547,7 @@
 			$username = strtolower($username);
 			$dbpassword = $this->token_hash_password($username, $sha1, "");
 			if($dbpassword==$sha1) die("password hashing is not implemented.");
-            $newRole = "admin"; 
+            $newRole = "admin";
             $queryAdmin = "SELECT username FROM users";
             foreach($this->database->query($queryAdmin) as $data) {
                 $newRole = "user";
@@ -550,7 +560,7 @@
 					$this->error = "this user name is already being used by someone else.";
                     $this->error("this user name is already being used by someone else.");
 					return false; }
-			} else {	
+			} else {
 				$query = "SELECT username FROM users";
 				$usernames = array();
 				foreach($this->database->query($query) as $data) { $usernames[] = $this->homogenise_username($data["username"]); }
@@ -567,7 +577,7 @@
 					$this->info("user account for $username not created.");
 					$this->error = "this email address is already in use by someone else.";
 					$this->error("this email address is already in use by someone else.");
-					return false; 
+					return false;
 				}
 			} else {
 				$email = $this->random_ascii_string(32).'@placeholder.eml';
@@ -599,16 +609,16 @@
 		 */
 		function login_user($username, $sha1, $remember, $password, $surface = true) {
 			$username = strtolower($username);
-			
+
             $buildLog = function($username, $authType) {
                 if(file_exists(FAIL_LOG)) {
                     $getFailLog = str_replace("\r\ndate", "date", file_get_contents(FAIL_LOG));
                     $gotFailLog = json_decode($getFailLog, true);
                 }
-                
+
                 $failLogEntryFirst = array('logType' => 'login_log', 'auth' => array(array('date' => date("Y-m-d H:i:s"), 'username' => $username, 'ip' => $_SERVER['REMOTE_ADDR'], 'auth_type' => $authType)));
                 $failLogEntry = array('date' => date("Y-m-d H:i:s"), 'username' => $username, 'ip' => $_SERVER['REMOTE_ADDR'], 'auth_type' => $authType);
-                if(isset($gotFailLog)) { 
+                if(isset($gotFailLog)) {
                     array_push($gotFailLog["auth"], $failLogEntry);
                     $writeFailLog = str_replace("date", "\r\ndate", json_encode($gotFailLog));
                 } else {
@@ -616,7 +626,7 @@
                 }
                 return $writeFailLog;
             };
-			
+
 			// External Authentication
 			$authSuccess = false;
 			$function = 'plugin_auth_'.AUTHBACKEND;
@@ -640,14 +650,14 @@
 							} else {
 								// Legacy - Less Secure
 								$dbpassword = $this->token_hash_password($username, $sha1, $this->get_user_token($username));
-								if($dbpassword==$data["password"]) { 
+								if($dbpassword==$data["password"]) {
 									$authSuccess = true;
 								}
 							}
 						}
 					}
 			}
-			
+
 			if ($authSuccess) {
 				// Make sure user exists in database
 				$query = "SELECT username FROM users WHERE username = '".$username."' COLLATE NOCASE";
@@ -656,7 +666,7 @@
 					$userExists = true;
 					break;
 				}
-				
+
 				if ($userExists) {
 					// authentication passed - 1) mark active and update token
 					$this->mark_user_active($username);
@@ -665,14 +675,23 @@
 					if($remember == "true") {
 						setcookie("Organizr", $this->get_user_token($username), time() + (86400 * 7), "/", DOMAIN);
 						setcookie("OrganizrU", $username, time() + (86400 * 7), "/", DOMAIN);
-						
+
+					}
+					if(OMBIURL){
+						$ombiToken = getOmbiToken($username, $password);
+						if($ombiToken){
+							setcookie("Auth", $ombiToken, time() + (86400 * 7), "/", DOMAIN);
+						}
+					}
+					if(PLEXURL && isset($authSuccess['token'])){
+						setcookie("mpt", $authSuccess['token'], time() + (86400 * 7), "/", DOMAIN);
 					}
 					$this->info("Welcome $username");
 					file_put_contents(FAIL_LOG, $buildLog($username, "good_auth"));
 					chmod(FAIL_LOG, 0660);
 					setcookie("cookiePassword", COOKIEPASSWORD, time() + (86400 * 7), "/", DOMAIN);
      				writeLog("success", "$username has logged in");
-					return true; 
+					return true;
 				} else if (AUTHBACKENDCREATE !== 'false' && $surface) {
 					// Create User
 					$falseByRef = false;
@@ -684,7 +703,7 @@
 					chmod(FAIL_LOG, 0660);
 					if(User::unsafe_reporting) { $this->error = "Successful Backend Auth, $username not in DB, Create Set to False."; $this->error("Successful Backend Auth, $username not in DB, Create Set to False."); }
 					else { $this->error = "Not permitted to login as this user, please contact an administrator."; $this->error("Not permitted to login as this user, please contact an administrator"); }
-					return false; 
+					return false;
 				}
 			} else if (!$authSuccess) {
 				// authentication failed
@@ -694,7 +713,7 @@
 				chmod(FAIL_LOG, 0660);
 				if(User::unsafe_reporting) { $this->error = "incorrect password for $username."; $this->error("incorrect password for $username."); }
 				else { $this->error = "the specified username/password combination is incorrect."; $this->error("the specified username/password combination is incorrect."); }
-				return false; 
+				return false;
 			} else {
 				// authentication could not take place
 				//$this->info("there was no user $username in the database");
@@ -735,7 +754,7 @@
     		writeLog("success", "PLEX INVITE: $id has been deleted");
 			return true;
 		}
-		
+
 		/**
 		 * Invite using a user's information
 		 */
@@ -763,12 +782,12 @@
 				$subject = DOMAIN . " $uServer ".$language->translate('INVITE_CODE');
 				$body = orgEmail(
 					$header = explosion($language->translate('EMAIL_INVITE_HEADER'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_HEADER'), 1),
-					$title = $language->translate('EMAIL_INVITE_TITLE'), 
-					$user = $username, 
+					$title = $language->translate('EMAIL_INVITE_TITLE'),
+					$user = $username,
 					$mainMessage = explosion($language->translate('EMAIL_INVITE_MESSAGE'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_MESSAGE'), 1)." ".$inviteCode,
 					$button = explosion($language->translate('EMAIL_INVITE_BUTTON'), 0)." ".$uServer." ".explosion($language->translate('EMAIL_INVITE_BUTTON'), 1),
-					$buttonURL = $link, 
-					$subTitle = $language->translate('EMAIL_INVITE_SUBTITLE'), 
+					$buttonURL = $link,
+					$subTitle = $language->translate('EMAIL_INVITE_SUBTITLE'),
 					$subMessage = explosion($language->translate('EMAIL_INVITE_SUBMESSAGE'), 0)." <a href='".$domain."?inviteCode'>".$domain."</a> ".explosion($language->translate('EMAIL_INVITE_SUBMESSAGE'), 1)
 					);
                 $this->startEmail($email, $username, $subject, $body);
@@ -792,6 +811,12 @@
             unset($_COOKIE['cookiePassword']);
             setcookie("cookiePassword", '', time() - 3600, '/', DOMAIN);
             setcookie("cookiePassword", '', time() - 3600, '/');
+			unset($_COOKIE['Auth']);
+            setcookie("Auth", '', time() - 3600, '/', DOMAIN);
+            setcookie("Auth", '', time() - 3600, '/');
+			unset($_COOKIE['mpt']);
+            setcookie("mpt", '', time() - 3600, '/', DOMAIN);
+            setcookie("mpt", '', time() - 3600, '/');
    			writeLog("success", "$username has signed out");
 			return true;
 		}
@@ -816,7 +841,7 @@
 		 */
 		function token_hash_password($username, $sha1, $token)
 		{
-			
+
 			return hash("sha256",($this->database->query('SELECT username FROM users WHERE username = \''.$username.'\' COLLATE NOCASE')->fetch()['username']).$sha1.$token);
 		}
 		/**
@@ -845,7 +870,7 @@
 				foreach($this->database->query($query) as $data) { return $data["role"]; }}
 			return "guest";
 		}
-        
+
        /* function get_user_group($username)
 		{
 			if($username && $username !="" && $username !=User::GUEST_USER) {
@@ -876,7 +901,7 @@
 			$update = "UPDATE users SET password = '$newpassword' WHERE username = '$username' COLLATE NOCASE";
 			$this->database->exec($update);
 			if($noMsg == "false"){
-                $this->info("token and password updated for <strong>$username</strong>");   
+                $this->info("token and password updated for <strong>$username</strong>");
             }
 			return $token;
 		}

+ 169 - 0
vendor/composer/autoload_classmap.php

@@ -6,12 +6,181 @@ $vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 
 return array(
+    'Clue\\StreamFilter\\CallbackFilter' => $vendorDir . '/clue/stream-filter/src/CallbackFilter.php',
     'EasyPeasyICS' => $vendorDir . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+    'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
+    'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
+    'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
+    'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
+    'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
+    'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
+    'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
+    'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
+    'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
+    'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
+    'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+    'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
+    'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
+    'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
+    'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
+    'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
+    'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
+    'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
+    'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
+    'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
+    'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
+    'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
+    'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
+    'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
+    'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
+    'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
+    'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
+    'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
+    'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
+    'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
+    'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
+    'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
+    'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
+    'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
+    'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
+    'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
+    'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
+    'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
+    'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
+    'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
+    'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
+    'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
+    'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
+    'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
+    'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
+    'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
+    'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
+    'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
+    'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
+    'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
+    'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
+    'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
+    'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
+    'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
+    'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
+    'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
+    'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
+    'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
+    'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
+    'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
+    'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
+    'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
+    'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
+    'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
+    'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
+    'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
+    'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
+    'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
+    'Http\\Adapter\\Guzzle6\\Client' => $vendorDir . '/php-http/guzzle6-adapter/src/Client.php',
+    'Http\\Adapter\\Guzzle6\\Promise' => $vendorDir . '/php-http/guzzle6-adapter/src/Promise.php',
+    'Http\\Client\\Exception' => $vendorDir . '/php-http/httplug/src/Exception.php',
+    'Http\\Client\\Exception\\HttpException' => $vendorDir . '/php-http/httplug/src/Exception/HttpException.php',
+    'Http\\Client\\Exception\\NetworkException' => $vendorDir . '/php-http/httplug/src/Exception/NetworkException.php',
+    'Http\\Client\\Exception\\RequestException' => $vendorDir . '/php-http/httplug/src/Exception/RequestException.php',
+    'Http\\Client\\Exception\\TransferException' => $vendorDir . '/php-http/httplug/src/Exception/TransferException.php',
+    'Http\\Client\\HttpAsyncClient' => $vendorDir . '/php-http/httplug/src/HttpAsyncClient.php',
+    'Http\\Client\\HttpClient' => $vendorDir . '/php-http/httplug/src/HttpClient.php',
+    'Http\\Client\\Promise\\HttpFulfilledPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
+    'Http\\Client\\Promise\\HttpRejectedPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
+    'Http\\Discovery\\ClassDiscovery' => $vendorDir . '/php-http/discovery/src/ClassDiscovery.php',
+    'Http\\Discovery\\Exception' => $vendorDir . '/php-http/discovery/src/Exception.php',
+    'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => $vendorDir . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
+    'Http\\Discovery\\Exception\\DiscoveryFailedException' => $vendorDir . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
+    'Http\\Discovery\\Exception\\NotFoundException' => $vendorDir . '/php-http/discovery/src/Exception/NotFoundException.php',
+    'Http\\Discovery\\Exception\\PuliUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
+    'Http\\Discovery\\Exception\\StrategyUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
+    'Http\\Discovery\\HttpAsyncClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
+    'Http\\Discovery\\HttpClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpClientDiscovery.php',
+    'Http\\Discovery\\MessageFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/MessageFactoryDiscovery.php',
+    'Http\\Discovery\\NotFoundException' => $vendorDir . '/php-http/discovery/src/NotFoundException.php',
+    'Http\\Discovery\\Strategy\\CommonClassesStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
+    'Http\\Discovery\\Strategy\\DiscoveryStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
+    'Http\\Discovery\\Strategy\\MockClientStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
+    'Http\\Discovery\\Strategy\\PuliBetaStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
+    'Http\\Discovery\\StreamFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/StreamFactoryDiscovery.php',
+    'Http\\Discovery\\UriFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/UriFactoryDiscovery.php',
+    'Http\\Message\\Authentication' => $vendorDir . '/php-http/message/src/Authentication.php',
+    'Http\\Message\\Authentication\\AutoBasicAuth' => $vendorDir . '/php-http/message/src/Authentication/AutoBasicAuth.php',
+    'Http\\Message\\Authentication\\BasicAuth' => $vendorDir . '/php-http/message/src/Authentication/BasicAuth.php',
+    'Http\\Message\\Authentication\\Bearer' => $vendorDir . '/php-http/message/src/Authentication/Bearer.php',
+    'Http\\Message\\Authentication\\Chain' => $vendorDir . '/php-http/message/src/Authentication/Chain.php',
+    'Http\\Message\\Authentication\\Matching' => $vendorDir . '/php-http/message/src/Authentication/Matching.php',
+    'Http\\Message\\Authentication\\QueryParam' => $vendorDir . '/php-http/message/src/Authentication/QueryParam.php',
+    'Http\\Message\\Authentication\\RequestConditional' => $vendorDir . '/php-http/message/src/Authentication/RequestConditional.php',
+    'Http\\Message\\Authentication\\Wsse' => $vendorDir . '/php-http/message/src/Authentication/Wsse.php',
+    'Http\\Message\\Builder\\ResponseBuilder' => $vendorDir . '/php-http/message/src/Builder/ResponseBuilder.php',
+    'Http\\Message\\Cookie' => $vendorDir . '/php-http/message/src/Cookie.php',
+    'Http\\Message\\CookieJar' => $vendorDir . '/php-http/message/src/CookieJar.php',
+    'Http\\Message\\Decorator\\MessageDecorator' => $vendorDir . '/php-http/message/src/Decorator/MessageDecorator.php',
+    'Http\\Message\\Decorator\\RequestDecorator' => $vendorDir . '/php-http/message/src/Decorator/RequestDecorator.php',
+    'Http\\Message\\Decorator\\ResponseDecorator' => $vendorDir . '/php-http/message/src/Decorator/ResponseDecorator.php',
+    'Http\\Message\\Decorator\\StreamDecorator' => $vendorDir . '/php-http/message/src/Decorator/StreamDecorator.php',
+    'Http\\Message\\Encoding\\ChunkStream' => $vendorDir . '/php-http/message/src/Encoding/ChunkStream.php',
+    'Http\\Message\\Encoding\\CompressStream' => $vendorDir . '/php-http/message/src/Encoding/CompressStream.php',
+    'Http\\Message\\Encoding\\DechunkStream' => $vendorDir . '/php-http/message/src/Encoding/DechunkStream.php',
+    'Http\\Message\\Encoding\\DecompressStream' => $vendorDir . '/php-http/message/src/Encoding/DecompressStream.php',
+    'Http\\Message\\Encoding\\DeflateStream' => $vendorDir . '/php-http/message/src/Encoding/DeflateStream.php',
+    'Http\\Message\\Encoding\\Filter\\Chunk' => $vendorDir . '/php-http/message/src/Encoding/Filter/Chunk.php',
+    'Http\\Message\\Encoding\\FilteredStream' => $vendorDir . '/php-http/message/src/Encoding/FilteredStream.php',
+    'Http\\Message\\Encoding\\GzipDecodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipDecodeStream.php',
+    'Http\\Message\\Encoding\\GzipEncodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipEncodeStream.php',
+    'Http\\Message\\Encoding\\InflateStream' => $vendorDir . '/php-http/message/src/Encoding/InflateStream.php',
+    'Http\\Message\\Formatter' => $vendorDir . '/php-http/message/src/Formatter.php',
+    'Http\\Message\\Formatter\\CurlCommandFormatter' => $vendorDir . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
+    'Http\\Message\\Formatter\\FullHttpMessageFormatter' => $vendorDir . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
+    'Http\\Message\\Formatter\\SimpleFormatter' => $vendorDir . '/php-http/message/src/Formatter/SimpleFormatter.php',
+    'Http\\Message\\MessageFactory' => $vendorDir . '/php-http/message-factory/src/MessageFactory.php',
+    'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
+    'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
+    'Http\\Message\\MessageFactory\\SlimMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
+    'Http\\Message\\RequestFactory' => $vendorDir . '/php-http/message-factory/src/RequestFactory.php',
+    'Http\\Message\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
+    'Http\\Message\\RequestMatcher\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
+    'Http\\Message\\ResponseFactory' => $vendorDir . '/php-http/message-factory/src/ResponseFactory.php',
+    'Http\\Message\\StreamFactory' => $vendorDir . '/php-http/message-factory/src/StreamFactory.php',
+    'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
+    'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
+    'Http\\Message\\StreamFactory\\SlimStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
+    'Http\\Message\\Stream\\BufferedStream' => $vendorDir . '/php-http/message/src/Stream/BufferedStream.php',
+    'Http\\Message\\UriFactory' => $vendorDir . '/php-http/message-factory/src/UriFactory.php',
+    'Http\\Message\\UriFactory\\DiactorosUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
+    'Http\\Message\\UriFactory\\GuzzleUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
+    'Http\\Message\\UriFactory\\SlimUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/SlimUriFactory.php',
+    'Http\\Promise\\FulfilledPromise' => $vendorDir . '/php-http/promise/src/FulfilledPromise.php',
+    'Http\\Promise\\Promise' => $vendorDir . '/php-http/promise/src/Promise.php',
+    'Http\\Promise\\RejectedPromise' => $vendorDir . '/php-http/promise/src/RejectedPromise.php',
+    'Kryptonit3\\CouchPotato\\CouchPotato' => $vendorDir . '/kryptonit3/couchpotato/src/CouchPotato.php',
+    'Kryptonit3\\CouchPotato\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/couchpotato/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\SickRage\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/sickrage/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\SickRage\\SickRage' => $vendorDir . '/kryptonit3/sickrage/src/SickRage.php',
+    'Kryptonit3\\Sonarr\\Exceptions\\InvalidException' => $vendorDir . '/kryptonit3/sonarr/src/Exceptions/InvalidException.php',
+    'Kryptonit3\\Sonarr\\Sonarr' => $vendorDir . '/kryptonit3/sonarr/src/Sonarr.php',
     'PHPMailer' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
     'PHPMailerOAuth' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauth.php',
     'PHPMailerOAuthGoogle' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
     'POP3' => $vendorDir . '/phpmailer/phpmailer/class.pop3.php',
+    'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
+    'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
+    'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
+    'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
+    'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
+    'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
+    'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
     'SMTP' => $vendorDir . '/phpmailer/phpmailer/class.smtp.php',
+    'SparkPost\\Resource' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/Resource.php',
+    'SparkPost\\ResourceBase' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/ResourceBase.php',
+    'SparkPost\\SparkPost' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPost.php',
+    'SparkPost\\SparkPostException' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostException.php',
+    'SparkPost\\SparkPostPromise' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostPromise.php',
+    'SparkPost\\SparkPostResponse' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/SparkPostResponse.php',
+    'SparkPost\\Transmission' => $vendorDir . '/sparkpost/sparkpost/lib/SparkPost/Transmission.php',
     'ntlm_sasl_client_class' => $vendorDir . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
     'phpmailerException' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
 );

+ 169 - 0
vendor/composer/autoload_static.php

@@ -110,12 +110,181 @@ class ComposerStaticInitbe7ec48d1178705ed9a8e33459c0af96
     );
 
     public static $classMap = array (
+        'Clue\\StreamFilter\\CallbackFilter' => __DIR__ . '/..' . '/clue/stream-filter/src/CallbackFilter.php',
         'EasyPeasyICS' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+        'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
+        'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php',
+        'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
+        'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
+        'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
+        'GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
+        'GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
+        'GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
+        'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
+        'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
+        'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+        'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
+        'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
+        'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
+        'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
+        'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
+        'GuzzleHttp\\HandlerStack' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HandlerStack.php',
+        'GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
+        'GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
+        'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
+        'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
+        'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
+        'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
+        'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
+        'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
+        'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php',
+        'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php',
+        'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php',
+        'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
+        'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php',
+        'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php',
+        'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php',
+        'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php',
+        'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php',
+        'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php',
+        'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php',
+        'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php',
+        'GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectedPromise.php',
+        'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php',
+        'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php',
+        'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php',
+        'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php',
+        'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php',
+        'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php',
+        'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php',
+        'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php',
+        'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php',
+        'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php',
+        'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php',
+        'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php',
+        'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php',
+        'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php',
+        'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php',
+        'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php',
+        'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php',
+        'GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequest.php',
+        'GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Stream.php',
+        'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
+        'GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamWrapper.php',
+        'GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFile.php',
+        'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php',
+        'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php',
+        'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php',
+        'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
+        'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php',
+        'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
+        'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php',
+        'GuzzleHttp\\UriTemplate' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/UriTemplate.php',
+        'Http\\Adapter\\Guzzle6\\Client' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Client.php',
+        'Http\\Adapter\\Guzzle6\\Promise' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Promise.php',
+        'Http\\Client\\Exception' => __DIR__ . '/..' . '/php-http/httplug/src/Exception.php',
+        'Http\\Client\\Exception\\HttpException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/HttpException.php',
+        'Http\\Client\\Exception\\NetworkException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/NetworkException.php',
+        'Http\\Client\\Exception\\RequestException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/RequestException.php',
+        'Http\\Client\\Exception\\TransferException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/TransferException.php',
+        'Http\\Client\\HttpAsyncClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpAsyncClient.php',
+        'Http\\Client\\HttpClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpClient.php',
+        'Http\\Client\\Promise\\HttpFulfilledPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
+        'Http\\Client\\Promise\\HttpRejectedPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
+        'Http\\Discovery\\ClassDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/ClassDiscovery.php',
+        'Http\\Discovery\\Exception' => __DIR__ . '/..' . '/php-http/discovery/src/Exception.php',
+        'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
+        'Http\\Discovery\\Exception\\DiscoveryFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
+        'Http\\Discovery\\Exception\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/NotFoundException.php',
+        'Http\\Discovery\\Exception\\PuliUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
+        'Http\\Discovery\\Exception\\StrategyUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
+        'Http\\Discovery\\HttpAsyncClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
+        'Http\\Discovery\\HttpClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpClientDiscovery.php',
+        'Http\\Discovery\\MessageFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/MessageFactoryDiscovery.php',
+        'Http\\Discovery\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/NotFoundException.php',
+        'Http\\Discovery\\Strategy\\CommonClassesStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
+        'Http\\Discovery\\Strategy\\DiscoveryStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
+        'Http\\Discovery\\Strategy\\MockClientStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
+        'Http\\Discovery\\Strategy\\PuliBetaStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
+        'Http\\Discovery\\StreamFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/StreamFactoryDiscovery.php',
+        'Http\\Discovery\\UriFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/UriFactoryDiscovery.php',
+        'Http\\Message\\Authentication' => __DIR__ . '/..' . '/php-http/message/src/Authentication.php',
+        'Http\\Message\\Authentication\\AutoBasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/AutoBasicAuth.php',
+        'Http\\Message\\Authentication\\BasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/BasicAuth.php',
+        'Http\\Message\\Authentication\\Bearer' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Bearer.php',
+        'Http\\Message\\Authentication\\Chain' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Chain.php',
+        'Http\\Message\\Authentication\\Matching' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Matching.php',
+        'Http\\Message\\Authentication\\QueryParam' => __DIR__ . '/..' . '/php-http/message/src/Authentication/QueryParam.php',
+        'Http\\Message\\Authentication\\RequestConditional' => __DIR__ . '/..' . '/php-http/message/src/Authentication/RequestConditional.php',
+        'Http\\Message\\Authentication\\Wsse' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Wsse.php',
+        'Http\\Message\\Builder\\ResponseBuilder' => __DIR__ . '/..' . '/php-http/message/src/Builder/ResponseBuilder.php',
+        'Http\\Message\\Cookie' => __DIR__ . '/..' . '/php-http/message/src/Cookie.php',
+        'Http\\Message\\CookieJar' => __DIR__ . '/..' . '/php-http/message/src/CookieJar.php',
+        'Http\\Message\\Decorator\\MessageDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/MessageDecorator.php',
+        'Http\\Message\\Decorator\\RequestDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/RequestDecorator.php',
+        'Http\\Message\\Decorator\\ResponseDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/ResponseDecorator.php',
+        'Http\\Message\\Decorator\\StreamDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/StreamDecorator.php',
+        'Http\\Message\\Encoding\\ChunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/ChunkStream.php',
+        'Http\\Message\\Encoding\\CompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/CompressStream.php',
+        'Http\\Message\\Encoding\\DechunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DechunkStream.php',
+        'Http\\Message\\Encoding\\DecompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DecompressStream.php',
+        'Http\\Message\\Encoding\\DeflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DeflateStream.php',
+        'Http\\Message\\Encoding\\Filter\\Chunk' => __DIR__ . '/..' . '/php-http/message/src/Encoding/Filter/Chunk.php',
+        'Http\\Message\\Encoding\\FilteredStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/FilteredStream.php',
+        'Http\\Message\\Encoding\\GzipDecodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipDecodeStream.php',
+        'Http\\Message\\Encoding\\GzipEncodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipEncodeStream.php',
+        'Http\\Message\\Encoding\\InflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/InflateStream.php',
+        'Http\\Message\\Formatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter.php',
+        'Http\\Message\\Formatter\\CurlCommandFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
+        'Http\\Message\\Formatter\\FullHttpMessageFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
+        'Http\\Message\\Formatter\\SimpleFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/SimpleFormatter.php',
+        'Http\\Message\\MessageFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/MessageFactory.php',
+        'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
+        'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
+        'Http\\Message\\MessageFactory\\SlimMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
+        'Http\\Message\\RequestFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/RequestFactory.php',
+        'Http\\Message\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
+        'Http\\Message\\RequestMatcher\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
+        'Http\\Message\\ResponseFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/ResponseFactory.php',
+        'Http\\Message\\StreamFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/StreamFactory.php',
+        'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
+        'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
+        'Http\\Message\\StreamFactory\\SlimStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
+        'Http\\Message\\Stream\\BufferedStream' => __DIR__ . '/..' . '/php-http/message/src/Stream/BufferedStream.php',
+        'Http\\Message\\UriFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/UriFactory.php',
+        'Http\\Message\\UriFactory\\DiactorosUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
+        'Http\\Message\\UriFactory\\GuzzleUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
+        'Http\\Message\\UriFactory\\SlimUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/SlimUriFactory.php',
+        'Http\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/php-http/promise/src/FulfilledPromise.php',
+        'Http\\Promise\\Promise' => __DIR__ . '/..' . '/php-http/promise/src/Promise.php',
+        'Http\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/php-http/promise/src/RejectedPromise.php',
+        'Kryptonit3\\CouchPotato\\CouchPotato' => __DIR__ . '/..' . '/kryptonit3/couchpotato/src/CouchPotato.php',
+        'Kryptonit3\\CouchPotato\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/couchpotato/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\SickRage\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/sickrage/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\SickRage\\SickRage' => __DIR__ . '/..' . '/kryptonit3/sickrage/src/SickRage.php',
+        'Kryptonit3\\Sonarr\\Exceptions\\InvalidException' => __DIR__ . '/..' . '/kryptonit3/sonarr/src/Exceptions/InvalidException.php',
+        'Kryptonit3\\Sonarr\\Sonarr' => __DIR__ . '/..' . '/kryptonit3/sonarr/src/Sonarr.php',
         'PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
         'PHPMailerOAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauth.php',
         'PHPMailerOAuthGoogle' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
         'POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.pop3.php',
+        'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
+        'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
+        'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
+        'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
+        'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
+        'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
+        'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
         'SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.smtp.php',
+        'SparkPost\\Resource' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/Resource.php',
+        'SparkPost\\ResourceBase' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/ResourceBase.php',
+        'SparkPost\\SparkPost' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPost.php',
+        'SparkPost\\SparkPostException' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostException.php',
+        'SparkPost\\SparkPostPromise' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostPromise.php',
+        'SparkPost\\SparkPostResponse' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/SparkPostResponse.php',
+        'SparkPost\\Transmission' => __DIR__ . '/..' . '/sparkpost/sparkpost/lib/SparkPost/Transmission.php',
         'ntlm_sasl_client_class' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
         'phpmailerException' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
     );

Некоторые файлы не были показаны из-за большого количества измененных файлов