├── OneDrivePhotoBrowser
├── Assets
│ ├── StoreLogo.png
│ ├── app
│ │ └── folder.png
│ ├── SplashScreen.scale-200.png
│ ├── LockScreenLogo.scale-200.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Wide310x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-200.png
│ └── Square44x44Logo.targetsize-24_altform-unplated.png
├── project.json
├── App.xaml
├── ItemDetail.xaml
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── ClientInitialization.xaml
├── MainPage.xaml
├── Package.appxmanifest
├── Controllers
│ └── ItemsController.cs
├── ClientInitialization.xaml.cs
├── MainPage.xaml.cs
├── Models
│ └── ItemModel.cs
├── AuthenticationHelper.cs
├── ItemDetail.xaml.cs
├── App.xaml.cs
└── OneDrivePhotoBrowser.csproj
├── .gitignore
├── LICENSE.txt
├── OneDrivePhotoBrowser.sln
└── readme.md
/OneDrivePhotoBrowser/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/app/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/app/folder.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OneDrive/graph-sample-photobrowser-uwp/HEAD/OneDrivePhotoBrowser/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "Microsoft.Graph": "1.2.0",
4 | "Microsoft.Identity.Client": "1.0.304142221-alpha",
5 | "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
6 | "Newtonsoft.Json": "9.0.1"
7 | },
8 | "frameworks": {
9 | "uap10.0": {}
10 | },
11 | "runtimes": {
12 | "win10-arm": {},
13 | "win10-arm-aot": {},
14 | "win10-x86": {},
15 | "win10-x86-aot": {},
16 | "win10-x64": {},
17 | "win10-x64-aot": {}
18 | }
19 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.sln.docstates
2 | *.suo
3 | *.user
4 | *.userosscache
5 | *.sln.ide
6 | TestResults/*
7 | .vs/*
8 |
9 | # UWP project files
10 | project.lock.json
11 | *StoreKey.pfx
12 | Package.StoreAssociation.xml
13 |
14 | # Build results
15 | **/[Dd]ebug/
16 | **/[Dd]ebugPublic/
17 | **/[Rr]elease/
18 | **/[Rr]eleases/
19 | **/x64/
20 | **/x86/
21 | **/build/
22 | **/bld/
23 | **/[Bb]in/
24 | **/[Oo]bj/
25 |
26 | # NuGet
27 | *.nupkg
28 | **/packages/*
29 | !**/packages/build/
30 |
31 | # VS project upgrade files
32 | _UpgradeReport_Files/
33 | Backup*/
34 | UpgradeLog*.XML
35 | UpgradeLog*.htm
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 | your Client Id
12 | urn:ietf:wg:oauth:2.0:oob
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/ItemDetail.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("OneDrivePhotoBrowser")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("OneDrivePhotoBrowser")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Microsoft Graph SDK for CSharp
2 |
3 | Copyright 2017 Microsoft Corporation
4 |
5 | All right reserved.
6 |
7 | MIT License
8 |
9 | Permission is hereby granted, free of charge, to any person obtaining a copy
10 | of this software and associated documentation files (the "Software"), to deal
11 | in the Software without restriction, including without limitation the rights
12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | copies of the Software, and to permit persons to whom the Software is
14 | furnished to do so, subject to the following conditions:
15 |
16 | The above copyright notice and this permission notice shall be included in
17 | all copies or substantial portions of the Software.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 | THE SOFTWARE.
26 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/ClientInitialization.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 | OneDrive
13 |
14 | Microsoft Account or Work/School
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | OneDrivePhoto
7 | James Crowley
8 | Assets\StoreLogo.png
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25123.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OneDrivePhotoBrowser", "OneDrivePhotoBrowser\OneDrivePhotoBrowser.csproj", "{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|ARM = Debug|ARM
11 | Debug|x64 = Debug|x64
12 | Debug|x86 = Debug|x86
13 | Release|ARM = Release|ARM
14 | Release|x64 = Release|x64
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.ActiveCfg = Debug|ARM
19 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.Build.0 = Debug|ARM
20 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.Deploy.0 = Debug|ARM
21 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.ActiveCfg = Debug|x64
22 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.Build.0 = Debug|x64
23 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.Deploy.0 = Debug|x64
24 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.ActiveCfg = Debug|x86
25 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.Build.0 = Debug|x86
26 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.Deploy.0 = Debug|x86
27 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.ActiveCfg = Release|ARM
28 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.Build.0 = Release|ARM
29 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.Deploy.0 = Release|ARM
30 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.ActiveCfg = Release|x64
31 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.Build.0 = Release|x64
32 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.Deploy.0 = Release|x64
33 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x86.ActiveCfg = Release|x86
34 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x86.Build.0 = Release|x86
35 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x86.Deploy.0 = Release|x86
36 | EndGlobalSection
37 | GlobalSection(SolutionProperties) = preSolution
38 | HideSolutionNode = FALSE
39 | EndGlobalSection
40 | EndGlobal
41 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Controllers/ItemsController.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 | namespace OneDrivePhotoBrowser.Controllers
24 | {
25 |
26 | using Models;
27 | using System.Collections.Generic;
28 | using System.Collections.ObjectModel;
29 | using System.Linq;
30 | using System.Threading.Tasks;
31 | using Microsoft.Graph;
32 |
33 | public class ItemsController
34 | {
35 |
36 | private GraphServiceClient graphClient;
37 |
38 | public ItemsController(GraphServiceClient graphClient)
39 | {
40 | this.graphClient = graphClient;
41 | }
42 |
43 | ///
44 | /// Gets the child folders and photos of the specified item ID.
45 | ///
46 | /// The ID of the parent item.
47 | /// The child folders and photos of the specified item ID.
48 | public async Task> GetImagesAndFolders(string id)
49 | {
50 | ObservableCollection results = new ObservableCollection();
51 |
52 | IEnumerable items;
53 |
54 | var expandString = "thumbnails, children($expand=thumbnails)";
55 |
56 | // If id isn't set, get the OneDrive root's photos and folders. Otherwise, get those for the specified item ID.
57 | // Also retrieve the thumbnails for each item if using a consumer client.
58 | var itemRequest = string.IsNullOrEmpty(id)
59 | ? this.graphClient.Me.Drive.Root.Request().Expand(expandString)
60 | : this.graphClient.Me.Drive.Items[id].Request().Expand(expandString);
61 |
62 | var item = await itemRequest.GetAsync();
63 | items = item.Children == null
64 | ? new List()
65 | : item.Children.CurrentPage.Where(child => child.Folder != null || child.Image != null);
66 |
67 | foreach (var child in items)
68 | {
69 | results.Add(new ItemModel(child));
70 | }
71 |
72 | return results;
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/ClientInitialization.xaml.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 | // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
24 |
25 |
26 | namespace OneDrivePhotoBrowser
27 | {
28 | using Microsoft.Graph;
29 | using Models;
30 | using System;
31 | using System.Diagnostics;
32 | using System.Threading.Tasks;
33 | using Windows.UI.Xaml;
34 | using Windows.UI.Xaml.Controls;
35 |
36 | ///
37 | /// An empty page that can be used on its own or navigated to within a Frame.
38 | ///
39 | public sealed partial class ClientInitialization : Page
40 | {
41 |
42 |
43 | public ClientInitialization()
44 | {
45 | this.InitializeComponent();
46 | this.Loaded += ClientInitialization_Loaded;
47 | }
48 |
49 |
50 | private void LoginButton_Click(object sender, RoutedEventArgs e)
51 | {
52 | this.InitializeClient(e);
53 | }
54 |
55 | private void ClientInitialization_Loaded(object sender, RoutedEventArgs e)
56 | {
57 | var app = ((App) Application.Current);
58 | if (app.GraphClient != null)
59 | {
60 | AuthenticationHelper.SignOut();
61 | app.GraphClient = null;
62 | }
63 |
64 | }
65 |
66 | private void InitializeClient(RoutedEventArgs e)
67 | {
68 | var app = (App) Application.Current;
69 | if (app.GraphClient == null)
70 | {
71 |
72 | try
73 | {
74 | app.GraphClient = AuthenticationHelper.GetAuthenticatedClient();
75 | app.NavigationStack.Add(new ItemModel(new DriveItem()));
76 | this.Frame.Navigate(typeof(MainPage), e);
77 | }
78 | catch (ServiceException exception)
79 | {
80 | // Swallow the auth exception but write message for debugging.
81 | Debug.WriteLine(exception.Error.Message);
82 | }
83 | }
84 | else
85 | {
86 | this.Frame.Navigate(typeof(MainPage), e);
87 | }
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 | // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
24 |
25 | namespace OneDrivePhotoBrowser
26 | {
27 | using Controllers;
28 | using Models;
29 | using System.Linq;
30 | using Windows.UI.Xaml;
31 | using Windows.UI.Xaml.Controls;
32 | using Windows.UI.Xaml.Input;
33 |
34 | ///
35 | /// The main page for photo and folder browsing.
36 | ///
37 | public sealed partial class MainPage : Page
38 | {
39 | private ItemsController itemsController;
40 |
41 | public MainPage()
42 | {
43 | this.InitializeComponent();
44 | this.Loaded += MainPage_Loaded;
45 | }
46 |
47 | private async void MainPage_Loaded(object sender, RoutedEventArgs e)
48 | {
49 | if (this.itemsController == null)
50 | {
51 | //this.itemsController = new ItemsController(((App)Application.Current).OneDriveClient);
52 | this.itemsController = new ItemsController(((App)Application.Current).GraphClient);
53 | }
54 |
55 | var last = ((App)Application.Current).NavigationStack.Last();
56 | ((App)Application.Current).Items = await this.itemsController.GetImagesAndFolders(last.Id);
57 | this.DataContext = ((App)Application.Current).Items;
58 | wait.IsActive = false;
59 | }
60 |
61 | private void StackPanel_Tapped(object sender, TappedRoutedEventArgs e)
62 | {
63 | // Get the selected item and add it to the navigation stack.
64 | ItemModel item = ((StackPanel)sender).DataContext as ItemModel;
65 | ((App)Application.Current).NavigationStack.Add(item);
66 |
67 | // If the item is a folder, navigate to its contents. Otherwise, load the detailed view of the item.
68 | if (item.Item.Folder != null)
69 | {
70 | Frame.Navigate(typeof(MainPage), ((App)Application.Current).Items.IndexOf((ItemModel)((StackPanel)sender).DataContext));
71 | }
72 | else
73 | {
74 | Frame.Navigate(typeof(ItemDetail), ((App)Application.Current).Items.IndexOf((ItemModel)((StackPanel)sender).DataContext));
75 | }
76 | }
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/Models/ItemModel.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 | namespace OneDrivePhotoBrowser.Models
24 | {
25 | using System.ComponentModel;
26 | using System.Linq;
27 | using Windows.UI.Xaml.Media.Imaging;
28 | using Microsoft.Graph;
29 |
30 | public class ItemModel : INotifyPropertyChanged
31 | {
32 | private BitmapSource bitmap;
33 |
34 | public ItemModel(DriveItem item)
35 | {
36 | this.Item = item;
37 | }
38 |
39 | public BitmapSource Bitmap
40 | {
41 | get
42 | {
43 | return this.bitmap;
44 | }
45 | set
46 | {
47 | this.bitmap = value;
48 | OnPropertyChanged("Bitmap");
49 | }
50 | }
51 |
52 | public string Icon
53 | {
54 | get
55 | {
56 | if (this.Item.Folder != null)
57 | {
58 | return "ms-appx:///assets/app/folder.png";
59 | }
60 | else if (this.SmallThumbnail != null)
61 | {
62 | return this.SmallThumbnail.Url;
63 | }
64 |
65 | return null;
66 | }
67 | }
68 |
69 | public string Id
70 | {
71 | get
72 | {
73 | return this.Item == null ? null : this.Item.Id;
74 | }
75 | }
76 |
77 | public DriveItem Item { get; private set; }
78 |
79 | public string Name
80 | {
81 | get
82 | {
83 | return this.Item.Name;
84 | }
85 | }
86 |
87 | public Microsoft.Graph.Thumbnail SmallThumbnail
88 | {
89 | get
90 | {
91 | if (this.Item != null && this.Item.Thumbnails != null)
92 | {
93 | var thumbnailSet = this.Item.Thumbnails.FirstOrDefault();
94 | if (thumbnailSet != null)
95 | {
96 | return thumbnailSet.Small;
97 | }
98 | }
99 |
100 | return null;
101 | }
102 | }
103 |
104 | //INotifyPropertyChanged members
105 | public event PropertyChangedEventHandler PropertyChanged;
106 |
107 | protected void OnPropertyChanged(string name)
108 | {
109 | if (null != PropertyChanged)
110 | {
111 | PropertyChanged(this, new PropertyChangedEventArgs(name));
112 | }
113 | }
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/AuthenticationHelper.cs:
--------------------------------------------------------------------------------
1 | //Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license.
2 | //See LICENSE in the project root for license information.
3 |
4 | using System;
5 | using System.Diagnostics;
6 | using System.Net.Http.Headers;
7 | using System.Net.Http;
8 | using System.Linq;
9 | using System.Threading.Tasks;
10 | using Windows.Security.Authentication.Web;
11 | using Windows.Security.Authentication.Web.Core;
12 | using Windows.Security.Credentials;
13 | using Windows.Storage;
14 | using Microsoft.Graph;
15 | using Microsoft.Identity.Client;
16 |
17 | namespace OneDrivePhotoBrowser
18 | {
19 | public class AuthenticationHelper
20 | {
21 | // The Client ID is used by the application to uniquely identify itself to the v2.0 authentication endpoint.
22 | static string clientId = App.Current.Resources["ida:ClientID"].ToString();
23 | public static string[] Scopes = { "Files.Read" };
24 |
25 | public static PublicClientApplication IdentityClientApp = new PublicClientApplication(clientId);
26 |
27 | public static string TokenForUser = null;
28 | public static DateTimeOffset Expiration;
29 |
30 | private static GraphServiceClient graphClient = null;
31 |
32 | // Get an access token for the given context and resourceId. An attempt is first made to
33 | // acquire the token silently. If that fails, then we try to acquire the token by prompting the user.
34 | public static GraphServiceClient GetAuthenticatedClient()
35 | {
36 | if (graphClient == null)
37 | {
38 | // Create Microsoft Graph client.
39 | try
40 | {
41 | graphClient = new GraphServiceClient(
42 | "https://graph.microsoft.com/v1.0",
43 | new DelegateAuthenticationProvider(
44 | async (requestMessage) =>
45 | {
46 | var token = await GetTokenForUserAsync();
47 | requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
48 | // This header has been added to identify our sample in the Microsoft Graph service. If extracting this code for your project please remove.
49 | requestMessage.Headers.Add("SampleID", "uwp-csharp-photobrowser-sample");
50 |
51 | }));
52 | return graphClient;
53 | }
54 |
55 | catch (Exception ex)
56 | {
57 | Debug.WriteLine("Could not create a graph client: " + ex.Message);
58 | }
59 | }
60 |
61 | return graphClient;
62 | }
63 |
64 |
65 | ///
66 | /// Get Token for User.
67 | ///
68 | /// Token for user.
69 | public static async Task GetTokenForUserAsync()
70 | {
71 | AuthenticationResult authResult;
72 | try
73 | {
74 | authResult = await IdentityClientApp.AcquireTokenSilentAsync(Scopes);
75 | TokenForUser = authResult.Token;
76 | }
77 |
78 | catch (Exception)
79 | {
80 | if (TokenForUser == null || Expiration <= DateTimeOffset.UtcNow.AddMinutes(5))
81 | {
82 | authResult = await IdentityClientApp.AcquireTokenAsync(Scopes);
83 |
84 | TokenForUser = authResult.Token;
85 | Expiration = authResult.ExpiresOn;
86 | }
87 | }
88 |
89 | return TokenForUser;
90 | }
91 |
92 | ///
93 | /// Signs the user out of the service.
94 | ///
95 | public static void SignOut()
96 | {
97 | foreach (var user in IdentityClientApp.Users)
98 | {
99 | user.SignOut();
100 | }
101 | graphClient = null;
102 | TokenForUser = null;
103 |
104 | }
105 |
106 | }
107 | }
108 |
109 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/ItemDetail.xaml.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 | // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
24 |
25 | namespace OneDrivePhotoBrowser
26 | {
27 | using Models;
28 | using System;
29 | using System.IO;
30 | using System.Linq;
31 | using System.Threading.Tasks;
32 | using Microsoft.Graph;
33 | using Windows.UI.Core;
34 | using Windows.UI.Xaml;
35 | using Windows.UI.Xaml.Controls;
36 | using Windows.UI.Xaml.Media.Imaging;
37 |
38 | ///
39 | /// An empty page that can be used on its own or navigated to within a Frame.
40 | ///
41 | public sealed partial class ItemDetail : Page
42 | {
43 | private bool initialized = false;
44 |
45 | public ItemDetail()
46 | {
47 | this.InitializeComponent();
48 | this.Loaded += ItemTile_Loaded;
49 | }
50 |
51 | private async void ItemTile_Loaded(object sender, RoutedEventArgs e)
52 | {
53 | var last = ((App)Application.Current).NavigationStack.Last();
54 | this.DataContext = ((App)Application.Current).Items;
55 |
56 | await Dispatcher.RunAsync(
57 | CoreDispatcherPriority.Low,
58 | () =>
59 | {
60 | imgFlipView.SelectedIndex = ((App)Application.Current).Items.IndexOf(last);
61 | });
62 |
63 | await this.LoadImage(last);
64 | progressRing.IsActive = false;
65 | initialized = true;
66 | }
67 |
68 | private async void ImageFlipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
69 | {
70 | // Load the picture for the newly-selected image.
71 | if (imgFlipView.SelectedIndex != -1 && initialized)
72 | {
73 | progressRing.IsActive = true;
74 | var item = ((App)Application.Current).Items[imgFlipView.SelectedIndex];
75 | await this.LoadImage(item);
76 | progressRing.IsActive = false;
77 | }
78 | }
79 |
80 | ///
81 | /// Loads the detail view for the specified item.
82 | ///
83 | /// The item to load.
84 | /// The task to await.
85 | private async Task LoadImage(ItemModel item)
86 | {
87 | // Only load a detail view image for image items. Initialize the bitmap from the image content stream.
88 | if (item.Bitmap == null && (item.Item.Image != null))
89 | {
90 | item.Bitmap = new BitmapImage();
91 | GraphServiceClient client = ((App)Application.Current).GraphClient;
92 |
93 | using (var responseStream = await client.Me.Drive.Items[item.Id].Content.Request().GetAsync())
94 | {
95 | var memoryStream = responseStream as MemoryStream;
96 |
97 | if (memoryStream != null)
98 | {
99 | await item.Bitmap.SetSourceAsync(memoryStream.AsRandomAccessStream());
100 | }
101 | else
102 | {
103 | using (memoryStream = new MemoryStream())
104 | {
105 | await responseStream.CopyToAsync(memoryStream);
106 | memoryStream.Position = 0;
107 |
108 | await item.Bitmap.SetSourceAsync(memoryStream.AsRandomAccessStream());
109 | }
110 | }
111 | }
112 | }
113 | }
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/App.xaml.cs:
--------------------------------------------------------------------------------
1 | // ------------------------------------------------------------------------------
2 | // Copyright (c) 2015 Microsoft Corporation
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 | // ------------------------------------------------------------------------------
22 |
23 |
24 | namespace OneDrivePhotoBrowser
25 | {
26 | using Microsoft.Graph;
27 | using Models;
28 | using System;
29 | using System.Collections.Generic;
30 | using System.Collections.ObjectModel;
31 | using Windows.ApplicationModel;
32 | using Windows.ApplicationModel.Activation;
33 | using Windows.UI.Core;
34 | using Windows.UI.Xaml;
35 | using Windows.UI.Xaml.Controls;
36 | using Windows.UI.Xaml.Navigation;
37 |
38 | ///
39 | /// Provides application-specific behavior to supplement the default Application class.
40 | ///
41 | sealed partial class App : Application
42 | {
43 | public ObservableCollection Items { get; set; }
44 |
45 | public List NavigationStack { get; set; }
46 |
47 | public GraphServiceClient GraphClient { get; set; }
48 |
49 | ///
50 | /// Initializes the singleton application object. This is the first line of authored code
51 | /// executed, and as such is the logical equivalent of main() or WinMain().
52 | ///
53 | public App()
54 | {
55 | this.NavigationStack = new List();
56 | this.InitializeComponent();
57 | this.Suspending += OnSuspending;
58 | }
59 |
60 | private void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
61 | {
62 | var frame = Window.Current.Content as Frame;
63 | if (frame.CanGoBack)
64 | {
65 | // Navigates back to the previous item view
66 | ((App)Application.Current).NavigationStack.RemoveAt(((App)Application.Current).NavigationStack.Count - 1);
67 | frame.GoBack();
68 | e.Handled = true;
69 | }
70 | }
71 |
72 | ///
73 | /// Invoked when the application is launched normally by the end user. Other entry points
74 | /// will be used such as when the application is launched to open a specific file.
75 | ///
76 | /// Details about the launch request and process.
77 | protected override void OnLaunched(LaunchActivatedEventArgs e)
78 | {
79 |
80 | #if DEBUG
81 | if (System.Diagnostics.Debugger.IsAttached)
82 | {
83 | this.DebugSettings.EnableFrameRateCounter = true;
84 | }
85 | #endif
86 |
87 | Frame rootFrame = Window.Current.Content as Frame;
88 |
89 | // Do not repeat app initialization when the Window already has content,
90 | // just ensure that the window is active
91 | if (rootFrame == null)
92 | {
93 | // Create a Frame to act as the navigation context and navigate to the first page
94 | rootFrame = new Frame();
95 |
96 | rootFrame.NavigationFailed += OnNavigationFailed;
97 |
98 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
99 | {
100 | //TODO: Load state from previously suspended application
101 | }
102 |
103 | // Place the frame in the current Window
104 | Window.Current.Content = rootFrame;
105 | }
106 |
107 | if (rootFrame.Content == null)
108 | {
109 | // When the navigation stack isn't restored navigate to the first page,
110 | // configuring the new page by passing required information as a navigation
111 | // parameter
112 | rootFrame.Navigate(typeof(ClientInitialization), e.Arguments);
113 | }
114 | // Ensure the current window is active
115 | Window.Current.Activate();
116 |
117 | SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
118 | SystemNavigationManager.GetForCurrentView().BackRequested += MainPage_BackRequested;
119 | }
120 |
121 | ///
122 | /// Invoked when Navigation to a certain page fails
123 | ///
124 | /// The Frame which failed navigation
125 | /// Details about the navigation failure
126 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
127 | {
128 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
129 | }
130 |
131 | ///
132 | /// Invoked when application execution is being suspended. Application state is saved
133 | /// without knowing whether the application will be terminated or resumed with the contents
134 | /// of memory still intact.
135 | ///
136 | /// The source of the suspend request.
137 | /// Details about the suspend request.
138 | private void OnSuspending(object sender, SuspendingEventArgs e)
139 | {
140 | var deferral = e.SuspendingOperation.GetDeferral();
141 | //TODO: Save application state and stop any background activity
142 | deferral.Complete();
143 | }
144 | }
145 | }
146 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | page_type: sample
3 | products:
4 | - office-onedrive
5 | - ms-graph
6 | languages:
7 | - csharp
8 | extensions:
9 | contentType: samples
10 | technologies:
11 | - Microsoft Graph
12 | services:
13 | - OneDrive
14 | createdDate: 2/21/2017 10:21:21 AM
15 | ---
16 | # Microsoft Graph OneDrive Photo Browser sample
17 |
18 | The Microsoft Graph OneDrive Photo Browser sample is a Windows Universal app that uses the [Microsoft Graph .NET Client Library](https://github.com/microsoftgraph/msgraph-sdk-dotnet) for C#/.NET.
19 | The sample app displays only items that are images from a user's OneDrive. Note that this sample does not work with OneDrive for Business.
20 |
21 | The sample uses the v2.0 authentication endpoint, which enables users to sign in with either their personal or work or school Microsoft accounts.
22 |
23 |
24 | ## Set up
25 |
26 | ### Prerequisites
27 |
28 | To run the sample, you will need:
29 |
30 | * Visual Studio 2015, with Universal Windows App Development Tools **Note:** If you don't have Universal Windows App Development Tools installed, open **Control Panel** | **Uninstall a program**. Then right-click **Microsoft Visual Studio** and click **Change**. Select **Modify** and then choose **Universal Windows App Development Tools**. Click **Update**. For more info about setting up your machine for Universal Windows Platform development, see [Build UWP apps with Visual Studio](https://msdn.microsoft.com/en-us/library/windows/apps/dn609832.aspx).
31 | * Windows 10 ([development mode enabled](https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx))
32 | * Either a [Microsoft](www.outlook.com) or [Office 365 for business account](https://msdn.microsoft.com/en-us/office/office365/howto/setup-development-environment#bk_Office365Account).
33 | * Knowledge of Windows Universal app development
34 |
35 | ### Download the sample
36 |
37 | 1. Download the sample from [GitHub](https://github.com/OneDrive/graph-sample-photobrowser-uwp) by choosing **Clone in Desktop** or **Download Zip**.
38 | 2. In Visual Studio, open the **OneDrivePhotoBrowser.sln** file and build it.
39 |
40 | ##Register and configure the app
41 |
42 | 1. Sign into the [App Registration Portal](https://apps.dev.microsoft.com/) using either your personal or work or school account.
43 | 2. Select **Add an app**.
44 | 3. Enter a name for the app, and select **Create application**. The registration page displays, listing the properties of your app.
45 | 4. Under **Platforms**, select **Add platform**.
46 | 5. Select **Mobile application**.
47 | 6. Copy the Client Id (App Id) value to the clipboard. You'll need to use it in the sample app. The app id is a unique identifier for your app.
48 | 7. Select **Save**.
49 |
50 | After you've loaded the solution in Visual Studio, configure the sample to use the Client Id that you registered by adding it as a key in the **Application.Resources** node of the App.xaml file.
51 |
52 | ```xml
53 | your Client Id
54 | ```
55 |
56 | ## Run the sample
57 |
58 | 1. With the sample open in Visual Studio, at the top, select **Debug** for Solution Configurations and **x86** or **x64** for Solution Platforms, and **OneDrivePhotoBrowser** for Startup project.
59 | 2. Check that you are running the sample on the **Local Machine**.
60 | 3. Press **F5** or click **Start** to run the sample.
61 |
62 | The OneDrive Photo Browser sample app will open the signed-in user's personal OneDrive, with only folders and images displayed. If the file is not an image, it will not show up in the OneDrive Photo Browser app. Select a folder to see all images in that folder. Select an image to see a larger display of the image, with scroll view.
63 |
64 |
65 | ## API features
66 |
67 | ### MSAL sign-in
68 |
69 | Users can log in with either a [Microsoft](www.outlook.com) or [Office 365 for business account](https://msdn.microsoft.com/en-us/office/office365/howto/setup-development-environment#bk_Office365Account).
70 |
71 | After the user signs in, the `AuthenticationHelper` class returns an MSAL `GraphServicesClient`.
72 |
73 | ```csharp
74 | public static GraphServiceClient GetAuthenticatedClient()
75 | {
76 | if (graphClient == null)
77 | {
78 | // Create Microsoft Graph client.
79 | try
80 | {
81 | graphClient = new GraphServiceClient(
82 | "https://graph.microsoft.com/v1.0",
83 | new DelegateAuthenticationProvider(
84 | async (requestMessage) =>
85 | {
86 | var token = await GetTokenForUserAsync();
87 | requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
88 | // This header has been added to identify our sample in the Microsoft Graph service. If extracting this code for your project please remove.
89 | requestMessage.Headers.Add("SampleID", "uwp-csharp-photobrowser-sample");
90 |
91 | }));
92 | return graphClient;
93 | }
94 |
95 | catch (Exception ex)
96 | {
97 | Debug.WriteLine("Could not create a graph client: " + ex.Message);
98 | }
99 | }
100 |
101 | return graphClient;
102 | }
103 | ```
104 |
105 | ### Get thumbnails for an image in OneDrive
106 |
107 | In this example, thumbnails are returned for an item, if it is an image. `GetAsync()` is used to get the item's properties.
108 |
109 | ```csharp
110 | IEnumerable items;
111 |
112 | var expandString = "thumbnails, children($expand=thumbnails)";
113 |
114 | // If id isn't set, get the OneDrive root's photos and folders. Otherwise, get those for the specified item ID.
115 | // Also retrieve the thumbnails for each item if using a consumer client.
116 | var itemRequest = string.IsNullOrEmpty(id)
117 | ? this.graphClient.Me.Drive.Root.Request().Expand(expandString)
118 | : this.graphClient.Me.Drive.Items[id].Request().Expand(expandString);
119 |
120 | var item = await itemRequest.GetAsync();
121 | items = item.Children == null
122 | ? new List()
123 | : item.Children.CurrentPage.Where(child => child.Folder != null || child.Image != null);
124 | ```
125 |
126 | ## More resources
127 |
128 | * [Microsoft Graph .NET Client Library](https://github.com/microsoftgraph/msgraph-sdk-dotnet)
129 | * [Windows Universal apps](https://msdn.microsoft.com/en-us/library/windows/apps/dn726767.aspx) - More information about Windows Universal apps
130 |
131 | ## License
132 |
133 | [License](LICENSE.txt)
134 |
135 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
136 |
--------------------------------------------------------------------------------
/OneDrivePhotoBrowser/OneDrivePhotoBrowser.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {8C314CEE-EA97-4CCC-88C3-08C5B076DB83}
8 | AppContainerExe
9 | Properties
10 | OneDrivePhotoBrowser
11 | OneDrivePhotoBrowser
12 | en-US
13 | UAP
14 | 10.0.10240.0
15 | 10.0.10240.0
16 | 14
17 | true
18 | 512
19 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
20 | E5EFD525CF3A9C5171E2BC89FED0D6307A7DF3F4
21 | OneDrivePhotoBrowser_StoreKey.pfx
22 |
23 |
24 | true
25 | bin\ARM\Debug\
26 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
27 | ;2008
28 | full
29 | ARM
30 | false
31 | prompt
32 | true
33 |
34 |
35 | bin\ARM\Release\
36 | TRACE;NETFX_CORE;WINDOWS_UWP
37 | true
38 | ;2008
39 | pdbonly
40 | ARM
41 | false
42 | prompt
43 | true
44 | true
45 |
46 |
47 | true
48 | bin\x64\Debug\
49 | TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS
50 | ;2008
51 | full
52 | x64
53 | false
54 | prompt
55 | true
56 |
57 |
58 | bin\x64\Release\
59 | TRACE;NETFX_CORE;WINDOWS_UWP
60 | true
61 | ;2008
62 | pdbonly
63 | x64
64 | false
65 | prompt
66 | true
67 | true
68 |
69 |
70 | true
71 | bin\x86\Debug\
72 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
73 | ;2008
74 | full
75 | x86
76 | false
77 | prompt
78 | true
79 |
80 |
81 | bin\x86\Release\
82 | TRACE;NETFX_CORE;WINDOWS_UWP
83 | true
84 | ;2008
85 | pdbonly
86 | x86
87 | false
88 | prompt
89 | true
90 | true
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | ClientInitialization.xaml
100 |
101 |
102 | App.xaml
103 |
104 |
105 |
106 |
107 | ItemDetail.xaml
108 |
109 |
110 | MainPage.xaml
111 |
112 |
113 |
114 |
115 |
116 |
117 | Designer
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 | MSBuild:Compile
135 | Designer
136 |
137 |
138 | Designer
139 | MSBuild:Compile
140 |
141 |
142 | Designer
143 | MSBuild:Compile
144 |
145 |
146 | MSBuild:Compile
147 | Designer
148 |
149 |
150 |
151 |
152 | 14.0
153 |
154 |
155 |
162 |
--------------------------------------------------------------------------------