├── img
├── yeet.txt
└── YoutubeAppLauncherDemo.gif
├── launchYoutubeInApp
├── Assets
│ ├── LargeTile.scale-100.png
│ ├── LargeTile.scale-125.png
│ ├── LargeTile.scale-150.png
│ ├── LargeTile.scale-200.png
│ ├── LargeTile.scale-400.png
│ ├── SmallTile.scale-100.png
│ ├── SmallTile.scale-125.png
│ ├── SmallTile.scale-150.png
│ ├── SmallTile.scale-200.png
│ ├── SmallTile.scale-400.png
│ ├── StoreLogo.scale-100.png
│ ├── StoreLogo.scale-125.png
│ ├── StoreLogo.scale-150.png
│ ├── StoreLogo.scale-200.png
│ ├── StoreLogo.scale-400.png
│ ├── SplashScreen.scale-100.png
│ ├── SplashScreen.scale-125.png
│ ├── SplashScreen.scale-150.png
│ ├── SplashScreen.scale-200.png
│ ├── SplashScreen.scale-400.png
│ ├── LockScreenLogo.scale-200.png
│ ├── Square44x44Logo.scale-100.png
│ ├── Square44x44Logo.scale-125.png
│ ├── Square44x44Logo.scale-150.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.scale-400.png
│ ├── Wide310x150Logo.scale-100.png
│ ├── Wide310x150Logo.scale-125.png
│ ├── Wide310x150Logo.scale-150.png
│ ├── Wide310x150Logo.scale-200.png
│ ├── Wide310x150Logo.scale-400.png
│ ├── Square150x150Logo.scale-100.png
│ ├── Square150x150Logo.scale-125.png
│ ├── Square150x150Logo.scale-150.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-400.png
│ ├── Square44x44Logo.targetsize-16.png
│ ├── Square44x44Logo.targetsize-24.png
│ ├── Square44x44Logo.targetsize-256.png
│ ├── Square44x44Logo.targetsize-32.png
│ ├── Square44x44Logo.targetsize-48.png
│ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ └── Square44x44Logo.altform-unplated_targetsize-256.png
├── windows-app-web-link
├── App.xaml
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── MatchService.cs
├── MainPage.xaml.cs
├── Package.appxmanifest
├── MainPage.xaml
├── App.xaml.cs
├── Strings
│ └── en-US
│ │ └── Resources.resw
└── launchYoutubeInApp.csproj
├── README.md
├── launchYoutubeInApp.sln
├── .gitattributes
└── .gitignore
/img/yeet.txt:
--------------------------------------------------------------------------------
1 | meh
2 |
--------------------------------------------------------------------------------
/img/YoutubeAppLauncherDemo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/img/YoutubeAppLauncherDemo.gif
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/windows-app-web-link:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "packageFamilyName": "launchInYoutubeApp_4st3536zmpfe6",
4 | "paths": [ "*" ],
5 | "excludePaths": [ "/news/*", "/blog/*" ]
6 | }
7 | ]
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/colinkiama/Youtube-App-Launcher-UWP/HEAD/launchYoutubeInApp/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/launchYoutubeInApp/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Youtube-App-Launcher-UWP
2 | A UWP app that Opens YouTube links, parses the Video ID out of them, then uses the Video ID to launch other Windows 10 YouTube apps using their URI schemes and play the video on those apps.
3 |
4 | While there are browser extensions that help with this problem already, this also works from Windows programs and apps too!
5 |
6 | 
7 | Need help or have questions? Contact me at colinkiama@gmail.com
8 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/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("launchYoutubeInApp")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("launchYoutubeInApp")]
13 | [assembly: AssemblyCopyright("Copyright © 2017")]
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.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/launchYoutubeInApp/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/MatchService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Text.RegularExpressions;
6 | using System.Threading.Tasks;
7 |
8 | namespace launchYoutubeInApp
9 | {
10 | public class MatchService
11 | {
12 | const string videoIDMatchRegexString = "(?:youtube\\.com\\/(?:[^\\/]+\\/.+\\/|(?:v|e(?:mbed)?)\\/|.*[?&]v=)|youtu\\.be\\/)([^\" &?\\/ ]{11})";
13 |
14 | public const string notFoundVideoID = "noVideoFound";
15 | Regex rx;
16 |
17 | public MatchService()
18 | {
19 | rx = new Regex(videoIDMatchRegexString, RegexOptions.Compiled | RegexOptions.IgnoreCase);
20 | }
21 |
22 | public string Match(string videoUrl)
23 | {
24 | string videoIDToReturn = notFoundVideoID;
25 |
26 | MatchCollection matches = rx.Matches(videoUrl);
27 |
28 | if (matches.Count > 0)
29 | {
30 | if (matches[0].Groups.Count > 1)
31 | {
32 | // Because of the nature of the regex string
33 | // the video ID will always be in the second group (Index 1).
34 | videoIDToReturn = matches[0].Groups[1].Value;
35 |
36 | }
37 | }
38 |
39 | return videoIDToReturn;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.ApplicationModel;
3 | using Windows.System;
4 | using Windows.UI.Xaml;
5 | using Windows.UI.Xaml.Controls;
6 | using Windows.UI.Xaml.Navigation;
7 |
8 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
9 |
10 | namespace launchYoutubeInApp
11 | {
12 | ///
13 | /// An empty page that can be used on its own or navigated to within a Frame.
14 | ///
15 | public sealed partial class MainPage : Page
16 | {
17 | MatchService matchService = new MatchService();
18 |
19 | public static string url = "";
20 | public MainPage()
21 | {
22 | this.InitializeComponent();
23 | }
24 | protected override void OnNavigatedTo(NavigationEventArgs e)
25 | {
26 | url = (string)e.Parameter;
27 | }
28 |
29 | private async void launchmyTubeButton_Click(object sender, RoutedEventArgs e)
30 | {
31 | //Testing
32 | //string videoID = matchService.Match("https://www.youtube.com/watch?v=9bDEQJ2w4KA");
33 |
34 | string videoID = matchService.Match(url);
35 | await Launcher.LaunchUriAsync(new Uri($"rykentube:Video?ID={videoID}"));
36 | Application.Current.Exit();
37 |
38 | }
39 |
40 | private async void launchPerfectTubeButton_Click(object sender, RoutedEventArgs e)
41 | {
42 | //Testing
43 | //string videoID = matchService.Match("https://www.youtube.com/watch?v=9bDEQJ2w4KA");
44 |
45 | string videoID = matchService.Match(url);
46 | await Launcher.LaunchUriAsync(new Uri($"perfecttube:{videoID}"));
47 | Application.Current.Exit();
48 | }
49 | }
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | YouTube App Launcher
7 | Colin Kiama
8 | Assets\StoreLogo.png
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/launchYoutubeInApp.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.26730.10
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "launchYoutubeInApp", "launchYoutubeInApp\launchYoutubeInApp.csproj", "{BB5C5506-1C7B-4EFD-8552-5165F3B62257}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|ARM = Debug|ARM
12 | Debug|x64 = Debug|x64
13 | Debug|x86 = Debug|x86
14 | Release|Any CPU = Release|Any CPU
15 | Release|ARM = Release|ARM
16 | Release|x64 = Release|x64
17 | Release|x86 = Release|x86
18 | EndGlobalSection
19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
20 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|Any CPU.ActiveCfg = Debug|x86
21 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|ARM.ActiveCfg = Debug|ARM
22 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|ARM.Build.0 = Debug|ARM
23 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|ARM.Deploy.0 = Debug|ARM
24 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x64.ActiveCfg = Debug|x64
25 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x64.Build.0 = Debug|x64
26 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x64.Deploy.0 = Debug|x64
27 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x86.ActiveCfg = Debug|x86
28 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x86.Build.0 = Debug|x86
29 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Debug|x86.Deploy.0 = Debug|x86
30 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|Any CPU.ActiveCfg = Release|x86
31 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|ARM.ActiveCfg = Release|ARM
32 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|ARM.Build.0 = Release|ARM
33 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|ARM.Deploy.0 = Release|ARM
34 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x64.ActiveCfg = Release|x64
35 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x64.Build.0 = Release|x64
36 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x64.Deploy.0 = Release|x64
37 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x86.ActiveCfg = Release|x86
38 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x86.Build.0 = Release|x86
39 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}.Release|x86.Deploy.0 = Release|x86
40 | EndGlobalSection
41 | GlobalSection(SolutionProperties) = preSolution
42 | HideSolutionNode = FALSE
43 | EndGlobalSection
44 | GlobalSection(ExtensibilityGlobals) = postSolution
45 | SolutionGuid = {9FC2D636-FE48-414C-9C3D-DD92D9247531}
46 | EndGlobalSection
47 | EndGlobal
48 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
21 |
24 |
25 |
29 |
36 |
37 |
45 |
46 |
47 |
52 | How to use the app: Select a YouTube link, click 'launch', then your video will launch in another Youtube app.
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | project.fragment.lock.json
46 | artifacts/
47 |
48 | *_i.c
49 | *_p.c
50 | *_i.h
51 | *.ilk
52 | *.meta
53 | *.obj
54 | *.pch
55 | *.pdb
56 | *.pgc
57 | *.pgd
58 | *.rsp
59 | *.sbr
60 | *.tlb
61 | *.tli
62 | *.tlh
63 | *.tmp
64 | *.tmp_proj
65 | *.log
66 | *.vspscc
67 | *.vssscc
68 | .builds
69 | *.pidb
70 | *.svclog
71 | *.scc
72 |
73 | # Chutzpah Test files
74 | _Chutzpah*
75 |
76 | # Visual C++ cache files
77 | ipch/
78 | *.aps
79 | *.ncb
80 | *.opendb
81 | *.opensdf
82 | *.sdf
83 | *.cachefile
84 | *.VC.db
85 | *.VC.VC.opendb
86 |
87 | # Visual Studio profiler
88 | *.psess
89 | *.vsp
90 | *.vspx
91 | *.sap
92 |
93 | # TFS 2012 Local Workspace
94 | $tf/
95 |
96 | # Guidance Automation Toolkit
97 | *.gpState
98 |
99 | # ReSharper is a .NET coding add-in
100 | _ReSharper*/
101 | *.[Rr]e[Ss]harper
102 | *.DotSettings.user
103 |
104 | # JustCode is a .NET coding add-in
105 | .JustCode
106 |
107 | # TeamCity is a build add-in
108 | _TeamCity*
109 |
110 | # DotCover is a Code Coverage Tool
111 | *.dotCover
112 |
113 | # NCrunch
114 | _NCrunch_*
115 | .*crunch*.local.xml
116 | nCrunchTemp_*
117 |
118 | # MightyMoose
119 | *.mm.*
120 | AutoTest.Net/
121 |
122 | # Web workbench (sass)
123 | .sass-cache/
124 |
125 | # Installshield output folder
126 | [Ee]xpress/
127 |
128 | # DocProject is a documentation generator add-in
129 | DocProject/buildhelp/
130 | DocProject/Help/*.HxT
131 | DocProject/Help/*.HxC
132 | DocProject/Help/*.hhc
133 | DocProject/Help/*.hhk
134 | DocProject/Help/*.hhp
135 | DocProject/Help/Html2
136 | DocProject/Help/html
137 |
138 | # Click-Once directory
139 | publish/
140 |
141 | # Publish Web Output
142 | *.[Pp]ublish.xml
143 | *.azurePubxml
144 | # TODO: Comment the next line if you want to checkin your web deploy settings
145 | # but database connection strings (with potential passwords) will be unencrypted
146 | #*.pubxml
147 | *.publishproj
148 |
149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
150 | # checkin your Azure Web App publish settings, but sensitive information contained
151 | # in these scripts will be unencrypted
152 | PublishScripts/
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directories and files
175 | AppPackages/
176 | BundleArtifacts/
177 | Package.StoreAssociation.xml
178 | _pkginfo.txt
179 |
180 | # Visual Studio cache files
181 | # files ending in .cache can be ignored
182 | *.[Cc]ache
183 | # but keep track of directories ending in .cache
184 | !*.[Cc]ache/
185 |
186 | # Others
187 | ClientBin/
188 | ~$*
189 | *~
190 | *.dbmdl
191 | *.dbproj.schemaview
192 | *.jfm
193 | *.pfx
194 | *.publishsettings
195 | node_modules/
196 | orleans.codegen.cs
197 |
198 | # Since there are multiple workflows, uncomment next line to ignore bower_components
199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200 | #bower_components/
201 |
202 | # RIA/Silverlight projects
203 | Generated_Code/
204 |
205 | # Backup & report files from converting an old project file
206 | # to a newer Visual Studio version. Backup files are not needed,
207 | # because we have git ;-)
208 | _UpgradeReport_Files/
209 | Backup*/
210 | UpgradeLog*.XML
211 | UpgradeLog*.htm
212 |
213 | # SQL Server files
214 | *.mdf
215 | *.ldf
216 |
217 | # Business Intelligence projects
218 | *.rdl.data
219 | *.bim.layout
220 | *.bim_*.settings
221 |
222 | # Microsoft Fakes
223 | FakesAssemblies/
224 |
225 | # GhostDoc plugin setting file
226 | *.GhostDoc.xml
227 |
228 | # Node.js Tools for Visual Studio
229 | .ntvs_analysis.dat
230 |
231 | # Visual Studio 6 build log
232 | *.plg
233 |
234 | # Visual Studio 6 workspace options file
235 | *.opt
236 |
237 | # Visual Studio LightSwitch build output
238 | **/*.HTMLClient/GeneratedArtifacts
239 | **/*.DesktopClient/GeneratedArtifacts
240 | **/*.DesktopClient/ModelManifest.xml
241 | **/*.Server/GeneratedArtifacts
242 | **/*.Server/ModelManifest.xml
243 | _Pvt_Extensions
244 |
245 | # Paket dependency manager
246 | .paket/paket.exe
247 | paket-files/
248 |
249 | # FAKE - F# Make
250 | .fake/
251 |
252 | # JetBrains Rider
253 | .idea/
254 | *.sln.iml
255 |
256 | # CodeRush
257 | .cr/
258 |
259 | # Python Tools for Visual Studio (PTVS)
260 | __pycache__/
261 | *.pyc
--------------------------------------------------------------------------------
/launchYoutubeInApp/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.ApplicationModel;
7 | using Windows.ApplicationModel.Activation;
8 | using Windows.ApplicationModel.DataTransfer;
9 | using Windows.Foundation;
10 | using Windows.Foundation.Collections;
11 | using Windows.System;
12 | using Windows.UI.Xaml;
13 | using Windows.UI.Xaml.Controls;
14 | using Windows.UI.Xaml.Controls.Primitives;
15 | using Windows.UI.Xaml.Data;
16 | using Windows.UI.Xaml.Input;
17 | using Windows.UI.Xaml.Media;
18 | using Windows.UI.Xaml.Navigation;
19 |
20 | namespace launchYoutubeInApp
21 | {
22 | ///
23 | /// Provides application-specific behavior to supplement the default Application class.
24 | ///
25 | sealed partial class App : Application
26 | {
27 | ///
28 | /// Initializes the singleton application object. This is the first line of authored code
29 | /// executed, and as such is the logical equivalent of main() or WinMain().
30 | ///
31 | public App()
32 | {
33 | this.InitializeComponent();
34 | this.Suspending += OnSuspending;
35 | }
36 |
37 | ///
38 | /// Invoked when the application is launched normally by the end user. Other entry points
39 | /// will be used such as when the application is launched to open a specific file.
40 | ///
41 | /// Details about the launch request and process.
42 | protected override void OnLaunched(LaunchActivatedEventArgs e)
43 | {
44 | Frame rootFrame = Window.Current.Content as Frame;
45 |
46 | // Do not repeat app initialization when the Window already has content,
47 | // just ensure that the window is active
48 | if (rootFrame == null)
49 | {
50 | // Create a Frame to act as the navigation context and navigate to the first page
51 | rootFrame = new Frame();
52 |
53 | rootFrame.NavigationFailed += OnNavigationFailed;
54 |
55 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
56 | {
57 | //TODO: Load state from previously suspended application
58 | }
59 |
60 | // Place the frame in the current Window
61 | Window.Current.Content = rootFrame;
62 | }
63 |
64 | if (e.PrelaunchActivated == false)
65 | {
66 | if (rootFrame.Content == null)
67 | {
68 | // When the navigation stack isn't restored navigate to the first page,
69 | // configuring the new page by passing required information as a navigation
70 | // parameter
71 | rootFrame.Navigate(typeof(MainPage), e.Arguments);
72 | }
73 | // Ensure the current window is active
74 | Window.Current.Activate();
75 | }
76 | }
77 |
78 | ///
79 | /// Invoked when Navigation to a certain page fails
80 | ///
81 | /// The Frame which failed navigation
82 | /// Details about the navigation failure
83 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
84 | {
85 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
86 | }
87 |
88 | ///
89 | /// Invoked when application execution is being suspended. Application state is saved
90 | /// without knowing whether the application will be terminated or resumed with the contents
91 | /// of memory still intact.
92 | ///
93 | /// The source of the suspend request.
94 | /// Details about the suspend request.
95 | private void OnSuspending(object sender, SuspendingEventArgs e)
96 | {
97 | var deferral = e.SuspendingOperation.GetDeferral();
98 | //TODO: Save application state and stop any background activity
99 | deferral.Complete();
100 | }
101 | protected override void OnActivated(IActivatedEventArgs e)
102 | {
103 | Frame rootFrame = Window.Current.Content as Frame;
104 | string url = "";
105 | // Do not repeat app initialization when the Window already has content,
106 | // just ensure that the window is active
107 | if (rootFrame == null)
108 | {
109 | // Create a Frame to act as the navigation context and navigate to the first page
110 | rootFrame = new Frame();
111 |
112 | rootFrame.NavigationFailed += OnNavigationFailed;
113 |
114 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
115 | {
116 | //TODO: Load state from previously suspended application
117 | }
118 |
119 | // Place the frame in the current Window
120 | Window.Current.Content = rootFrame;
121 | }
122 |
123 | // Check ActivationKind, Parse URI, and Navigate user to content
124 | if (e.Kind == ActivationKind.Protocol)
125 | {
126 | var protocolArgs = (ProtocolActivatedEventArgs)e;
127 | url = protocolArgs.Uri.ToString();
128 |
129 |
130 | }
131 |
132 |
133 | if (rootFrame.Content == null)
134 | {
135 | // Default navigation
136 | rootFrame.Navigate(typeof(MainPage), url);
137 | }
138 |
139 | if (url != null)
140 | {
141 | rootFrame.Navigate(typeof(MainPage), url);
142 | }
143 |
144 | // Ensure the current window is active
145 | Window.Current.Activate();
146 | }
147 |
148 |
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/Strings/en-US/Resources.resw:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
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 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 
122 | In this example, "Greeting.Text" and "Farewell" identify the strings that are to be displayed. "Greeting.Width" identifies the Width property of the "Greeting" string. The comments are a good place to provide any special instructions to translators who localize the strings to other languages.
123 |
124 |
--------------------------------------------------------------------------------
/launchYoutubeInApp/launchYoutubeInApp.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {BB5C5506-1C7B-4EFD-8552-5165F3B62257}
8 | AppContainerExe
9 | Properties
10 | launchYoutubeInApp
11 | launchYoutubeInApp
12 | en-US
13 | UAP
14 | 10.0.15063.0
15 | 10.0.10586.0
16 | 14
17 | 512
18 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
19 | true
20 | launchYoutubeInApp_TemporaryKey.pfx
21 | True
22 | Always
23 | x86|x64|arm
24 |
25 |
26 | true
27 | bin\x86\Debug\
28 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
29 | ;2008
30 | full
31 | x86
32 | false
33 | prompt
34 | true
35 |
36 |
37 | bin\x86\Release\
38 | TRACE;NETFX_CORE;WINDOWS_UWP
39 | true
40 | ;2008
41 | pdbonly
42 | x86
43 | false
44 | prompt
45 | true
46 | true
47 |
48 |
49 | true
50 | bin\ARM\Debug\
51 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
52 | ;2008
53 | full
54 | ARM
55 | false
56 | prompt
57 | true
58 |
59 |
60 | bin\ARM\Release\
61 | TRACE;NETFX_CORE;WINDOWS_UWP
62 | true
63 | ;2008
64 | pdbonly
65 | ARM
66 | false
67 | prompt
68 | true
69 | true
70 |
71 |
72 | true
73 | bin\x64\Debug\
74 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
75 | ;2008
76 | full
77 | x64
78 | false
79 | prompt
80 | true
81 |
82 |
83 | bin\x64\Release\
84 | TRACE;NETFX_CORE;WINDOWS_UWP
85 | true
86 | ;2008
87 | pdbonly
88 | x64
89 | false
90 | prompt
91 | true
92 | true
93 |
94 |
95 | PackageReference
96 |
97 |
98 |
99 | App.xaml
100 |
101 |
102 | MainPage.xaml
103 |
104 |
105 |
106 |
107 |
108 |
109 | Designer
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | MSBuild:Compile
167 | Designer
168 |
169 |
170 |
171 |
172 | 6.2.2
173 |
174 |
175 |
176 |
177 | Designer
178 | MSBuild:Compile
179 |
180 |
181 |
182 | 14.0
183 |
184 |
185 |
192 |
--------------------------------------------------------------------------------