public IScore FromXml(MindTouch.Xml.XDoc aXml) { XScore xscore = new XScore(aXml); JScore js = new JScore(); js["codageParIntervalle"] = xscore.GetCodageParIntervalle(); js["codageMelodiqueRISM"] = xscore.GetCodageMelodiqueRISM(); js["verses"] = xscore.GetText(); js["title"] = xscore.MovementTitle; js["composer"] = xscore.Identification.Composer; return js; }
private Yield AttachMusicXmlHelper(IScore aScore, XDoc aMusicXmlDoc, bool overwriteMusicXmlValues, Result<IScore> aResult) { XScore musicXml = new XScore(aMusicXmlDoc); bool hasNotes = false; foreach (var p in musicXml.Parts) { foreach (var m in p.Measures) { if (m.Notes.Count() > 0) { hasNotes = true; break; } } if(hasNotes) break; } if(!hasNotes) { aResult.Return(aScore); yield break; } if (overwriteMusicXmlValues) { aScore.CodageMelodiqueRISM = musicXml.GetCodageMelodiqueRISM(); aScore.CodageParIntervalles = musicXml.GetCodageParIntervalle(); //aScore.Title = musicXml.MovementTitle; //aScore.Composer = musicXml.Identification.Composer; aScore.Verses = musicXml.GetText(); } Result<IScore> result = new Result<IScore>(); if (aScore.Id != null) { yield return Update(aScore.Id, aScore.Rev, aScore, result); } else { yield return Insert(aScore, result); } using(TemporaryFile inputFile = new TemporaryFile(".xml",false)) using(TemporaryFile outputFile = new TemporaryFile(".png",false)) { theLogger.Info("Saving xdoc to " + inputFile.Path); File.Delete(inputFile.Path); aMusicXmlDoc.Save(inputFile.Path); theLogger.Info("XDoc saved"); theLogger.Info("Getting Converter and converting"); //yield return Context.Current.Instance.SourceController.Exists("bla", new Result<bool>()); IList<string> pngsFilePath = Context.Current.Instance.ConverterFactory.GetConverter(MimeType.PNG).Convert(inputFile.Path, outputFile.Path); int i = 1; foreach (string pngFile in pngsFilePath) { using(Stream pngStream = File.OpenRead(pngFile)) { yield return AddAttachment(result.Value.Id, pngStream,pngStream.Length, "$partition" + i + ".png", new Result<bool>()); } File.Delete(pngFile); i++; } } //attach music xml to the created /updated score using(Stream stream = new MemoryStream(aMusicXmlDoc.ToBytes())) { yield return AddAttachment(result.Value.Id, stream,stream.Length, "$musicxml.xml", new Result<bool>()); } aResult.Return(result.Value); }
public Result<IScore> AttachMusicXml(IScore aScore, MindTouch.Xml.XDoc aMusicXmlDoc, bool overwriteMusicXmlValues, Result<IScore> aResult) { if (!overwriteMusicXmlValues) { XScore musicXml = new XScore(aMusicXmlDoc); aScore.CodageMelodiqueRISM = musicXml.GetCodageMelodiqueRISM(); aScore.CodageParIntervalles = musicXml.GetCodageParIntervalle(); aScore.Title = musicXml.MovementTitle; aScore.Composer = musicXml.Identification.Composer; aScore.Verses = musicXml.GetText(); } score = aScore; attachment = new MemoryStream(aMusicXmlDoc.ToBytes()); aResult.Return(score); return aResult; }