Merge branch 'dev'
This commit is contained in:
@@ -1,19 +1,49 @@
|
|||||||
package kinosearch.core;
|
package kinosearch.core;
|
||||||
|
|
||||||
|
import kinosearch.core.warez.KinoWarez;
|
||||||
|
|
||||||
public class Kino {
|
public class Kino {
|
||||||
private String name;
|
private String name;
|
||||||
private String url;
|
private String url;
|
||||||
|
private boolean player = false;
|
||||||
|
private KinoWarez kinowarez;
|
||||||
|
|
||||||
public Kino(String name, String url) {
|
public Kino(String name, String url, KinoWarez kinoWarez) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
|
this.kinowarez = kinoWarez;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayer(boolean value) {
|
||||||
|
this.player = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KinoWarez getKinowarez() {
|
||||||
|
return kinowarez;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPlayerUrl() {
|
||||||
|
if (player) {
|
||||||
|
String path = url.substring(kinowarez.getDomain().length());
|
||||||
|
return kinowarez.getName().toLowerCase() + path;
|
||||||
|
} else {
|
||||||
|
return "#";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,20 +8,33 @@ import org.jsoup.nodes.Document;
|
|||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Hdrezka implements KinoWarez {
|
public class Hdrezka implements KinoWarez {
|
||||||
private static final String DOMAIN = "http://hdrezka.me";
|
private static final String DOMAIN = "http://hdrezka.me";
|
||||||
|
private static final String NAME = "HDREZKA";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
public String getName() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDomain() {
|
||||||
|
return DOMAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Kino> search(String nameKino, boolean strong) {
|
||||||
Browser browser = Tools.createBrowser();
|
Browser browser = Tools.createBrowser();
|
||||||
browser.setEncoding("UTF-8");
|
browser.setEncoding("UTF-8");
|
||||||
|
|
||||||
String html = browser.get(DOMAIN + "/?do=search&subaction=search&q=" + Tools.SafeUrlEncode(nameKino, "UTF-8"));
|
String html = browser.get(DOMAIN + "/?do=search&subaction=search&q=" + Tools.SafeUrlEncode(nameKino, "UTF-8"));
|
||||||
if (html.isEmpty()) return;
|
if (html.isEmpty()) return Collections.emptyList();
|
||||||
|
|
||||||
Document document = Jsoup.parse(html);
|
Document document = Jsoup.parse(html);
|
||||||
Pattern pattern = null;
|
Pattern pattern = null;
|
||||||
@@ -30,6 +43,7 @@ public class Hdrezka implements KinoWarez {
|
|||||||
pattern = Tools.getStrongPattern(nk);
|
pattern = Tools.getStrongPattern(nk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Kino> outList = new ArrayList<>();
|
||||||
Elements elements = document.getElementsByClass("b-content__inline_item-cover");
|
Elements elements = document.getElementsByClass("b-content__inline_item-cover");
|
||||||
for (Element element : elements) {
|
for (Element element : elements) {
|
||||||
Element childElement = element.child(0);
|
Element childElement = element.child(0);
|
||||||
@@ -45,8 +59,10 @@ public class Hdrezka implements KinoWarez {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
outList.add(new Kino("[HDREZKA] " + name, url));
|
outList.add(new Kino(name, url, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return outList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import kinosearch.core.Kino;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface KinoWarez {
|
public interface KinoWarez {
|
||||||
void search(String nameKino, List<Kino> outList, boolean strong);
|
String getName();
|
||||||
|
List<Kino> search(String nameKino, boolean strong);
|
||||||
String player(String page);
|
String player(String page);
|
||||||
|
String getDomain();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package kinosearch.core.warez;
|
package kinosearch.core.warez;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import kinosearch.core.browser.Browser;
|
import kinosearch.core.browser.Browser;
|
||||||
import kinosearch.core.Kino;
|
import kinosearch.core.Kino;
|
||||||
@@ -10,21 +12,34 @@ import org.jsoup.nodes.Document;
|
|||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Onlinelife implements KinoWarez {
|
public class Onlinelife implements KinoWarez {
|
||||||
private static final String DOMAIN = "http://www.online-life.cc";
|
private static final String DOMAIN = "http://www.online-life.cc";
|
||||||
|
private static final String NAME = "OnlineLife";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
public String getName() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDomain() {
|
||||||
|
return DOMAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Kino> search(String nameKino, boolean strong) {
|
||||||
Browser browser = Tools.createBrowser();
|
Browser browser = Tools.createBrowser();
|
||||||
browser.setEncoding("windows-1251");
|
browser.setEncoding("windows-1251");
|
||||||
|
|
||||||
String postData = "do=search&subaction=search&mode=simple&story=" + Tools.SafeUrlEncode(nameKino, "windows-1251");
|
String postData = "do=search&subaction=search&mode=simple&story=" + Tools.SafeUrlEncode(nameKino, "windows-1251");
|
||||||
String html = browser.post(DOMAIN + "/?do=search", postData);
|
String html = browser.post(DOMAIN + "/?do=search", postData);
|
||||||
if (html.isEmpty()) return;
|
if (html.isEmpty()) return Collections.emptyList();
|
||||||
|
|
||||||
Document document = Jsoup.parse(html);
|
Document document = Jsoup.parse(html);
|
||||||
Pattern pattern = null;
|
Pattern pattern = null;
|
||||||
@@ -35,13 +50,14 @@ public class Onlinelife implements KinoWarez {
|
|||||||
|
|
||||||
// ничего не найдено?
|
// ничего не найдено?
|
||||||
Elements elements = document.getElementsByClass("info");
|
Elements elements = document.getElementsByClass("info");
|
||||||
if (elements.size() > 0) return;
|
if (elements.size() > 0) return Collections.emptyList();
|
||||||
|
|
||||||
|
List<Kino> outList = new ArrayList<>();
|
||||||
elements = document.getElementsByClass("custom-poster");
|
elements = document.getElementsByClass("custom-poster");
|
||||||
for (Element element : elements) {
|
for (Element element : elements) {
|
||||||
Element childElement = element.child(0);
|
Element childElement = element.child(0);
|
||||||
String name = childElement.text();
|
String name = childElement.text();
|
||||||
String url = "onlinelife/" + (childElement.attr("href").substring(DOMAIN.length()+1));
|
String url = childElement.attr("href");
|
||||||
|
|
||||||
if (strong) {
|
if (strong) {
|
||||||
Matcher matcher = pattern.matcher(name.toLowerCase());
|
Matcher matcher = pattern.matcher(name.toLowerCase());
|
||||||
@@ -50,8 +66,25 @@ public class Onlinelife implements KinoWarez {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean has_player = is_serial(name);
|
||||||
|
|
||||||
name = name.replaceAll("\\[.+", "").trim();
|
name = name.replaceAll("\\[.+", "").trim();
|
||||||
outList.add(new Kino("[OnlineLife] "+name, url));
|
Kino kino = new Kino(name, url, this);
|
||||||
|
kino.setPlayer(has_player);
|
||||||
|
outList.add(kino);
|
||||||
|
}
|
||||||
|
|
||||||
|
return outList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean is_serial(String name) {
|
||||||
|
Pattern pattern = Pattern.compile("\\[(.+)\\]");
|
||||||
|
Matcher matcher = pattern.matcher(name);
|
||||||
|
if (matcher.find()) {
|
||||||
|
int idx = matcher.group().indexOf("1");
|
||||||
|
return !(idx >= 0);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,12 +101,30 @@ public class Onlinelife implements KinoWarez {
|
|||||||
JsonObject jsonObj = new Gson().fromJson(json, JsonObject.class);
|
JsonObject jsonObj = new Gson().fromJson(json, JsonObject.class);
|
||||||
|
|
||||||
if (jsonObj.has("file")) {
|
if (jsonObj.has("file")) {
|
||||||
return "{\"file\":\"" + jsonObj.get("file").getAsString() + "\"}";
|
String fileMp4 = jsonObj.get("file").getAsString().substring("http://".length());
|
||||||
|
return "{\"file\":\"/proxy/onlinelife/" + fileMp4 + "\"}";
|
||||||
} else if (jsonObj.has("pl")) {
|
} else if (jsonObj.has("pl")) {
|
||||||
browser.setEncoding("utf-8");
|
browser.setEncoding("utf-8");
|
||||||
return browser.get(jsonObj.get("pl").getAsString());
|
return replaceToProxy(browser.get(jsonObj.get("pl").getAsString()));
|
||||||
} else {
|
} else {
|
||||||
return "{}";
|
return "{}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String replaceToProxy(String json) {
|
||||||
|
JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);
|
||||||
|
JsonArray jsonArray = jsonObject.get("playlist").getAsJsonArray();
|
||||||
|
|
||||||
|
//jsonArray.get(0).getAsJsonObject().get("playlist").getAsJsonArray().get(0).getAsJsonObject().get("file").getAsString();
|
||||||
|
|
||||||
|
for (JsonElement elm1 : jsonArray) {
|
||||||
|
JsonArray arr1 = elm1.getAsJsonObject().get("playlist").getAsJsonArray();
|
||||||
|
for (JsonElement elm2 : arr1) {
|
||||||
|
JsonObject obj1 = elm2.getAsJsonObject();
|
||||||
|
obj1.addProperty("file", obj1.get("file").getAsString().replace("http://", "/proxy/onlinelife/"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Gson().toJson(jsonObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
package kinosearch.core;
|
package kinosearch.webapp;
|
||||||
|
|
||||||
|
import kinosearch.core.Kino;
|
||||||
|
import kinosearch.core.warez.KinoWarez;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -10,8 +13,8 @@ import java.util.List;
|
|||||||
public class KinoGroup extends Kino {
|
public class KinoGroup extends Kino {
|
||||||
private List<Kino> kinolist = new ArrayList<>();
|
private List<Kino> kinolist = new ArrayList<>();
|
||||||
|
|
||||||
public KinoGroup(String name, String url) {
|
public KinoGroup(String name, String url, KinoWarez kinoWarez) {
|
||||||
super(name, "");
|
super(name, "", kinoWarez);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Kino> getKinolist() {
|
public List<Kino> getKinolist() {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package kinosearch.webapp.servlets;
|
package kinosearch.webapp.servlets;
|
||||||
|
|
||||||
import kinosearch.core.Kino;
|
import kinosearch.core.Kino;
|
||||||
import kinosearch.core.KinoGroup;
|
import kinosearch.webapp.KinoGroup;
|
||||||
import kinosearch.core.Tools;
|
import kinosearch.core.Tools;
|
||||||
import kinosearch.webapp.WebApp;
|
import kinosearch.webapp.WebApp;
|
||||||
import kinosearch.webapp.template.TemplateProcessor;
|
import kinosearch.webapp.template.TemplateProcessor;
|
||||||
@@ -53,7 +53,12 @@ public class IndexServlet extends HttpServlet {
|
|||||||
ThreadGroup threadGroup = new ThreadGroup("");
|
ThreadGroup threadGroup = new ThreadGroup("");
|
||||||
for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков
|
for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков
|
||||||
new Thread(threadGroup, () -> {
|
new Thread(threadGroup, () -> {
|
||||||
kinoWarez.search(search, list, strong);
|
List<Kino> outList = kinoWarez.search(search, strong);
|
||||||
|
|
||||||
|
for (Kino kino : outList) {
|
||||||
|
kino.setName("[" + kinoWarez.getName() + "] " + kino.getName());
|
||||||
|
}
|
||||||
|
list.addAll(outList);
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +89,7 @@ public class IndexServlet extends HttpServlet {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
KinoGroup group = new KinoGroup(s1, null);
|
KinoGroup group = new KinoGroup(s1, null, null);
|
||||||
|
|
||||||
Iterator<Kino> itr2 = list.iterator();
|
Iterator<Kino> itr2 = list.iterator();
|
||||||
int val = 0;
|
int val = 0;
|
||||||
|
|||||||
64
src/main/java/kinosearch/webapp/servlets/ProxyServlet.java
Normal file
64
src/main/java/kinosearch/webapp/servlets/ProxyServlet.java
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package kinosearch.webapp.servlets;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.Part;
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by DmitriyMX <mail@dmitriymx.ru>
|
||||||
|
* 2016
|
||||||
|
*/
|
||||||
|
public class ProxyServlet extends HttpServlet {
|
||||||
|
@Override
|
||||||
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
String path = request.getPathInfo().substring("/onlinelife/".length());
|
||||||
|
|
||||||
|
URL url = new URL("http://" + path);
|
||||||
|
HttpURLConnection con =(HttpURLConnection) url.openConnection();
|
||||||
|
con.setRequestMethod("GET");
|
||||||
|
con.setDoOutput(true);
|
||||||
|
con.setDoInput(true);
|
||||||
|
con.setUseCaches(true);
|
||||||
|
|
||||||
|
for (Enumeration names = request.getHeaderNames(); names.hasMoreElements();) {
|
||||||
|
String headerName = names.nextElement().toString();
|
||||||
|
if (headerName.equalsIgnoreCase("referer")) continue;
|
||||||
|
con.setRequestProperty(headerName, request.getHeader(headerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
con.connect();
|
||||||
|
|
||||||
|
int statusCode = con.getResponseCode();
|
||||||
|
response.setStatus(statusCode);
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<String>> stringListEntry : con.getHeaderFields().entrySet()) {
|
||||||
|
Map.Entry mapEntry = (Map.Entry) stringListEntry;
|
||||||
|
if (mapEntry.getKey() != null) {
|
||||||
|
response.setHeader(mapEntry.getKey().toString(), ((List) mapEntry.getValue()).get(0).toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedInputStream webToProxyBuf = new BufferedInputStream(con.getInputStream());
|
||||||
|
BufferedOutputStream proxyToClientBuf = new BufferedOutputStream(response.getOutputStream());
|
||||||
|
|
||||||
|
int oneByte;
|
||||||
|
while ((oneByte = webToProxyBuf.read()) != -1) {
|
||||||
|
proxyToClientBuf.write(oneByte);
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyToClientBuf.flush();
|
||||||
|
proxyToClientBuf.close();
|
||||||
|
webToProxyBuf.close();
|
||||||
|
con.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package test.core;
|
package core;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package test.core.warez;
|
package core.warez;
|
||||||
|
|
||||||
import kinosearch.core.Kino;
|
import kinosearch.core.Kino;
|
||||||
import kinosearch.core.warez.Hdrezka;
|
import kinosearch.core.warez.Hdrezka;
|
||||||
@@ -23,10 +23,9 @@ public class TestHdrezka {
|
|||||||
|
|
||||||
private void search(boolean strong) {
|
private void search(boolean strong) {
|
||||||
KinoWarez kinoWarez = new Hdrezka();
|
KinoWarez kinoWarez = new Hdrezka();
|
||||||
List<Kino> kinoList = new ArrayList<>();
|
|
||||||
|
|
||||||
String titleKino = "рик и морти";
|
String titleKino = "рик и морти";
|
||||||
kinoWarez.search(titleKino, kinoList, strong);
|
List<Kino> kinoList = kinoWarez.search(titleKino, strong);
|
||||||
|
|
||||||
assertTrue(kinoList.size() > 0);
|
assertTrue(kinoList.size() > 0);
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package test.core.warez;
|
package core.warez;
|
||||||
|
|
||||||
import kinosearch.core.Kino;
|
import kinosearch.core.Kino;
|
||||||
import kinosearch.core.warez.KinoWarez;
|
import kinosearch.core.warez.KinoWarez;
|
||||||
@@ -23,10 +23,9 @@ public class TestOnlinelife {
|
|||||||
|
|
||||||
private void search(boolean strong) {
|
private void search(boolean strong) {
|
||||||
KinoWarez kinoWarez = new Onlinelife();
|
KinoWarez kinoWarez = new Onlinelife();
|
||||||
List<Kino> kinoList = new ArrayList<>();
|
|
||||||
|
|
||||||
String titleKino = "рик и морти";
|
String titleKino = "рик и морти";
|
||||||
kinoWarez.search(titleKino, kinoList, strong);
|
List<Kino> kinoList = kinoWarez.search(titleKino, strong);
|
||||||
|
|
||||||
assertTrue(kinoList.size() > 0);
|
assertTrue(kinoList.size() > 0);
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package test.webapp;
|
package webapp;
|
||||||
|
|
||||||
import kinosearch.webapp.template.FreemakerProcessor;
|
import kinosearch.webapp.template.FreemakerProcessor;
|
||||||
import kinosearch.webapp.template.TemplateProcessor;
|
import kinosearch.webapp.template.TemplateProcessor;
|
||||||
@@ -6,7 +6,6 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ public class TestTemplateProcessor {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() throws IOException {
|
public void test() throws IOException {
|
||||||
System.err.println(System.getProperty("user.dir"));
|
// System.err.println(System.getProperty("user.dir"));
|
||||||
|
|
||||||
TemplateProcessor templateProcessor = new FreemakerProcessor();
|
TemplateProcessor templateProcessor = new FreemakerProcessor();
|
||||||
OutputStreamWriter writer = new OutputStreamWriter(baos);
|
OutputStreamWriter writer = new OutputStreamWriter(baos);
|
||||||
@@ -1,23 +1,69 @@
|
|||||||
<#include "/header.inc.html">
|
<#include "/header.inc.html">
|
||||||
<#if resultsearch??>
|
<#if resultsearch??>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function(){
|
||||||
|
$('a.spoiler').bind('click',function(){
|
||||||
|
$(this).next().collapse('toggle');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
<hr>
|
<hr>
|
||||||
<#if resultsearch?has_content>
|
<#if resultsearch?has_content>
|
||||||
<ul class="resultlist">
|
|
||||||
<#list resultsearch as kino>
|
<#list resultsearch as kino>
|
||||||
<li>
|
|
||||||
<#if kino.getClass().getSimpleName() == "KinoGroup">
|
<#if kino.getClass().getSimpleName() == "KinoGroup">
|
||||||
<b>${kino.name}</b>
|
<div class="panel panel-default">
|
||||||
<ul>
|
<a href="#" class="panel-heading spoiler">
|
||||||
|
<span class="glyphicon glyphicon-chevron-down"> </span><b>${kino.name}</b>
|
||||||
|
</a>
|
||||||
|
<div class="panel-collapse collapse out">
|
||||||
|
<div class="panel-body">
|
||||||
<#list kino.kinolist as kino_groupped>
|
<#list kino.kinolist as kino_groupped>
|
||||||
<li><a href="${kino_groupped.url}" target="_blank">${kino_groupped.name}</a></li>
|
<div class="panel panel-default">
|
||||||
</#list>
|
<div class="panel-heading"><b>${kino_groupped.name}</b></div>
|
||||||
</ul>
|
<div class="panel-body">
|
||||||
|
<div class="row">
|
||||||
|
<#if kino_groupped.hasPlayer()>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a class="btn btn-primary btn-block" href="${kino_groupped.url}" target="_blank">на сайте</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a class="btn btn-danger btn-block" href="${kino_groupped.getPlayerUrl()}" target="_blank">в плеере</a>
|
||||||
|
</div>
|
||||||
<#else>
|
<#else>
|
||||||
<a href="${kino.url}" target="_blank">${kino.name}</a>
|
<div class="col-sm-12">
|
||||||
|
<a class="btn btn-primary btn-block" href="${kino_groupped.url}" target="_blank">на сайте</a>
|
||||||
|
</div>
|
||||||
|
</#if>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</#list>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<#else>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading"><b>${kino.name}</b></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="row">
|
||||||
|
<#if kino.hasPlayer()>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a class="btn btn-primary btn-block" href="${kino.url}" target="_blank">на сайте</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a class="btn btn-danger btn-block" href="${kino.getPlayerUrl()}" target="_blank">в плеере</a>
|
||||||
|
</div>
|
||||||
|
<#else>
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<a class="btn btn-primary btn-block" href="${kino.url}" target="_blank">на сайте</a>
|
||||||
|
</div>
|
||||||
|
</#if>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</#if>
|
</#if>
|
||||||
</li>
|
|
||||||
</#list>
|
</#list>
|
||||||
</ul>
|
|
||||||
<#else>
|
<#else>
|
||||||
<p>Ничего не найдено =(</p>
|
<p>Ничего не найдено =(</p>
|
||||||
</#if>
|
</#if>
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
<div class="news row">
|
<div class="news row">
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<time datetime="2016-03-26">26.03.2016</time>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<p><em>Version 2.0.7b</em></p>
|
||||||
|
<p>Прошлый раз код идеально работал на localhost, а на реальном сервере заглох. Пришлось переделывать.
|
||||||
|
Зато теперь точно всё должно заработать.</p>
|
||||||
|
<p>Пришлось отказаться от воспроизведения сериалов. С ними придётся отдельно повозиться.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<time datetime="2016-03-24">24.03.2016</time>
|
<time datetime="2016-03-24">24.03.2016</time>
|
||||||
</div>
|
</div>
|
||||||
@@ -8,6 +18,7 @@
|
|||||||
<p>Кхм. Простите.</p>
|
<p>Кхм. Простите.</p>
|
||||||
<p>Вообщем, тестовая вариация плеера запущена для кинотеатра <b>OnlineLife</b>. Если нареканий не будет, то запущу и для остальных.</p>
|
<p>Вообщем, тестовая вариация плеера запущена для кинотеатра <b>OnlineLife</b>. Если нареканий не будет, то запущу и для остальных.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<time datetime="2016-03-23">23.03.2016</time>
|
<time datetime="2016-03-23">23.03.2016</time>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
$(function(){
|
$(function(){
|
||||||
if (typeof(video_data.file) !== 'undefined') {
|
if (typeof(video_data.file) !== 'undefined') {
|
||||||
$('#player').attr('src', video_data.file);
|
$('#player').attr('src', '${basedir}'+video_data.file);
|
||||||
} else if (typeof(video_data.playlist) !== 'undefined') {
|
} else if (typeof(video_data.playlist) !== 'undefined') {
|
||||||
$('#pl-season').removeClass('hide');
|
$('#pl-season').removeClass('hide');
|
||||||
menu = $('#pl-season-menu');
|
menu = $('#pl-season-menu');
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
smenu.find('a').bind('click', function(){
|
smenu.find('a').bind('click', function(){
|
||||||
$('#dropdownSerial').html(this.text + ' <span class="caret"></span>');
|
$('#dropdownSerial').html(this.text + ' <span class="caret"></span>');
|
||||||
$('#player').attr('src', this.attributes['data-file'].value);
|
$('#player').attr('src', '${basedir}'+this.attributes['data-file'].value);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#pl-serial').removeClass('hide');
|
$('#pl-serial').removeClass('hide');
|
||||||
|
|||||||
@@ -22,6 +22,11 @@
|
|||||||
<servlet-class>kinosearch.webapp.servlets.PlayerServlet</servlet-class>
|
<servlet-class>kinosearch.webapp.servlets.PlayerServlet</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>proxy</servlet-name>
|
||||||
|
<servlet-class>kinosearch.webapp.servlets.ProxyServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>index</servlet-name>
|
<servlet-name>index</servlet-name>
|
||||||
<url-pattern>/</url-pattern>
|
<url-pattern>/</url-pattern>
|
||||||
@@ -38,6 +43,11 @@
|
|||||||
<url-pattern>/onlinelife/*</url-pattern>
|
<url-pattern>/onlinelife/*</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>proxy</servlet-name>
|
||||||
|
<url-pattern>/proxy/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>default</servlet-name>
|
<servlet-name>default</servlet-name>
|
||||||
<url-pattern>/js/*</url-pattern>
|
<url-pattern>/js/*</url-pattern>
|
||||||
|
|||||||
@@ -33,21 +33,8 @@ input.check-middle {
|
|||||||
vertical-align: sub;
|
vertical-align: sub;
|
||||||
}
|
}
|
||||||
|
|
||||||
.resultlist {
|
a.panel-heading.spoiler {
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resultlist li {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resultlist a {
|
|
||||||
display: block;
|
display: block;
|
||||||
padding: 1em;
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
border-radius: 0.5em;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.news time {
|
.news time {
|
||||||
|
|||||||
Reference in New Issue
Block a user