Skip to content

Commit 713749e

Browse files
committed
adding File Folders
1 parent e5ab2b1 commit 713749e

File tree

5 files changed

+111
-4
lines changed

5 files changed

+111
-4
lines changed

app/Global.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import jobs.FileCheckJob;
1010
import jobs.FolderSizesJob;
1111
import jobs.ImportJob;
12+
import models.MediaFolder;
1213
import play.Application;
1314
import play.GlobalSettings;
1415
import play.Logger;
@@ -19,6 +20,7 @@ public class Global extends GlobalSettings {
1920
private List<JobHandler> jobHandlers = new ArrayList<JobHandler>();
2021

2122
public void onStart(Application app) {
23+
MediaFolder.getOrCreate(File.separator);
2224
outputTools();
2325
checkFolders();
2426
JobService.addJob(new FileAuthScanJob());

app/jobs/FileCheckJob.java

+13
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import helpers.SystemHelper;
1313
import helpers.ThumbnailsHelper;
1414
import models.MediaFile;
15+
import models.MediaFolder;
1516
import models.Property;
1617
import play.Logger;
1718
import services.JobService;
@@ -48,6 +49,8 @@ private void checkNext() {
4849
file = new File(STORAGE_FILE_TEMPLATE.replace("%file%", mediaFile.getLocation()));
4950
Property p = mediaFile.getProperty("size");
5051
mediaFile.filesize = p != null ? p.getLongValue() : MediaFileHelper.getSize(file);
52+
p = mediaFile.getProperty("filename");
53+
mediaFile.folder = p != null ? MediaFolder.getOrCreate(getFolderFromFilename(p.v, mediaFile.filename)) : null;
5154
BasicFileAttributes attr = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
5255
mediaFile.created = MediaFileHelper.fileTimeToDate(attr.creationTime());
5356
ThumbnailsHelper.createThumbnail(mediaFile, "800x600");
@@ -68,4 +71,14 @@ private void checkNext() {
6871
}
6972
}
7073
}
74+
75+
private final static String getFolderFromFilename(String path, String filename) {
76+
if(path != null && filename != null) {
77+
Logger.debug("path.length(): "+path.length());
78+
Logger.debug("filename.length(): "+filename.length());
79+
Logger.debug("path.substring(0, path.length()-filename.length()): "+path.substring(0, path.length()-filename.length()));
80+
return path.substring(0, path.length()-filename.length());
81+
}
82+
return null;
83+
}
7184
}

