                 let realm = iTunesRealm()
                 let cache = getOrCreateCache(genreId: self.id, realm: realm)
                 try! realm.write {
-                    var tracks: [_Track] = []
-                    response.objects.forEach {
-                        switch $0 {
-                        case .track(let obj):
-                            tracks.append(obj)
-                            realm.add(obj, update: true)
-                        case .collection(let obj):
-                            realm.add(obj, update: true)
-                        case .artist(let obj):
-                            realm.add(obj, update: true)
-                        case .unknown:()
-                        }
-                    }
+                    self.save(response.objects, to: realm)
 
                     if refreshing {
                         cache.tracks.removeAll()

        }
    }

    fileprivate func fetchFeed(ifError errorType: ErrorLog.Error.Type, level: ErrorLog.Level, completion: @escaping (RequestState) -> Void) {
        Session.shared.send(GetRss<_RssCache>(url: url, limit: 200), callbackQueue: callbackQueue) { [weak self] result in
            guard let `self` = self else { return }
            switch result {


    var _refreshDuration: Duration { return 3.hours }

    func request(refreshing: Bool,
                 force: Bool,
                 ifError errorType: ErrorLog.Error.Type,
                 level: ErrorLog.Level,
                 completion: @escaping (RequestState) -> Void) {

        if force || trackIds.isEmpty || (refreshing && _needRefresh) {
            fetchFeed(ifError: errorType, level: level, completion: completion)
            return
