TransferA?ncia de dados com o OneDrive

O OneDrive Ai?? um serviAi??o remoto que permite o armazenamento de arquivos, que podem ser acessados e compartilhados por meio de celular, tablet e computador. Diante disso, Ai?? possAi??vel desenvolver um aplicativo, em Windows Phone, que funcione com o OneDrive e assim os usuA?rios vA?o poder enviar e obter arquivos.

O INdTFramework tem uma classe, HelperOneDrive, que auxilia este trabalho com as funcionalidades:
1. Conectar ao OneDrive;
2. Encerrar a sessA?o com o OneDrive;
3. Listar os arquivos de determinado diretA?rio;
4. Listar os diretA?rios que estA?o na raiz do OneDrive;
5. Verificar downloads pendentes;
6. Verificar uploads pendentes;
7. Download de um arquivo;
8. Upload de um arquivo;

O objetivo deste artigo Ai?? mostrar como funciona o uso da classe HelperOneDrive e o quA?o A?til ela Ai?? para trabalhar com o serviAi??o do OneDrive.

PrAi??-requisitos

1. Acesse o Buy essays site de gerenciamento de aplicativos Live, faAi??a o login com a sua conta de desenvolvedor, informe o nome do seu aplicativo e o idioma dele, aceite os termos de uso, acesse a aba ‘ConfiguraAi??Ai??es do aplicativo’ e o seu ID estarA? disponAi??vel para vocA? usar no seu aplicativo e acessar aos serviAi??os do OneDrive;
2. Escolhar os escopos em que vocA? vai trabalhar. Para fazer conseguir realizar as funcionalidades jA? listadas, os seguintes escopos sA?o necessA?rios:
wl.offline_access: permite que um aplicativo leia e atualize informaAi??Ai??es de um usuA?rio a qualquer momento.
wl.skydrive_update: garante acesso de leitura e escrita para os arquivos do usuA?rio armazenados no OneDrive.
3. ApA?s criar o projeto para Windows Phone Silverlight 8.0, faAi??a o download do pacote INdT Framework por meio do NuGet.

Login e logout no OneDrive

Uma das dependA?ncias do INdT Framework Ai?? o Live SDK, que contAi??m as classes e controles necessA?rios para utilizar o serviAi??o do OneDrive. Um dos controles Ai?? o botA?o de login no OneDrive. Para utilizA?-lo basta adicionar a referA?ncia dos controles do Live SDK em um arquivo .xaml:

xmlns:live="clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

Feito isso, Ai?? possAi??vel utilizar o botA?o de login, cujas as propriedades ClientId e Scopes devem ser preenchidas de acordo com os prAi??-requisitos 1 e 2, respectivamente.

<live:SignInButton ClientId="00000000480D3C22" Scopes="wl.offline_access wl.skydrive_update" SessionChanged="OnSessionChanged"/>


sign_in_onedrive

Para saber se o login foi efetuado com sucesso Ai?? preciso definir um mAi??todo para o evento Buy ashwagandha uk SessionChanged. Caso a conexA?o seja estabelecida, Ai?? necessA?rio obter a sessA?o que foi ativada e passA?-la para a propriedade Session da classe HelperOneDrive.

using Microsoft.Live;
using Microsoft.Live.Controls;

private void OnSessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
{
    if (e.Status == LiveConnectSessionStatus.Connected)
    {
        // Login efetuado com sucesso.
        HelperOneDrive.Session = e.Session;
    }
    else
    {
        // Login nA?o realizado.
        HelperOneDrive.Session = null;
    }
}

ApA?s o login com sucesso, o botA?o automaticamente muda e ao clicar nele com a sessA?o conectada, o logout serA? realizado.


sign_out_onedrive

Outra forma de realizar o login, sem utilizar o botA?o do Live SDK, Ai?? utilizar o mAi??todo Login da classe HelperOneDrive. Este mAi??todo jA? passa a sessA?o ativa para a propriedade Session da classe HelperOneDrive.

using INdTFramework.Commons.OneDrive;
using System.Threading;

string clientId = "00000000480D3C22";
List<string> scopes = new List<string>()
{
    "wl.offline_access",
    "wl.skydrive_update"
};

if (await HelperOneDrive.Login(clientId, scopes))
{
    // Login efetuado com sucesso.
}
else
{
    // Login nA?o efetuado.
}

E para logout utilize:

string clientId = "00000000480D3C22";

HelperOneDrive.Logout(clientId);

DiretA?rios e arquivos

Para listar os diretA?rios e arquivos que estA?o em uma conta do OneDrive, utilize o mAi??todo GetFiles. Para listar tudo que estiver na raiz, use o caminho me/skydrive/files.

using INdTFramework.Commons.OneDrive;
using System.Threading;

CancellationTokenSource cancellationToken = new CancellationTokenSource();
string path = "me/skydrive/files";

