Exemplo n.º 1
0
        public override bool OnStartJob(JobParameters @params)
        {
            if (TBL.IsSyncBlocked)
            {
                JobFinished(@params, false); return(false);
            }

            Task.Run(async delegate
            {
                //Statische Klassen erstellen
                TBL.Init(this);
                TBL.DB_Object.LoadDatabase();

                //Feed aktualiseren
                var result = await TBL.SP_Object.UpdateNewsFeed(true, true);
                if (result == SharepointAPIState.WRONG_LOGIN)
                {
                    TBL.Notify_Object.CreateLoginNag();
                }

                //Job schließen
                JobFinished(@params, false);
            });

            return(true);
        }
Exemplo n.º 2
0
        //###################################################################################

        protected override void OnCreate(Bundle savedInstanceState)
        {
            //Statischen Speicher wiederherstellen, wenn im Hintergrund vom System gelöscht
            if (TBL.SP_Object == null)
            {
                Activity_Init.InitRoutine(this);
            }

            SetTheme(Resource.Style.AppTheme);
            base.OnCreate(savedInstanceState);

            //entryFeed
            string entryID = Intent.GetStringExtra(BUNDLE_ENTRYKEY);

            if (savedInstanceState != null)
            {
                entryID = savedInstanceState.GetString(BUNDLE_ENTRYKEY, "");
            }
            _currentEntry = TBL.GetFeedEntry(entryID);

            if (_currentEntry == null)
            {
                Finish(); return;
            }

            //Layout füllen
            SetContentView(Resource.Layout.activity_feedEntry);

            CreateViewholder();
            CreateToolbar();
        }
Exemplo n.º 3
0
        private void CREDENTIAL_BTN_Click(object sender, EventArgs e)
        {
            if (c.BTN_CRED.Tag != null)
            {
                return;
            }                                       //Wenn State == Working

            var dialog = new Dialogs.DialogCredentialsInput(this,
                                                            async(object ss, Dialogs.DialogCredentialsInputEventArgs ee) =>
            {
                TBL.UpdateCredentials(ee.Username, ee.Password);

                int timeout = 30 * (1000 / 200);
                while (TBL.SP_Object.State == SharepointAPIState.WORKING)
                {
                    timeout -= 1;
                    if (timeout <= 0)
                    {
                        return;
                    }

                    await System.Threading.Tasks.Task.Delay(200);
                }

                RefreshCloud();
            });
        }
Exemplo n.º 4
0
        private void CHECK_NOTIFY_CHANGED(object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            if (notification_checkbox_initiate)
            {
                return;
            }

            c.CHECK_NOTIFY_NEWSHIFTSVERSION.Enabled = c.CHECK_NOTIFY_NEWSHIFTS.Checked;
            Notification.NotifySettings.NotifySettingsType state;

            //Dienstplanversion deaktivieren, wenn aktiv
            if (!c.CHECK_NOTIFY_NEWSHIFTS.Checked && c.CHECK_NOTIFY_NEWSHIFTSVERSION.Checked)
            {
                c.CHECK_NOTIFY_NEWSHIFTSVERSION.Checked = false;
            }

            //Neuen Benachrichtungsstatus ermitteln
            if (c.CHECK_NOTIFY_NEWFEED.Checked)
            {
                if (c.CHECK_NOTIFY_NEWSHIFTS.Checked)
                {
                    if (c.CHECK_NOTIFY_NEWSHIFTSVERSION.Checked)
                    {
                        state = Notification.NotifySettings.NotifySettingsType.FEED_AND_SHIFTS_AND_VERSIONS;
                    }
                    else
                    {
                        state = Notification.NotifySettings.NotifySettingsType.FEED_AND_SHIFTS;
                    }
                }
                else
                {
                    state = Notification.NotifySettings.NotifySettingsType.ONLY_FEED;
                }
            }
            else
            {
                if (c.CHECK_NOTIFY_NEWSHIFTS.Checked)
                {
                    if (c.CHECK_NOTIFY_NEWSHIFTSVERSION.Checked)
                    {
                        state = Notification.NotifySettings.NotifySettingsType.SHIFTS_AND_VERSIONS;
                    }
                    else
                    {
                        state = Notification.NotifySettings.NotifySettingsType.ONLY_SHIFTS;
                    }
                }
                else
                {
                    state = Notification.NotifySettings.NotifySettingsType.NO_NOTIFICATION;
                }
            }

            TBL.UpdateSyncNotification(state);
        }
