diff --git a/app/src/main/java/com/github/catvod/bean/samba/Drive.java b/app/src/main/java/com/github/catvod/bean/samba/Drive.java index 5cce4572..65714dd8 100644 --- a/app/src/main/java/com/github/catvod/bean/samba/Drive.java +++ b/app/src/main/java/com/github/catvod/bean/samba/Drive.java @@ -27,6 +27,7 @@ public class Drive { private SMBClient smbClient; private DiskShare diskShare; private Session session; + private String subPath; public static List arrayFrom(String str) { Type listType = new TypeToken>() {}.getType(); @@ -37,7 +38,7 @@ public class Drive { this.name = name; } - public String getName() { + private String getName() { return TextUtils.isEmpty(name) ? "" : name; } @@ -45,6 +46,10 @@ public class Drive { return TextUtils.isEmpty(server) ? "" : server; } + public String getSubPath() { + return TextUtils.isEmpty(subPath) ? "" : subPath; + } + public DiskShare getShare() { if (diskShare == null) init(); return diskShare; @@ -54,14 +59,15 @@ public class Drive { return new Class(getName(), getName(), "1"); } - public void init() { + private void init() { try { smbClient = new SMBClient(); Uri uri = Uri.parse(getServer()); - String share = uri.getPath().replaceFirst("^/", "").split("/")[0]; + String[] parts = uri.getPath().substring(1).split("/", 2); connection = smbClient.connect(uri.getHost(), uri.getPort() != -1 ? uri.getPort() : SMBClient.DEFAULT_PORT); session = connection.authenticate(getAuthentication(uri)); - diskShare = (DiskShare) session.connectShare(share); + diskShare = (DiskShare) session.connectShare(parts[0]); + subPath = parts.length > 1 ? parts[1] : ""; } catch (Exception e) { e.printStackTrace(); } @@ -84,6 +90,11 @@ public class Drive { if (smbClient != null) smbClient.close(); } catch (Exception e) { e.printStackTrace(); + } finally { + connection = null; + diskShare = null; + smbClient = null; + session = null; } } diff --git a/app/src/main/java/com/github/catvod/spider/Samba.java b/app/src/main/java/com/github/catvod/spider/Samba.java index de9c0c34..8a283221 100644 --- a/app/src/main/java/com/github/catvod/spider/Samba.java +++ b/app/src/main/java/com/github/catvod/spider/Samba.java @@ -16,7 +16,6 @@ import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation; import com.hierynomus.protocol.commons.EnumWithValue; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -65,7 +64,7 @@ public class Samba extends Spider { Drive drive = getDrive(key); List list = new ArrayList<>(); for (FileIdBothDirectoryInformation item : getList(drive, path)) { - String vodId = TextUtils.join("/", path.isEmpty() ? Arrays.asList(key, item.getFileName()) : Arrays.asList(key, path, item.getFileName())); + String vodId = getPath(key, path, item.getFileName()); if (isFolder(item)) list.add(new Vod(vodId, item.getFileName(), Image.FOLDER, "", true)); if (isFile(item)) list.add(new Vod(vodId, item.getFileName(), Image.VIDEO, "", false)); } @@ -77,13 +76,13 @@ public class Samba extends Spider { String tid = ids.get(0); String key = tid.contains("/") ? tid.substring(0, tid.indexOf("/")) : tid; String path = tid.contains("/") ? tid.substring(tid.indexOf("/") + 1) : ""; - String parent = path.substring(0, path.lastIndexOf("/")); - String name = parent.substring(parent.lastIndexOf("/") + 1); + String parent = path.contains("/") ? path.substring(0, path.lastIndexOf("/")) : ""; + String name = parent.contains("/") ? parent.substring(parent.lastIndexOf("/") + 1) : key; Drive drive = getDrive(key); List playUrls = new ArrayList<>(); for (FileIdBothDirectoryInformation item : getList(drive, parent)) { if (isFile(item)) { - playUrls.add(item.getFileName() + "$" + drive.getServer() + "/" + parent + "/" + item.getFileName()); + playUrls.add(item.getFileName() + "$" + getPath(drive.getServer(), parent, item.getFileName())); } } Vod vod = new Vod(); @@ -99,8 +98,14 @@ public class Samba extends Spider { return Result.get().url(id).string(); } + private String getPath(String... texts) { + List items = new ArrayList<>(); + for (String text : texts) if (!TextUtils.isEmpty(text)) items.add(text); + return TextUtils.join("/", items); + } + private List getList(Drive drive, String path) { - List items = drive.getShare().list(path); + List items = drive.getShare().list(getPath(drive.getSubPath(), path)); Iterator iterator = items.iterator(); while (iterator.hasNext()) { FileIdBothDirectoryInformation item = iterator.next(); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index a6be5691..b9dc44cf 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 23955501..05155f2e 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -65a8a861fbc445ee153d9e0064aabedc +0810fd9a85bfe678d850a92a9f1d2b6f