List<OneDriveItem> oneDriveItems =
                                 await HelperOneDrive.GetFiles(path, cancellationToken.Token);

O objeto cancellationToken passa a propriedade Token para a requisiAi??A?o para que seja possAi??vel cancelar esta requisiAi??A?o enquanto ela estiver em andamento.

cancellationToken.Cancel();

Com a lista de items do tipo OneDriveItem, vocA? pode listar os arquivos de um diretA?rio especAi??fico. O caminho deste diretA?rio vai ser o seu ID concatenado com “/files”. Por exemplo:

using INdTFramework.Commons.OneDrive;
using System.Linq;
using System.Threading;

CancellationTokenSource cancellationToken = new CancellationTokenSource();
string path = "me/skydrive/files";

List<OneDriveItem> oneDriveItems = await
                                 HelperOneDrive.GetFiles(path, cancellationToken.Token);

OneDriveItem directory = oneDriveItems.First(o => o.Type == "folder" || o.Type == "album");

cancellationToken = new CancellationTokenSource();

List<OneDriveItem> files = await
                   HelperOneDrive.GetFiles(directory.Id + "/files", cancellationToken.Token);

Download de arquivo

De acordo com os arquivos listados com o mAi??todo GetFiles, vocA? pode fazer o download de um desses arquivos com o mAi??todo Download. Como parA?metros, passe o objeto do tipo OneDriveItem que representa este arquivo, uma preferA?ncia de download em segundo plano, a propriedade Token do objeto do tipo CancellationTokenSource e um objeto de uma classe que estenda da interface IProgress<LiveOperationProgress>.

using INdTFramework.Commons.OneDrive;
using Microsoft.Live;
using System.Threading;

public partial class OneDriveBrowser : PhoneApplicationPage,
                                       IProgress&amp;amp;amp;lt;LiveOperationProgress&amp;amp;amp;gt;
{

    private async void DownloadFromOneDrive(OneDriveItem oneDriveItem)
    {
        CancellationTokenSource cancellationToken = new CancellationTokenSource();

        OneDriveResult result = await HelperOneDrive.Download(oneDriveItem,
                                      BackgroundTransferPreferences.None,
                                      cancellationToken.Token, this);

        if (result.Status == OneDriveStatus.Completed)
        {
            // Download com sucesso.
            string message = string.Format(&amp;amp;amp;quot;Download to {0}.&amp;amp;amp;quot;, result.UrlLocation);
            MessageBox.Show(message, &amp;amp;amp;quot;Download successful&amp;amp;amp;quot;, MessageBoxButton.OK);
        }
        else
        {
            // Download cancelado.
        }
    }
}

AlAi??m disso, Ai?? possAi??vel verificar downloads pendentes. Use o mAi??todo CheckPendingBackgroundDownloads, que recebe a propriedade Token do objeto do tipo CancellationTokenSource e um objeto de uma classe que estenda da interface IProgress<LiveOperationProgress>.

using INdTFramework.Commons.OneDrive;
using Microsoft.Live;
using System.Threading;

public partial class OneDriveBrowser : PhoneApplicationPage,
                                       IProgress&amp;amp;amp;lt;LiveOperationProgress&amp;amp;amp;gt;
{

    private async void CheckPendingDownloads()
    {
        CancellationTokenSource cancellationToken = new CancellationTokenSource();

        List&amp;amp;amp;lt;OneDriveResult&amp;amp;amp;gt; results = await
        HelperOneDrive.CheckPendingBackgroundDownloads(cancellationToken.Token, this);

        foreach (OneDriveResult oneDriveResult in results)
        {
            if (oneDriveResult.Status == OneDriveStatus.Completed)
            {
                // Download com sucesso.
                string message = string.Format(&amp;amp;amp;quot;Download to {0}.&amp;amp;amp;quot;,
                                               oneDriveResult.UrlLocation);
                MessageBox.Show(message, &amp;amp;amp;quot;Download successful&amp;amp;amp;quot;, MessageBoxButton.OK);
            }
            else
            {
                // Download cancelado.
            }
        }
    }
}

Upload de arquivo

Para enviar um arquivo para uma conta OneDrive, utilize o mAi??todo UploadFile. Como parA?metros, passe o caminho do arquivo, o caminho do diretA?rio de destino no OneDrive, uma preferA?ncia de download em segundo plano, a propriedade Token do objeto do tipo CancellationTokenSource e um objeto de uma classe que estenda da interface IProgress<LiveOperationProgress>.

Mas antes de chamar este mAi??todo, liste os possAi??veis diretA?rios que podem receber o arquivo que serA? enviado. Para isso, use o mAi??todo GetDirectories. O A?nico parA?metro dele deve ser a propriedade Token de um objeto do tipo CancellationTokenSource. Ele listarA? todos os diretA?rios disponAi??veis no OneDrive, inclusive, a raiz, que serA? a primeira opAi??A?o.