Exemplo n.º 5
0
        public static void InitRoutine(Context context)
        {
            //Statischen App-Speicher vorbereiten
            TBL.BlockSyncService();         //BackgroundSync sperren

            TBL.Init(context);              //AppTable initialisieren (AppTable = TaBLe)
            TBL.DB_Object.LoadDatabase();   //Feed aus der lokalen Datenbank laden

            TBL.UnBlockSyncService();       //BackgroundSync entsperren
        }
Exemplo n.º 6
0
        //###################################################################################

        private void SPINNER_TIME_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            if ((e.Position >= 0) && (e.Position < listSpinnerIntervalValues.Count))
            {
                var interval = listSpinnerIntervalValues[e.Position];

                TBL.UpdateSyncInterval(interval);

                JobSchedulerHelper.CreateSyncJob(this, TBL.GetSyncIntervalSettingDescriptor(this, interval).Timespan);
            }
        }
Exemplo n.º 7
0
        //#############################################################################

        protected override void OnResume()
        {
            base.OnResume();

            //Statischen Speicher erstellen
            InitRoutine(this);

            //Job erstellen
            JobSchedulerHelper.CreateSyncJob(this, TBL.GetSyncIntervalSettingDescriptor(this, TBL.SyncInterval).Timespan);

            //App starten
            StartActivity(new Intent(Application.Context, typeof(Activity_Main)));
        }
Exemplo n.º 8
0
        private void AttachmentAdapter_EntrySelected(object sender, Adapters.ListFeedAttachmentAdapterEntrySelected e)
        {
            EntryAttachment attachment = TBL.GetFeedEntry(e.EntryKey)?.GetAttachment(e.AttachmentKey);

            if (attachment.IsDownloadable)
            {
                bool success = Helper.FileOpen.Open(this, attachment.LocalFilePath);
                if (!success)
                {
                    AttachmentAdapter_AttachmentRetrieveError(null, new Adapters.AttachmentRetrieveErrorEventArgs(Adapters.AttachmentRetrieveErrorReason.RETRIEVE_ERROR));
                }
            }
            else
            {
                bool success = Helper.FileOpen.OpenWeb(this, attachment.RemoteURL);
                if (!success)
                {
                    AttachmentAdapter_AttachmentRetrieveError(null, new Adapters.AttachmentRetrieveErrorEventArgs(Adapters.AttachmentRetrieveErrorReason.RETRIEVE_ERROR));
                }
            }
        }
Exemplo n.º 9
0
        private void CreateSpinner()
        {
            List <string> intervalTitles = new List <string>();

            foreach (var item in listSpinnerIntervalValues)
            {
                intervalTitles.Add(TBL.GetSyncIntervalSettingDescriptor(this, item).Description);
            }

            ArrayAdapter <string> adapter = new ArrayAdapter <string>(this, Android.Resource.Layout.SimpleSpinnerItem, intervalTitles);

            adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);

            c.SPINNER_TIME.Adapter = adapter;

            if (!listSpinnerIntervalValues.Contains(TBL.SyncInterval))
            {
                return;
            }
            c.SPINNER_TIME.SetSelection(listSpinnerIntervalValues.IndexOf(TBL.SyncInterval));
        }
