Пример #1
0
        public PreviewOnDevice(IFuse fuse, IProject project, BuildArgs args)
        {
            var output = new Subject <string>();

            LogMessages = output;

            var isMac = fuse.Platform == OS.Mac;
            var startedAndroidPreview = new Subject <Unit>();

            MissingAndroidNotification.Create(fuse, startedAndroidPreview);

            PreviewAndroidApp = project.FilePath.CombineLatest(args.All, (path, allArgs) =>
                                                               Command.Enabled(
                                                                   action: () =>
            {
                startedAndroidPreview.OnNext(Unit.Default);
                fuse.RunFuse(
                    "preview",
                    new[] { path.NativePath, "-t=android", "--quit-after-apk-launch" }.Concat(allArgs).ToArray(),
                    Observer.Create <string>(output.OnNext));
            }))
                                .Switch();

            PreviewIosApp = project.FilePath.CombineLatest(args.All, (path, allArgs) =>
                                                           Command.Create(
                                                               isEnabled: isMac,
                                                               action: () => fuse.RunFuse(
                                                                   "preview",
                                                                   new[] { path.NativePath, "-t=ios" }.Concat(allArgs).ToArray(),
                                                                   Observer.Create <string>(output.OnNext))))
                            .Switch();

            Menu = Menu.Item("Preview on Android", PreviewAndroidApp)
                   + Menu.Item("Preview on iOS" + (!isMac ? " (Mac only)" : ""), PreviewIosApp);
        }
Пример #2
0
        public Export(IProject project, IFuse fuse, BuildArgs args)
        {
            var output = new Subject <string>();

            LogMessages = output;

            var isMac = fuse.Platform == OS.Mac;

            ExportForAndroid = project.FilePath.CombineLatest(args.All, (path, allArgs) =>
                                                              Command.Enabled(
                                                                  action: () => fuse.RunFuse(
                                                                      "build",
                                                                      new[] { path.NativePath, "-t=android", "--run" }.Concat(allArgs).ToArray(),
                                                                      Observer.Create <string>(output.OnNext))))
                               .Switch();

            ExportForIos = project.FilePath.CombineLatest(args.All, (path, allArgs) =>
                                                          Command.Create(
                                                              isEnabled: isMac,
                                                              action: () => fuse.RunFuse(
                                                                  "build",
                                                                  new[] { path.NativePath, "-t=ios", "--run" }.Concat(allArgs).ToArray(),
                                                                  Observer.Create <string>(output.OnNext))))
                           .Switch();

            Menu = Menu.Item("Export for Android", ExportForAndroid)
                   + Menu.Item("Export for iOS" + (!isMac ? " (Mac only)" : ""), ExportForIos);
        }
Пример #3
0
        public SetupGuide(IFuse fuse, IObservable <Unit> doneLoadingMainWindow)
        {
            var output = new Subject <string>();

            LogMessages = output;

            var report    = fuse.Report;
            var softwares = new SoftwareCollectionStatus(fuse);

            var showSetupGuide = new BehaviorSubject <bool>(false);

            MissingPluginNotification.Create(fuse, doneLoadingMainWindow, showSetupGuide);

            Application.Desktop.CreateSingletonWindow(
                isVisible: showSetupGuide.CombineLatest(doneLoadingMainWindow, (s, _) => s),
                window: dialog => new Window
            {
                Title   = Observable.Return("Setup guide"),
                Size    = Optional.Some(Property.Constant(Optional.Some(new Size <Points>(500, 300)))),
                Content = Control.Lazy(() => Create(softwares, report, dialog).ShowWhen(showSetupGuide))
                          .WithBackground(Theme.PanelBackground),
                Background = Theme.PanelBackground,
                Foreground = Theme.DefaultText,
                Border     = Separator.MediumStroke,
                Style      = WindowStyle.Fat,
            });

            Menu
                = Menu.Item("Install Android SDKs", () => fuse.RunFuse("install", new [] { "android" }, Observer.Create <string>(output.OnNext)))
                  + Menu.Item("Setup guide", () => showSetupGuide.OnNext(true));
        }