Skip to content

Instantly share code, notes, and snippets.

View pepicrft's full-sized avatar
🌱
Open-sourcing

Pedro Piñera Buendía pepicrft

🌱
Open-sourcing
View GitHub Profile
func viewDidLoad() {
super.viewDidLoad()
self.userObserver = UserObserver()
self.userObserver.rx().subscribeNext { [weak self] user in
self.avatarImageView.setImage(url: user.avatarUrl)
}
}
class KeychainRepository {
static let instance: KeychainRepository = KeychainRepository()
func save(session session: Session, name: String)
func clear(name name: String)
func fetch(name name: String) -> Session?
func observe(name name: String) -> Observable<Session?>
}
class AppDelegate {
func observeUserSession() {
let sessionObserver = SessionObserver(name: "my-service")
sessionObserver
.map { $0 != nil }
.distinctUntilChanged()
.subscribeNext { [weak self] authenticated in
if authenticated {
self?.showLogin()
class StreamViewController: UIViewController {
func viewDidLoad() {
super.viewDidLoad()
self.synchronizeStream()
self.observeStreamTracks()
}
func synchronizeStream() {
// Synchronization logic
}
// Synchronizing data
apiClient.synchronizeTracks { [weak self] tracks in
self?.tracks = tracks
self?.tableView.reloadData()
}
// Player
func loadTrack(track: Track) {
self.player.instance.loadTrack(track)
self.playerControls.updateWithTrack(track)
// Offline+API.swift
public extension Offline {
func isTrackOffline(track: Track) -> Bool
func downloadTrackIfNeeded(track: Track, completion: (error: NSError?) -> Void)
}
// Offline.swift
class Offline {
// MARK: - Internal
internal var storage: Storage
// MARK: - Init
// Search.swift
class Search {
let player: Player
let storage: Storage
init(player: Player) {
self.player = player
self.storage = Storage(model: "Player")
self.storage.setup()
}
// Player.swift
class Player {
let storage: Storage
}
// Player+API
extension Player {
func createQueue(tracks: [PlayerTrack]) -> String
}
// Image Caching framework
class ImageCaching {
func isCached(url: String) -> Bool
func fetchCaching(url: String) throws -> UIImage?
}