app/models/MediaFile.java

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import javax.persistence.GenerationType;
1515
import javax.persistence.Id;
1616
import javax.persistence.ManyToMany;
17+
import javax.persistence.ManyToOne;
1718
import javax.persistence.OneToMany;
1819
import javax.persistence.OneToOne;
1920
import javax.persistence.OrderBy;
@@ -48,6 +49,9 @@ public class MediaFile extends Model {
4849
@OneToOne
4950
public Thumbnail cover;
5051

52+
@ManyToOne
53+
public MediaFolder folder = null;
54+
5155
@ManyToMany(cascade=CascadeType.ALL )
5256
private Set<Tag> tags;
5357

app/models/MediaFolder.java

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package models;
2+
3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import javax.persistence.Column;
8+
import javax.persistence.Entity;
9+
import javax.persistence.GeneratedValue;
10+
import javax.persistence.GenerationType;
11+
import javax.persistence.Id;
12+
import javax.persistence.Lob;
13+
import javax.persistence.ManyToOne;
14+
import javax.persistence.OneToMany;
15+
16+
import play.Logger;
17+
import play.db.ebean.Model;
18+
19+
@Entity
20+
public class MediaFolder extends Model {
21+
22+
@Id
23+
@GeneratedValue(strategy = GenerationType.IDENTITY)
24+
public Long id;
25+
26+
@Lob
27+
@Column(columnDefinition = "TEXT")
28+
public String path;
29+
public String name;
30+
@ManyToOne
31+
public MediaFolder parent = null;
32+
@OneToMany(mappedBy="folder")
33+
public List<MediaFile> files = new ArrayList<MediaFile>();
34+
@OneToMany(mappedBy="parent")
35+
public List<MediaFolder> folders = new ArrayList<MediaFolder>();
36+
37+
public static Finder<Long, MediaFolder> Finder = new Finder<Long, MediaFolder>(Long.class, MediaFolder.class);
38+
39+
public static MediaFolder getOrCreate(String path) {
40+
if(path == null || path.isEmpty()) {
41+
return null;
42+
}
43+
path = path.trim();
44+
Logger.debug("path "+path);
45+
MediaFolder mf = MediaFolder.Finder.where().eq("path", path).findUnique();
46+
if(mf == null) {
47+
mf = new MediaFolder();
48+
mf.name = getName(path);
49+
mf.path = path;
50+
if(!File.separator.equals(mf.name)) {
51+
String mediaFolder = getFolder(path);
52+
Logger.info("creating mediaFolder "+mediaFolder);
53+
mf.parent = MediaFolder.getOrCreate(mediaFolder);
54+
}
55+
mf.save();
56+
}
57+
return mf;
58+
}
59+
60+
private final static String getName(String path) {
61+
String[] parts = path.trim().split(File.separator);
62+
return parts.length > 0 ? parts[parts.length-1] : path;
63+
}
64+
65+
private final static String getFolder(String path) {
66+
String[] parts = path.trim().split(File.separator);
67+
StringBuilder sb = new StringBuilder();
68+
for(int i=0; i< parts.length-1; i++){
69+
sb.append(parts[i]).append(File.separator);
70+
}
71+
return sb.toString();
72+
}
73+
}

conf/evolutions/default/1.sql

+19-4
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,18 @@ create table media_file (
2121
last_check timestamp,
2222
created timestamp,
2323
cover_id bigint,
24+
folder_id bigint,
2425
constraint pk_media_file primary key (id))
2526
;
2627

28+
create table media_folder (
29+
id bigint auto_increment not null,
30+
path TEXT,
31+
name varchar(255),
32+
parent_id bigint,
33+
constraint pk_media_folder primary key (id))
34+
;
35+
2736
create table property (
2837
id bigint auto_increment not null,
2938
k varchar(255),
@@ -54,10 +63,14 @@ create table media_file_tag (
5463
;
5564
alter table media_file add constraint fk_media_file_cover_1 foreign key (cover_id) references thumbnail (id) on delete restrict on update restrict;
5665
create index ix_media_file_cover_1 on media_file (cover_id);
57-
alter table property add constraint fk_property_mediaFile_2 foreign key (media_file_id) references media_file (id) on delete restrict on update restrict;
58-
create index ix_property_mediaFile_2 on property (media_file_id);
59-
alter table thumbnail add constraint fk_thumbnail_mediaFile_3 foreign key (media_file_id) references media_file (id) on delete restrict on update restrict;
60-
create index ix_thumbnail_mediaFile_3 on thumbnail (media_file_id);
66+
alter table media_file add constraint fk_media_file_folder_2 foreign key (folder_id) references media_folder (id) on delete restrict on update restrict;
67+
create index ix_media_file_folder_2 on media_file (folder_id);
68+
alter table media_folder add constraint fk_media_folder_parent_3 foreign key (parent_id) references media_folder (id) on delete restrict on update restrict;
69+
create index ix_media_folder_parent_3 on media_folder (parent_id);
70+
alter table property add constraint fk_property_mediaFile_4 foreign key (media_file_id) references media_file (id) on delete restrict on update restrict;
71+
create index ix_property_mediaFile_4 on property (media_file_id);
72+
alter table thumbnail add constraint fk_thumbnail_mediaFile_5 foreign key (media_file_id) references media_file (id) on delete restrict on update restrict;
73+
create index ix_thumbnail_mediaFile_5 on thumbnail (media_file_id);
6174

6275

6376

@@ -75,6 +88,8 @@ drop table if exists media_file;
7588

7689
drop table if exists media_file_tag;
7790

91+
drop table if exists media_folder;
92+
7893
drop table if exists property;
7994

8095
drop table if exists tag;

0 commit comments

Comments
 (0)