public void ReadSong(Song song, string path) { UnixStream stream = (new UnixFileInfo(path)).Open(FileMode.Create, FileAccess.ReadWrite, Mono.Unix.Native.FilePermissions.S_IWUSR | Mono.Unix.Native.FilePermissions.S_IRUSR | Mono.Unix.Native.FilePermissions.S_IRGRP | Mono.Unix.Native.FilePermissions.S_IROTH); if(NJB_Get_Track_fd(Handle, (uint)song.Id, song.FileSize, stream.Handle, delegate(ulong sent, ulong total, IntPtr buf, uint len, IntPtr data) { if(ProgressChanged != null) { TransferProgressArgs args = new TransferProgressArgs(); args.Current = sent; args.Total = total; args.Song = song; ProgressChanged(this, args); } }, IntPtr.Zero) == -1) { stream.Close(); throw new ApplicationException("Error reading song"); } stream.Close(); }
public void SendSong(Song song, string path) { IntPtr path_ptr = Utility.Utf8StringToPtr(path); try { uint trackid; if(NJB_Send_Track(Handle, path_ptr, song.Handle, delegate(ulong sent, ulong total, IntPtr buf, uint len, IntPtr data) { if(ProgressChanged != null) { TransferProgressArgs args = new TransferProgressArgs(); args.Current = sent; args.Total = total; args.Song = song; ProgressChanged(this, args); } }, IntPtr.Zero, out trackid) == -1) { throw new ApplicationException("Could not transfer song"); } } finally { Utility.FreeStringPtr(path_ptr); } }
public static void OnProgress(object o, TransferProgressArgs args) { Console.Write("Transferring {0} - {1}: {2}%\r", args.Song.Artist, args.Song.Title, (args.Current * 100) / args.Total); }