// private void DownloadProject
        private async Task SendProjectAsync(string szProjectName, Action<Boolean, Boolean, string> cb)
        {
            if (projects.Any(proj => { return proj.Equals(szProjectName); }))
            {
                // ToDo: open the overlay with the server settings
                // here we expect the current settings to be correct.
                cb(false, false, "sende Projekt " + szProjectName);
                ProjectSql tmpProject = new ProjectSql(szProjectName);
                List<Bild> bilder =  tmpProject.GetBilderChanged();
                Boolean bError = false;
                // send all changed images
                cb(false, false, "sende " + bilder.Count.ToString() + " Bilder");
                foreach (var bild in bilder)
                {
                    cb(false, false, "sende " + bild.Name);
                    bError = ! await ProjectUtil.SendFileAsync(szProjectName, Path.GetFileName(bild.Name));
                    if( bError)
                    {
                        break;
                    }
                }
                if (!bError)
                {
                    // send all changed data
                    foreach (var bild in bilder)
                    {
                        cb(false, false, "sende geänderte Daten für " + bild.Name);

                        BildInfo bi = tmpProject.GetBildInfo(bild.Name, DateTime.Now);

                        string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(bi);
                        if (await ProjectUtil.SendJsonAsync(szProjectName, szJson))
                        {
                            tmpProject.ClearStatus(bild.ID, STATUS.CHANGED);
                        }

                    }
                }
                string szMessage = "";
                if( bError)
                {
                    szMessage = "Es gab einen internen Fehler.";
                }
                cb(true, bError, szMessage);

            }
        }
