11import { Injectable , isDevMode } from '@angular/core' ;
22import { Observable } from 'rxjs' ;
33import { Item } from '../../core/shared/item.model' ;
4- import { getFirstCompletedRemoteData , getFirstSucceededRemoteDataPayload } from '../../core/shared/operators' ;
5- import { last , map , switchMap } from 'rxjs/operators' ;
4+ import {
5+ getFirstCompletedRemoteData ,
6+ } from '../../core/shared/operators' ;
7+ import { filter , last , map , mergeMap , switchMap } from 'rxjs/operators' ;
68import { RemoteData } from '../../core/data/remote-data' ;
79import { PaginatedList } from '../../core/data/paginated-list.model' ;
810import { Bitstream } from '../../core/shared/bitstream.model' ;
911import { BitstreamFormat } from '../../core/shared/bitstream-format.model' ;
1012import { BitstreamDataService } from '../../core/data/bitstream-data.service' ;
1113import { followLink , FollowLinkConfig } from '../../shared/utils/follow-link-config.model' ;
14+ import { Bundle } from '../../core/shared/bundle.model' ;
15+ import { BundleDataService } from '../../core/data/bundle-data.service' ;
1216
1317@Injectable ( )
1418export class MiradorViewerService {
@@ -26,32 +30,64 @@ export class MiradorViewerService {
2630 }
2731
2832 /**
29- * Returns observable of the number of images in the ORIGINAL bundle
33+ * Returns observable of the number of images found in eligible IIIF bundles. Checks
34+ * the mimetype of the first 5 bitstreams in each bundle.
3035 * @param item
3136 * @param bitstreamDataService
37+ * @param bundleDataService
38+ * @returns the total image count
3239 */
33- getImageCount ( item : Item , bitstreamDataService : BitstreamDataService ) : Observable < number > {
34- let count = 0 ;
35- return bitstreamDataService . findAllByItemAndBundleName ( item , 'ORIGINAL' , {
36- currentPage : 1 ,
37- elementsPerPage : 10
38- } , true , true , ...this . LINKS_TO_FOLLOW )
39- . pipe (
40- getFirstCompletedRemoteData ( ) ,
41- map ( ( bitstreamsRD : RemoteData < PaginatedList < Bitstream > > ) => bitstreamsRD . payload ) ,
42- map ( ( paginatedList : PaginatedList < Bitstream > ) => paginatedList . page ) ,
43- switchMap ( ( bitstreams : Bitstream [ ] ) => bitstreams ) ,
44- switchMap ( ( bitstream : Bitstream ) => bitstream . format . pipe (
45- getFirstSucceededRemoteDataPayload ( ) ,
46- map ( ( format : BitstreamFormat ) => format )
47- ) ) ,
48- map ( ( format : BitstreamFormat ) => {
49- if ( format . mimetype . includes ( 'image' ) ) {
50- count ++ ;
51- }
52- return count ;
53- } ) ,
54- last ( )
40+ getImageCount ( item : Item , bitstreamDataService : BitstreamDataService , bundleDataService : BundleDataService ) :
41+ Observable < number > {
42+ let count = 0 ;
43+ return bundleDataService . findAllByItem ( item ) . pipe (
44+ getFirstCompletedRemoteData ( ) ,
45+ map ( ( bundlesRD : RemoteData < PaginatedList < Bundle > > ) => {
46+ return bundlesRD . payload ;
47+ } ) ,
48+ map ( ( paginatedList : PaginatedList < Bundle > ) => paginatedList . page ) ,
49+ switchMap ( ( bundles : Bundle [ ] ) => bundles ) ,
50+ filter ( ( b : Bundle ) => this . isIiifBundle ( b . name ) ) ,
51+ mergeMap ( ( bundle : Bundle ) => {
52+ return bitstreamDataService . findAllByItemAndBundleName ( item , bundle . name , {
53+ currentPage : 1 ,
54+ elementsPerPage : 5
55+ } , true , true , ...this . LINKS_TO_FOLLOW ) . pipe (
56+ getFirstCompletedRemoteData ( ) ,
57+ map ( ( bitstreamsRD : RemoteData < PaginatedList < Bitstream > > ) => {
58+ return bitstreamsRD . payload ;
59+ } ) ,
60+ map ( ( paginatedList : PaginatedList < Bitstream > ) => paginatedList . page ) ,
61+ switchMap ( ( bitstreams : Bitstream [ ] ) => bitstreams ) ,
62+ switchMap ( ( bitstream : Bitstream ) => bitstream . format . pipe (
63+ getFirstCompletedRemoteData ( ) ,
64+ map ( ( formatRD : RemoteData < BitstreamFormat > ) => {
65+ return formatRD . payload ;
66+ } ) ,
67+ map ( ( format : BitstreamFormat ) => {
68+ if ( format . mimetype . includes ( 'image' ) ) {
69+ count ++ ;
70+ }
71+ return count ;
72+ } ) ,
73+ )
74+ )
75+ ) ;
76+ } ) ,
77+ last ( )
5578 ) ;
5679 }
80+
81+ isIiifBundle ( bundleName : string ) : boolean {
82+ return ! (
83+ bundleName === 'OtherContent' ||
84+ bundleName === 'LICENSE' ||
85+ bundleName === 'THUMBNAIL' ||
86+ bundleName === 'TEXT' ||
87+ bundleName === 'METADATA' ||
88+ bundleName === 'CC-LICENSE' ||
89+ bundleName === 'BRANDED_PREVIEW'
90+ ) ;
91+ }
92+
5793}
0 commit comments