using INdTFramework.Commons.OneDrive;
using Microsoft.Live;
using System.Threading;

public partial class UploadOneDrive : PhoneApplicationPage,
                                      IProgress&amp;amp;amp;lt;LiveOperationProgress&amp;amp;amp;gt;
{

    private async void UploadFileToOneDrive(string filePath)
    {
        CancellationTokenSource cancellationToken = new CancellationTokenSource();

        List&amp;amp;amp;lt;OneDriveItem&amp;amp;amp;gt; directories = await
                                         HelperOneDrive.GetDirectories(cancellationToken.Token);

        OneDriveItem directory = directories.First();

        OneDriveResult result = await HelperOneDrive.UploadFile(filePath,
                                      directory.Id,
                                      BackgroundTransferPreferences.None,
                                      cancellationToken.Token, this);

        if (result.Status == OneDriveStatus.Completed)
        {
            // Upload com sucesso.
            string message = string.Format(&amp;amp;amp;quot;Uploaded to {0}.&amp;amp;amp;quot;, result.UrlLocation);
            MessageBox.Show(message, &amp;amp;amp;quot;Upload successful&amp;amp;amp;quot;, MessageBoxButton.OK);
        }
        else
        {
            // Upload cancelado.
        }
    }
}

Caso o arquivo a ser enviado seja uma foto, utilize o mAi??todo UploadPhoto. Como parA?metros, ele recebe o caminho da foto, o objeto do tipo Stream que contAi??m os dados que correspondem a foto, o caminho do diretA?rio de destino no OneDrive, uma preferA?ncia de download em segundo plano, a propriedade Token do objeto do tipo CancellationTokenSource e um objeto de uma classe que estenda da interface IProgress<LiveOperationProgress>.

using INdTFramework.Commons.OneDrive;
using Microsoft.Live;
using System.Threading;

public partial class UploadOneDrive : PhoneApplicationPage,
                                      IProgress&amp;amp;amp;lt;LiveOperationProgress&amp;amp;amp;gt;
{

    private async void UploadPhotoToOneDrive(string filePath, Stream stream)
    {
        CancellationTokenSource cancellationToken = new CancellationTokenSource();

        List&amp;amp;amp;lt;OneDriveItem&amp;amp;amp;gt; directories = await
                                         HelperOneDrive.GetDirectories(cancellationToken.Token);

        OneDriveItem directory = directories.First();

        cancellationToken = new CancellationTokenSource();

        OneDriveResult result = await HelperOneDrive.UploadPhoto(filePath,
                                      directory.Id,
                                      stream,
                                      BackgroundTransferPreferences.None,
                                      cancellationToken.Token, this);

        if (result.Status == OneDriveStatus.Completed)
        {
            // Upload com sucesso.
            string message = string.Format(&amp;amp;amp;quot;Uploaded to {0}.&amp;amp;amp;quot;, result.UrlLocation);
            MessageBox.Show(message, &amp;amp;amp;quot;Upload successful&amp;amp;amp;quot;, MessageBoxButton.OK);
        }
        else
        {
            // Upload cancelado.
        }
    }
}

E para verificar uploads pendentes, utilize o mAi??todo CheckPendingBackgroundUploads. Ele recebe a propriedade Token do objeto do tipo CancellationTokenSource e um objeto de uma classe que estenda da interface IProgress<LiveOperationProgress>.

using INdTFramework.Commons.OneDrive;
using Microsoft.Live;
using System.Threading;

public partial class UploadOneDrive : PhoneApplicationPage,
                                      IProgress&amp;amp;amp;lt;LiveOperationProgress&amp;amp;amp;gt;
{

    private async void CheckPendingUploads()
    {
        CancellationTokenSource cancellationToken = new CancellationTokenSource();

        List&amp;amp;amp;lt;OneDriveResult&amp;amp;amp;gt; results = await
            HelperOneDrive.CheckPendingBackgroundUploads(cancellationToken.Token, this);

        foreach (OneDriveResult oneDriveResult in results)
        {
            if (oneDriveResult.Status == OneDriveStatus.Completed)
            {
                // Upload com sucesso.
                string message = string.Format(&amp;amp;amp;quot;Upload to {0}.&amp;amp;amp;quot;, oneDriveResult.UrlLocation);
                MessageBox.Show(message, &amp;amp;amp;quot;Upload successful&amp;amp;amp;quot;, MessageBoxButton.OK);
            }
            else
            {
                // Upload cancelado.
            }
        }
    }
}

O cA?digo fonte para este e outros exemplos estA?o disponAi??veis para download no CodePlex.sign_in_onedrive Viber spy, Phone spy. sign_out_onedrive

Leave a comment

  • 0.0