Fix samba
This commit is contained in:
parent
843cde8576
commit
fc50f6e5d0
|
|
@ -27,6 +27,7 @@ public class Drive {
|
||||||
private SMBClient smbClient;
|
private SMBClient smbClient;
|
||||||
private DiskShare diskShare;
|
private DiskShare diskShare;
|
||||||
private Session session;
|
private Session session;
|
||||||
|
private String subPath;
|
||||||
|
|
||||||
public static List<Drive> arrayFrom(String str) {
|
public static List<Drive> arrayFrom(String str) {
|
||||||
Type listType = new TypeToken<List<Drive>>() {}.getType();
|
Type listType = new TypeToken<List<Drive>>() {}.getType();
|
||||||
|
|
@ -37,7 +38,7 @@ public class Drive {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
private String getName() {
|
||||||
return TextUtils.isEmpty(name) ? "" : name;
|
return TextUtils.isEmpty(name) ? "" : name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,6 +46,10 @@ public class Drive {
|
||||||
return TextUtils.isEmpty(server) ? "" : server;
|
return TextUtils.isEmpty(server) ? "" : server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSubPath() {
|
||||||
|
return TextUtils.isEmpty(subPath) ? "" : subPath;
|
||||||
|
}
|
||||||
|
|
||||||
public DiskShare getShare() {
|
public DiskShare getShare() {
|
||||||
if (diskShare == null) init();
|
if (diskShare == null) init();
|
||||||
return diskShare;
|
return diskShare;
|
||||||
|
|
@ -54,14 +59,15 @@ public class Drive {
|
||||||
return new Class(getName(), getName(), "1");
|
return new Class(getName(), getName(), "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() {
|
private void init() {
|
||||||
try {
|
try {
|
||||||
smbClient = new SMBClient();
|
smbClient = new SMBClient();
|
||||||
Uri uri = Uri.parse(getServer());
|
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);
|
connection = smbClient.connect(uri.getHost(), uri.getPort() != -1 ? uri.getPort() : SMBClient.DEFAULT_PORT);
|
||||||
session = connection.authenticate(getAuthentication(uri));
|
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) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
@ -84,6 +90,11 @@ public class Drive {
|
||||||
if (smbClient != null) smbClient.close();
|
if (smbClient != null) smbClient.close();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
connection = null;
|
||||||
|
diskShare = null;
|
||||||
|
smbClient = null;
|
||||||
|
session = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
|
||||||
import com.hierynomus.protocol.commons.EnumWithValue;
|
import com.hierynomus.protocol.commons.EnumWithValue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
@ -65,7 +64,7 @@ public class Samba extends Spider {
|
||||||
Drive drive = getDrive(key);
|
Drive drive = getDrive(key);
|
||||||
List<Vod> list = new ArrayList<>();
|
List<Vod> list = new ArrayList<>();
|
||||||
for (FileIdBothDirectoryInformation item : getList(drive, path)) {
|
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 (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));
|
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 tid = ids.get(0);
|
||||||
String key = tid.contains("/") ? tid.substring(0, tid.indexOf("/")) : tid;
|
String key = tid.contains("/") ? tid.substring(0, tid.indexOf("/")) : tid;
|
||||||
String path = tid.contains("/") ? tid.substring(tid.indexOf("/") + 1) : "";
|
String path = tid.contains("/") ? tid.substring(tid.indexOf("/") + 1) : "";
|
||||||
String parent = path.substring(0, path.lastIndexOf("/"));
|
String parent = path.contains("/") ? path.substring(0, path.lastIndexOf("/")) : "";
|
||||||
String name = parent.substring(parent.lastIndexOf("/") + 1);
|
String name = parent.contains("/") ? parent.substring(parent.lastIndexOf("/") + 1) : key;
|
||||||
Drive drive = getDrive(key);
|
Drive drive = getDrive(key);
|
||||||
List<String> playUrls = new ArrayList<>();
|
List<String> playUrls = new ArrayList<>();
|
||||||
for (FileIdBothDirectoryInformation item : getList(drive, parent)) {
|
for (FileIdBothDirectoryInformation item : getList(drive, parent)) {
|
||||||
if (isFile(item)) {
|
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();
|
Vod vod = new Vod();
|
||||||
|
|
@ -99,8 +98,14 @@ public class Samba extends Spider {
|
||||||
return Result.get().url(id).string();
|
return Result.get().url(id).string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getPath(String... texts) {
|
||||||
|
List<String> items = new ArrayList<>();
|
||||||
|
for (String text : texts) if (!TextUtils.isEmpty(text)) items.add(text);
|
||||||
|
return TextUtils.join("/", items);
|
||||||
|
}
|
||||||
|
|
||||||
private List<FileIdBothDirectoryInformation> getList(Drive drive, String path) {
|
private List<FileIdBothDirectoryInformation> getList(Drive drive, String path) {
|
||||||
List<FileIdBothDirectoryInformation> items = drive.getShare().list(path);
|
List<FileIdBothDirectoryInformation> items = drive.getShare().list(getPath(drive.getSubPath(), path));
|
||||||
Iterator<FileIdBothDirectoryInformation> iterator = items.iterator();
|
Iterator<FileIdBothDirectoryInformation> iterator = items.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
FileIdBothDirectoryInformation item = iterator.next();
|
FileIdBothDirectoryInformation item = iterator.next();
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
65a8a861fbc445ee153d9e0064aabedc
|
0810fd9a85bfe678d850a92a9f1d2b6f
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue