diff --git a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java index b60167c..530e61f 100644 --- a/app/src/main/java/asgardius/page/s3manager/BucketSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/BucketSelect.java @@ -28,7 +28,8 @@ public class BucketSelect extends AppCompatActivity { ArrayList Name; ArrayList Img; RecyclerView recyclerView; - String username, password, endpoint; + String username, password, endpoint, prefix; + int treelevel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -36,6 +37,7 @@ public class BucketSelect extends AppCompatActivity { endpoint = getIntent().getStringExtra("endpoint"); username = getIntent().getStringExtra("username"); password = getIntent().getStringExtra("password"); + prefix = ""; setContentView(R.layout.activity_bucket_select); Region region = Region.getRegion(US_EAST_1); S3ClientOptions s3ClientOptions = S3ClientOptions.builder().build(); @@ -118,10 +120,13 @@ public class BucketSelect extends AppCompatActivity { private void explorer(String bucket) { Intent intent = new Intent(this, ObjectSelect.class); + treelevel = 0; intent.putExtra("endpoint", endpoint); intent.putExtra("username", username); intent.putExtra("password", password); intent.putExtra("bucket", bucket); + intent.putExtra("prefix", prefix); + intent.putExtra("treelevel", treelevel); startActivity(intent); } diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 3617025..7c97441 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -19,6 +19,8 @@ import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.model.Bucket; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; +import com.amazonaws.services.s3.model.ListObjectsRequest; +import com.amazonaws.services.s3.model.ListObjectsV2Request; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3Object; @@ -26,14 +28,18 @@ import com.amazonaws.services.s3.model.S3ObjectSummary; import java.net.URL; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; public class ObjectSelect extends AppCompatActivity { ArrayList Name; ArrayList Img; + //ArrayList object; RecyclerView recyclerView; - String username, password, endpoint, bucket; + String username, password, endpoint, bucket, prefix; + int treelevel; + String[] filename, path; @Override protected void onCreate(Bundle savedInstanceState) { @@ -42,6 +48,8 @@ public class ObjectSelect extends AppCompatActivity { username = getIntent().getStringExtra("username"); password = getIntent().getStringExtra("password"); bucket = getIntent().getStringExtra("bucket"); + prefix = getIntent().getStringExtra("prefix"); + treelevel = getIntent().getIntExtra("treelevel", 0); setContentView(R.layout.activity_object_select); Region region = Region.getRegion(US_EAST_1); S3ClientOptions s3ClientOptions = S3ClientOptions.builder().build(); @@ -62,29 +70,67 @@ public class ObjectSelect extends AppCompatActivity { public void run() { try { //Your code goes here - List buckets = s3client.listBuckets(); + //List buckets = s3client.listBuckets(); + ListObjectsRequest orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(prefix).withMaxKeys(2000); //List objects = (List) s3client.listObjects(bucket, "/"); - ListObjectsV2Result result = s3client.listObjectsV2(bucket, "/"); + ObjectListing result = s3client.listObjects(orequest); //System.out.println(objects); //This convert bucket list to an array list - Name = new ArrayList(); Img = new ArrayList(); + LinkedHashSet object = new LinkedHashSet(); // Print bucket names //System.out.println("Buckets:"); - int i=0; + //int i=0; List objects = result.getObjectSummaries(); - for (S3ObjectSummary os : objects) { - Name.add(os.getKey()); - if (os.getKey().endsWith(".opus") || os.getKey().endsWith(".ogg") - || os.getKey().endsWith(".oga") || os.getKey().endsWith(".mp3") - || os.getKey().endsWith(".m4a")) { + boolean nextbatch = false; + while (result.isTruncated() || !nextbatch) { + if (nextbatch) { + result = s3client.listNextBatchOfObjects (result); + objects = result.getObjectSummaries(); + } else { + nextbatch = true; + } + for (S3ObjectSummary os : objects) { + filename = os.getKey().split("/"); + if (filename.length == treelevel+1) { + object.add(filename[treelevel]); + } + else { + object.add(filename[treelevel]+"/"); + } + + //i++; + } + + } + + Name = new ArrayList(object); + object.clear(); + //Img.add(R.drawable.unknownfile); + int i = 0; + while(i= 2) { + path = prefix.split("/"); + prefix = ""; + int i = 0; + //System.out.println("path "+i); + while(i <= path.length-2) { + prefix = prefix.concat(path[i]); + prefix = prefix.concat("/"); + //System.out.println("position "+i); + i++; + } + } + else if (treelevel == 1) { + prefix = ""; + } + treelevel --; + //System.out.println("tree "+treelevel); + //System.out.println("prefix "+prefix); + finish(); + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/folder.png b/app/src/main/res/drawable/folder.png new file mode 100644 index 0000000..b66ede4 Binary files /dev/null and b/app/src/main/res/drawable/folder.png differ diff --git a/app/src/main/res/drawable/unknownfile.png b/app/src/main/res/drawable/unknownfile.png new file mode 100644 index 0000000..c507764 Binary files /dev/null and b/app/src/main/res/drawable/unknownfile.png differ