4. 다운로드 목록 관리
SDK 저장소에 등록된 콘텐츠 데이터를 상태별로 조회하고 관리하는 방법을 설명합니다. 특히 네트워크 단절이나 강제 종료 등 애플리케이션이 재시작되는 환경에서도 직전 다운로드 큐(Queue) 목록을 안전하게 복원하기 위한 로컬 DB 저장 패턴을 함께 다룹니다.
이 문서의 모든 예제 코드는 공식 샘플 앱인 kollus_player_v2_android를 바탕으로 작성되었습니다.
다운로드 콘텐츠 목록 조회
| 목록 조회 방법 | API | 비고 |
|---|---|---|
| 디스크별 전체 다운로드 콘텐츠 | multiStorage.getDownloadList(diskIndex) | diskIndex == -1 지정 시 전체 디스크 통합 조회 |
| 단일 콘텐츠 키(mck) 기반 조회 | storage.getKollusContent(content, mck) | mck와 매칭되는 단 일 객체 데이터 로드 |
| 로컬 경로 기반 조회 | multiStorage.getDownloadKollusContent(path) | MultiKollusContent 타입 변환 |
| 다운로드 실행 여부 (전역) | DownloadService.isDownloading() | 정적(static) 메서드로 현재 다운로드 상태 확인 |
getDownloadList 메서드가 반환하는 리스트 배열에는 다운로드 중, 완료, 실패 상태의 콘텐츠 객체가 혼재되어 있습니다.
따라서 실제 UI 목록을 구성할 때는 하단의 다운로드 상태 플래그 정의 섹션을 참고하여 KollusContent 플래그 조건을 통해 명시적으로 분기 처리해야 합니다.
메타데이터 로컬 DB 저장
공식 샘플 앱은 다운로드 파이프라인의 안전성을 보장하기 위해 다운로드 작업 큐를 Room 기반 로컬 DB에 저장하여 관리합니다. (KollusContentRepository, KollusDownloadContentEntity 패턴 참고)
KollusDownloadContentEntity는 다운로드가 현재 진행 중이거나 일시적으로 중단된 상태의 작업을 정밀하게 추적하기 위한 데이터 모델입니다.
앱이 강제 종료 후 재시작되어도 직전 다운로드 큐 배열을 그대로 복원할 수 있도록 실시간 진행률과 상태 코드를 저장합니다.
해당 콘텐츠의 다운로드가 완료되면 이 엔티티의 수명주기는 종료됩니다. 완료된 파일 관리는 하단의 다운로드 완료 콘텐츠 관리 섹션을 참고하세요.
KollusDownloadContentEntity 컬럼 명세
| 컬럼 | 타입 | 의미 |
|---|---|---|
filename | String | 콘텐츠 파일명 |
thumbnail_path | String | 로컬 섬네일 이미지 경로 |
download_start | long | 다운로드 작업이 최초 시작된 타임스탬프 (epoch milliseconds) |
download_file_size | long | 콘텐츠 파일 크기 |
download_receiving_size | long | 받은 크기 |
download_status | int | 다운로드 상태 코드 (0: 대기 상태) |
disk_index | int | 콘텐츠가 저장될 로컬 디스크 인덱스 |
disk_type | int | 디스크 타입 (내장 또는 SD) |
download_percent | int | 다운로드 진행률 (0~100) |
media_content_key | String | 미디어 콘텐츠 키 (mck) |
folder | String | 사용자 커스텀 분류 폴더 경로 |
앱 재시작 후 다운로드 복원 파이프라인
// DownloadService.onCreate()
Vector<DownloadInfo> list = mDownloadDBHelper.list();
for (DownloadInfo iter : list) {
if (iter.getMultiKollusContent().getKollusContent().isLoaded()) {
mDownloadInfoList.add(iter); // 로컬 디스크에서 콘텐츠 부분 파일이 인식되면 복원
} else {
mDownloadDBHelper.delete(iter); // 로컬 파일이 임의 삭제된 경우 DB에서 제거
}
}
KollusContent.isLoaded()는 SDK가 디스크에 실제 콘텐츠 파일이 존재하는지 확인한 결과입니다.