Exemplo n.º 10
0
        public async Task <SharepointAPIState> CreateLogin()
        {
            InvokeStateChanged(SharepointAPIState.WORKING);

            if (!IsOnline())
            {
                return(SharepointAPIState.CONNECTION_LOST);
            }
            if (string.IsNullOrWhiteSpace(_username))
            {
                return(SharepointAPIState.WRONG_LOGIN);
            }
            if (string.IsNullOrWhiteSpace(_password))
            {
                return(SharepointAPIState.WRONG_LOGIN);
            }

            //Init
            _bearer    = string.Empty;
            _spOauth   = string.Empty;
            _cookieJar = new CookieContainer();

            try
            {
                //Anmeldung ###########################################################################################################################################
                //Federate-Login der Malteser abrufen

                string realmRequest = string.Format("login={0}&xml=1", _username.Replace("@", "%40"));

                HttpWebRequest request = await GetRequest_POSTAsync(GetRequest(new Uri(_url_getAdfs)), RequestContentType.WWW_FORM, RequestContentType.XML, realmRequest);

                if (request == null)
                {
                    return(SharepointAPIState.CONNECTION_LOST);
                }

                ResponseObject response = await GetResponse(request);

                switch (response.StatusCode)
                {
                case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                    return(SharepointAPIState.CONNECTION_LOST);

                case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                    return(SharepointAPIState.WRONG_LOGIN);

                case ResponseObject.ResponseObjectStatusCode.ERROR:
                case ResponseObject.ResponseObjectStatusCode.UNSET:
                default:

                    return(SharepointAPIState.SERVER_ERROR);

                case ResponseObject.ResponseObjectStatusCode.OK:

                    if (response.Response?.StatusCode == HttpStatusCode.OK)
                    {
                        string responseData = GetResponseData(response.Response); response.Close();

                        XElement x             = XElement.Parse(responseData);
                        string   NameSpaceType = x.Descendants().Where(xg => xg.Name.LocalName == "NameSpaceType").First().Value;
                        if (NameSpaceType != "Federated")
                        {
                            return(SharepointAPIState.WRONG_LOGIN);
                        }

                        string sts = x.Descendants().Where(xg => xg.Name.LocalName == "STSAuthURL").First().Value;
                        string auth_certificate = x.Descendants().Where(xg => xg.Name.LocalName == "Certificate").First().Value;

                        //#####################################################################################################################
                        //ADFS beantragen

                        string msgID       = Guid.NewGuid().ToString("D");
                        string r_created   = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fff0000Z");
                        string r_expired   = DateTime.Now.AddMinutes(10).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fff0000Z");
                        string adfsRequest = @"<?xml version='1.0' encoding='UTF-8'?><s:Envelope xmlns:s='http://www.w3.org/2003/05/soap-envelope' xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' xmlns:saml='urn:oasis:names:tc:SAML:1.0:assertion' xmlns:wsp='http://schemas.xmlsoap.org/ws/2004/09/policy' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' xmlns:wsa='http://www.w3.org/2005/08/addressing' xmlns:wssc='http://schemas.xmlsoap.org/ws/2005/02/sc' xmlns:wst='http://schemas.xmlsoap.org/ws/2005/02/trust'><s:Header><wsa:Action s:mustUnderstand='1'>http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To s:mustUnderstand='1'>{0}</wsa:To><wsa:MessageID>{1}</wsa:MessageID><ps:AuthInfo xmlns:ps='http://schemas.microsoft.com/Passport/SoapServices/PPCRL' Id='PPAuthInfo'><ps:HostingApp>Managed IDCRL</ps:HostingApp><ps:BinaryVersion>6</ps:BinaryVersion><ps:UIVersion>1</ps:UIVersion><ps:Cookies></ps:Cookies><ps:RequestParams>AQAAAAIAAABsYwQAAAAxMDMz</ps:RequestParams></ps:AuthInfo><wsse:Security><wsse:UsernameToken wsu:Id='user'><wsse:Username>{2}</wsse:Username><wsse:Password>{3}</wsse:Password></wsse:UsernameToken><wsu:Timestamp Id='Timestamp'><wsu:Created>{4}</wsu:Created><wsu:Expires>{5}</wsu:Expires></wsu:Timestamp></wsse:Security></s:Header><s:Body><wst:RequestSecurityToken Id='RST0'><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>urn:federation:MicrosoftOnline</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wst:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</wst:KeyType></wst:RequestSecurityToken></s:Body></s:Envelope>";

                        request = await GetRequest_POSTAsync(GetRequest(new Uri(sts)), RequestContentType.SOAP, RequestContentType.ALL, string.Format(adfsRequest, sts, msgID, _username, _password, r_created, r_expired));

                        if (request == null)
                        {
                            return(SharepointAPIState.CONNECTION_LOST);
                        }

                        response = await GetResponse(request);

                        switch (response.StatusCode)
                        {
                        case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                            return(SharepointAPIState.CONNECTION_LOST);

                        case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                            return(SharepointAPIState.WRONG_LOGIN);

                        case ResponseObject.ResponseObjectStatusCode.ERROR:
                        case ResponseObject.ResponseObjectStatusCode.UNSET:
                        default:

                            return(SharepointAPIState.SERVER_ERROR);

                        case ResponseObject.ResponseObjectStatusCode.OK:

                            if (response.Response?.StatusCode == HttpStatusCode.OK)
                            {
                                responseData = GetResponseData(response.Response); response.Close();

                                x = XElement.Parse(responseData);
                                string auth_SignatureValue  = x.Descendants().Where(xg => xg.Name.LocalName == "SignatureValue").First().Value;
                                string auth_X509Certificate = x.Descendants().Where(xg => xg.Name.LocalName == "X509Certificate").First().Value;
                                string auth_DigestValue     = x.Descendants().Where(xg => xg.Name.LocalName == "DigestValue").First().Value;
                                string auth_NameIdentifier  = x.Descendants().Where(xg => xg.Name.LocalName == "NameIdentifier").First().Value;
                                string auth_AssertionID     = x.Descendants().Where(xg => xg.Name.LocalName == "Assertion").First().Attributes("AssertionID").First().Value;
                                string auth_Issuer          = x.Descendants().Where(xg => xg.Name.LocalName == "Assertion").First().Attributes("Issuer").First().Value;

                                string auth_AssertionFullXml = x.Descendants().Where(xg => xg.Name.LocalName == "Assertion").First().ToString(SaveOptions.DisableFormatting);

                                //################################################################################################################
                                //Sharepoint-Token beantragen

                                string spTokenRequest = @"<S:Envelope xmlns:S='http://www.w3.org/2003/05/soap-envelope' xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' xmlns:wsp='http://schemas.xmlsoap.org/ws/2004/09/policy' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' xmlns:wsa='http://www.w3.org/2005/08/addressing' xmlns:wst='http://schemas.xmlsoap.org/ws/2005/02/trust'><S:Header><wsa:Action S:mustUnderstand='1'>http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To S:mustUnderstand='1'>https://login.microsoftonline.com/rst2.srf</wsa:To><ps:AuthInfo xmlns:ps='http://schemas.microsoft.com/LiveID/SoapServices/v1' Id='PPAuthInfo'><ps:BinaryVersion>5</ps:BinaryVersion><ps:HostingApp>Managed IDCRL</ps:HostingApp></ps:AuthInfo><wsse:Security>{0}</wsse:Security></S:Header><S:Body><wst:RequestSecurityToken xmlns:wst='http://schemas.xmlsoap.org/ws/2005/02/trust' Id='RST0'><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>sharepoint.com</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wsp:PolicyReference URI='MBI'/></wst:RequestSecurityToken></S:Body></S:Envelope>";

                                request = await GetRequest_POSTAsync(GetRequest(new Uri(_url_getSpToken)), RequestContentType.SOAP, RequestContentType.ALL, string.Format(spTokenRequest, auth_AssertionFullXml));

                                if (request == null)
                                {
                                    return(SharepointAPIState.CONNECTION_LOST);
                                }

                                response = await GetResponse(request);

                                switch (response.StatusCode)
                                {
                                case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                                    return(SharepointAPIState.CONNECTION_LOST);

                                case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                                    return(SharepointAPIState.WRONG_LOGIN);

                                case ResponseObject.ResponseObjectStatusCode.ERROR:
                                case ResponseObject.ResponseObjectStatusCode.UNSET:
                                default:

                                    return(SharepointAPIState.SERVER_ERROR);

                                case ResponseObject.ResponseObjectStatusCode.OK:

                                    if (response.Response?.StatusCode == HttpStatusCode.OK)
                                    {
                                        responseData = GetResponseData(response.Response); response.Close();

                                        x = XElement.Parse(responseData);
                                        string auth_BinarySecurityToken = x.Descendants().Where(xg => xg.Name.LocalName == "BinarySecurityToken").First().Value;

                                        //###################################################################################################################
                                        //Cookies laden

                                        Uri idcrlUri = new Uri(_url_malteserHost + "/_vti_bin/idcrl.svc/");

                                        request = GetRequest(idcrlUri);
                                        request.Headers.Set("Authorization", "BPOSIDCRL " + auth_BinarySecurityToken);
                                        request.Headers.Add("X-IDCRL_ACCEPTED", "t");

                                        response = await GetResponse(request);

                                        switch (response.StatusCode)
                                        {
                                        case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                                            return(SharepointAPIState.CONNECTION_LOST);

                                        case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                                            return(SharepointAPIState.WRONG_LOGIN);

                                        case ResponseObject.ResponseObjectStatusCode.ERROR:
                                        case ResponseObject.ResponseObjectStatusCode.UNSET:
                                        default:

                                            return(SharepointAPIState.SERVER_ERROR);

                                        case ResponseObject.ResponseObjectStatusCode.OK:

                                            if (response.Response?.StatusCode == HttpStatusCode.OK)
                                            {
                                                //#############################################################################################################################
                                                //Digest beantragen

                                                Uri    digestUri     = new Uri(_url_malteserHost + "/_vti_bin/sites.asmx");
                                                string digestRequest = @"<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><GetUpdatedFormDigestInformation xmlns='http://schemas.microsoft.com/sharepoint/soap/' /></soap:Body></soap:Envelope>";

                                                request = await GetRequest_POSTAsync(GetRequest(digestUri), RequestContentType.XML, RequestContentType.ALL, digestRequest);

                                                if (request == null)
                                                {
                                                    return(SharepointAPIState.CONNECTION_LOST);
                                                }

                                                request.Headers.Add("X-RequestForceAuthentication", "true");
                                                request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
                                                request.Headers.Add("Accept-Encoding", "gzip, deflate");
                                                request.Headers.Add("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetUpdatedFormDigestInformation");

                                                response = await GetResponse(request);

                                                switch (response.StatusCode)
                                                {
                                                case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                                                    return(SharepointAPIState.CONNECTION_LOST);

                                                case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                                                    return(SharepointAPIState.WRONG_LOGIN);

                                                case ResponseObject.ResponseObjectStatusCode.ERROR:
                                                case ResponseObject.ResponseObjectStatusCode.UNSET:
                                                default:

                                                    return(SharepointAPIState.SERVER_ERROR);

                                                case ResponseObject.ResponseObjectStatusCode.OK:

                                                    if (response.Response?.StatusCode == HttpStatusCode.OK)
                                                    {
                                                        responseData = GetResponseData(response.Response); response.Close();
                                                        x            = XElement.Parse(responseData);

                                                        _bearer  = x.Descendants().Where(xg => xg.Name.LocalName == "DigestValue").First().Value;
                                                        _spOauth = _cookieJar.GetCookies(new Uri(_url_malteserHost))["SPOIDCRL"].Value;

                                                        TBL.UpdateTokens(_bearer, _spOauth);

                                                        return(SharepointAPIState.LOGGED_IN);
                                                    }
                                                    return(SharepointAPIState.SERVER_ERROR);
                                                }
                                            }
                                            return(SharepointAPIState.SERVER_ERROR);
                                        }
                                    }
                                    return(SharepointAPIState.SERVER_ERROR);
                                }
                            }
                            return(SharepointAPIState.SERVER_ERROR);
                        }
                    }
                    return(SharepointAPIState.SERVER_ERROR);
                }
            }
            catch (Exception)
            {
                return(SharepointAPIState.SERVER_ERROR);
            }
        }
