diff --git a/app/Http/Controllers/StartpageController.php b/app/Http/Controllers/StartpageController.php index b144a13507e6512d5faa47a0adb7d1b85816331e..9df592c56a618f667d6342144c7357010ba1c717 100644 --- a/app/Http/Controllers/StartpageController.php +++ b/app/Http/Controllers/StartpageController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Response; class StartpageController extends Controller { @@ -64,4 +65,35 @@ class StartpageController extends Controller \App::setLocale($locale); return loadPage($subpage); } + + public function loadPlugin(Request $request, $locale = "de") + { + $requests = $request->all(); + $params = []; + foreach($requests as $key => $value) + { + if( strpos($key, "param_") === 0 ) + { + $key = substr($key, strpos($key, "param_") + 6 ); + } + $params[$key] = $value; + } + + if(!isset($params['focus'])) + $params['focus'] = 'web'; + if(!isset($params['encoding'])) + $params['encoding'] = 'utf8'; + if(!isset($params['lang'])) + $params['lang'] = 'all'; + $params["eingabe"] = ""; + + + $link = action('MetaGerSearch@search', $params); + + $response = Response::make( + view('plugin')->with('link', $link), "200"); + $response->header('Content-Type', "application/xml"); + return $response; + return $link; + } } \ No newline at end of file diff --git a/app/Http/routes.php b/app/Http/routes.php index cb96a5c7e258c44b2b4be03a722ae4fa04733336..ac4592b65ee7e5d34870b796c653fd05f0194987 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -101,4 +101,5 @@ Route::get('qt', 'MetaGerSearch@quicktips'); Route::get('tips', 'MetaGerSearch@tips'); + Route::get('opensearch.xml', 'StartpageController@loadPlugin'); }); diff --git a/app/MetaGer.php b/app/MetaGer.php index 5206bd9ca6787ce862b1d1a24c467869fc789231..9d2a682e58c203626dda6a9045bad1589e1c0213 100644 --- a/app/MetaGer.php +++ b/app/MetaGer.php @@ -91,7 +91,13 @@ class MetaGer switch ($this->out) { case 'results': - return ''; + return view('metager3bilderresults') + ->with('results', $viewResults) + ->with('eingabe', $this->eingabe) + ->with('mobile', $this->mobile) + ->with('warnings', $this->warnings) + ->with('errors', $this->errors) + ->with('metager', $this); default: return view('metager3bilder') ->with('results', $viewResults) @@ -218,7 +224,6 @@ class MetaGer #die(SocketRocket::get("tls", "dominik-pfennig.de", "", 443)); - # Ãœberprüfe, welche Sumas eingeschaltet sind $xml = simplexml_load_file($this->sumaFile); $enabledSearchengines = []; @@ -239,12 +244,12 @@ class MetaGer foreach($sumas as $suma) { if($request->has($suma["service"]) - || ( $this->fokus !== "bilder" - && ($suma["name"]->__toString() === "qualigo" - || $suma["name"]->__toString() === "similar_product_ads" - || ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" ) - ) - ) + #|| ( $this->fokus !== "bilder" + # && ($suma["name"]->__toString() === "qualigo" + # || $suma["name"]->__toString() === "similar_product_ads" + # || ( !$overtureEnabled && $suma["name"]->__toString() === "overtureAds" ) + # ) + # ) #|| 1 === 1 #Todo: entfernen ){ @@ -286,7 +291,7 @@ class MetaGer } } - if( ( $this->fokus !== "bilder" && $countSumas <= 0 ) || ( $this->fokus === "bilder" && sizeof($enabledSearchengines) === 0) ) + if( $countSumas <= 0 ) { $this->errors[] = "Achtung: Sie haben in ihren Einstellungen keine Suchmaschine ausgewählt."; } @@ -316,19 +321,48 @@ class MetaGer $this->sockets[$tmp->name] = $tmp->fp; } } - # Nun passiert ein elementarer Schritt. # Wir warten auf die Antwort der Suchmaschinen, da wir vorher nicht weiter machen können. # aber natürlich nicht ewig. # Die Verbindung steht zu diesem Zeitpunkt und auch unsere Request wurde schon gesendet. # Wir geben der Suchmaschine nun bis zu 500ms Zeit zu antworten. - usleep(500000); + # Jetzt lesen wir alles aus, was da ist und verwerfen den Rest: - foreach($engines as $engine) + $enginesToLoad = count($engines); + $loadedEngines = 0; + $time = 0; + while( true ) { - $engine->retrieveResults(); + # Abbruchbedingung + if($time < 500) + { + if($loadedEngines >= $enginesToLoad) + break; + }elseif( $time >= 500 && $time < $this->time) + { + if( ($loadedEngines / ($enginesToLoad * 1.0)) >= 0.8 ) + break; + }else + { + break; + } + foreach($engines as $engine) + { + if(!$engine->loaded) + { + $success = $engine->retrieveResults(); + if($engine->loaded) + $loadedEngines += 1; + } + } + usleep(50000); + $time += 50; + } + foreach( $engines as $engine ) + { + if( !$engine->loaded ) + $engine->shutdown(); } - $this->engines = $engines; } @@ -393,7 +427,8 @@ class MetaGer # Category $this->category = $request->input('category', ''); # Request Times: - $this->time = $request->input('time', 1); + $this->time = $request->input('time', 1000); + # Page $this->page = $request->input('page', 1); # Lang @@ -416,12 +451,12 @@ class MetaGer # Manchmal müssen wir Parameter anpassen um den Sucheinstellungen gerecht zu werden: if( $request->has('dart') ) { - $this->time = 10; + $this->time = 10000; $this->warnings[] = "Hinweis: Sie haben Dart-Europe aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 10 Sekunden hochgesetzt."; } - if( $this->time < 0 || $this->time > 20 ) + if( $this->time <= 500 || $this->time > 20000 ) { - $this->time = 1; + $this->time = 1000; } if( $request->has('minism') && ( $request->has('fportal') || $request->has('harvest') ) ) { @@ -438,7 +473,7 @@ class MetaGer } if( $request->has('ebay') ) { - $this->time = 2; + $this->time = 2000; $this->warnings[] = "Hinweis: Sie haben Ebay aktiviert. Die Suche kann deshalb länger dauern und die maximale Suchzeit wurde auf 2 Sekunden hochgesetzt."; } if( App::isLocale("en") ) diff --git a/app/Models/Searchengine.php b/app/Models/Searchengine.php index 6e0bdce4b04c9df3c9e3a447d0040257acd6e0e4..3feafc2223a1b2c5bd92e17c43514ede00d9cb37 100644 --- a/app/Models/Searchengine.php +++ b/app/Models/Searchengine.php @@ -19,6 +19,7 @@ abstract class Searchengine public $ads = []; public $write_time = 0; public $connection_time = 0; + public $loaded = false; function __construct(\SimpleXMLElement $engine, MetaGer $metager) { @@ -231,6 +232,7 @@ abstract class Searchengine // end of headers if(sizeof($headers) > 1){ $bodySize = 0; + stream_set_blocking($this->fp, 1); if( isset($headers["Transfer-Encoding"]) && $headers["Transfer-Encoding"] === "chunked" ) { $body = $this->readChunked(); @@ -245,6 +247,10 @@ abstract class Searchengine { die("Konnte nicht herausfinden, wie ich die Serverantwort von: " . $this->name . " auslesen soll. Header war: " . print_r($headers)); } + $this->loaded = true; + }else + { + return; } Redis::del($this->host . "." . $this->socketNumber); @@ -253,7 +259,6 @@ abstract class Searchengine { $body = $this->gunzip($body); } - #print_r($headers); #print($body); #print("\r\n". $bodySize); @@ -265,6 +270,12 @@ abstract class Searchengine #exit; } + public function shutdown() + { + fclose($this->fp); + Redis::del($this->host . "." . $this->socketNumber); + } + private function readBody($length) { $theData = ''; diff --git a/public/js/scriptStartPage.js b/public/js/scriptStartPage.js index 6863515c76a294559e2cf323e108f57c2635014c..b53290789dc48cbe9fbdc12b389b093b014dcfd8 100644 --- a/public/js/scriptStartPage.js +++ b/public/js/scriptStartPage.js @@ -50,7 +50,7 @@ function checkPlugin(){ $("#plugin-modal .modal-header h4").html("MetaGer zum Firefox hinzufügen"); var content = "" + "<ol>" + - "<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider('https://metager.de/plugins/opensearchplugin.xml')\">hier</a> um MetaGer als Suchmaschine hinzuzufügen.</li>" + + "<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider($('link[rel=search]').attr('href'))\">hier</a> um MetaGer als Suchmaschine hinzuzufügen.</li>" + "<li>Setzen Sie einen Haken bei \"Diese als aktuelle Suchmaschine setzen\"</li>" + "<li>Klicken Sie auf \"Hinzufügen\"</li>" + "</ol>"; @@ -59,7 +59,7 @@ function checkPlugin(){ $("#plugin-modal .modal-header h4").html("MetaGer zum Chrome hinzufügen"); var content = "" + "<ol>" + - "<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider('https://metager.de/plugins/opensearchplugin.xml')\" onclick=\"$('#more').removeClass('hidden');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" + + "<li>Klicken Sie <a href=\"javascript:window.external.AddSearchProvider($('link[rel=search]').attr('href'))\" onclick=\"$('#more').removeClass('hidden');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" + "<ul id=\"more\" class=\"hidden list-unstyled\">" + "<li>Klicken Sie im Popup auf OK</li>" + "<li><small>(Sollte der OK-Knopf deaktiviert sein, ist MetaGer bereits in Ihren Suchmaschinen. Klicken Sie dann auf Abbrechen und fahren mit Schritt 2 fort.)</small></li>" + @@ -85,7 +85,7 @@ function checkPlugin(){ $("#plugin-modal .modal-header h4").html("MetaGer zum Internet Explorer hinzufügen"); var content = "" + "<ol>" + - "<li>Klicken Sie <a href=\"javascript:window.external.addSearchProvider('https://metager.de/plugins/opensearchplugin.xml');\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" + + "<li>Klicken Sie <a href=\"javascript:window.external.addSearchProvider($('link[rel=search]').attr('href'));\">hier</a>, um MetaGer als Suchmaschine hinzuzufügen" + "<li>Klicken Sie in Ihrem Browser oben rechts auf Extras (<span class=\"glyphicon glyphicon-cog\"></span>)</li>" + "<li>Wählen Sie den Menüpunkt \"Add-Ons verwalten\"</li>" + "<li>Klicken Sie im Bereich Add-On-Typen auf \"Suchanbieter\" und danach im rechten Bereich auf \"MetaGer\"</li>" + diff --git a/public/js/settings.js b/public/js/settings.js index 10ab643fd7316fb590d7623bcf55006b81c7da0f..eb7c6f1f3bdbda14cdc32ccc00ced9c3586beafb 100644 --- a/public/js/settings.js +++ b/public/js/settings.js @@ -32,6 +32,10 @@ $(document).ready(function(){ $("#unten").click(function(){ alert("Auf der folgenden Startseite sind Ihre Einstellungen nun einmalig gespeichert. Nach Ihrer ersten Suche sind diese wieder verloren. Wenn Sie diese speichern möchten, können Sie sich allerdings ein Lesezeichnen einrichten."); }); + $("#plugin").click(function(){ + $("form").attr('action', '/#plugin-modal'); + alert("Ihr Browserplugin mit den persönlichen Sucheinstellungen wurde generiert. Folgen Sie bitte der Anleitung auf der folgenden Seite um es zu installieren. Beachten Sie: Zuvor sollten Sie ein eventuell bereits installiertes MetaGer-Plugin entfernen."); + }); }); function tickOptions(){ diff --git a/resources/views/layouts/staticPages.blade.php b/resources/views/layouts/staticPages.blade.php index 0a2e75344599ed3d51b4b1203b8746e1638e1058..84499f7c13af74f4cbab11fe97b91efd9e2da8b0 100644 --- a/resources/views/layouts/staticPages.blade.php +++ b/resources/views/layouts/staticPages.blade.php @@ -12,7 +12,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <meta rel="icon" type="image/x-icon" href="/favicon.ico" /> <meta rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> - <link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen & finden, Privatsphäre schützen" href="https://metager.de/plugins/opensearchplugin.xml" /> + <link rel="search" type="application/opensearchdescription+xml" title="MetaGer: Sicher suchen & finden, Privatsphäre schützen" href="{{ action('StartpageController@loadPlugin', Request::all()) }}"> <link href="/css/bootstrap.css" rel="stylesheet" /> <link href="/css/style.css" rel="stylesheet" /> @if (isset($css)) diff --git a/resources/views/metager3bilderresults.blade.php b/resources/views/metager3bilderresults.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..249135498207446410e730e0ac7aaa8e0a251423 --- /dev/null +++ b/resources/views/metager3bilderresults.blade.php @@ -0,0 +1,14 @@ +<div id="container"> +@foreach($metager->getResults()->items() as $result) + <div class="item"> + <div class="img"> + <a href="{{ $result->link }}" target="{{ $metager->getTab() }}"> + <img src="{{ $metager->getImageProxyLink($result->image) }}" width="150px" alt="Bild nicht gefunden"/> + </a> + </div> + </div> +@endforeach +</div> +<nav class="pager"> + {!! $metager->getResults()->links() !!} +</nav> \ No newline at end of file diff --git a/resources/views/plugin.blade.php b/resources/views/plugin.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..197e4f232aa27ad5091b13a8ae7ac030de4bb1c5 --- /dev/null +++ b/resources/views/plugin.blade.php @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> + <ShortName>MetaGer</ShortName> + <Description>MetaGer: Sicher suchen & finden, Privatsphäre schützen</Description> + <Contact>office@suma-ev.de</Contact> + <Image width="16" height="16" type="image/x-icon">{{ url('/favicon.ico') }}</Image> + <Url type="text/html" template="{{ $link }}{searchTerms}" method="get"></Url> + <InputEncoding>UTF-8</InputEncoding> +</OpenSearchDescription> \ No newline at end of file diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php index e97de00646dfd3932d95623f9372953b6de9e734..af180d44a773651200124385f1ddf15c0df14ffa 100644 --- a/resources/views/settings.blade.php +++ b/resources/views/settings.blade.php @@ -247,5 +247,6 @@ <input type="checkbox" name="param_loklak">loklak</label><a class="glyphicon glyphicon-link" target="_blank" href="http://loklak.org/"></a></div></div></div></div> <input id="unten" type="submit" class="btn btn-primary" value="Startseite für einmalige Nutzung generieren"> <input type="button" class="btn btn-primary hidden" id="save" value="Einstellungen dauerhaft speichern"> + <input id="plugin" type="submit" class="btn btn-primary" value="Plugin mit diesen Einstellungen generieren."> <input type="button" class="btn btn-danger hidden" id="reset" value="Einstellungen Zurücksetzen"></form> @endsection \ No newline at end of file