Exemple #2
0
        private void ShowMetadata()
        {
            Overlay overlay = new Overlay(grdOverlay);

            // if (lstPicker == null)
            {
                BildInfo bi = curProjectSql.GetBildInfo(szImageName, DateTime.Now);
                if (lastBi != null)
                {
                    if (!bi.bBildIdFound)
                    {
                        bi.GebaeudeId = lastBi.GebaeudeId;
                        bi.EtageId    = lastBi.EtageId;
                        bi.WohnungId  = lastBi.WohnungId;
                        bi.ZimmerId   = lastBi.ZimmerId;
                    }
                }
                List <Gebaeude> gebaeudeListe = curProjectSql.sqlGebaeude.GetListe();
                overlay.Reset();
                grdOverlay.Children.Clear();
                Picker pGebaeude = overlay.AddPicker(overlay.iRow.ToString(), "Gebäude", ID_GEBAEUDE, true, (picker, szEntry) => {
                    Gebaeude newGebaeude = curProjectSql.sqlGebaeude.Ensure(szEntry) as Gebaeude;
                    if (!gebaeudeListe.Any(g => g.ID == newGebaeude.ID))
                    {
                        gebaeudeListe.Add(newGebaeude);
                        picker.ItemsSource  = null;
                        picker.ItemsSource  = gebaeudeListe.OrderBy(o => o.Bezeichnung).ToList();
                        picker.SelectedItem = newGebaeude;
                    }
                });
                pGebaeude.ItemsSource        = gebaeudeListe.OrderBy(o => o.Bezeichnung).ToList();
                pGebaeude.ItemDisplayBinding = new Binding("Bezeichnung");
                pGebaeude.SelectedItem       = gebaeudeListe.Find(x => x.ID == bi.GebaeudeId);

                List <Etage> etageListe = curProjectSql.sqlEtage.GetListe();
                Picker       pEtage     = overlay.AddPicker(overlay.iRow.ToString(), "Etage", ID_ETAGE, true, (picker, szEntry) => {
                    Etage newEtage = curProjectSql.sqlEtage.Ensure(szEntry) as Etage;
                    if (!etageListe.Any(g => g.ID == newEtage.ID))
                    {
                        etageListe.Add(newEtage);
                        picker.ItemsSource  = null;
                        picker.ItemsSource  = etageListe.OrderBy(o => o.Bezeichnung).ToList();
                        picker.SelectedItem = newEtage;
                    }
                });
                pEtage.ItemsSource        = etageListe.OrderBy(o => o.Bezeichnung).ToList();
                pEtage.ItemDisplayBinding = new Binding("Bezeichnung");
                pEtage.SelectedItem       = etageListe.Find(x => x.ID == bi.EtageId);

                List <Wohnung> wohnungListe = curProjectSql.sqlWohnung.GetListe();
                Picker         pWohnung     = overlay.AddPicker(overlay.iRow.ToString(), "Wohnung", ID_WOHNUNG, true, (picker, szEntry) => {
                    Wohnung newWohnung = curProjectSql.sqlWohnung.Ensure(szEntry) as Wohnung;
                    if (!wohnungListe.Any(g => g.ID == newWohnung.ID))
                    {
                        wohnungListe.Add(newWohnung);
                        picker.ItemsSource  = null;
                        picker.ItemsSource  = wohnungListe.OrderBy(o => o.Bezeichnung).ToList();;
                        picker.SelectedItem = newWohnung;
                    }
                });
                pWohnung.ItemsSource        = wohnungListe.OrderBy(o => o.Bezeichnung).ToList();;
                pWohnung.ItemDisplayBinding = new Binding("Bezeichnung");
                pWohnung.SelectedItem       = wohnungListe.Find(x => x.ID == bi.WohnungId);

                List <Zimmer> zimmerListe = curProjectSql.sqlZimmer.GetListe();
                Picker        pZimmer     = overlay.AddPicker(overlay.iRow.ToString(), "Zimmer", ID_ZIMMER, true, (picker, szEntry) => {
                    Zimmer newZimmer = curProjectSql.sqlZimmer.Ensure(szEntry) as Zimmer;
                    if (!zimmerListe.Any(g => g.ID == newZimmer.ID))
                    {
                        zimmerListe.Add(newZimmer);
                        picker.ItemsSource  = null;
                        picker.ItemsSource  = zimmerListe.OrderBy(o => o.Bezeichnung).ToList();;
                        picker.SelectedItem = newZimmer;
                    }
                });
                pZimmer.ItemsSource        = zimmerListe.OrderBy(o => o.Bezeichnung).ToList();;
                pZimmer.ItemDisplayBinding = new Binding("Bezeichnung");
                pZimmer.SelectedItem       = zimmerListe.Find(x => x.ID == bi.ZimmerId);

                kommentarEntry = overlay.AddInput("", "", bi.KommentarBezeichnung, "COMMENT");
                var submitButton = overlay.AddButton("speichern");
                submitButton.Clicked += (senderx, e2) =>
                {
                    var selGebaeude = pGebaeude.SelectedItem as Gebaeude;
                    var selEtage    = pEtage.SelectedItem as Etage;
                    var selWohnung  = pWohnung.SelectedItem as Wohnung;
                    var selZimmer   = pZimmer.SelectedItem as Zimmer;

                    foreach (var child in grdOverlay.Children)
                    {
                        Entry entry = child as Entry;
                        if (entry != null && entry.IsVisible)
                        {
                            if (entry.StyleId.Equals(ID_GEBAEUDE) && selGebaeude == null)
                            {
                                ((IEntryController)entry).SendCompleted();
                                selGebaeude = pGebaeude.SelectedItem as Gebaeude;
                            }
                            else if (entry.StyleId.Equals(ID_ETAGE) && selEtage == null)
                            {
                                ((IEntryController)entry).SendCompleted();
                                selEtage = pEtage.SelectedItem as Etage;
                            }
                            else if (entry.StyleId.Equals(ID_WOHNUNG) && selWohnung == null)
                            {
                                ((IEntryController)entry).SendCompleted();
                                selWohnung = pWohnung.SelectedItem as Wohnung;
                            }
                            else if (entry.StyleId.Equals(ID_ZIMMER) && selZimmer == null)
                            {
                                ((IEntryController)entry).SendCompleted();
                                selZimmer = pZimmer.SelectedItem as Zimmer;
                            }
                        }
                    }


                    curProjectSql.sqlGebaeude.Set(bi.BildId, selGebaeude != null ? selGebaeude.ID : -1);
                    curProjectSql.sqlEtage.Set(bi.BildId, selEtage != null ? selEtage.ID : -1);
                    curProjectSql.sqlWohnung.Set(bi.BildId, selWohnung != null ? selWohnung.ID : -1);
                    curProjectSql.sqlZimmer.Set(bi.BildId, selZimmer != null ? selZimmer.ID : -1);

                    curProjectSql.SetComment(szImageName, kommentarEntry.Text);

                    lastBi = curProjectSql.GetBildInfo(szImageName, DateTime.Now);
                    overlay.Close();
                };

                overlay.AddCancelX();
            }

            overlay.Show();
        }
        public wsResponse SendResponse(HttpListenerRequest request)
        {
            Dictionary <string, string> postParams = new Dictionary <string, string>();
            wsResponse swRes = new wsResponse();

            string szProjectname = "";
            string szFilename    = "";
            string szHasJson     = "";

            if (request.QueryString["project"] != null)
            {
                szProjectname = request.QueryString["project"].ToString();
            }
            if (request.QueryString["file"] != null)
            {
                szFilename = request.QueryString["file"].ToString();
            }
            if (request.QueryString["json"] != null)
            {
                szHasJson = request.QueryString["json"].ToString();
            }

            swRes.ba = Encoding.UTF8.GetBytes("{}");
            if (request.HttpMethod.Equals("POST", StringComparison.InvariantCultureIgnoreCase))
            {
                if (string.IsNullOrEmpty(szProjectname))
                {
                    JsonError je = new JsonError {
                        szMessage = "POST requires a project "
                    };
                    ShowError(je.szMessage);

                    string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(je);
                    swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                    swRes.szMinetype = "text/json";
                }
                else if (string.IsNullOrEmpty(szHasJson) && string.IsNullOrEmpty(szFilename))
                {
                    JsonError je = new JsonError {
                        szMessage = "POST requires both project and file "
                    };
                    ShowError(je.szMessage);

                    string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(je);
                    swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                    swRes.szMinetype = "text/json";
                }
                else if (!string.IsNullOrEmpty(szHasJson))
                {
                    string szJson = "";
                    System.Text.Encoding encoding = request.ContentEncoding;
                    using (StreamReader sr = new StreamReader(request.InputStream, encoding))
                    {
                        szJson = sr.ReadToEnd();
                    }
                    request.InputStream.Close();
                    try
                    {
                        BildInfo bi = Newtonsoft.Json.JsonConvert.DeserializeObject <BildInfo>(szJson);
                        if (bi.CaptureDate == null)
                        {
                            bi.CaptureDate = DateTime.Now;
                        }
                        ProjectSql tmpProject = new ProjectSql(szProjectname, Config.current.szDbSuffix);
                        var        biResult   = tmpProject.GetBildId(bi.BildName, bi.CaptureDate);
                        tmpProject.SetCaptureDate(biResult.BildId, bi.CaptureDate);

                        Gebaeude gebauede = tmpProject.sqlGebaeude.Ensure(bi.GebaeudeBezeichnung) as Gebaeude;
                        Etage    etage    = tmpProject.sqlEtage.Ensure(bi.EtageBezeichnung) as Etage;
                        Wohnung  wohnung  = tmpProject.sqlWohnung.Ensure(bi.WohnungBezeichnung) as Wohnung;
                        Zimmer   zimmer   = tmpProject.sqlZimmer.Ensure(bi.ZimmerBezeichnung) as Zimmer;
                        if (gebauede != null)
                        {
                            tmpProject.sqlGebaeude.Set(biResult.BildId, gebauede.ID);
                        }
                        if (etage != null)
                        {
                            tmpProject.sqlEtage.Set(biResult.BildId, etage.ID);
                        }
                        if (wohnung != null)
                        {
                            tmpProject.sqlWohnung.Set(biResult.BildId, wohnung.ID);
                        }
                        if (zimmer != null)
                        {
                            tmpProject.sqlZimmer.Set(biResult.BildId, zimmer.ID);
                        }
                        tmpProject.SetComment(biResult.BildId, bi.KommentarBezeichnung);
                    }
                    catch (Exception ex)
                    {
                        JsonError je = new JsonError {
                            szMessage = "POST " + ex.ToString()
                        };
                        ShowError(je.szMessage);

                        string szErrJson = Newtonsoft.Json.JsonConvert.SerializeObject(je);
                        swRes.ba         = Encoding.UTF8.GetBytes(szErrJson);
                        swRes.szMinetype = "text/json";
                    }
                }
                else
                {
                    try
                    {
                        string szFullPath = System.IO.Path.Combine(XCamera.Util.Config.current.szBasedir, szProjectname, Config.current.szPicSuffix);
                        if (!Directory.Exists(szFullPath))
                        {
                            Directory.CreateDirectory(szFullPath);
                        }
                        string szFullFilename = System.IO.Path.Combine(szFullPath, szFilename);
                        ShowInfo("recieving " + szFullFilename);

                        using (FileStream fs = new FileStream(szFullFilename, FileMode.Create, FileAccess.Write))
                        {
                            request.InputStream.CopyTo(fs);
                        }
                        request.InputStream.Close();
                        ProjectSql tmpProject = new ProjectSql(szProjectname, Config.current.szDbSuffix);
                        tmpProject.AddBild(szFilename);
                    }
                    catch (Exception ex)
                    {
                        JsonError je = new JsonError {
                            szMessage = "POST " + ex.ToString()
                        };
                        ShowError(je.szMessage);

                        string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(je);
                        swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                        swRes.szMinetype = "text/json";
                    }
                }
            }
            else
            {
                if (string.IsNullOrEmpty(szProjectname))
                {
                    ShowInfo("sending project list");
                    string[]           szProjects = Directory.GetDirectories(XCamera.Util.Config.current.szBasedir, "*.", SearchOption.TopDirectoryOnly);
                    List <JsonProject> jProjects  = new List <JsonProject>();
                    foreach (var szProject in szProjects)
                    {
                        jProjects.Add(new JsonProject {
                            szProjectName = System.IO.Path.GetFileNameWithoutExtension(szProject),
                            lSize         = GetDirectorySize(0, System.IO.Path.Combine(XCamera.Util.Config.current.szBasedir, szProject))
                        });
                    }

                    string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(jProjects);
                    swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                    swRes.szMinetype = "text/json";
                }
                else if (!string.IsNullOrWhiteSpace(szFilename))
                {
                    string szFullFilename = System.IO.Path.Combine(XCamera.Util.Config.current.szBasedir, szProjectname, szFilename);
                    ShowInfo("sending  " + szFullFilename);
                    if (File.Exists(szFullFilename))
                    {
                        if (System.IO.Path.GetExtension(szFullFilename).Equals(".jpg", StringComparison.InvariantCultureIgnoreCase))
                        {
                            swRes.ba         = System.IO.File.ReadAllBytes(szFullFilename);
                            swRes.szMinetype = "image/jpeg";
                        }
                        else
                        {
                            // swRes.szMinetype = "Application/x-sqlite3";
                            ProjectSql tmpProject = new ProjectSql(szProjectname);
                            var        metaData   = tmpProject.GetMetaData();
                            string     szJson     = Newtonsoft.Json.JsonConvert.SerializeObject(metaData);
                            swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                            swRes.szMinetype = "text/json";
                        }
                    }
                    else
                    {
                        JsonError je = new JsonError {
                            szMessage = "File not found " + szFullFilename
                        };
                        ShowError(je.szMessage);
                        string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(je);
                        swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                        swRes.szMinetype = "text/json";
                    }
                }
                else if (!string.IsNullOrEmpty(szProjectname))
                {
                    ShowInfo("sending project info " + szProjectname);
                    List <JsonProject> jProjects = new List <JsonProject>();

                    jProjects.Add(new JsonProject
                    {
                        szProjectName = System.IO.Path.GetFileNameWithoutExtension(szProjectname),
                        lSize         = GetDirectorySize(0, System.IO.Path.Combine(XCamera.Util.Config.current.szBasedir, szProjectname))
                    });


                    string szJson = Newtonsoft.Json.JsonConvert.SerializeObject(jProjects);
                    swRes.ba         = Encoding.UTF8.GetBytes(szJson);
                    swRes.szMinetype = "text/json";
                }
            }

            return(swRes);
        }