/
Program.cs
77 lines (67 loc) · 2.08 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Linq;
using System.ServiceModel.Syndication;
using System.Text;
using System.Xml;
using CommandLine;
namespace InstaFeed
{
public class Program
{
public static void Main(string[] args)
{
var options = new CommandLineOptions();
var parser = new CommandLineParser(new CommandLineParserSettings(
false /*case sensitive*/,
false /*mutually exclusive*/,
true /*ignore unknown arguments*/,
Console.Error));
if (!parser.ParseArguments(args, options))
Environment.Exit(1);
Instapaper feeder = new Instapaper
{
Username = options.Username,
Password = options.Password
};
feeder.OnMessage += (_, e) => Console.WriteLine(e.Message);
foreach (var commandString in options.CommandsList)
{
CommandLineOptions.Commands command;
if(!Enum.TryParse(commandString, true /*ignore case*/, out command))
continue;
switch (command)
{
case CommandLineOptions.Commands.list:
{
feeder.Directories.ForEach(d => Console.WriteLine(d.Name));
break;
}
case CommandLineOptions.Commands.rss:
{
var feedItems = (options.IncludeDirectories.Count == 0
? feeder.Directories
: feeder.Directories.Where(directory => options.IncludeDirectories.Contains(directory.Name, StringComparer.OrdinalIgnoreCase)))
.SelectMany(d => d.GetFeedItems());
SyndicationFeed feed = new SyndicationFeed(feedItems);
using (var feedWriter = new XmlTextWriter(Environment.ExpandEnvironmentVariables(options.OutputFileName), Encoding.UTF8))
{
feed.SaveAsRss20(feedWriter);
}
break;
}
case CommandLineOptions.Commands.archive:
{
var directories = options.IncludeDirectories.Count == 0
? feeder.Directories
: feeder.Directories.Where(directory => options.IncludeDirectories.Contains(directory.Name, StringComparer.OrdinalIgnoreCase));
foreach (var directory in directories)
directory.ArchivateAll();
break;
}
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
}