去除链接伪装;更新前端,正式启用下载模式(仅预览,仅下载,全部);删除只能全部删除;下载前能够查看缩略图
This commit is contained in:
parent
2c08552986
commit
e1afc3a6c5
@ -39,9 +39,6 @@ public class GalleryManageController {
|
|||||||
@RequestParam(value = "mode", defaultValue = "3", required = false)String mode){
|
@RequestParam(value = "mode", defaultValue = "3", required = false)String mode){
|
||||||
if(link == null || targetResolution == null)
|
if(link == null || targetResolution == null)
|
||||||
return Response._failure("参数不全");
|
return Response._failure("参数不全");
|
||||||
link = customUtil.restoreUrl(link);
|
|
||||||
if(link == null)
|
|
||||||
return Response._failure("链接错误");
|
|
||||||
return galleryManageService.createTask(link, targetResolution, AuthCode, tags, Byte.parseByte(mode));
|
return galleryManageService.createTask(link, targetResolution, AuthCode, tags, Byte.parseByte(mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,9 +55,6 @@ public class GalleryManageController {
|
|||||||
return Response._failure("参数不全");
|
return Response._failure("参数不全");
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "link" -> {
|
case "link" -> {
|
||||||
param = customUtil.restoreUrl(param);
|
|
||||||
if (param == null)
|
|
||||||
return Response._failure("链接错误");
|
|
||||||
return galleryManageService.selectTaskByLink(param);
|
return galleryManageService.selectTaskByLink(param);
|
||||||
}
|
}
|
||||||
case "gid" -> {
|
case "gid" -> {
|
||||||
@ -85,11 +79,11 @@ public class GalleryManageController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("")
|
@DeleteMapping("")
|
||||||
public String deleteTask(Integer gid, String AuthCode, @RequestParam(value = "mode", defaultValue = "3", required = false)String mode){
|
public String deleteTask(Integer gid, String AuthCode){
|
||||||
if(gid == null)
|
if(gid == null)
|
||||||
return Response._failure("参数不全");
|
return Response._failure("参数不全");
|
||||||
|
|
||||||
return galleryManageService.deleteGalleryByGid(gid, AuthCode, Byte.parseByte(mode));
|
return galleryManageService.deleteGalleryByGid(gid, AuthCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -9,8 +9,8 @@ public interface GalleryMapper {
|
|||||||
|
|
||||||
|
|
||||||
@Insert("insert into gallery" +
|
@Insert("insert into gallery" +
|
||||||
" (gid, name, link, language, pages, status, fileSize, createTime, proceeding, resolution, displayFileSize, downloader, mode)\n" +
|
" (gid, name, link, language, pages, status, fileSize, createTime, proceeding, resolution, displayFileSize, downloader, mode, thumb_link)\n" +
|
||||||
" values (#{gid}, #{name}, #{link}, #{language}, #{pages}, #{status}, #{fileSize}, #{createTime}, #{proceeding}, #{resolution}, #{displayFileSize}, #{downloader}, #{mode})")
|
" values (#{gid}, #{name}, #{link}, #{language}, #{pages}, #{status}, #{fileSize}, #{createTime}, #{proceeding}, #{resolution}, #{displayFileSize}, #{downloader}, #{mode}, #{thumb_link})")
|
||||||
void insertGallery(Gallery gallery);
|
void insertGallery(Gallery gallery);
|
||||||
|
|
||||||
@Select("select * from gallery where link=#{link}")
|
@Select("select * from gallery where link=#{link}")
|
||||||
|
|||||||
@ -12,6 +12,11 @@ import java.util.Map;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class Gallery {
|
public class Gallery {
|
||||||
|
public static byte VIEW = 0;
|
||||||
|
public static byte SOURCE = 1;
|
||||||
|
public static byte PREVIEW = 2;
|
||||||
|
public static byte ALL = 3;
|
||||||
|
|
||||||
@JsonProperty("name")
|
@JsonProperty("name")
|
||||||
private String name; //本子名字
|
private String name; //本子名字
|
||||||
|
|
||||||
@ -66,5 +71,9 @@ public class Gallery {
|
|||||||
|
|
||||||
@JsonProperty("mode")
|
@JsonProperty("mode")
|
||||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
private byte mode; //rd 可读可下载 r可读 d可下载
|
private byte mode; //0 仅查看 1 仅下载源文件 2 仅存储预览图 3 全部
|
||||||
|
|
||||||
|
@JsonProperty("thumb_link")
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
|
private String thumb_link;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,14 +7,5 @@ public class DeleteGalleryMessage extends AbstractMessage{
|
|||||||
{
|
{
|
||||||
messageType = DELETE_GALLERY_MESSAGE;
|
messageType = DELETE_GALLERY_MESSAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final byte DELETE_ALL = 3;
|
|
||||||
public static final byte DELETE_PREVIEW = 2;
|
|
||||||
public static final byte DELETE_SOURCE = 1;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
byte deleteType;
|
|
||||||
|
|
||||||
String galleryName;
|
String galleryName;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -147,8 +147,7 @@ public class GalleryManageService {
|
|||||||
for (Integer tid : tidS)
|
for (Integer tid : tidS)
|
||||||
if (tagMapper.selectTagExistById(tid) > 0)
|
if (tagMapper.selectTagExistById(tid) > 0)
|
||||||
tagMapper.markTag(gallery.getGid(), tid);
|
tagMapper.markTag(gallery.getGid(), tid);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
response.failure("提交失败,未知原因");
|
response.failure("提交失败,未知原因");
|
||||||
galleryMapper.deleteGalleryByGid(gallery.getGid());
|
galleryMapper.deleteGalleryByGid(gallery.getGid());
|
||||||
}
|
}
|
||||||
@ -183,7 +182,7 @@ public class GalleryManageService {
|
|||||||
else
|
else
|
||||||
response.failure("查询失败");
|
response.failure("查询失败");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
log.info(e.getMessage());
|
||||||
response.failure("查询失败");
|
response.failure("查询失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +194,7 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过gid查询本子
|
* 通过gid查询本子
|
||||||
|
*
|
||||||
* @param gid gid
|
* @param gid gid
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
@ -213,6 +213,7 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询所有本子
|
* 查询所有本子
|
||||||
|
*
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
public String selectAllGallery(int userId) {
|
public String selectAllGallery(int userId) {
|
||||||
@ -267,6 +268,7 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询未完成的本子
|
* 查询未完成的本子
|
||||||
|
*
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
public String selectUnDoneGallery() {
|
public String selectUnDoneGallery() {
|
||||||
@ -283,6 +285,7 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过本子名查询本子
|
* 通过本子名查询本子
|
||||||
|
*
|
||||||
* @param name 名字
|
* @param name 名字
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
@ -300,6 +303,7 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询用户下载的本子
|
* 查询用户下载的本子
|
||||||
|
*
|
||||||
* @param AuthCode 授权码(用于查询用户名)
|
* @param AuthCode 授权码(用于查询用户名)
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
@ -365,13 +369,12 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除本子以及对应的文件(如果存在的话)
|
* 删除本子以及对应的文件(如果存在的话)
|
||||||
|
*
|
||||||
* @param gid gid
|
* @param gid gid
|
||||||
* @return 删除结果
|
* @return 删除结果
|
||||||
*/
|
*/
|
||||||
public String deleteGalleryByGid(Integer gid, String AuthCode, byte mode) {
|
public String deleteGalleryByGid(Integer gid, String AuthCode) {
|
||||||
Response response = Response.generateResponse();
|
Response response = Response.generateResponse();
|
||||||
String deleteType;
|
|
||||||
|
|
||||||
Gallery gallery = galleryMapper.selectGalleryByGid(gid);
|
Gallery gallery = galleryMapper.selectGalleryByGid(gid);
|
||||||
User user = userMapper.selectUserByAuthCode(AuthCode);
|
User user = userMapper.selectUserByAuthCode(AuthCode);
|
||||||
if (gallery == null) {
|
if (gallery == null) {
|
||||||
@ -383,17 +386,8 @@ public class GalleryManageService {
|
|||||||
if (!(collector.isEmpty() || collector.size() == 1 && collector.get(0).equals(user.getId()) //判断收藏
|
if (!(collector.isEmpty() || collector.size() == 1 && collector.get(0).equals(user.getId()) //判断收藏
|
||||||
&& gallery.getDownloader() == user.getId())) //判断下载
|
&& gallery.getDownloader() == user.getId())) //判断下载
|
||||||
response.failure("删除失败,该本子已被别人收藏或你不是下载人");
|
response.failure("删除失败,该本子已被别人收藏或你不是下载人");
|
||||||
|
|
||||||
else {
|
else {
|
||||||
if((gallery.getMode() & mode) == 0) { //不能删除对应的,因为对应的没有
|
log.info("删除本子{}", gallery.getName());
|
||||||
if (mode == 1)
|
|
||||||
response.failure("无法删除该本子的源文件,不存在");
|
|
||||||
else if (mode == 2)
|
|
||||||
response.failure("无法删除该本子的预览图,不存在");
|
|
||||||
} else {
|
|
||||||
log.info("删除本子{}, mode:{}, delete_mode:{}", gallery.getName(), gallery.getMode(), mode);
|
|
||||||
gallery.setMode((byte) (gallery.getMode() ^ mode));
|
|
||||||
if(gallery.getMode() == 0) { //删整个本子
|
|
||||||
galleryMapper.deleteGalleryByGid(gallery.getGid()); //删除本子记录
|
galleryMapper.deleteGalleryByGid(gallery.getGid()); //删除本子记录
|
||||||
ArrayList<Integer> tidS = tagMapper.selectTagByGid(gallery.getGid());
|
ArrayList<Integer> tidS = tagMapper.selectTagByGid(gallery.getGid());
|
||||||
for (Integer tid : tidS)
|
for (Integer tid : tidS)
|
||||||
@ -406,26 +400,14 @@ public class GalleryManageService {
|
|||||||
|
|
||||||
if (new File(TargetPath + "/" + gallery.getName()).isDirectory()) //删除本地缓存
|
if (new File(TargetPath + "/" + gallery.getName()).isDirectory()) //删除本地缓存
|
||||||
FileUtil.del(TargetPath + "/" + gallery.getName());
|
FileUtil.del(TargetPath + "/" + gallery.getName());
|
||||||
deleteType = "全部";
|
|
||||||
}else{
|
|
||||||
if(mode == 2 && new File(TargetPath + "/" + gallery.getName()).isDirectory()) { //删除预览缓存
|
|
||||||
FileUtil.del(TargetPath + "/" + gallery.getName());
|
|
||||||
gid2name_cache.remove(gallery.getGid()); //删除本子缓存
|
|
||||||
page2pageNameCache.remove(gallery.getName()); //移除页数缓存
|
|
||||||
}
|
}
|
||||||
|
switch (remoteService.deleteGallery(gallery)) {
|
||||||
galleryMapper.updateGallery(gallery);
|
case ErrorCode.IO_ERROR -> response.failure("本子:" + gallery.getName() + "删除失败,IO错误");
|
||||||
deleteType = (mode == 1? "源文件": "预览图"); //用于提示
|
case ErrorCode.FILE_NOT_FOUND -> response.failure("本子:" + gallery.getName() + "删除失败,文件不存在");
|
||||||
}
|
|
||||||
switch (remoteService.deleteGallery(gallery, mode)){
|
|
||||||
case ErrorCode.IO_ERROR -> response.failure("本子:" + gallery.getName() + deleteType + "删除失败,IO错误");
|
|
||||||
case ErrorCode.FILE_NOT_FOUND -> response.failure("本子:" + gallery.getName() + deleteType + "删除失败,文件不存在");
|
|
||||||
case 0 -> response.success();
|
case 0 -> response.success();
|
||||||
}
|
}
|
||||||
if (response.get("result").equals("failure"))
|
if (response.get("result").equals("failure"))
|
||||||
log.info(response.getResult());
|
log.info(response.getResult());
|
||||||
}
|
|
||||||
}
|
|
||||||
return response.toJSONString();
|
return response.toJSONString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -109,6 +109,8 @@ public class QueryService {
|
|||||||
else{ // transfer image and save it as cache
|
else{ // transfer image and save it as cache
|
||||||
log.info("miss cache:{}", imageName);
|
log.info("miss cache:{}", imageName);
|
||||||
try {
|
try {
|
||||||
|
if(!path.startsWith("/t"))
|
||||||
|
path = "/t" + path;
|
||||||
requests("https://s.exhentai.org" + path, true, response, new FileOutputStream(image));
|
requests("https://s.exhentai.org" + path, true, response, new FileOutputStream(image));
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@ -130,10 +130,9 @@ public class RemoteService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte deleteGallery(Gallery gallery, byte type){
|
public byte deleteGallery(Gallery gallery){
|
||||||
DeleteGalleryMessage dgm = new DeleteGalleryMessage();
|
DeleteGalleryMessage dgm = new DeleteGalleryMessage();
|
||||||
dgm.setGalleryName(gallery.getName());
|
dgm.setGalleryName(gallery.getName());
|
||||||
dgm.setDeleteType(type);
|
|
||||||
dgm.messageId = atomicInteger.getAndIncrement();
|
dgm.messageId = atomicInteger.getAndIncrement();
|
||||||
|
|
||||||
channel.writeAndFlush(dgm);
|
channel.writeAndFlush(dgm);
|
||||||
|
|||||||
@ -29,25 +29,6 @@ public class CustomUtil {
|
|||||||
public static ObjectMapper objectMapper = new ObjectMapper();
|
public static ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
private MaskDomain[] maskDomains;
|
private MaskDomain[] maskDomains;
|
||||||
public String restoreUrl(String link){
|
|
||||||
URL url;
|
|
||||||
|
|
||||||
try {
|
|
||||||
url = new URL(link);
|
|
||||||
}catch (MalformedURLException e){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(MaskDomain maskDomain: maskDomains){
|
|
||||||
if(url.getHost().equals(maskDomain.getMask())){
|
|
||||||
return link.replace(maskDomain.getMask(), maskDomain.getRaw());
|
|
||||||
}
|
|
||||||
else if(url.getHost().equals(maskDomain.getRaw())){
|
|
||||||
return link;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String fileSizeToString(long fileSize){
|
public static String fileSizeToString(long fileSize){
|
||||||
if (fileSize < ONE_KB) {
|
if (fileSize < ONE_KB) {
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.lion.lionwebsite.Util;
|
|||||||
|
|
||||||
import com.lion.lionwebsite.Domain.Gallery;
|
import com.lion.lionwebsite.Domain.Gallery;
|
||||||
import com.lion.lionwebsite.Exception.ResolutionNotMatchException;
|
import com.lion.lionwebsite.Exception.ResolutionNotMatchException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.http.HttpEntity;
|
import org.apache.http.HttpEntity;
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.methods.HttpGet;
|
||||||
@ -18,7 +19,7 @@ import java.io.BufferedReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@Slf4j
|
||||||
public class GalleryUtil {
|
public class GalleryUtil {
|
||||||
|
|
||||||
static String EX_HENTAI = "https://exhentai.org";
|
static String EX_HENTAI = "https://exhentai.org";
|
||||||
@ -68,6 +69,10 @@ public class GalleryUtil {
|
|||||||
gallery.setFileSize(CustomUtil.stringToFileSize(galleryDoc.select("#gdd > table > tbody > tr:nth-child(5) > td.gdt2").text().replace(" ", "")));
|
gallery.setFileSize(CustomUtil.stringToFileSize(galleryDoc.select("#gdd > table > tbody > tr:nth-child(5) > td.gdt2").text().replace(" ", "")));
|
||||||
gallery.setDisplayFileSize(CustomUtil.fileSizeToString(gallery.getFileSize()));
|
gallery.setDisplayFileSize(CustomUtil.fileSizeToString(gallery.getFileSize()));
|
||||||
|
|
||||||
|
String thumb_link = galleryDoc.select("#gd1 > div").get(0).attr("style");
|
||||||
|
thumb_link = thumb_link.substring(thumb_link.indexOf("url(") + 4, thumb_link.lastIndexOf(")")).replace("https://s.exhentai.org/t", "");
|
||||||
|
gallery.setThumb_link(thumb_link);
|
||||||
|
|
||||||
//查找下载页面链接并初始化参数
|
//查找下载页面链接并初始化参数
|
||||||
String download_link = galleryDoc.select("#gd5 > p:nth-child(2) > a").attr("onclick").split("'")[1];
|
String download_link = galleryDoc.select("#gd5 > p:nth-child(2) > a").attr("onclick").split("'")[1];
|
||||||
HashMap<String, String> extraProperties = new HashMap<>();
|
HashMap<String, String> extraProperties = new HashMap<>();
|
||||||
@ -143,8 +148,8 @@ public class GalleryUtil {
|
|||||||
Document document = Jsoup.parse(page);
|
Document document = Jsoup.parse(page);
|
||||||
|
|
||||||
Elements select = document.select("#gnd");
|
Elements select = document.select("#gnd");
|
||||||
if(select.size() > 0)
|
if(!select.isEmpty())
|
||||||
return select.select("a").get(0).attributes().get("href");
|
return select.select("a").getFirst().attributes().get("href");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -190,6 +195,7 @@ public class GalleryUtil {
|
|||||||
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36");
|
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36");
|
||||||
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
|
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
|
||||||
headers.put("Upgrade-Insecure-Requests", "1");
|
headers.put("Upgrade-Insecure-Requests", "1");
|
||||||
|
if(url.contains("exhentai"))
|
||||||
headers.put("Cookie", "ipb_member_id=5774855; ipb_pass_hash=4b061c3abe25289568b5a8e0123fb3b9; igneous=cea2e08fb; sk=oye107wk02gtomb56x65dmv4qzbn; nw=1");
|
headers.put("Cookie", "ipb_member_id=5774855; ipb_pass_hash=4b061c3abe25289568b5a8e0123fb3b9; igneous=cea2e08fb; sk=oye107wk02gtomb56x65dmv4qzbn; nw=1");
|
||||||
|
|
||||||
if(extraProperties != null)
|
if(extraProperties != null)
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user