示例#1
0
        private void Initialize()
        {
            CustomXamlResourceLoader.Current = new LocalizingResourceLoader();

            LocalizationHelper.Initialize();

            DataViewModelOptions.AddNetworkExceptionType( typeof( WebException ) );
            DataViewModelOptions.AddNetworkExceptionType( typeof( OperationCanceledException ) );

            // ThinMVVM types
            Container.Bind<ISettingsStorage, WindowsRuntimeSettingsStorage>();
            Container.Bind<IDataCache, WindowsRuntimeDataCache>();
            _navigationService = Container.Bind<IWindowsRuntimeNavigationService, WindowsRuntimeNavigationService>();

            // Basic types
            _pluginLoader = Container.Bind<IPluginLoader, PluginLoader>();
            _settings = Container.Bind<IMainSettings, MainSettings>();
            Container.Bind<IHttpClient, HttpClient>();
            Container.Bind<IHttpHeaders, HttpHeaders>();
            Container.Bind<IBrowserService, BrowserService>();
            Container.Bind<IEmailService, EmailService>();
            Container.Bind<IPhoneService, PhoneService>();
            Container.Bind<ILocationService, LocationService>();
            Container.Bind<ITileService, TileService>();
            Container.Bind<IDeviceIdentifier, DeviceIdentifier>();
            Container.Bind<IAppRatingService, AppRatingService>();
            Container.Bind<ICredentialsStorage, CredentialsStorage>();

            // Logger
            Container.Bind<Logger, GoogleAnalyticsLogger>().Start();

            // Types dependent on one of the above types
            _serverAccess = Container.Bind<IServerAccess, ServerAccess>();
            _protocolHandler = new ProtocolHandler( _pluginLoader, _navigationService );

            // Views from Main
            _navigationService.Bind<AboutViewModel, AboutView>();
            _navigationService.Bind<MainViewModel, MainView>();
            _navigationService.Bind<SettingsViewModel, SettingsView>();

            // Register pocketcampus:// URIs to avoid going to the system and back when they're used inside of the app
            LauncherEx.RegisterProtocol( ProtocolHandler.PocketCampusProtocol, _protocolHandler.NavigateToCustomUri );

            // Initialize plugins, both their common part and their WinRT part
            foreach ( var plugin in _pluginLoader.GetPlugins().Cast<IWindowsRuntimePlugin>() )
            {
                plugin.Initialize( (INavigationService) _navigationService );
                plugin.Initialize( _navigationService );
            }

            // Handle the back button, since Windows Phone doesn't do it for us any more (unlike WP8 "Silverlight")
            HardwareButtons.BackPressed += ( _, e ) =>
            {
                e.Handled = true;
                _navigationService.NavigateBack();
            };
        }
示例#2
0
        /// <summary>
        /// Creates a new MainViewModel.
        /// </summary>
        public MainViewModel(INavigationService navigationService, IServerAccess serverAccess,
                             IPluginLoader pluginLoader, IMainSettings settings, ITileService tileCreator,
                             ViewPluginRequest request)
        {
            _navigationService = navigationService;
            _pluginLoader      = pluginLoader;
            _serverAccess      = serverAccess;
            _settings          = settings;
            _tileCreator       = tileCreator;

            _request = request;
        }
示例#3
0
        /// <summary>
        /// Creates a new AuthenticationViewModel.
        /// </summary>
        public AuthenticationViewModel(IAuthenticationService authenticationService, IAuthenticator authenticator,
                                       IServerAccess serverAccess, INavigationService navigationService,
                                       IServerSettings settings, ICredentialsStorage credentials,
                                       AuthenticationRequest request)
        {
            _authenticationService = authenticationService;
            _authenticator         = authenticator;
            _serverAccess          = serverAccess;
            _navigationService     = navigationService;
            _settings    = settings;
            _credentials = credentials;
            _request     = request;

            SaveCredentials = true;
        }
示例#4
0
 public TransportService(IServerAccess access)
     : base(access.CreateCommunication("transport"))
 {
 }
示例#5
0
 public SatelliteService(IServerAccess access)
     : base(access.CreateCommunication("satellite"))
 {
 }
