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);
 }
Пример #5
0
        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);
            }
        }