aboutsummaryrefslogtreecommitdiff
path: root/challenge-103/paulo-custodio/python/ch-2.py
blob: c03a008efd03387f270603409f4b653def903f53 (plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env python

# Challenge 103
#
# TASK #2 > What's playing?
# Submitted by: Albert Croft
# Working from home, you decided that on occasion you wanted some background
# noise while working. You threw together a network streamer to continuously
# loop through the files and launched it in a tmux (or screen) session, giving
# it a directory tree of files to play. During the day, you connected an audio
# player to the stream, listening through the workday, closing it when done.
#
# For weeks you connect to the stream daily, slowly noticing a gradual drift of
# the media. After several weeks, you take vacation. When you return, you are
# pleasantly surprised to find the streamer still running. Before connecting,
# however, if you consider the puzzle of determining which track is playing.
#
# After looking at a few modules to read info regarding the media, a quick bit
# of coding gave you a file list. The file list is in a simple CSV format, each
# line containing two fields: the first the number of milliseconds in length,
# the latter the media's title (this example is of several episodes available
# from the MercuryTheatre.info):
#
#     1709363,"Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"
#     1723781,"Les Miserables Episode 2: Javert (broadcast date: 1937-07-30)"
#     1723781,"Les Miserables Episode 3: The Trial (broadcast date: 1937-08-06)"
#     1678356,"Les Miserables Episode 4: Cosette (broadcast date: 1937-08-13)"
#     1646043,"Les Miserables Episode 5: The Grave (broadcast date: 1937-08-20)"
#     1714640,"Les Miserables Episode 6: The Barricade (broadcast date: 1937-08-27)"
#     1714640,"Les Miserables Episode 7: Conclusion (broadcast date: 1937-09-03)"
# For this script, you can assume to be provided the following information:
#
#     * the value of $^T ($BASETIME) of the streamer script,
#     * the value of time(), and
#     * a CSV file containing the media to play consisting of the length in
# milliseconds and an identifier for the media (title, filename, or other).
# Write a program to output which file is currently playing. For purposes of
# this script, you may assume gapless playback, and format the output as you
# see fit.
#
# Optional: Also display the current position in the media as a time-like value.
#
# Example:
#
# Input: 3 command line parameters: start time, current time, file name
#
#     # Streamer start time: Tue Nov 23 12:22:03 2020
#     1606134123
#
#     # Current time:        Mon Mar  1 09:34:36 2021
#     1614591276
#
#     # filelist.csv
#
# Output:
#
#     "Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)"
#     00:17:33

import csv
import sys

def read_playlist(filename):
    playlist = []
    with open(filename) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')
        for row in csv_reader:
            playlist.append([int(int(row[0])/1000+0.5), row[1]])
    return playlist

def total_time(playlist):
    sum = 0
    for x in playlist:
        sum += x[0]
    return sum

def show_title(start_secs, current_secs, playlist_file):
    playlist = read_playlist('playlist.csv')
    total_secs = current_secs - start_secs
    playlist_total_secs = total_time(playlist)
    playlist_secs = total_secs % playlist_total_secs

    for item in playlist:
        if playlist_secs < item[0]:
            print(item[1])
            hh = int(playlist_secs/3600)
            playlist_secs %= 3600
            mm = int(playlist_secs/60)
            playlist_secs %= 60
            ss = playlist_secs;
            print("{:02}:{:02}:{:02}".format(hh, mm, ss))
            break
        else:
            playlist_secs -= item[0]

show_title(int(sys.argv[1]), int(sys.argv[2]), sys.argv[3])