示例#6
0
        public int Process(SyncSettings settings)
        {
            int nbUploaded = 0;

            _currentAction = "Starting...";
            IServerAccess source            = null;
            IServerAccess destinationClient = null;
            string        currentFile       = null;
            string        originalFile      = null;

            try
            {
                var result = settings.Validate();
                if (result.Any())
                {
                    foreach (var error in result)
                    {
                        _logger.Error(error.ErrorMessage);
                    }

                    return(0);
                }
                SetCurrentAction("Connecting to Source " + settings.sourceFTP.address);

                source = ServerAccess.CreateAccessTo(settings.sourceFTP);
                List <string> sourceList = source.GetFileList(settings.changeFileNamePrepend);
                _logger.Info($"{sourceList.Count} files found to transfer");
                if (sourceList.Count == 0)
                {
                    return(0);
                }

                if (Directory.Exists(_pathTemp))
                {
                    Directory.CreateDirectory(_pathTemp);
                }

                string prepend = settings.changeFileNamePrepend;
                foreach (string sourceFile in sourceList)
                {
                    originalFile = sourceFile;
                    currentFile  = sourceFile;
                    if (!string.IsNullOrWhiteSpace(prepend))
                    {
                        currentFile = prepend + currentFile;
                        SetCurrentAction($"Renaming {originalFile} => {currentFile}");
                        source.RenameFile(originalFile, currentFile);
                    }

                    string localFile = Path.Combine(_pathTemp, currentFile);
                    SetCurrentAction("Downloading " + currentFile);
                    source.DownloadFile(currentFile, localFile);
                    source.Disconnect();
                    source = null;
                    SetCurrentAction("Uploading " + localFile);
                    destinationClient = ServerAccess.CreateAccessTo(settings.destinationFTP);
                    if (destinationClient.UploadFile(localFile, currentFile, settings.destinationFTP,
                                                     settings.changeFileNamePrepend))
                    {
                        nbUploaded++;
                    }
                    SetCurrentAction("Connecting to Source " + settings.sourceFTP.address);
                    // Reconnect to source do delete and do next download
                    source = ServerAccess.CreateAccessTo(settings.sourceFTP);
                    if (settings.sourceFTP.deleteFileAfterTransfer)
                    {
                        SetCurrentAction($"Delete {currentFile} on source {settings.sourceFTP.address} ");
                        source.DeleteFile(currentFile);
                    }
                    else
                    {
                        if (currentFile != originalFile)
                        {
                            SetCurrentAction($"Renaming {currentFile} => {originalFile}");
                            source.RenameFile(currentFile, originalFile);
                        }
                    }

                    currentFile = null;
                }

                _logger.Info(
                    $"Done ! {sourceList.Count} file{(sourceList.Count > 1 ? "s" : "")} on source, {nbUploaded} file{(nbUploaded > 1 ? "s" : "")} uploaded");
            }
            catch (Exception e)
            {
                LogExceptionCleanly(e);

                if (currentFile != null && originalFile != null && currentFile != originalFile)
                { //Need to rename the original file
                    try
                    {
                        if (source == null)
                        {
                            SetCurrentAction("AFTER EXCEPTION Connecting to Source " + settings.sourceFTP.address);
                            source = ServerAccess.CreateAccessTo(settings.sourceFTP);
                        }

                        SetCurrentAction($"AFTER EXCEPTION Renaming {currentFile} => {originalFile}");
                        source.RenameFile(currentFile, originalFile);
                    }
                    catch (Exception exception)
                    {
                        LogExceptionCleanly(exception);
                    }
                    finally
                    {
                        source?.Disconnect();
                    }
                }

                return(nbUploaded);
            }
            finally
            {
                EmptyTmpFolder();
                source?.Disconnect();
                destinationClient?.Disconnect();
            }
            return(nbUploaded);
        }
示例#7
0
 public NewsService(IServerAccess access)
     : base(access.CreateCommunication("news"))
 {
 }
示例#8
0
 public EventsService(IServerAccess access) : base(access.CreateCommunication("events"))
 {
 }
 public AuthenticationService(IServerAccess access) : base(access.CreateCommunication("authentication"))
 {
 }
示例#10
0
 public DirectoryService(IServerAccess access)
     : base(access.CreateCommunication("directory"))
 {
 }
示例#11
0
 public MoodleService(IServerAccess access) : base(access.CreateCommunication("moodle"))
 {
 }
示例#12
0
 public CamiproService(IServerAccess config)
     : base(config.CreateCommunication("camipro"))
 {
 }
示例#13
0
 public MapService(IServerAccess access)
     : base(access.CreateCommunication("map"))
 {
 }
示例#14
0
 public IsAcademiaService(IServerAccess access)
     : base(access.CreateCommunication("isacademia"))
 {
 }
示例#15
0
 public FoodService(IServerAccess access)
     : base(access.CreateCommunication("food"))
 {
 }