Exemplo n.º 11
0
        private async Task <SharepointAPIState> RetrieveNewsFeed(bool doNotify, bool relogin, string host)
        {
            InvokeStateChanged(SharepointAPIState.WORKING);

            if (!IsOnline())
            {
                return(SharepointAPIState.CONNECTION_LOST);
            }                                                               // InvokeStateChanged(SharepointAPIState.CONNECTION_LOST); return; }
            if (string.IsNullOrWhiteSpace(_username))
            {
                return(SharepointAPIState.WRONG_LOGIN);
            }                                                                                    // InvokeStateChanged(SharepointAPIState.WRONG_LOGIN); return; }
            if (string.IsNullOrWhiteSpace(_password))
            {
                return(SharepointAPIState.WRONG_LOGIN);
            }                                                                                    // InvokeStateChanged(SharepointAPIState.WRONG_LOGIN); return; }

            if (!string.IsNullOrWhiteSpace(_spOauth))
            {
                _cookieJar = CreateOAuthCookie();
            }
            else
            {
                _cookieJar = new CookieContainer();
            }

            var listFeed = new List <FeedEntry>();

            string query = host + "_api/SitePages/pages?$select=Id,Title,Modified,CanvasJson1,lastModifiedBy,promotedState,Url&$orderby=Modified%20desc&$expand=lastModifiedBy"; // "_api/web/lists/getbytitle('news_mei')/items?$select=ID,Title,Body,Modified,AttachmentFiles,Author/Name,Author/Title&$orderby=Modified%20desc&$expand=AttachmentFiles,Author/Id";

            try
            {
                HttpWebRequest request = GetRequest(new Uri(_url_endpoint + query));
                request.Headers.Add("X-RequestDigest", _bearer);
                request.Accept = "application/json; odata=verbose";

                ResponseObject response = await GetResponse(request);

                switch (response.StatusCode)
                {
                case ResponseObject.ResponseObjectStatusCode.CONNECTION_LOST:

                    return(SharepointAPIState.CONNECTION_LOST);    //InvokeStateChanged(SharepointAPIState.CONNECTION_LOST); return;

                case ResponseObject.ResponseObjectStatusCode.FORBIDDEN:

                    if (relogin)
                    {
                        var loginState = await CreateLogin();

                        if (loginState == SharepointAPIState.LOGGED_IN)
                        {
                            return(await RetrieveNewsFeed(doNotify, false, host));
                        }
                        return(loginState);    //InvokeStateChanged(loginState); return;
                    }

                    return(SharepointAPIState.WRONG_LOGIN);    // InvokeStateChanged(SharepointAPIState.WRONG_LOGIN); return;

                case ResponseObject.ResponseObjectStatusCode.ERROR:
                case ResponseObject.ResponseObjectStatusCode.UNSET:
                default:

                    return(SharepointAPIState.SERVER_ERROR);    //InvokeStateChanged(SharepointAPIState.SERVER_ERROR); return;

                case ResponseObject.ResponseObjectStatusCode.OK:

                    if (response.Response?.StatusCode == HttpStatusCode.OK)
                    {
                        string responseData = GetResponseData(response.Response); response.Close();

                        JSONObject feedDoc = new JSONObject(responseData);
                        var        results = feedDoc.GetJSONObject("d").GetJSONArray("results");

                        for (int i = 0; i < results.Length(); i++)
                        {
                            var c = results.GetJSONObject(i);

                            const string TITLE    = "Title";
                            const string ID       = "Id";
                            const string MODIFIED = "Modified";
                            const string AUTHOR   = "LastModifiedBy";
                            const string STATE    = "PromotedState";
                            const string CONTENT  = "CanvasJson1";
                            const string PAGEURL  = "Url";

                            if (!c.Has(TITLE) || !c.Has(ID) || !c.Has(MODIFIED) || !c.Has(AUTHOR) || !c.Has(STATE) || !c.Has(PAGEURL))
                            {
                                break;
                            }

                            string title = c.GetString(TITLE);
                            string key   = "#" + c.GetInt(ID).ToString() + "_" + title.Trim(' ').ToLower();

                            if (!DateTime.TryParse(c.GetString(MODIFIED), out DateTime date))
                            {
                                date = DateTime.Now;
                            }

                            string author = _context.GetString(Resource.String.feedentry_unknown);
                            if (c.GetJSONObject(AUTHOR).Has("Name"))
                            {
                                author = c.GetJSONObject(AUTHOR).GetString("Name");
                            }

                            string body = "";
                            //string body = _url_endpoint + "/" + host + c.GetString(PAGEURL);

                            bool isVisible = c.GetInt(STATE) == 2;     //Promoted, sonst ausgeblendet
                            if (isVisible && c.Has(CONTENT))
                            {
                                //Dokument parsen
                                string contentText = c.GetString(CONTENT);
                                var    contentJson = GetJsonArray(contentText);
                                if (contentJson == null)
                                {
                                    break;
                                }

                                var attachmentList = new List <EntryAttachment>();
                                for (int j = 0; j < contentJson.Length(); j++)
                                {
                                    const string WEBPARTS = "webPartData";
                                    if (contentJson.GetJSONObject(j).Has(WEBPARTS))
                                    {
                                        var webPartData = contentJson.GetJSONObject(j).GetJSONObject(WEBPARTS);
                                        if (webPartData != null)
                                        {
                                            string webPartId = webPartData.GetString("id");

                                            switch (webPartId)
                                            {
                                            case "b7dd04e1-19ce-4b24-9132-b60a1c2b910d":

                                                //Eingebettetes Dokument --> Als Anhang speichern
                                                if (!webPartData.Has("properties") || !webPartData.GetJSONObject("properties").Has("file"))
                                                {
                                                    break;
                                                }

                                                string fileUrl  = webPartData.GetJSONObject("properties").GetString("file");
                                                string fileName = Path.GetFileName(fileUrl);
                                                attachmentList.Add(new EntryAttachment(fileName, fileUrl, false));

                                                break;

                                            case "6410b3b6-d440-4663-8744-378976dc041e":

                                                //Link --> Wenn Datei als Anhang, sonst als Hyperlink
                                                if (!webPartData.Has("serverProcessedContent") ||
                                                    !webPartData.GetJSONObject("serverProcessedContent").Has("links") ||
                                                    !webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("links").Has("url"))
                                                {
                                                    break;
                                                }
                                                if (!webPartData.GetJSONObject("serverProcessedContent").Has("searchablePlainTexts") ||
                                                    !webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("searchablePlainTexts").Has("title"))
                                                {
                                                    break;
                                                }

                                                string url        = webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("links").GetString("url");
                                                string link_title = webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("searchablePlainTexts").GetString("title");

                                                if (url.StartsWith("/:"))
                                                {
                                                    url = _url_malteserHost + url;
                                                }

                                                attachmentList.Add(new EntryAttachment(link_title, url, true));

                                                break;

                                            case "d1d91016-032f-456d-98a4-721247c305e8":

                                                //Bild --> Bild als Anhang aufnehmen
                                                if (!webPartData.Has("serverProcessedContent") ||
                                                    !webPartData.GetJSONObject("serverProcessedContent").Has("imageSources") ||
                                                    !webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("imageSources").Has("imageSource"))
                                                {
                                                    break;
                                                }

                                                string pic_url = webPartData.GetJSONObject("serverProcessedContent").GetJSONObject("imageSources").GetString("imageSource");
                                                if (pic_url.StartsWith("/"))
                                                {
                                                    pic_url = _url_malteserHost + pic_url;
                                                }

                                                string pic_filename = Path.GetFileName(pic_url);
                                                if (pic_filename.ToLower().StartsWith("visualtemplateimage"))
                                                {
                                                    break;
                                                }

                                                attachmentList.Add(new EntryAttachment(pic_filename, pic_url, false));

                                                break;

                                            default:

                                                string content = webPartData.ToString();
                                                Console.WriteLine(content);

                                                break;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (contentJson.GetJSONObject(j).Has("innerHTML") &&
                                            contentJson.GetJSONObject(j).Has("controlType") && contentJson.GetJSONObject(j).GetInt("controlType") == 4)
                                        {
                                            string bodytext = contentJson.GetJSONObject(j).GetString("innerHTML");
                                            bodytext = Helper.Converter.GetPlainOfHtml(bodytext);
                                            body    += bodytext;
                                        }
                                    }
                                }

                                FeedEntry entry = new FeedEntry(key, title, date, author, body, attachmentList);
                                if (!string.IsNullOrEmpty(body) || attachmentList.Count > 0)
                                {
                                    listFeed.Add(entry);
                                }
                            }
                        }

                        TBL.UpdateEntries(listFeed, doNotify);

                        return(SharepointAPIState.OK);    //InvokeStateChanged(SharepointAPIState.OK); return;
                    }

                    return(SharepointAPIState.SERVER_ERROR);    //InvokeStateChanged(SharepointAPIState.SERVER_ERROR); return;
                }
            }
            catch (Exception)
            {
                return(SharepointAPIState.SERVER_ERROR); //InvokeStateChanged(SharepointAPIState.SERVER_ERROR); return;
            }
        }