public GoogleIO2012Helper(object context) { this.context = context; try { presentationsHelper = new PresentationsHelper(context); } catch (Exception) { ((BaseActivity)context).ShowErrorMsg((context as Activity).GetText(Resource.String.ErrorNoExternalStorage)); } presentationsHelper = new PresentationsHelper(context); }
protected override void OnCreate(Bundle bundle) { base.OnCreate (bundle); Logging.Log (this, Logging.LoggingTypeDebug, "OnCreate()"); SetContentView(Resource.Layout.Edit); presentationsHelper = new PresentationsHelper (this); Display display = WindowManager.DefaultDisplay; Point size = new Point (); display.GetSize (size); int screenWidth = size.X; int screenHeight = size.Y; // define animations DefineAnimations (screenWidth); // set default values llChoosePresentation = FindViewById<LinearLayout> (Resource.Id.llChoosePresentation); llPresentationInfo = FindViewById<LinearLayout> (Resource.Id.llPresentationInfo); llChoosePresentation.SetX(0); llChoosePresentation.LayoutParameters = new RelativeLayout.LayoutParams (300, screenHeight); llPresentationInfo.SetX (300); llPresentationInfo.LayoutParameters = new RelativeLayout.LayoutParams (screenWidth - 300, screenHeight); selectedLongClickItemPosition= -1; lvSlides = FindViewById<ListView>(Resource.Id.lvSlides); lvSlides.ItemClick += LvSlides_ItemClick; LoadSlidesList (); RegisterForContextMenu(lvSlides); }
public bool RenderPresentation(Guid presentationUID) { bool ret = false; string content = null; // Dateipfad zusammenbauen PresentationsHelper presentationHelper = new PresentationsHelper(this.context); string contentFolder = Path.Combine(presentationHelper.PresentationsFolder, presentationUID.ToString()); contentFolder = Path.Combine(contentFolder, "scripts"); contentFolder = Path.Combine(contentFolder, "md"); // load base.html string baseFilename = Path.Combine(contentFolder, "base.html"); if (!File.Exists(baseFilename)) return false; // laod slides.md string slidesFilename = Path.Combine(contentFolder, "slides.md"); if (!File.Exists(slidesFilename)) return false; string baseContent; string slidesContent; // Dateien laden TextReader trBase = new StreamReader(baseFilename); baseContent = trBase.ReadToEnd(); trBase.Close(); TextReader trSlides = new StreamReader(slidesFilename); slidesContent = trSlides.ReadToEnd(); trSlides.Close(); // WebRequest string url = "https://ws-fp-app.appspot.com/"; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.CookieContainer = new CookieContainer(); request.Headers.Add(HttpRequestHeader.AcceptCharset, "utf-8"); request.Headers.Add(HttpRequestHeader.AcceptLanguage, System.Threading.Thread.CurrentThread.CurrentUICulture.Name + "," + System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; //Wenn ein Proxy im System eingestellt ist, diesen auch nutzen #if MONODROID string proxyHost = Android.Net.Proxy.DefaultHost; if(!String.IsNullOrEmpty(proxyHost)) request.Proxy = new WebProxy(proxyHost, Android.Net.Proxy.DefaultPort); #endif // Postdaten senden request.Method = WebRequestMethods.Http.Post; request.ContentType = "application/x-www-form-urlencoded"; string postParam = "base=" + System.Web.HttpUtility.UrlEncode(baseContent); postParam += "&slides=" + System.Web.HttpUtility.UrlEncode(slidesContent); byte[] byteArray = Encoding.UTF8.GetBytes(postParam); request.ContentLength = byteArray.Length; Stream reqStream = request.GetRequestStream(); reqStream.Write(byteArray, 0, byteArray.Length); reqStream.Close(); try { using(HttpWebResponse response = request.GetResponse() as HttpWebResponse) { if(response.StatusCode == HttpStatusCode.OK) { Encoding encoding = Encoding.UTF8; try { if (!String.IsNullOrEmpty(response.CharacterSet)) encoding = Encoding.GetEncoding(response.CharacterSet); } catch(Exception ex) { Logging.Log(this, Logging.LoggingTypeError, "Unbekanntes Encoding", ex); } using (Stream resStream = response.GetResponseStream()) { StreamReader reader = new StreamReader(resStream, encoding); content = reader.ReadToEnd(); } } } } catch(WebException ex) { Logging.Log(this, Logging.LoggingTypeError, "Render Error", ex); } if (!String.IsNullOrEmpty(content)) { TextWriter tw = new StreamWriter(Path.Combine(Path.Combine(new PresentationsHelper(this.context).PresentationsFolder, presentationUID.ToString()), "template.html"), false); tw.Write(content); tw.Flush(); tw.Close(); ret = true; } return ret; }
public void RenamePresentation(Presentation presentation) { Activity activity = this.context as Activity; // Per Dialog den Namen der neuen Presentation abfragen AlertDialog.Builder dialog = new AlertDialog.Builder(activity); dialog.SetTitle(activity.GetText(Resource.String.DlgRenamePresentationTitle)); dialog.SetMessage(activity.GetText(Resource.String.DlgRenamePresentationText)); dialog.SetCancelable(true); EditText etName = new EditText(activity); etName.SetSingleLine(true); dialog.SetView(etName); dialog.SetPositiveButton(activity.GetText(Resource.String.DlgRenamePresentationErstellen), delegate { string name = etName.Text.Trim(); if (String.IsNullOrEmpty(name)) { // Fehlermeldung anzeigen ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.DlgPresentationErrorNoName)); } try { presentationsHelper = new PresentationsHelper(this.context); } catch (Exception) { ((BaseActivity)activity).ShowErrorMsg(activity.GetText(Resource.String.ErrorNoExternalStorage)); } presentationsHelper.Rename(presentation.PresentationUID, name); ListView lvSlides = activity.FindViewById<ListView>(Resource.Id.lvSlides); foreach (Presentation p in (((SlidesAdapter)lvSlides.Adapter).GetData)) { if (p.PresentationUID == presentation.PresentationUID) { p.Name = name; break; } } // Liste aktualisieren if (this.context.GetType() == typeof(EditActivity)) { EditActivity editActivity = this.context as EditActivity; editActivity.LoadSlidesList(); } }); dialog.SetNegativeButton(activity.GetText(Resource.String.Cancel), delegate { }); dialog.Show(); }
public Task<string> AppStartAsync() { return Task.Factory.StartNew (() => { // Datenbank anlegen / updaten new DBSchema ().UpdateDBSchema (); #if MONODROID Android.App.Activity activity = (Android.App.Activity)context; #endif PresentationsHelper presentationsHelper = null; try { presentationsHelper = new PresentationsHelper (this); } catch (Exception ex) { Logging.Log (this, Logging.LoggingTypeError, "Fehler beim instanziieren des PresentationsHelper()", ex); #if MONODROID return activity.GetText (Resource.String.ErrorNoExternalStorage); #endif } DirectoryInfo dirInfo = new DirectoryInfo (presentationsHelper.PresentationsFolder); List<Presentation> presentations = new DBPresentation ().Select (null); // Nicht registrierte Präsentationen löschen foreach (DirectoryInfo dir in dirInfo.GetDirectories()) { if (presentations.Count (p => Path.Combine (presentationsHelper.PresentationsFolder, p.PresentationUID.ToString ()) == dir.ToString ()) == 0) { // Kann das Verzeichnis als Präsentation erkannt und importiert werden? Guid presentationUID; if (Guid.TryParse (dir.Name, out presentationUID)) { // Ist es vielleicht eine "GoogleIO2012" Präsentation? if (File.Exists (Path.Combine (dir.ToString (), "slide_config.js"))) { // Scheint so // Wird also als GoogleIO2012 importiert GoogleIO2012Helper helper = new GoogleIO2012Helper (context); GoogleIO2012Config config = helper.LoadConfig (presentationUID); if (config.settings != null && !String.IsNullOrEmpty (config.settings.title)) { presentationsHelper.CreateNew (presentationUID, config.settings.title, Presentation.Typ.GoogleIO2012Slides); presentations.Add (new Presentation { PresentationUID = presentationUID, Name = config.settings.title, DateCreate = DateTime.Now, Type = Presentation.Typ.GoogleIO2012Slides }); } else dir.Delete (true); } else { // Ist doch ein unbekannter Typ dir.Delete (true); } } else { // Es ist wohl keine Präsentation dir.Delete (true); } } } // Gelöschte Präsentationen aus der Datenbank entfernen foreach (Presentation pres in presentations) { if (!Directory.Exists (Path.Combine (presentationsHelper.PresentationsFolder, pres.PresentationUID.ToString ()))) new DBPresentation ().Delete (pres.PresentationUID); } // Wenn es noch keine Präsentation gibt, die mitgelieferte als Demo / Vorlage kopieren if (dirInfo.GetDirectories ().Length == 0) { Guid pUID = Guid.NewGuid (); string pFolder = Path.Combine (presentationsHelper.PresentationsFolder, pUID.ToString ()); try { Directory.CreateDirectory (pFolder); Dictionary<string, List<string>> dictTemplates = new Dictionary<string, List<string>> (); dictTemplates.Add ("io-2012-slides", new List<string> { "images/barchart.png", "images/chart.png", "images/chrome-logo-tiny.png", "images/google_developers_icon_128.png", "images/google_developers_logo.png", "images/google_developers_logo_tiny.png", "images/google_developers_logo_white.png", "images/io2012_logo.png", "images/sky.jpg", "js/polyfills/classList.min.js", "js/polyfills/dataset.min.js", "js/polyfills/history.min.js", "js/prettify/lang-apollo.js", "js/prettify/lang-clj.js", "js/prettify/lang-css.js", "js/prettify/lang-go.js", "js/prettify/lang-hs.js", "js/prettify/lang-lisp.js", "js/prettify/lang-lua.js", "js/prettify/lang-ml.js", "js/prettify/lang-n.js", "js/prettify/lang-proto.js", "js/prettify/lang-scala.js", "js/prettify/lang-sql.js", "js/prettify/lang-tex.js", "js/prettify/lang-vb.js", "js/prettify/lang-vhdl.js", "js/prettify/lang-wiki.js", "js/prettify/lang-xq.js", "js/prettify/lang-yaml.js", "js/prettify/prettify.css", "js/prettify/prettify.js", "js/hammer.js", "js/modernizr.custom.45394.js", "js/order.js", "js/require-1.0.8.min.js", "js/slide-controller.js", "js/slide-deck.js", "js/slides.js", "scripts/md/base.html", "scripts/md/README.md", "scripts/md/render.py", "scripts/md/slides.md", "theme/css/default.css", "theme/css/phone.css", "theme/scss/_base.scss", "theme/scss/default.scss", "theme/scss/phone.scss", "app.yaml", "config.rb", "README.html", "README.md", "serve.sh", "slide_config.js", "template.html" }); string filename = null; foreach (KeyValuePair<string, List<string>> kvpTemplate in dictTemplates) { foreach (string f in kvpTemplate.Value) { filename = Path.Combine (pFolder, f); using (Stream stream = activity.Assets.Open("FP.Assets/" + kvpTemplate.Key + "/" + f)) { if (f.Contains ("/")) { int nIndex = filename.LastIndexOf ('/'); string dirName = filename.Substring (0, nIndex); Directory.CreateDirectory (dirName); } Stream swOut = new FileStream (filename, FileMode.CreateNew); byte[] buffer = new byte[1024]; int b = buffer.Length; int length; while ((length = stream.Read(buffer, 0, b)) > 0) { swOut.Write (buffer, 0, length); } swOut.Flush (); swOut.Close (); stream.Close (); } } // Die Präsentation in der DB registrieren string name = null; Presentation.Typ typ; switch (kvpTemplate.Key) { case "io-2012-slides": typ = Presentation.Typ.GoogleIO2012Slides; name = ((Android.App.Activity)context).GetText (De.Dhoffmann.Mono.FullscreenPresentation.Droid.Resource.String.PresentationTyp_GoogleIO2012Slides); break; default: throw new NotImplementedException(); } presentationsHelper.CreateNew (pUID, name, typ); } } catch (Exception) { // Wenn etwas schief läuft den Ordner wieder aufräumen if (Directory.Exists (presentationsHelper.PresentationsFolder)) Directory.Delete (presentationsHelper.PresentationsFolder, true); return activity.GetText (De.Dhoffmann.Mono.FullscreenPresentation.Droid.Resource.String.DlgNewPresentationError); } } return null; }); }