pub struct TrackCollection { /* private fields */ }
Expand description

Safe wrapper over a IITTrackCollection

Implementations§

source§

impl TrackCollection

source

pub fn ItemByPlayOrder(&self, Index: i32) -> Result<Track>

Returns an IITTrack object corresponding to the given index, where the index is defined by the play order of the playlist containing the track collection (1-based).

Examples found in repository?
examples/wrappers.rs (line 35)
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
fn show_playlists(iTunes: &itunes_com::wrappers::iTunes) -> windows::core::Result<()> {
    let sources = iTunes.Sources()?;
    for source in sources.iter()? {
        let kind = source.Kind()?;
        println!("Source kind: {:?}", kind);
        if kind == ITSourceKind::ITSourceKindLibrary {
            for pl in source.Playlists()?.iter()? {
                let pl_kind = pl.Kind()?;
                let tracks = pl.Tracks()?;
                let track_count = tracks.iter()?.len();
                let first_track = tracks.ItemByPlayOrder(1);
                let first_track_name = first_track.and_then(|t| t.Name()).unwrap_or(String::from("<no track>"));
                println!("  * {}\t{:?}: {} tracks (first one is {})", pl.Name()?, pl_kind, track_count, first_track_name);
            }
        }
    }

    Ok(())
}

fn search_tracks(iTunes: &itunes_com::wrappers::iTunes, search_text: &str) -> windows::core::Result<()> {
    println!("Searching for \"{}\"...", search_text);

    let library_playlist = iTunes.LibraryPlaylist()?;
    let results = library_playlist.Search(search_text.into(), ITPlaylistSearchField::ITPlaylistSearchFieldAll)?;

    for result in results.iter()? {
        let file_location = result.as_file_or_cd_track().map(|foct| foct.Location());

        println!("  * {} at {:?}", result.Name()?, file_location);
    }

    Ok(())
}

fn test_unique_ids(iTunes: &itunes_com::wrappers::iTunes) -> windows::core::Result<()> {
    let library_playlist = iTunes.LibraryPlaylist()?;
    let first_track = library_playlist.Tracks()?.ItemByPlayOrder(1)?;
    println!("First track is {}", first_track.Name()?);

    let ids = first_track.GetITObjectIDs()?;
    println!("  IDs = {:?}", ids);

    let retrieved = iTunes.GetITObjectByID(ids)?;
    println!("  OK: {:?}", retrieved.as_track().map(|t| t.Name()));

    Ok(())
}
source

pub fn ItemByName(&self, name: String) -> Result<Track>

Returns an IITTrack object with the specified name.

source

pub fn ItemByPersistentID(&self, id: u64) -> Result<Track>

Returns an IITTrack object with the specified persistent ID.

source§

impl TrackCollection

source

pub fn iter(&self) -> Result<Iterator<'_, TrackCollection, Track>>

Examples found in repository?
examples/wrappers.rs (line 34)
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
fn show_playlists(iTunes: &itunes_com::wrappers::iTunes) -> windows::core::Result<()> {
    let sources = iTunes.Sources()?;
    for source in sources.iter()? {
        let kind = source.Kind()?;
        println!("Source kind: {:?}", kind);
        if kind == ITSourceKind::ITSourceKindLibrary {
            for pl in source.Playlists()?.iter()? {
                let pl_kind = pl.Kind()?;
                let tracks = pl.Tracks()?;
                let track_count = tracks.iter()?.len();
                let first_track = tracks.ItemByPlayOrder(1);
                let first_track_name = first_track.and_then(|t| t.Name()).unwrap_or(String::from("<no track>"));
                println!("  * {}\t{:?}: {} tracks (first one is {})", pl.Name()?, pl_kind, track_count, first_track_name);
            }
        }
    }

    Ok(())
}

fn search_tracks(iTunes: &itunes_com::wrappers::iTunes, search_text: &str) -> windows::core::Result<()> {
    println!("Searching for \"{}\"...", search_text);

    let library_playlist = iTunes.LibraryPlaylist()?;
    let results = library_playlist.Search(search_text.into(), ITPlaylistSearchField::ITPlaylistSearchFieldAll)?;

    for result in results.iter()? {
        let file_location = result.as_file_or_cd_track().map(|foct| foct.Location());

        println!("  * {} at {:?}", result.Name()?, file_location);
    }

    Ok(())
}

Trait Implementations§

source§

impl Iterable for TrackCollection

source§

fn item(&self, index: i32) -> Result<<Self as Iterable>::Item>

Returns an $item_type object corresponding to the given index (1-based).

§

type Item = Track

source§

fn Count(&self) -> Result<i32>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.