public void Format(InetSongDb db, object props, IWaitDialog wait) { DirectorySongExporterProperties p = (DirectorySongExporterProperties)props; IStreamSongFormatter songfmt = GetStreamFormatter(); string directory = p.FolderName; DirectorySongHolder dsh = new DirectorySongHolder(db.Songs); // nejdrive zapiseme index wait.Message("Zapisuji " + m_indexFileName); if (m_writeIndex) { using (FileStream fsw = new FileStream(Path.Combine(directory, m_indexFileName), FileMode.Create)) { using (StreamWriter fw = new StreamWriter(fsw, m_encoding)) { WriteIndexFile(fw, dsh); } } } // pak skupinove soubory if (m_writeGroups) { foreach (GroupOfSongs grp in dsh.Groups.Values) { string path = Path.Combine(directory, MakeTemplate(m_groupFileMask, grp)); try { Directory.CreateDirectory(Path.GetDirectoryName(path)); } catch (Exception) { } wait.Message("Zapisuji " + path); if (wait.Canceled) return; using (FileStream fsw = new FileStream(path, FileMode.Create)) { using (StreamWriter fw = new StreamWriter(fsw, m_encoding)) { WriteGroupFile(fw, grp, dsh); } } } } // pisne - nejdrive zgrupovane if (m_writeGroupedSongs) { foreach (GroupOfSongs grp in dsh.Groups.Values) { string path = Path.Combine(directory, MakeTemplate(m_groupedSongsFileMask, grp)); try { Directory.CreateDirectory(Path.GetDirectoryName(path)); } catch (Exception) { } wait.Message("Zapisuji " + path); if (wait.Canceled) return; InetSongDb tmp = new InetSongDb(); foreach (SongData song in grp.Songs) { DbTools.AddSongRow(song, tmp); } using (FileStream fw = new FileStream(path, FileMode.Create)) { songfmt.Format(tmp, fw, wait, props); } } } // pisne - po jedne if (m_writeSeparateSongs) { foreach (SongData song in db.Songs) { string path = Path.Combine(directory, MakeTemplate(m_songFileMask, song, dsh)); try { Directory.CreateDirectory(Path.GetDirectoryName(path)); } catch (Exception) { } wait.Message("Zapisuji " + path); if (wait.Canceled) return; InetSongDb tmp = new InetSongDb(); DbTools.AddSongRow(song, tmp); using (FileStream fw = new FileStream(path, FileMode.Create)) { songfmt.Format(tmp, fw, wait, props); } } } }
private void WriteGroupFile(StreamWriter fw, GroupOfSongs grp, DirectorySongHolder dsh) { fw.Write(MakeTemplate(m_groupHeader, grp)); foreach (SongData song in grp.Songs) { fw.Write(MakeTemplate(m_groupSongRepeat, song, dsh)); } fw.Write(MakeTemplate(m_groupFooter, grp)); }
private string MakeTemplate(string tpl, SongData song, DirectorySongHolder dsh) { tpl = tpl.Replace("$[SONGINDEX]", dsh.SongIndexes[song].ToString()); tpl = Templates.MakeTemplate(tpl, song); tpl = MakeTemplate(tpl, dsh.SongGroups[song]); return tpl; }
private void WriteIndexFile(TextWriter fw, DirectorySongHolder dsh) { fw.Write(m_indexHeader); foreach (GroupOfSongs grp in dsh.SortedGroups) { fw.Write(MakeTemplate(m_indexGroupRepeat, grp)); } fw.Write(m_indexBetweenGroupsAndSongs); foreach (SongData song in dsh.Songs) { fw.Write(MakeTemplate(m_indexSongRepeat, song, dsh)); } fw.Write(m_indexFooter); }
public void Run() { m_conn.Open(); SQLiteTransaction t = m_conn.BeginTransaction(); ExecuteSql("CREATE TABLE groupnames (groupname VARCHAR)"); ExecuteSql("CREATE TABLE songnames (id INTEGER PRIMARY KEY, songname VARCHAR, groupname VARCHAR)"); ExecuteSql("CREATE TABLE songdetails (id INTEGER PRIMARY KEY, songtext TEXT, author VARCHAR, remark VARCHAR)"); ExecuteSql("CREATE INDEX songnames_group ON songnames (groupname, id)"); DirectorySongHolder dsh = new DirectorySongHolder(m_xmldb.Songs); foreach (GroupOfSongs grp in dsh.SortedGroups) { m_insertGroup.Parameters[0].Value = grp.Name; m_insertGroup.ExecuteNonQuery(); foreach (SongData song in grp.Songs) { m_insertSongName.Parameters[0].Value = song.LocalID; m_insertSongName.Parameters[1].Value = song.Title; m_insertSongName.Parameters[2].Value = song.GroupName; m_insertSongName.ExecuteNonQuery(); m_insertSongDetail.Parameters[0].Value = song.LocalID; m_insertSongDetail.Parameters[1].Value = song.SongText; m_insertSongDetail.Parameters[2].Value = song.Author; m_insertSongDetail.Parameters[3].Value = song.Remark; m_insertSongDetail.ExecuteNonQuery(); } } t.Commit(); m_conn.Close(); using (FileStream fr = new FileStream(m_filename, FileMode.Open)) { IOTools.CopyStream(fr, m_fw); } }