2013-11-03 23:53:49 +13:00
#region License Information ( GPL v3 )
/ *
ShareX - A program that allows you to take screenshots and share any file type
2020-02-05 20:19:48 +13:00
Copyright ( c ) 2007 - 2020 ShareX Team
2013-11-03 23:53:49 +13:00
This program is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation ; either version 2
of the License , or ( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
Optionally you can also view the license at < http : //www.gnu.org/licenses/>.
* /
#endregion License Information ( GPL v3 )
2014-12-11 09:25:20 +13:00
using ShareX.HelpersLib ;
2016-02-03 23:58:54 +13:00
using System ;
2013-11-03 23:53:49 +13:00
using System.IO ;
using System.Text ;
2014-12-11 09:25:20 +13:00
namespace ShareX.IndexerLib
2013-11-03 23:53:49 +13:00
{
public class IndexerText : Indexer
{
2016-02-03 23:58:54 +13:00
protected StringBuilder sbContent = new StringBuilder ( ) ;
2016-02-03 09:06:22 +13:00
public IndexerText ( IndexerSettings indexerSettings ) : base ( indexerSettings )
2013-11-03 23:53:49 +13:00
{
}
public override string Index ( string folderPath )
{
StringBuilder sbTxtIndex = new StringBuilder ( ) ;
2016-02-03 23:58:54 +13:00
FolderInfo folderInfo = GetFolderInfo ( folderPath ) ;
folderInfo . Update ( ) ;
IndexFolder ( folderInfo ) ;
string index = sbContent . ToString ( ) . Trim ( ) ;
2013-11-03 23:53:49 +13:00
sbTxtIndex . AppendLine ( index ) ;
2016-02-03 23:58:54 +13:00
if ( settings . AddFooter )
2014-03-05 22:24:24 +13:00
{
string footer = GetFooter ( ) ;
sbTxtIndex . AppendLine ( "_" . Repeat ( footer . Length ) ) ;
sbTxtIndex . AppendLine ( footer ) ;
}
2013-11-03 23:53:49 +13:00
return sbTxtIndex . ToString ( ) . Trim ( ) ;
}
2016-02-03 23:58:54 +13:00
protected override void IndexFolder ( FolderInfo dir , int level = 0 )
2013-11-03 23:53:49 +13:00
{
sbContent . AppendLine ( GetFolderNameRow ( dir , level ) ) ;
foreach ( FolderInfo subdir in dir . Folders )
{
2016-02-03 23:58:54 +13:00
if ( settings . AddEmptyLineAfterFolders )
2013-11-03 23:53:49 +13:00
{
sbContent . AppendLine ( ) ;
}
IndexFolder ( subdir , level + 1 ) ;
}
if ( dir . Files . Count > 0 )
{
2016-02-03 23:58:54 +13:00
if ( settings . AddEmptyLineAfterFolders )
2013-11-03 23:53:49 +13:00
{
sbContent . AppendLine ( ) ;
}
foreach ( FileInfo fi in dir . Files )
{
sbContent . AppendLine ( GetFileNameRow ( fi , level + 1 ) ) ;
}
}
}
2016-02-03 23:58:54 +13:00
2016-02-04 00:33:45 +13:00
private string GetFolderNameRow ( FolderInfo dir , int level )
2016-02-03 23:58:54 +13:00
{
string folderNameRow = string . Format ( "{0}{1}" , settings . IndentationText . Repeat ( level ) , dir . FolderName ) ;
if ( settings . ShowSizeInfo & & dir . Size > 0 )
{
folderNameRow + = string . Format ( " [{0}]" , dir . Size . ToSizeString ( settings . BinaryUnits ) ) ;
}
return folderNameRow ;
}
2016-02-04 00:33:45 +13:00
private string GetFileNameRow ( FileInfo fi , int level )
2016-02-03 23:58:54 +13:00
{
string fileNameRow = settings . IndentationText . Repeat ( level ) + fi . Name ;
if ( settings . ShowSizeInfo )
{
fileNameRow + = string . Format ( " [{0}]" , fi . Length . ToSizeString ( settings . BinaryUnits ) ) ;
}
return fileNameRow ;
}
private string GetFooter ( )
{
2016-02-04 11:16:03 +13:00
return $"Generated by ShareX Directory Indexer on {DateTime.UtcNow.ToString(" yyyy - MM - dd ' at ' HH : mm : ss ' UTC ' ")}. Latest version can be downloaded from: {Links.URL_WEBSITE}" ;
2016-02-03 23:58:54 +13:00
}
2013-11-03 23:53:49 +13:00
}
}