|  |  | @ -76,6 +76,28 @@ func (file *File) Delete() error { | 
			
		
	
		
			
				
					|  |  |  | 	return nil | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // Insert manually inserts file information into the database. This should never, ever be API accessible
 | 
			
		
	
		
			
				
					|  |  |  | func Insert(name, kind, mimeType, author string, time time.Time, size int64, url string) (File, error) { | 
			
		
	
		
			
				
					|  |  |  | 	file := File{ | 
			
		
	
		
			
				
					|  |  |  | 		ID:       makeFileID(), | 
			
		
	
		
			
				
					|  |  |  | 		Kind:     kind, | 
			
		
	
		
			
				
					|  |  |  | 		Time:     time, | 
			
		
	
		
			
				
					|  |  |  | 		Public:   false, | 
			
		
	
		
			
				
					|  |  |  | 		Author:   author, | 
			
		
	
		
			
				
					|  |  |  | 		Name:     name, | 
			
		
	
		
			
				
					|  |  |  | 		MimeType: mimeType, | 
			
		
	
		
			
				
					|  |  |  | 		Size:     size, | 
			
		
	
		
			
				
					|  |  |  | 		URL:      url, | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	err := fileCollection.Insert(file) | 
			
		
	
		
			
				
					|  |  |  | 	if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 		return File{}, err | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	return file, nil | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // Upload adds a file to the space.
 | 
			
		
	
		
			
				
					|  |  |  | func Upload(ctx context.Context, name, mimeType, author string, size int64, input io.Reader) (File, error) { | 
			
		
	
		
			
				
					|  |  |  | 	if name == "" { | 
			
		
	
	
		
			
				
					|  |  | @ -126,6 +148,19 @@ func FindID(id string) (File, error) { | 
			
		
	
		
			
				
					|  |  |  | 	return file, nil | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // FindName finds a file by kind, name and author
 | 
			
		
	
		
			
				
					|  |  |  | func FindName(kind string, name string, author string) (File, error) { | 
			
		
	
		
			
				
					|  |  |  | 	query := bson.M{"kind": kind, "name": name, "author": author} | 
			
		
	
		
			
				
					|  |  |  | 	file := File{} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	err := fileCollection.Find(query).One(&file) | 
			
		
	
		
			
				
					|  |  |  | 	if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 		return File{}, err | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	return file, nil | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // List lists files according to the standard lookup. By default it's just the author's own files,
 | 
			
		
	
		
			
				
					|  |  |  | // but if `public` is true it will alos include files made public by other authors. If `mimeTypes` contains
 | 
			
		
	
		
			
				
					|  |  |  | // any, it will limit the results to that. If `author` is empty, it will only list public files
 | 
			
		
	
	
		
			
				
					|  |  | @ -159,7 +194,7 @@ func List(author string, public bool, mimeTypes []string) ([]File, error) { | 
			
		
	
		
			
				
					|  |  |  | func listFiles(query interface{}) ([]File, error) { | 
			
		
	
		
			
				
					|  |  |  | 	list := make([]File, 0, 32) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	err := fileCollection.Find(query).All(&list) | 
			
		
	
		
			
				
					|  |  |  | 	err := fileCollection.Find(query).Sort("-time").All(&list) | 
			
		
	
		
			
				
					|  |  |  | 	if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 		return nil, err | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
	
		
			
				
					|  |  | @ -193,6 +228,7 @@ func init() { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 		fileCollection.EnsureIndexKey("author") | 
			
		
	
		
			
				
					|  |  |  | 		fileCollection.EnsureIndexKey("public") | 
			
		
	
		
			
				
					|  |  |  | 		fileCollection.EnsureIndexKey("kind", "name", "author") | 
			
		
	
		
			
				
					|  |  |  | 		fileCollection.EnsureIndexKey("author", "public") | 
			
		
	
		
			
				
					|  |  |  | 		fileCollection.EnsureIndexKey("kind") | 
			
		
	
		
			
				
					|  |  |  | 	}) | 
			
		
	
	
		
			
				
					|  |  | 
 |