| """ |
| Song Class |
| Represents a music track |
| """ |
|
|
| class Song: |
| def __init__(self, song_id, title, artist, album): |
| self.song_id = song_id |
| self.title = title |
| self.artist = artist |
| self.album = album |
| self.duration = 0 |
| self.genre = "Unknown" |
| self.year = None |
| self.play_count = 0 |
| self.rating = 0.0 |
| self.favorite = False |
| self.file_path = "" |
| |
| def set_duration(self, seconds): |
| """ |
| Set song duration in seconds |
| """ |
| if seconds > 0: |
| self.duration = seconds |
| return True |
| return False |
| |
| def set_genre(self, genre): |
| """ |
| Set music genre |
| """ |
| self.genre = genre |
| |
| def set_year(self, year): |
| """ |
| Set release year |
| """ |
| if 1900 <= year <= 2100: |
| self.year = year |
| return True |
| return False |
| |
| def play(self): |
| """ |
| Increment play count |
| """ |
| self.play_count += 1 |
| |
| def rate(self, rating): |
| """ |
| Rate the song (1-5 stars) |
| """ |
| if 1 <= rating <= 5: |
| self.rating = rating |
| return True |
| return False |
| |
| def toggle_favorite(self): |
| """ |
| Toggle favorite status |
| """ |
| self.favorite = not self.favorite |
| |
| def get_duration_string(self): |
| """ |
| Get duration as MM:SS string |
| """ |
| minutes = self.duration // 60 |
| seconds = self.duration % 60 |
| return f"{minutes}:{seconds:02d}" |
| |
| def to_dict(self): |
| """ |
| Convert song to dictionary |
| """ |
| return { |
| 'song_id': self.song_id, |
| 'title': self.title, |
| 'artist': self.artist, |
| 'album': self.album, |
| 'duration': self.get_duration_string(), |
| 'genre': self.genre, |
| 'year': self.year, |
| 'play_count': self.play_count, |
| 'rating': self.rating, |
| 'favorite': self.favorite |
| } |
| |
| def __str__(self): |
| return f"{self.artist} - {self.title} ({self.get_duration_string()})" |
|
|