-
Notifications
You must be signed in to change notification settings - Fork 0
/
view_list_albums.go
80 lines (65 loc) · 1.73 KB
/
view_list_albums.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package catalogaclview
import (
"github.com/thomasduchatelle/dphoto/pkg/catalog"
"sort"
)
// ListAlbums returns albums visible by the user (owned by current user, and shared to him)
func (v *View) ListAlbums(filter ListAlbumsFilter) ([]*AlbumInView, error) {
view, err := v.listOwnedAlbums()
if err != nil {
return nil, err
}
if !filter.OnlyDirectlyOwned {
albums, err := v.listSharedWithUserAlbums()
if err != nil {
return nil, err
}
view = append(view, albums...)
sort.Slice(view, func(i, j int) bool {
return view[i].Start.Before(view[j].Start)
})
}
return view, nil
}
func (v *View) listOwnedAlbums() ([]*AlbumInView, error) {
owner, err := v.CatalogRules.Owner()
if err != nil || owner == nil { // TODO That's highly irregular coding style.
return nil, err
}
ownedAlbums, err := v.CatalogAdapter.FindAllAlbums(*owner)
if err != nil {
return nil, err
}
sharing, err := v.CatalogRules.SharedByUserGrid(*owner)
var view []*AlbumInView
for _, album := range ownedAlbums {
sharedTo, _ := sharing[album.FolderName.String()]
view = append(view, &AlbumInView{
Album: album,
SharedWith: sharedTo,
DirectlyOwned: true,
})
}
return view, err
}
func (v *View) listSharedWithUserAlbums() ([]*AlbumInView, error) {
shares, err := v.CatalogRules.SharedWithUserAlbum()
if err != nil || len(shares) == 0 {
return nil, err
}
ids := make([]catalog.AlbumId, len(shares), len(shares))
for i, alb := range shares {
ids[i] = catalog.AlbumId{
Owner: alb.Owner,
FolderName: alb.FolderName,
}
}
albums, err := v.CatalogAdapter.FindAlbums(ids)
var view []*AlbumInView
for _, album := range albums {
view = append(view, &AlbumInView{
Album: album,
})
}
return view, err
}