Class: RbPod::TrackCollection

Inherits:
Object
  • Object
show all
Defined in:
ext/rbpod/track_collection.c

Instance Method Summary collapse

Constructor Details

#initialize(playlist) ⇒ RbPod::TrackCollection

Given an RbPod::Playlist playlist, returns a collection of tracks within the playlist.



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'ext/rbpod/track_collection.c', line 138

static VALUE rbpod_track_collection_initialize(VALUE self, VALUE playlist)
{
    Itdb_Playlist *_playlist = TYPED_DATA_PTR(playlist, Itdb_Playlist);

    if (rb_obj_is_instance_of(playlist, cRbPodPlaylist) == FALSE) {
        rb_raise(eRbPodError, "Invalid Arguments: Expected RbPod::Playlist, got %s", StringValueCStr(playlist));
        return Qnil;
    }

    rb_iv_set(self, "@playlist", playlist);

    DATA_PTR(self) = _playlist->members;

    return self;
}

Instance Method Details

#include?(track) ⇒ Boolean

Determines if the given RbPod::Track track is within this playlist.

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'ext/rbpod/track_collection.c', line 29

static VALUE rbpod_track_collection_include(VALUE self, VALUE track)
{
    VALUE playlist = rbpod_track_collection_playlist(self);
    Itdb_Playlist *_playlist = TYPED_DATA_PTR(playlist, Itdb_Playlist);
    Itdb_Track *_track = TYPED_DATA_PTR(track, Itdb_Track);

    if (rb_obj_is_instance_of(track, cRbPodTrack) == FALSE) {
        rb_raise(eRbPodError, "Invalid Arguments: Expected RbPod::Track, got %s", StringValueCStr(playlist));
        return Qnil;
    }

    return BooleanValue(itdb_playlist_contains_track(_playlist, _track));
}

#insert(track, position = -1) ⇒ nil Also known as: <<

Adds a given RbPod::Track track to the playlist at position. If position was not supplied, track will be appended to the end of the playlist.

Returns:

  • (nil)


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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'ext/rbpod/track_collection.c', line 72

static VALUE rbpod_track_collection_insert(int argc, VALUE *argv, VALUE self)
{
    VALUE playlist = rbpod_track_collection_playlist(self);
    Itdb_Playlist *_playlist = TYPED_DATA_PTR(playlist, Itdb_Playlist);
    VALUE track = Qnil, position = Qnil;
    Itdb_Track *_track = NULL;
    gint32 _position = 0;
    GError *error = NULL;

    if (rb_scan_args(argc, argv, "11", &track, &position) < 1) {
        rb_raise(eRbPodError, "Invalid arguments: Expected >= 1 argument!");
        return Qnil;
    }

    _track    = TYPED_DATA_PTR(track, Itdb_Track);
    _position = NIL_P(position) ? -1 : NUM2INT(position);

    /* We we given a track? */
    if (rb_obj_is_instance_of(track, cRbPodTrack) == FALSE) {
        rb_raise(eRbPodError, "Invalid argument: expected RbPod::Track, got %s", StringValueCStr(playlist));
        return Qnil;
    }

    /* Has this track already been transferred? If so, just add it to the playlist and be done. */
    if (_track->transferred == TRUE) {
        itdb_playlist_add_track(_playlist, _track, _position);
        return Qnil;
    }

    /* Do we have a source path for this track? */
    if (_track->userdata != NULL && g_file_test(_track->userdata, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_SYMLINK) == FALSE) {
        rb_raise(eRbPodError, "Invalid argument: Cannot add a track without a source file.");
        return Qnil;
    }

    itdb_playlist_add_track(_playlist, _track, _position);

    /* Copy the track to the iPod. XXX: Unlock the GVL instead, stupid. */
    if (itdb_cp_track_to_ipod(_track, _track->userdata, &error) == FALSE) {
        itdb_playlist_remove_track(_playlist, _track);
        return rbpod_raise_error(error);
    }


    return Qnil;
}

#playlistRbPod::Playlist

Returns the playlist this track collection is attached to.

Returns:



11
12
13
14
15
16
17
18
19
20
21
# File 'ext/rbpod/track_collection.c', line 11

static VALUE rbpod_track_collection_playlist(VALUE self)
{
    VALUE playlist = rb_iv_get(self, "@playlist");

    if (rb_obj_is_instance_of(playlist, cRbPodPlaylist) == FALSE) {
        rb_raise(eRbPodError, "Invalid Arguments: Expected RbPod::Playlist, got %s", StringValueCStr(playlist));
        return Qnil;
    }

    return playlist;
}

#remove(track) ⇒ nil

Removes a given RbPod::Track track from the playlist.

Returns:

  • (nil)


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'ext/rbpod/track_collection.c', line 49

static VALUE rbpod_track_collection_remove(VALUE self, VALUE track)
{
    VALUE playlist = rbpod_track_collection_playlist(self);
    Itdb_Playlist *_playlist = TYPED_DATA_PTR(playlist, Itdb_Playlist);
    Itdb_Track *_track = TYPED_DATA_PTR(track, Itdb_Track);

    if (rb_obj_is_instance_of(track, cRbPodTrack) == FALSE) {
        rb_raise(eRbPodError, "Invalid Arguments: Expected RbPod::Track, got %s", StringValueCStr(playlist));
        return Qnil;
    }

    itdb_playlist_remove_track(_playlist, _track);

    return Qnil;
}

#sizeInteger

Returns the total number of tracks in this playlist.

Returns:

  • (Integer)


125
126
127
128
129
130
# File 'ext/rbpod/track_collection.c', line 125

static VALUE rbpod_track_collection_size(VALUE self)
{
    VALUE playlist = rbpod_track_collection_playlist(self);
    Itdb_Playlist *_playlist = TYPED_DATA_PTR(playlist, Itdb_Playlist);
    return INT2NUM(itdb_playlist_tracks_number(_playlist));
}