├── .gitignore ├── .hgignore ├── Images ├── ScreenShot1.jpg ├── SkypeLogLGG.ico ├── SkypeLogLGG.png ├── SkypeLogLGG.psd └── SkypeLogSLGG.png ├── README.md ├── SkypeLogViewerLGG.sln └── SkypeLogViewerLGG ├── AboutForm.Designer.cs ├── AboutForm.cs ├── AboutForm.resx ├── HelpForm.Designer.cs ├── HelpForm.cs ├── HelpForm.resx ├── MainWindowForm.Designer.cs ├── MainWindowForm.cs ├── MainWindowForm.resx ├── PortableSettings.cs ├── PreferencesForm.Designer.cs ├── PreferencesForm.cs ├── PreferencesForm.resx ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── Resources ├── SkypeLogLGG.png ├── SkypeLogSBLGG.png └── SkypeLogSLGG.png ├── SkypeLogLGG.ico ├── SkypeLogViewerLGG.csproj ├── SkypeLogViewerLGG_TemporaryKey.pfx ├── System.Data.SQLite.dll └── app.config /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | 11 | [Dd]ebug/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | [Bb]in/ 16 | [Oo]bj/ 17 | 18 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 19 | !packages/*/build/ 20 | 21 | # MSTest test Results 22 | [Tt]est[Rr]esult*/ 23 | [Bb]uild[Ll]og.* 24 | 25 | *_i.c 26 | *_p.c 27 | *.ilk 28 | *.meta 29 | *.obj 30 | *.pch 31 | *.pdb 32 | *.pgc 33 | *.pgd 34 | *.rsp 35 | *.sbr 36 | *.tlb 37 | *.tli 38 | *.tlh 39 | *.tmp 40 | *.tmp_proj 41 | *.log 42 | *.vspscc 43 | *.vssscc 44 | .builds 45 | *.pidb 46 | *.log 47 | *.scc 48 | 49 | # Visual C++ cache files 50 | ipch/ 51 | *.aps 52 | *.ncb 53 | *.opensdf 54 | *.sdf 55 | *.cachefile 56 | 57 | # Visual Studio profiler 58 | *.psess 59 | *.vsp 60 | *.vspx 61 | 62 | # Guidance Automation Toolkit 63 | *.gpState 64 | 65 | # ReSharper is a .NET coding add-in 66 | _ReSharper*/ 67 | *.[Rr]e[Ss]harper 68 | 69 | # TeamCity is a build add-in 70 | _TeamCity* 71 | 72 | # DotCover is a Code Coverage Tool 73 | *.dotCover 74 | 75 | # NCrunch 76 | *.ncrunch* 77 | .*crunch*.local.xml 78 | 79 | # Installshield output folder 80 | [Ee]xpress/ 81 | 82 | # DocProject is a documentation generator add-in 83 | DocProject/buildhelp/ 84 | DocProject/Help/*.HxT 85 | DocProject/Help/*.HxC 86 | DocProject/Help/*.hhc 87 | DocProject/Help/*.hhk 88 | DocProject/Help/*.hhp 89 | DocProject/Help/Html2 90 | DocProject/Help/html 91 | 92 | # Click-Once directory 93 | publish/ 94 | 95 | # Publish Web Output 96 | *.Publish.xml 97 | 98 | # NuGet Packages Directory 99 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 100 | #packages/ 101 | 102 | # Windows Azure Build Output 103 | csx 104 | *.build.csdef 105 | 106 | # Windows Store app package directory 107 | AppPackages/ 108 | 109 | # Others 110 | sql/ 111 | *.Cache 112 | ClientBin/ 113 | [Ss]tyle[Cc]op.* 114 | ~$* 115 | *~ 116 | *.dbmdl 117 | *.[Pp]ublish.xml 118 | *.pfx 119 | *.publishsettings 120 | 121 | # RIA/Silverlight projects 122 | Generated_Code/ 123 | 124 | # Backup & report files from converting an old project file to a newer 125 | # Visual Studio version. Backup files are not needed, because we have git ;-) 126 | _UpgradeReport_Files/ 127 | Backup*/ 128 | UpgradeLog*.XML 129 | UpgradeLog*.htm 130 | 131 | # SQL Server files 132 | App_Data/*.mdf 133 | App_Data/*.ldf 134 | 135 | 136 | #LightSwitch generated files 137 | GeneratedArtifacts/ 138 | _Pvt_Extensions/ 139 | ModelManifest.xml 140 | 141 | # ========================= 142 | # Windows detritus 143 | # ========================= 144 | 145 | # Windows image file caches 146 | Thumbs.db 147 | ehthumbs.db 148 | 149 | # Folder config file 150 | Desktop.ini 151 | 152 | # Recycle Bin used on file shares 153 | $RECYCLE.BIN/ 154 | 155 | # Mac desktop service store files 156 | .DS_Store 157 | -------------------------------------------------------------------------------- /.hgignore: -------------------------------------------------------------------------------- 1 | syntax: glob 2 | SkypeLogViewerLGG/bin/* 3 | SkypeLogViewerLGG/obj/* 4 | SkypeLogViewerLGG.suo 5 | -------------------------------------------------------------------------------- /Images/ScreenShot1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/Images/ScreenShot1.jpg -------------------------------------------------------------------------------- /Images/SkypeLogLGG.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/Images/SkypeLogLGG.ico -------------------------------------------------------------------------------- /Images/SkypeLogLGG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/Images/SkypeLogLGG.png -------------------------------------------------------------------------------- /Images/SkypeLogLGG.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/Images/SkypeLogLGG.psd -------------------------------------------------------------------------------- /Images/SkypeLogSLGG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/Images/SkypeLogSLGG.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # skype-log-viewer 2 | Download and View Skype History Without Skype 3 | 4 | This program allows you to view all of your skype chat logs and then easily export them as text files. 5 | 6 | It correctly organizes them by conversation, and makes sure that group conversations do not get jumbled with one on one chats. 7 | 8 | Features 9 | * Download Skype Logs 10 | * Broken Database Support 11 | * Change Export Format 12 | * Organized by conversation in skype 13 | 14 | ![Skype Log Icon](/Images/SkypeLogLGG.png?raw=true "Skype Log Icon") 15 | ![Skype Log ScreenShot](/Images/ScreenShot1.jpg?raw=true "Skype Log ScreenShot") 16 | 17 | 18 | **Code license** 19 | * [GNU GPL v2](http://www.gnu.org/licenses/gpl-2.0.html) 20 | 21 | **Content License** 22 | * [Creative Commons 3.0 BY-SA](http://creativecommons.org/licenses/by-sa/3.0/) 23 | 24 | **Code Of Conduct** 25 | * Treat everyone with respect. 26 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkypeLogViewerLGG", "SkypeLogViewerLGG\SkypeLogViewerLGG.csproj", "{71AC519A-87B3-4620-ABE0-A4831B9D8990}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|x86 = Debug|x86 9 | Release|x86 = Release|x86 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {71AC519A-87B3-4620-ABE0-A4831B9D8990}.Debug|x86.ActiveCfg = Debug|x86 13 | {71AC519A-87B3-4620-ABE0-A4831B9D8990}.Debug|x86.Build.0 = Debug|x86 14 | {71AC519A-87B3-4620-ABE0-A4831B9D8990}.Release|x86.ActiveCfg = Release|x86 15 | {71AC519A-87B3-4620-ABE0-A4831B9D8990}.Release|x86.Build.0 = Release|x86 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/AboutForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SkypeLogViewerLGG 2 | { 3 | partial class AboutForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); 32 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 33 | this.textBox1 = new System.Windows.Forms.TextBox(); 34 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 35 | this.SuspendLayout(); 36 | // 37 | // pictureBox1 38 | // 39 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; 40 | this.pictureBox1.Image = global::SkypeLogViewerLGG.Properties.Resources.SkypeLogLGG; 41 | this.pictureBox1.Location = new System.Drawing.Point(12, 12); 42 | this.pictureBox1.Name = "pictureBox1"; 43 | this.pictureBox1.Size = new System.Drawing.Size(166, 170); 44 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 45 | this.pictureBox1.TabIndex = 0; 46 | this.pictureBox1.TabStop = false; 47 | // 48 | // textBox1 49 | // 50 | this.textBox1.Location = new System.Drawing.Point(197, 12); 51 | this.textBox1.Multiline = true; 52 | this.textBox1.Name = "textBox1"; 53 | this.textBox1.ReadOnly = true; 54 | this.textBox1.Size = new System.Drawing.Size(342, 170); 55 | this.textBox1.TabIndex = 1; 56 | this.textBox1.Text = resources.GetString("textBox1.Text"); 57 | this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 58 | // 59 | // AboutForm 60 | // 61 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 62 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 63 | this.ClientSize = new System.Drawing.Size(551, 191); 64 | this.Controls.Add(this.textBox1); 65 | this.Controls.Add(this.pictureBox1); 66 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 67 | this.Name = "AboutForm"; 68 | this.Text = "About Skype Log Viewer LGG"; 69 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 70 | this.ResumeLayout(false); 71 | this.PerformLayout(); 72 | 73 | } 74 | 75 | #endregion 76 | 77 | private System.Windows.Forms.PictureBox pictureBox1; 78 | private System.Windows.Forms.TextBox textBox1; 79 | } 80 | } -------------------------------------------------------------------------------- /SkypeLogViewerLGG/AboutForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | 10 | namespace SkypeLogViewerLGG 11 | { 12 | public partial class AboutForm : Form 13 | { 14 | public AboutForm() 15 | { 16 | InitializeComponent(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/HelpForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SkypeLogViewerLGG 2 | { 3 | partial class HelpForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HelpForm)); 32 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 33 | this.textBox1 = new System.Windows.Forms.TextBox(); 34 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 35 | this.SuspendLayout(); 36 | // 37 | // pictureBox1 38 | // 39 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; 40 | this.pictureBox1.Image = global::SkypeLogViewerLGG.Properties.Resources.SkypeLogLGG; 41 | this.pictureBox1.Location = new System.Drawing.Point(483, 12); 42 | this.pictureBox1.Name = "pictureBox1"; 43 | this.pictureBox1.Size = new System.Drawing.Size(99, 99); 44 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 45 | this.pictureBox1.TabIndex = 0; 46 | this.pictureBox1.TabStop = false; 47 | // 48 | // textBox1 49 | // 50 | this.textBox1.Location = new System.Drawing.Point(12, 12); 51 | this.textBox1.Multiline = true; 52 | this.textBox1.Name = "textBox1"; 53 | this.textBox1.ReadOnly = true; 54 | this.textBox1.Size = new System.Drawing.Size(471, 346); 55 | this.textBox1.TabIndex = 1; 56 | this.textBox1.Text = resources.GetString("textBox1.Text"); 57 | // 58 | // HelpForm 59 | // 60 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 61 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 62 | this.ClientSize = new System.Drawing.Size(582, 370); 63 | this.Controls.Add(this.textBox1); 64 | this.Controls.Add(this.pictureBox1); 65 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 66 | this.Name = "HelpForm"; 67 | this.Text = "Help For Skype Log Viewer LGG"; 68 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 69 | this.ResumeLayout(false); 70 | this.PerformLayout(); 71 | 72 | } 73 | 74 | #endregion 75 | 76 | private System.Windows.Forms.PictureBox pictureBox1; 77 | private System.Windows.Forms.TextBox textBox1; 78 | } 79 | } -------------------------------------------------------------------------------- /SkypeLogViewerLGG/HelpForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | 10 | namespace SkypeLogViewerLGG 11 | { 12 | public partial class HelpForm : Form 13 | { 14 | public HelpForm() 15 | { 16 | InitializeComponent(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/MainWindowForm.Designer.cs: -------------------------------------------------------------------------------- 1 | /* 2 | This file is part of SkypeLogViewerLGG 3 | 4 | SkypeLogViewerLGG is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, either version 2 of the License, or 7 | (at your option) any later version. 8 | 9 | SkypeLogViewerLGG is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with SkypeLogViewerLGG. If not, see . 16 | */ 17 | 18 | namespace SkypeLogViewerLGG 19 | { 20 | partial class MainWindowForm 21 | { 22 | /// 23 | /// Required designer variable. 24 | /// 25 | private System.ComponentModel.IContainer components = null; 26 | 27 | /// 28 | /// Clean up any resources being used. 29 | /// 30 | /// true if managed resources should be disposed; otherwise, false. 31 | protected override void Dispose(bool disposing) 32 | { 33 | if (disposing && (components != null)) 34 | { 35 | components.Dispose(); 36 | } 37 | base.Dispose(disposing); 38 | } 39 | 40 | #region Windows Form Designer generated code 41 | 42 | /// 43 | /// Required method for Designer support - do not modify 44 | /// the contents of this method with the code editor. 45 | /// 46 | private void InitializeComponent() 47 | { 48 | this.components = new System.ComponentModel.Container(); 49 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindowForm)); 50 | this.menuStrip1 = new System.Windows.Forms.MenuStrip(); 51 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 52 | this.saveAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 53 | this.saveCurrentConversationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 54 | this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 55 | this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 56 | this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 57 | this.statusStrip1 = new System.Windows.Forms.StatusStrip(); 58 | this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); 59 | this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); 60 | this.tabControl1 = new System.Windows.Forms.TabControl(); 61 | this.tabPage1 = new System.Windows.Forms.TabPage(); 62 | this.splitContainer1 = new System.Windows.Forms.SplitContainer(); 63 | this.listViewConversations = new System.Windows.Forms.ListView(); 64 | this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 65 | this.imageList1 = new System.Windows.Forms.ImageList(this.components); 66 | this.panel3 = new System.Windows.Forms.Panel(); 67 | this.label3 = new System.Windows.Forms.Label(); 68 | this.listView1 = new System.Windows.Forms.ListView(); 69 | this.columnHeaderDate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 70 | this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 71 | this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 72 | this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); 73 | this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 74 | this.panel4 = new System.Windows.Forms.Panel(); 75 | this.button2 = new System.Windows.Forms.Button(); 76 | this.label4 = new System.Windows.Forms.Label(); 77 | this.panel2 = new System.Windows.Forms.Panel(); 78 | this.button1 = new System.Windows.Forms.Button(); 79 | this.textBoxDataBasePath = new System.Windows.Forms.TextBox(); 80 | this.label2 = new System.Windows.Forms.Label(); 81 | this.comboBox1 = new System.Windows.Forms.ComboBox(); 82 | this.label1 = new System.Windows.Forms.Label(); 83 | this.tabPage2 = new System.Windows.Forms.TabPage(); 84 | this.textBox1debug = new System.Windows.Forms.TextBox(); 85 | this.panel1 = new System.Windows.Forms.Panel(); 86 | this.button1clearDebug = new System.Windows.Forms.Button(); 87 | this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); 88 | this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); 89 | this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); 90 | this.saveAllWorker = new System.ComponentModel.BackgroundWorker(); 91 | this.menuStrip1.SuspendLayout(); 92 | this.statusStrip1.SuspendLayout(); 93 | this.tabControl1.SuspendLayout(); 94 | this.tabPage1.SuspendLayout(); 95 | this.splitContainer1.Panel1.SuspendLayout(); 96 | this.splitContainer1.Panel2.SuspendLayout(); 97 | this.splitContainer1.SuspendLayout(); 98 | this.panel3.SuspendLayout(); 99 | this.contextMenuStrip1.SuspendLayout(); 100 | this.panel4.SuspendLayout(); 101 | this.panel2.SuspendLayout(); 102 | this.tabPage2.SuspendLayout(); 103 | this.panel1.SuspendLayout(); 104 | this.SuspendLayout(); 105 | // 106 | // menuStrip1 107 | // 108 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 109 | this.fileToolStripMenuItem, 110 | this.aboutToolStripMenuItem, 111 | this.preferencesToolStripMenuItem, 112 | this.helpToolStripMenuItem}); 113 | this.menuStrip1.Location = new System.Drawing.Point(0, 0); 114 | this.menuStrip1.Name = "menuStrip1"; 115 | this.menuStrip1.Size = new System.Drawing.Size(961, 24); 116 | this.menuStrip1.TabIndex = 0; 117 | this.menuStrip1.Text = "menuStrip1"; 118 | // 119 | // fileToolStripMenuItem 120 | // 121 | this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 122 | this.saveAllToolStripMenuItem, 123 | this.saveCurrentConversationToolStripMenuItem}); 124 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; 125 | this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); 126 | this.fileToolStripMenuItem.Text = "File"; 127 | // 128 | // saveAllToolStripMenuItem 129 | // 130 | this.saveAllToolStripMenuItem.Name = "saveAllToolStripMenuItem"; 131 | this.saveAllToolStripMenuItem.Size = new System.Drawing.Size(214, 22); 132 | this.saveAllToolStripMenuItem.Text = "Save All"; 133 | this.saveAllToolStripMenuItem.Click += new System.EventHandler(this.saveAllToolStripMenuItem_Click); 134 | // 135 | // saveCurrentConversationToolStripMenuItem 136 | // 137 | this.saveCurrentConversationToolStripMenuItem.Name = "saveCurrentConversationToolStripMenuItem"; 138 | this.saveCurrentConversationToolStripMenuItem.Size = new System.Drawing.Size(214, 22); 139 | this.saveCurrentConversationToolStripMenuItem.Text = "Save Current Conversation"; 140 | this.saveCurrentConversationToolStripMenuItem.Click += new System.EventHandler(this.exportCurrentConvo_Click); 141 | // 142 | // aboutToolStripMenuItem 143 | // 144 | this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; 145 | this.aboutToolStripMenuItem.Size = new System.Drawing.Size(52, 20); 146 | this.aboutToolStripMenuItem.Text = "About"; 147 | this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); 148 | // 149 | // preferencesToolStripMenuItem 150 | // 151 | this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; 152 | this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(80, 20); 153 | this.preferencesToolStripMenuItem.Text = "Preferences"; 154 | this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click); 155 | // 156 | // helpToolStripMenuItem 157 | // 158 | this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; 159 | this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); 160 | this.helpToolStripMenuItem.Text = "Help"; 161 | this.helpToolStripMenuItem.Click += new System.EventHandler(this.helpToolStripMenuItem_Click); 162 | // 163 | // statusStrip1 164 | // 165 | this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 166 | this.toolStripStatusLabel1, 167 | this.toolStripProgressBar1}); 168 | this.statusStrip1.Location = new System.Drawing.Point(0, 388); 169 | this.statusStrip1.Name = "statusStrip1"; 170 | this.statusStrip1.Size = new System.Drawing.Size(961, 22); 171 | this.statusStrip1.TabIndex = 1; 172 | this.statusStrip1.Text = "statusStrip1"; 173 | // 174 | // toolStripStatusLabel1 175 | // 176 | this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; 177 | this.toolStripStatusLabel1.Size = new System.Drawing.Size(48, 17); 178 | this.toolStripStatusLabel1.Text = "Ready..."; 179 | // 180 | // toolStripProgressBar1 181 | // 182 | this.toolStripProgressBar1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; 183 | this.toolStripProgressBar1.Name = "toolStripProgressBar1"; 184 | this.toolStripProgressBar1.Overflow = System.Windows.Forms.ToolStripItemOverflow.Always; 185 | this.toolStripProgressBar1.Size = new System.Drawing.Size(500, 16); 186 | // 187 | // tabControl1 188 | // 189 | this.tabControl1.Controls.Add(this.tabPage1); 190 | this.tabControl1.Controls.Add(this.tabPage2); 191 | this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; 192 | this.tabControl1.Location = new System.Drawing.Point(0, 24); 193 | this.tabControl1.Name = "tabControl1"; 194 | this.tabControl1.SelectedIndex = 0; 195 | this.tabControl1.Size = new System.Drawing.Size(961, 364); 196 | this.tabControl1.TabIndex = 2; 197 | // 198 | // tabPage1 199 | // 200 | this.tabPage1.Controls.Add(this.splitContainer1); 201 | this.tabPage1.Controls.Add(this.panel2); 202 | this.tabPage1.Location = new System.Drawing.Point(4, 22); 203 | this.tabPage1.Name = "tabPage1"; 204 | this.tabPage1.Padding = new System.Windows.Forms.Padding(3); 205 | this.tabPage1.Size = new System.Drawing.Size(953, 338); 206 | this.tabPage1.TabIndex = 0; 207 | this.tabPage1.Text = "Log View"; 208 | this.tabPage1.UseVisualStyleBackColor = true; 209 | // 210 | // splitContainer1 211 | // 212 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; 213 | this.splitContainer1.Location = new System.Drawing.Point(3, 23); 214 | this.splitContainer1.Name = "splitContainer1"; 215 | // 216 | // splitContainer1.Panel1 217 | // 218 | this.splitContainer1.Panel1.Controls.Add(this.listViewConversations); 219 | this.splitContainer1.Panel1.Controls.Add(this.panel3); 220 | // 221 | // splitContainer1.Panel2 222 | // 223 | this.splitContainer1.Panel2.Controls.Add(this.listView1); 224 | this.splitContainer1.Panel2.Controls.Add(this.panel4); 225 | this.splitContainer1.Size = new System.Drawing.Size(947, 312); 226 | this.splitContainer1.SplitterDistance = 315; 227 | this.splitContainer1.TabIndex = 1; 228 | // 229 | // listViewConversations 230 | // 231 | this.listViewConversations.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 232 | this.columnHeader1}); 233 | this.listViewConversations.Dock = System.Windows.Forms.DockStyle.Fill; 234 | this.listViewConversations.GridLines = true; 235 | this.listViewConversations.HideSelection = false; 236 | this.listViewConversations.LargeImageList = this.imageList1; 237 | this.listViewConversations.Location = new System.Drawing.Point(0, 23); 238 | this.listViewConversations.Name = "listViewConversations"; 239 | this.listViewConversations.ShowItemToolTips = true; 240 | this.listViewConversations.Size = new System.Drawing.Size(315, 289); 241 | this.listViewConversations.SmallImageList = this.imageList1; 242 | this.listViewConversations.TabIndex = 1; 243 | this.listViewConversations.TileSize = new System.Drawing.Size(295, 24); 244 | this.listViewConversations.UseCompatibleStateImageBehavior = false; 245 | this.listViewConversations.View = System.Windows.Forms.View.Tile; 246 | this.listViewConversations.DoubleClick += new System.EventHandler(this.listViewConversations_DoubleClick); 247 | // 248 | // columnHeader1 249 | // 250 | this.columnHeader1.Text = "Name"; 251 | this.columnHeader1.Width = 10; 252 | // 253 | // imageList1 254 | // 255 | this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; 256 | this.imageList1.ImageSize = new System.Drawing.Size(24, 24); 257 | this.imageList1.TransparentColor = System.Drawing.Color.Transparent; 258 | // 259 | // panel3 260 | // 261 | this.panel3.Controls.Add(this.label3); 262 | this.panel3.Dock = System.Windows.Forms.DockStyle.Top; 263 | this.panel3.Location = new System.Drawing.Point(0, 0); 264 | this.panel3.Name = "panel3"; 265 | this.panel3.Size = new System.Drawing.Size(315, 23); 266 | this.panel3.TabIndex = 0; 267 | // 268 | // label3 269 | // 270 | this.label3.AutoSize = true; 271 | this.label3.Location = new System.Drawing.Point(6, 5); 272 | this.label3.Name = "label3"; 273 | this.label3.Size = new System.Drawing.Size(74, 13); 274 | this.label3.TabIndex = 0; 275 | this.label3.Text = "Conversations"; 276 | // 277 | // listView1 278 | // 279 | this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 280 | this.columnHeaderDate, 281 | this.columnHeader2, 282 | this.columnHeader3}); 283 | this.listView1.ContextMenuStrip = this.contextMenuStrip1; 284 | this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; 285 | this.listView1.FullRowSelect = true; 286 | this.listView1.HideSelection = false; 287 | this.listView1.Location = new System.Drawing.Point(0, 23); 288 | this.listView1.Name = "listView1"; 289 | this.listView1.ShowItemToolTips = true; 290 | this.listView1.Size = new System.Drawing.Size(628, 289); 291 | this.listView1.TabIndex = 1; 292 | this.listView1.UseCompatibleStateImageBehavior = false; 293 | this.listView1.View = System.Windows.Forms.View.Details; 294 | // 295 | // columnHeaderDate 296 | // 297 | this.columnHeaderDate.Text = "Date"; 298 | this.columnHeaderDate.Width = 124; 299 | // 300 | // columnHeader2 301 | // 302 | this.columnHeader2.Text = "Name"; 303 | this.columnHeader2.Width = 90; 304 | // 305 | // columnHeader3 306 | // 307 | this.columnHeader3.Text = "Message"; 308 | this.columnHeader3.Width = 393; 309 | // 310 | // contextMenuStrip1 311 | // 312 | this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 313 | this.copyToolStripMenuItem}); 314 | this.contextMenuStrip1.Name = "contextMenuStrip1"; 315 | this.contextMenuStrip1.Size = new System.Drawing.Size(103, 26); 316 | // 317 | // copyToolStripMenuItem 318 | // 319 | this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; 320 | this.copyToolStripMenuItem.Size = new System.Drawing.Size(102, 22); 321 | this.copyToolStripMenuItem.Text = "Copy"; 322 | this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); 323 | // 324 | // panel4 325 | // 326 | this.panel4.Controls.Add(this.button2); 327 | this.panel4.Controls.Add(this.label4); 328 | this.panel4.Dock = System.Windows.Forms.DockStyle.Top; 329 | this.panel4.Location = new System.Drawing.Point(0, 0); 330 | this.panel4.Name = "panel4"; 331 | this.panel4.Size = new System.Drawing.Size(628, 23); 332 | this.panel4.TabIndex = 0; 333 | // 334 | // button2 335 | // 336 | this.button2.Location = new System.Drawing.Point(75, 0); 337 | this.button2.Name = "button2"; 338 | this.button2.Size = new System.Drawing.Size(75, 23); 339 | this.button2.TabIndex = 1; 340 | this.button2.Text = "Export"; 341 | this.button2.UseVisualStyleBackColor = true; 342 | this.button2.Click += new System.EventHandler(this.exportCurrentConvo_Click); 343 | // 344 | // label4 345 | // 346 | this.label4.AutoSize = true; 347 | this.label4.Location = new System.Drawing.Point(3, 5); 348 | this.label4.Name = "label4"; 349 | this.label4.Size = new System.Drawing.Size(55, 13); 350 | this.label4.TabIndex = 0; 351 | this.label4.Text = "Messages"; 352 | // 353 | // panel2 354 | // 355 | this.panel2.Controls.Add(this.button1); 356 | this.panel2.Controls.Add(this.textBoxDataBasePath); 357 | this.panel2.Controls.Add(this.label2); 358 | this.panel2.Controls.Add(this.comboBox1); 359 | this.panel2.Controls.Add(this.label1); 360 | this.panel2.Dock = System.Windows.Forms.DockStyle.Top; 361 | this.panel2.Location = new System.Drawing.Point(3, 3); 362 | this.panel2.Name = "panel2"; 363 | this.panel2.Size = new System.Drawing.Size(947, 20); 364 | this.panel2.TabIndex = 0; 365 | // 366 | // button1 367 | // 368 | this.button1.Location = new System.Drawing.Point(891, -1); 369 | this.button1.Name = "button1"; 370 | this.button1.Size = new System.Drawing.Size(53, 23); 371 | this.button1.TabIndex = 4; 372 | this.button1.Text = "Browse"; 373 | this.button1.UseVisualStyleBackColor = true; 374 | this.button1.Click += new System.EventHandler(this.button1_Click); 375 | // 376 | // textBoxDataBasePath 377 | // 378 | this.textBoxDataBasePath.Location = new System.Drawing.Point(410, -2); 379 | this.textBoxDataBasePath.Name = "textBoxDataBasePath"; 380 | this.textBoxDataBasePath.ReadOnly = true; 381 | this.textBoxDataBasePath.Size = new System.Drawing.Size(475, 20); 382 | this.textBoxDataBasePath.TabIndex = 3; 383 | // 384 | // label2 385 | // 386 | this.label2.AutoSize = true; 387 | this.label2.Location = new System.Drawing.Point(302, 2); 388 | this.label2.Name = "label2"; 389 | this.label2.Size = new System.Drawing.Size(108, 13); 390 | this.label2.TabIndex = 2; 391 | this.label2.Text = "or specify main.db file"; 392 | // 393 | // comboBox1 394 | // 395 | this.comboBox1.BackColor = System.Drawing.SystemColors.ControlLight; 396 | this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 397 | this.comboBox1.ForeColor = System.Drawing.SystemColors.ControlDark; 398 | this.comboBox1.FormattingEnabled = true; 399 | this.comboBox1.Location = new System.Drawing.Point(71, -1); 400 | this.comboBox1.Name = "comboBox1"; 401 | this.comboBox1.Size = new System.Drawing.Size(225, 21); 402 | this.comboBox1.TabIndex = 1; 403 | this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); 404 | // 405 | // label1 406 | // 407 | this.label1.AutoSize = true; 408 | this.label1.Location = new System.Drawing.Point(3, 4); 409 | this.label1.Name = "label1"; 410 | this.label1.Size = new System.Drawing.Size(62, 13); 411 | this.label1.TabIndex = 0; 412 | this.label1.Text = "Select User"; 413 | // 414 | // tabPage2 415 | // 416 | this.tabPage2.Controls.Add(this.textBox1debug); 417 | this.tabPage2.Controls.Add(this.panel1); 418 | this.tabPage2.Location = new System.Drawing.Point(4, 22); 419 | this.tabPage2.Name = "tabPage2"; 420 | this.tabPage2.Padding = new System.Windows.Forms.Padding(3); 421 | this.tabPage2.Size = new System.Drawing.Size(953, 338); 422 | this.tabPage2.TabIndex = 1; 423 | this.tabPage2.Text = "Debug"; 424 | this.tabPage2.UseVisualStyleBackColor = true; 425 | // 426 | // textBox1debug 427 | // 428 | this.textBox1debug.Dock = System.Windows.Forms.DockStyle.Fill; 429 | this.textBox1debug.Location = new System.Drawing.Point(3, 3); 430 | this.textBox1debug.Multiline = true; 431 | this.textBox1debug.Name = "textBox1debug"; 432 | this.textBox1debug.ReadOnly = true; 433 | this.textBox1debug.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; 434 | this.textBox1debug.Size = new System.Drawing.Size(947, 304); 435 | this.textBox1debug.TabIndex = 1; 436 | this.textBox1debug.Text = "Debug:"; 437 | // 438 | // panel1 439 | // 440 | this.panel1.Controls.Add(this.button1clearDebug); 441 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; 442 | this.panel1.Location = new System.Drawing.Point(3, 307); 443 | this.panel1.Name = "panel1"; 444 | this.panel1.Size = new System.Drawing.Size(947, 28); 445 | this.panel1.TabIndex = 0; 446 | // 447 | // button1clearDebug 448 | // 449 | this.button1clearDebug.Location = new System.Drawing.Point(6, 4); 450 | this.button1clearDebug.Name = "button1clearDebug"; 451 | this.button1clearDebug.Size = new System.Drawing.Size(75, 23); 452 | this.button1clearDebug.TabIndex = 0; 453 | this.button1clearDebug.Text = "Clear Debug"; 454 | this.button1clearDebug.UseVisualStyleBackColor = true; 455 | this.button1clearDebug.Click += new System.EventHandler(this.button1clearDebug_Click); 456 | // 457 | // openFileDialog1 458 | // 459 | this.openFileDialog1.DefaultExt = "*.db"; 460 | this.openFileDialog1.FileName = "openFileDialog1"; 461 | this.openFileDialog1.Filter = "Skype Database files|*.db|All Files|*.*"; 462 | // 463 | // backgroundWorker1 464 | // 465 | this.backgroundWorker1.WorkerReportsProgress = true; 466 | this.backgroundWorker1.WorkerSupportsCancellation = true; 467 | this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); 468 | this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted); 469 | // 470 | // saveAllWorker 471 | // 472 | this.saveAllWorker.WorkerReportsProgress = true; 473 | this.saveAllWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.saveAllWorker_DoWork); 474 | this.saveAllWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.saveAllWorker_ProgressChanged); 475 | this.saveAllWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.saveAllWorker_RunWorkerCompleted); 476 | // 477 | // MainWindowForm 478 | // 479 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 480 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 481 | this.ClientSize = new System.Drawing.Size(961, 410); 482 | this.Controls.Add(this.tabControl1); 483 | this.Controls.Add(this.statusStrip1); 484 | this.Controls.Add(this.menuStrip1); 485 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 486 | this.MainMenuStrip = this.menuStrip1; 487 | this.Name = "MainWindowForm"; 488 | this.Text = "Skype Log Viewer LGG - v1.2"; 489 | this.Load += new System.EventHandler(this.Form1_Load); 490 | this.menuStrip1.ResumeLayout(false); 491 | this.menuStrip1.PerformLayout(); 492 | this.statusStrip1.ResumeLayout(false); 493 | this.statusStrip1.PerformLayout(); 494 | this.tabControl1.ResumeLayout(false); 495 | this.tabPage1.ResumeLayout(false); 496 | this.splitContainer1.Panel1.ResumeLayout(false); 497 | this.splitContainer1.Panel2.ResumeLayout(false); 498 | this.splitContainer1.ResumeLayout(false); 499 | this.panel3.ResumeLayout(false); 500 | this.panel3.PerformLayout(); 501 | this.contextMenuStrip1.ResumeLayout(false); 502 | this.panel4.ResumeLayout(false); 503 | this.panel4.PerformLayout(); 504 | this.panel2.ResumeLayout(false); 505 | this.panel2.PerformLayout(); 506 | this.tabPage2.ResumeLayout(false); 507 | this.tabPage2.PerformLayout(); 508 | this.panel1.ResumeLayout(false); 509 | this.ResumeLayout(false); 510 | this.PerformLayout(); 511 | 512 | } 513 | 514 | #endregion 515 | 516 | private System.Windows.Forms.MenuStrip menuStrip1; 517 | private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; 518 | private System.Windows.Forms.ToolStripMenuItem saveAllToolStripMenuItem; 519 | private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; 520 | private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; 521 | private System.Windows.Forms.StatusStrip statusStrip1; 522 | private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; 523 | private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; 524 | private System.Windows.Forms.TabControl tabControl1; 525 | private System.Windows.Forms.TabPage tabPage1; 526 | private System.Windows.Forms.SplitContainer splitContainer1; 527 | private System.Windows.Forms.Panel panel2; 528 | private System.Windows.Forms.Button button1; 529 | private System.Windows.Forms.TextBox textBoxDataBasePath; 530 | private System.Windows.Forms.Label label2; 531 | private System.Windows.Forms.ComboBox comboBox1; 532 | private System.Windows.Forms.Label label1; 533 | private System.Windows.Forms.TabPage tabPage2; 534 | private System.Windows.Forms.TextBox textBox1debug; 535 | private System.Windows.Forms.Panel panel1; 536 | private System.Windows.Forms.Button button1clearDebug; 537 | private System.Windows.Forms.ListView listViewConversations; 538 | private System.Windows.Forms.Panel panel3; 539 | private System.Windows.Forms.Label label3; 540 | private System.Windows.Forms.Panel panel4; 541 | private System.Windows.Forms.Label label4; 542 | private System.Windows.Forms.OpenFileDialog openFileDialog1; 543 | private System.Windows.Forms.ImageList imageList1; 544 | private System.Windows.Forms.ColumnHeader columnHeader1; 545 | private System.Windows.Forms.ListView listView1; 546 | private System.Windows.Forms.ColumnHeader columnHeader2; 547 | private System.Windows.Forms.ColumnHeader columnHeader3; 548 | private System.Windows.Forms.ColumnHeader columnHeaderDate; 549 | private System.ComponentModel.BackgroundWorker backgroundWorker1; 550 | private System.Windows.Forms.Button button2; 551 | private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; 552 | private System.Windows.Forms.ToolStripMenuItem saveCurrentConversationToolStripMenuItem; 553 | private System.ComponentModel.BackgroundWorker saveAllWorker; 554 | private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; 555 | private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; 556 | private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem; 557 | } 558 | } 559 | 560 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/MainWindowForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using System.IO; 10 | using System.Text.RegularExpressions; 11 | using System.Diagnostics; 12 | using System.Data.SQLite; 13 | using System.Reflection; 14 | /* 15 | This file is part of SkypeLogViewerLGG 16 | 17 | SkypeLogViewerLGG is free software: you can redistribute it and/or modify 18 | it under the terms of the GNU General Public License as published by 19 | the Free Software Foundation, either version 2 of the License, or 20 | (at your option) any later version. 21 | 22 | SkypeLogViewerLGG is distributed in the hope that it will be useful, 23 | but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 | GNU General Public License for more details. 26 | 27 | You should have received a copy of the GNU General Public License 28 | along with SkypeLogViewerLGG. If not, see . 29 | */ 30 | 31 | namespace SkypeLogViewerLGG 32 | { 33 | public partial class MainWindowForm : Form 34 | { 35 | private string skypePath = ""; 36 | SQLiteConnection connection; 37 | Conversation currentConversation; 38 | 39 | public MainWindowForm() 40 | { 41 | loadSQL(); 42 | InitializeComponent(); 43 | this.imageList1.Images.Add((Image)(Properties.Resources.SkypeLogSLGG)); 44 | this.imageList1.Images.Add((Image)(Properties.Resources.SkypeLogLGG)); 45 | this.imageList1.Images.Add((Image)(Properties.Resources.SkypeLogSBLGG)); 46 | } 47 | private void loadSQL() 48 | { 49 | string name = "System.Data.SQLite.dll"; 50 | String resourceName = "SkypeLogViewerLGG." + 51 | name; 52 | if (File.Exists(name)) return; 53 | using (var stream = Assembly.GetExecutingAssembly() 54 | .GetManifestResourceStream(resourceName)) 55 | { 56 | using (System.IO.FileStream fs = 57 | new System.IO.FileStream(name, System.IO.FileMode.Create)) 58 | { 59 | Byte[] assemblyData = new Byte[stream.Length]; 60 | stream.Read(assemblyData, 0, assemblyData.Length); 61 | fs.Write(assemblyData, 0, assemblyData.Length); 62 | } 63 | } 64 | } 65 | public void debugAdd(string info) 66 | { 67 | this.textBox1debug.Text += "\r\n" + info; 68 | } 69 | private void Form1_Load(object sender, EventArgs e) 70 | { 71 | skypePath= Environment.GetEnvironmentVariable("APPDATA") + @"\Skype"; 72 | this.textBoxDataBasePath.Text = skypePath; 73 | if (Properties.Settings.Default.LastPath != "") 74 | { 75 | fillUsers(); 76 | this.textBoxDataBasePath.Text = Properties.Settings.Default.LastPath; 77 | tryLoad(); 78 | } else 79 | if (fillUsers()) 80 | { 81 | this.comboBox1.SelectedIndex = 0;//triggers the open 82 | } 83 | } 84 | public bool checkAndKilledSkype() 85 | { 86 | foreach (Process process in Process.GetProcesses(Environment.MachineName)) 87 | { 88 | if (process.ProcessName.Equals("Skype")) 89 | { 90 | debugAdd("Skype Running"); 91 | DialogResult result = MessageBox.Show("You must close skype to use this program\nDo you wish to do this now?", 92 | "Close Skype?", MessageBoxButtons.YesNoCancel); 93 | if (result== DialogResult.Yes) 94 | { 95 | process.Kill(); 96 | } 97 | else if (result == DialogResult.Cancel) 98 | { 99 | return false; 100 | } 101 | return true; 102 | } 103 | } 104 | return true; 105 | } 106 | private bool fillUsers() 107 | { 108 | bool found = false; 109 | if (!Directory.Exists(skypePath)) return found; 110 | string[] folders = Directory.GetDirectories(skypePath); 111 | foreach (string folderName in folders) 112 | { 113 | FileInfo folderInfo = new FileInfo(folderName); 114 | if (!Regex.Match(folderInfo.Name, "content|pictures|dbtemp|shared.*|My Skype Received Files", RegexOptions.IgnoreCase).Success) 115 | { 116 | if (File.Exists(folderInfo.FullName + @"\main.db")) 117 | { 118 | this.comboBox1.Items.Add(folderInfo.Name); 119 | found = true; 120 | } 121 | } 122 | } 123 | return found; 124 | } 125 | public void tryLoad() 126 | { 127 | listViewConversations.Items.Clear(); 128 | 129 | connection = new SQLiteConnection( 130 | "data source=" + this.textBoxDataBasePath.Text); 131 | if (true)//checkAndKilledSkype() 132 | { 133 | if (File.Exists(textBoxDataBasePath.Text)) 134 | { 135 | try 136 | { 137 | connection.Open(); 138 | debugAdd("connection opened"); 139 | Properties.Settings.Default.LastPath = textBoxDataBasePath.Text; 140 | Properties.Settings.Default.Save(); 141 | } 142 | catch 143 | { 144 | if(checkAndKilledSkype()) 145 | tryLoad(); 146 | } 147 | } 148 | else 149 | { 150 | MessageBox.Show("Error, file does not exist"); 151 | return; 152 | } 153 | } 154 | //file should be open 155 | SQLiteCommand cmd = connection.CreateCommand(); 156 | //last_activity_timestamp 157 | //consumption_horizon 158 | //inbox_timestamp 159 | cmd.CommandText = "select * from Conversations order by last_activity_timestamp desc"; 160 | SQLiteDataReader dataRead = cmd.ExecuteReader(); 161 | listViewConversations.Items.Clear(); 162 | while (dataRead.Read()) 163 | { 164 | Conversation tempConv = new Conversation( 165 | dataRead["displayname"].ToString(), 166 | dataRead["identity"].ToString(), 167 | dataRead["type"].ToString(), 168 | dataRead["id"].ToString()); 169 | if (tempConv.DisplayName == "") continue; 170 | if (tempConv.getType()==1) 171 | { 172 | //we need the real name 173 | SQLiteCommand namecmd = connection.CreateCommand(); 174 | namecmd.CommandText = "select name from Chats WHERE dialog_partner ='" 175 | +dataRead["identity"]+"' order by timestamp"; 176 | SQLiteDataReader chatDataRead = namecmd.ExecuteReader(); 177 | List chats = new List(); 178 | while (chatDataRead.Read()) 179 | chats.Add(chatDataRead[0].ToString()); 180 | tempConv.chats = chats.ToArray(); 181 | if (tempConv.chats.Length <= 0) 182 | { 183 | //tempConv.setType(3); 184 | //continue; 185 | } 186 | } 187 | if (tempConv.getType() < 3) 188 | { 189 | ListViewItem tempItem = new ListViewItem(tempConv.DisplayName); 190 | tempItem.Tag = tempConv; 191 | tempItem.ToolTipText = tempConv.DisplayName + "\r\n" + tempConv.Identity; 192 | tempItem.ImageIndex = tempItem.StateImageIndex = tempConv.getType() - 1; 193 | listViewConversations.Items.Add(tempItem); 194 | } 195 | debugAdd("Found: "+ dataRead["displayname"] + " at "+tempConv.Identity); 196 | } 197 | cmd.Dispose(); 198 | // find broken msn b.s. 199 | if (true) 200 | { 201 | 202 | SQLiteCommand brokenCmd = connection.CreateCommand(); 203 | brokenCmd.CommandText = "select DISTINCT author,from_dispname from Messages where ifnull(chatname, '') = '' and ifnull(dialog_partner, '') = '' order by timestamp desc"; 204 | SQLiteDataReader brokenDataRead = brokenCmd.ExecuteReader(); 205 | while (brokenDataRead.Read()) 206 | { 207 | debugAdd("found missing partner with id of " + brokenDataRead["from_dispname"]); 208 | Conversation tempConv = new Conversation( 209 | brokenDataRead["from_dispname"].ToString(), 210 | "", 211 | "3", 212 | "-1"); 213 | List chats = new List(); 214 | chats.Add(brokenDataRead["from_dispname"].ToString()); 215 | chats.Add(brokenDataRead["author"].ToString()); 216 | tempConv.chats = chats.ToArray(); 217 | ListViewItem tempItem = new ListViewItem(tempConv.DisplayName); 218 | tempItem.Tag = tempConv; 219 | tempItem.ToolTipText = tempConv.DisplayName + "\r\n" + tempConv.Identity; 220 | tempItem.ImageIndex = tempItem.StateImageIndex = tempConv.getType() - 1; 221 | listViewConversations.Items.Add(tempItem); 222 | } 223 | } 224 | } 225 | 226 | private void button1_Click(object sender, EventArgs e) 227 | { 228 | if (Properties.Settings.Default.LastFolderPath != "") 229 | openFileDialog1.InitialDirectory = Properties.Settings.Default.LastFolderPath; 230 | else 231 | openFileDialog1.InitialDirectory = skypePath; 232 | 233 | if (openFileDialog1.ShowDialog() == DialogResult.OK) 234 | { 235 | this.textBoxDataBasePath.Text = openFileDialog1.FileName; 236 | Properties.Settings.Default.LastFolderPath = Path.GetDirectoryName(openFileDialog1.FileName); 237 | 238 | tryLoad(); 239 | } 240 | } 241 | private void loadMessagesFromIdentity(Conversation c) 242 | { 243 | List messages = getSkypeMessages(c); 244 | displayMessages(messages); 245 | } 246 | private void displayMessages(List messages) 247 | { 248 | listView1.Items.Clear(); 249 | foreach (SkypeMessage message in messages) 250 | { 251 | ListViewItem tempItem = new ListViewItem(message.msgDate.ToString()); 252 | tempItem.SubItems.Add(message.sender); 253 | tempItem.SubItems.Add(message.msgData); 254 | tempItem.Tag = message; 255 | tempItem.ToolTipText = message.msgDate.ToString() + "\r\n" + message.sender + "\r\n" + message.msgData; 256 | listView1.Items.Add(tempItem); 257 | } 258 | } 259 | private List getSkypeMessages(Conversation c) 260 | { 261 | List messages = new List(); 262 | 263 | //debugAdd("Loading messages for " + c.Identity); 264 | if (c.getType() == 2) 265 | { 266 | SQLiteCommand cmd = connection.CreateCommand(); 267 | cmd.CommandText = "select timestamp,from_dispname,author,body_xml from Messages where chatname='" + c.Identity + "' order by timestamp"; 268 | SQLiteDataReader dataRead = cmd.ExecuteReader(); 269 | while (dataRead.Read()) 270 | { 271 | //debugAdd("Found message " + dataRead["body_xml"]); 272 | SkypeMessage message = new SkypeMessage(); 273 | message.sender = dataRead["from_dispname"].ToString(); 274 | message.senderID = dataRead["author"].ToString(); 275 | message.setData(dataRead["body_xml"].ToString()); 276 | message.setDate(dataRead["timestamp"].ToString()); 277 | messages.Add(message); 278 | } 279 | } 280 | else if(c.getType()==1) 281 | { 282 | //if (c.chats.Length == 0) return messages; 283 | SQLiteCommand cmd = connection.CreateCommand(); 284 | cmd.CommandText = "select timestamp,from_dispname,author,body_xml from Messages where convo_id = " + c.ConvoId + " order by timestamp"; 285 | SQLiteDataReader dataRead = cmd.ExecuteReader(); 286 | while (dataRead.Read()) 287 | { 288 | //debugAdd("Found message " + dataRead["body_xml"]); 289 | SkypeMessage message = new SkypeMessage(); 290 | message.sender = dataRead["from_dispname"].ToString(); 291 | message.senderID = dataRead["author"].ToString(); 292 | message.setData(dataRead["body_xml"].ToString()); 293 | message.setDate(dataRead["timestamp"].ToString()); 294 | messages.Add(message); 295 | } 296 | } 297 | else if (c.getType() == 3) 298 | { 299 | String wheres = ""; 300 | if(c.chats!=null) 301 | foreach (string name in c.chats) 302 | { 303 | wheres += "OR dialog_partner='" + name + "' "; 304 | } 305 | SQLiteCommand cmd = connection.CreateCommand(); 306 | cmd.CommandText = "select timestamp,from_dispname,author,body_xml from Messages where " 307 | + "ifnull(chatname, '') = '' and from_dispname='"+c.DisplayName+"'" + wheres 308 | + " order by timestamp"; 309 | SQLiteDataReader dataRead = cmd.ExecuteReader(); 310 | while (dataRead.Read()) 311 | { 312 | SkypeMessage message = new SkypeMessage(); 313 | message.sender = dataRead["from_dispname"].ToString(); 314 | message.senderID = dataRead["author"].ToString(); 315 | message.setData(dataRead["body_xml"].ToString()); 316 | message.setDate(dataRead["timestamp"].ToString()); 317 | messages.Add(message); 318 | } 319 | } 320 | 321 | return messages; 322 | } 323 | 324 | private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 325 | { 326 | this.textBoxDataBasePath.Text = skypePath + @"\" + this.comboBox1.Items[0] + @"\main.db"; 327 | 328 | tryLoad(); 329 | } 330 | 331 | private void listViewConversations_DoubleClick(object sender, EventArgs e) 332 | { 333 | //loadMessagesFromIdentity((listViewConversations.SelectedItems[0].Tag as Conversation)); 334 | if (saveAllWorker.IsBusy) 335 | { 336 | MessageBox.Show("Please watch the progress bar\nAnd wait till the save all is completed"); 337 | return; 338 | } 339 | while (backgroundWorker1.IsBusy) 340 | { 341 | backgroundWorker1.CancelAsync(); 342 | } 343 | backgroundWorker1.RunWorkerAsync(listViewConversations.SelectedItems[0].Tag); 344 | currentConversation = (listViewConversations.SelectedItems[0].Tag as Conversation); 345 | this.toolStripProgressBar1.Style = ProgressBarStyle.Marquee; 346 | this.toolStripStatusLabel1.Text = "Loading, please wait!"; 347 | } 348 | 349 | private void button1clearDebug_Click(object sender, EventArgs e) 350 | { 351 | textBox1debug.Text = ""; 352 | } 353 | 354 | private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 355 | { 356 | Conversation c = (e.Argument as Conversation); 357 | List messages = getSkypeMessages(c); 358 | e.Result = messages; 359 | } 360 | 361 | private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 362 | { 363 | if(!e.Cancelled) 364 | displayMessages((e.Result as List)); 365 | this.toolStripProgressBar1.Style = ProgressBarStyle.Continuous; 366 | this.toolStripStatusLabel1.Text = "Ready"; 367 | } 368 | 369 | private void exportCurrentConvo_Click(object sender, EventArgs e) 370 | { 371 | if (currentConversation != null) 372 | { 373 | if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 374 | { 375 | exportConversation(currentConversation, folderBrowserDialog1.SelectedPath); 376 | } 377 | } 378 | } 379 | 380 | public String formatMessage(SkypeMessage message, String messageFormat = "[[Month]/[Day]/[Year] [Time]] [DisplayName]:") 381 | { 382 | 383 | messageFormat = messageFormat.Replace("[Day]", message.msgDate.Day.ToString()); 384 | messageFormat = messageFormat.Replace("[Month]", message.msgDate.Month.ToString()); 385 | messageFormat = messageFormat.Replace("[Year]", message.msgDate.Year.ToString()); 386 | 387 | messageFormat = messageFormat.Replace("[Time]", message.msgDate.ToString("h:mm:ss tt")); 388 | 389 | 390 | messageFormat = messageFormat.Replace("[DisplayName]", message.sender); 391 | messageFormat = messageFormat.Replace("[UserName]", message.senderID); 392 | 393 | messageFormat += " " + message.msgData; 394 | 395 | return messageFormat; 396 | } 397 | 398 | private void exportConversation(Conversation c, String directory) 399 | { 400 | String fileName = directory + "\\" + 401 | (c.DisplayName+(c.getType()==3?"-Broken Log":"")).Replace("\\", "-").Replace("/", "-").Replace(":", "-").Replace("*", "-") 402 | .Replace("\"", "-").Replace("|", "-").Replace(">", "-").Replace("<", "-").Replace("?", "-") 403 | +".txt"; 404 | List messages = getSkypeMessages(c); 405 | using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName)) 406 | { 407 | foreach (SkypeMessage message in messages) 408 | { 409 | String format = (Properties.Settings.Default.Format != "") ? Properties.Settings.Default.Format : "[[Month]/[Day]/[Year] [Time]] [DisplayName]:"; 410 | file.WriteLine(this.formatMessage(message,format)); 411 | } 412 | } 413 | } 414 | 415 | private void aboutToolStripMenuItem_Click(object sender, EventArgs e) 416 | { 417 | AboutForm form = new AboutForm(); 418 | form.ShowDialog(); 419 | } 420 | 421 | private void helpToolStripMenuItem_Click(object sender, EventArgs e) 422 | { 423 | HelpForm form = new HelpForm(); 424 | form.ShowDialog(); 425 | } 426 | 427 | private void preferencesToolStripMenuItem_Click(object sender, EventArgs e) 428 | { 429 | PreferencesForm form = new PreferencesForm(this); 430 | form.ShowDialog(); 431 | } 432 | 433 | private void saveAllToolStripMenuItem_Click(object sender, EventArgs e) 434 | { 435 | if(MessageBox.Show( 436 | "This process will take quite a long time\r\nPlease watch the progress bar at the bottom for it to finish\r\n" 437 | , "Long wait expected", MessageBoxButtons.OKCancel) == DialogResult.OK) 438 | { 439 | if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 440 | { 441 | convsAndSaveDir casd = new convsAndSaveDir(); 442 | casd.saveDir = folderBrowserDialog1.SelectedPath; 443 | casd.convs = new List(); 444 | foreach (ListViewItem i in listViewConversations.Items) 445 | { 446 | casd.convs.Add(i.Tag as Conversation); 447 | } 448 | saveAllWorker.RunWorkerAsync(casd); 449 | toolStripProgressBar1.Value = 0; 450 | toolStripStatusLabel1.Text = "Saving all Conversations"; 451 | } 452 | } 453 | } 454 | private void exportConversations(List conversations, string dest) 455 | { 456 | int done = 1; 457 | foreach(Conversation c in conversations) 458 | { 459 | exportConversation(c, dest); 460 | saveAllWorker.ReportProgress((int)(100.0f*((float)(done++))/((float)(conversations.Count)))); 461 | } 462 | } 463 | 464 | private void saveAllWorker_DoWork(object sender, DoWorkEventArgs e) 465 | { 466 | convsAndSaveDir casd = (e.Argument as convsAndSaveDir); 467 | exportConversations(casd.convs, casd.saveDir); 468 | } 469 | 470 | private void saveAllWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 471 | { 472 | toolStripProgressBar1.Value = 0; 473 | toolStripStatusLabel1.Text = "Ready"; 474 | MessageBox.Show("Export completed"); 475 | } 476 | 477 | private void saveAllWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 478 | { 479 | toolStripProgressBar1.Value = e.ProgressPercentage; 480 | } 481 | 482 | private void copyToolStripMenuItem_Click(object sender, EventArgs e) 483 | { 484 | StringBuilder sb = new StringBuilder(""); 485 | foreach (ListViewItem item in listView1.SelectedItems) 486 | { 487 | SkypeMessage message = item.Tag as SkypeMessage; 488 | sb.AppendLine("["+message.msgDate.ToString()+"] " 489 | +message.sender+": " 490 | +message.msgData); 491 | } 492 | if(sb.ToString()!="")Clipboard.SetText(sb.ToString()); 493 | } 494 | 495 | } 496 | public class convsAndSaveDir 497 | { 498 | public List convs { get; set; } 499 | public string saveDir { get; set; } 500 | } 501 | public class Conversation 502 | { 503 | public string DisplayName { get; set; } 504 | public string Identity { get; set; } 505 | public int ConvoId { get; set; } 506 | private int type = 0; 507 | public string[] chats { get; set; } 508 | public Conversation(string _displayName, string _identity, string _type, string _convo_id) 509 | { 510 | DisplayName = _displayName; 511 | Identity = _identity; 512 | ConvoId = int.Parse(_convo_id); 513 | this.type = int.Parse(_type); 514 | } 515 | public int getType() { return type; } 516 | public void setType(int newType) { type = newType; } 517 | public override string ToString() 518 | { 519 | return DisplayName; 520 | } 521 | } 522 | public class SkypeMessage 523 | { 524 | private DateTime _msgDate; 525 | private string _msgData; 526 | public DateTime msgDate { get { return _msgDate; } set { _msgDate = value; } } 527 | public string msgData { get { return _msgData; } } 528 | public string sender { get; set; } 529 | public string senderID { get; set; } 530 | public void setData(string xmlin) 531 | { 532 | _msgData = 533 | Regex.Replace( 534 | Regex.Replace( 535 | xmlin 536 | .Replace("<", "<") 537 | .Replace(">", ">") 538 | .Replace("&", "&") 539 | .Replace(""", "\"") 540 | .Replace("'", "'") 541 | .Replace("", "") 542 | .Replace(""," "), 543 | "", ""), 544 | "", ""); 545 | } 546 | public void setDate(string timestamp) 547 | { 548 | _msgDate=new DateTime(1970, 1, 1, 0, 0, 0, 0) 549 | .AddSeconds(int.Parse(timestamp)).ToLocalTime(); 550 | } 551 | } 552 | 553 | } 554 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/PortableSettings.cs: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------------------------- 2 | #region // Copyright (c) 2010, SIL International. All Rights Reserved. 3 | // 4 | // Copyright (c) 2010, SIL International. All Rights Reserved. 5 | // 6 | // Distributable under the terms of either the Common Public License or the 7 | // GNU Lesser General Public License, as specified in the LICENSING.txt file. 8 | // 9 | // 10 | // File: PortableSettingsProvider.cs 11 | // Responsibility: D. Olson 12 | // 13 | // 14 | // This class is based on a class by the same name found at 15 | // http://www.codeproject.com/KB/vb/CustomSettingsProvider.aspx. The original was written in 16 | // VB.Net so this is a C# port of that. Other changes include some variable name changes, 17 | // making the settings file path a public static property, special handling of string 18 | // collections, getting rid of the IsRoaming support and all-around method rewriting. 19 | // The original code is under the CPOL license (http://www.codeproject.com/info/cpol10.aspx). 20 | // 21 | // --------------------------------------------------------------------------------------------- 22 | #endregion 23 | using System; 24 | using System.Collections.Generic; 25 | using System.Collections.Specialized; 26 | using System.Configuration; 27 | using System.IO; 28 | using System.Text; 29 | using System.Windows.Forms; 30 | using System.Xml; 31 | 32 | namespace SkypeLogViewerLGG 33 | { 34 | /// ---------------------------------------------------------------------------------------- 35 | /// 36 | /// This class is a settings provider that allows applications to specify in what file and 37 | /// where in a file system it's settings will be stored. It's good for portable apps. 38 | /// 39 | /// ---------------------------------------------------------------------------------------- 40 | public class PortableSettingsProvider : SettingsProvider 41 | { 42 | // XML Root Node name. 43 | private const string Root = "Settings"; 44 | private const string StrCollectionAttrib = "stringcollection"; 45 | 46 | protected XmlDocument m_settingsXml; 47 | 48 | // This allows tests to specify a temp. location which can be deleted on test cleanup. 49 | public static string SettingsFileFolder { get; set; } 50 | 51 | /// ------------------------------------------------------------------------------------ 52 | /// 53 | /// 54 | /// 55 | /// ------------------------------------------------------------------------------------ 56 | public PortableSettingsProvider() 57 | { 58 | if (SettingsFileFolder == null) 59 | { 60 | var appFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 61 | appFolder = GetAppPath(); 62 | //appFolder = Path.Combine(appFolder, ApplicationName); 63 | if (!Directory.Exists(appFolder)) 64 | Directory.CreateDirectory(appFolder); 65 | 66 | SettingsFileFolder = appFolder; 67 | } 68 | } 69 | // Gets current executable path in order to determine where to read and write the config file 70 | public virtual string GetAppPath() 71 | { 72 | return new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName; 73 | } 74 | 75 | /// ------------------------------------------------------------------------------------ 76 | /// 77 | /// Initializes the specified name. 78 | /// 79 | /// ------------------------------------------------------------------------------------ 80 | public override void Initialize(string name, NameValueCollection nvc) 81 | { 82 | base.Initialize(ApplicationName, nvc); 83 | 84 | m_settingsXml = new XmlDocument(); 85 | 86 | try 87 | { 88 | m_settingsXml.Load(Path.Combine(SettingsFilePath, SettingsFilename)); 89 | } 90 | catch 91 | { 92 | XmlDeclaration dec = m_settingsXml.CreateXmlDeclaration("1.0", "utf-8", null); 93 | m_settingsXml.AppendChild(dec); 94 | XmlNode nodeRoot = m_settingsXml.CreateNode(XmlNodeType.Element, Root, null); 95 | m_settingsXml.AppendChild(nodeRoot); 96 | } 97 | } 98 | 99 | #region Properties 100 | /// ------------------------------------------------------------------------------------ 101 | /// 102 | /// Gets the name of the currently running application. 103 | /// 104 | /// ------------------------------------------------------------------------------------ 105 | public override string ApplicationName 106 | { 107 | get 108 | { 109 | return (Application.ProductName.Trim().Length > 0 ? Application.ProductName : 110 | Path.GetFileNameWithoutExtension(Application.ExecutablePath)); 111 | } 112 | set { } 113 | } 114 | 115 | /// ------------------------------------------------------------------------------------ 116 | /// 117 | /// Gets the path to the application's settings file. This path does not include the 118 | /// file name. 119 | /// 120 | /// ------------------------------------------------------------------------------------ 121 | public virtual string SettingsFilePath 122 | { 123 | get { return SettingsFileFolder; } 124 | } 125 | 126 | /// ------------------------------------------------------------------------------------ 127 | /// 128 | /// Gets only the name of the application settings file. 129 | /// 130 | /// ------------------------------------------------------------------------------------ 131 | public virtual string SettingsFilename 132 | { 133 | get { return ApplicationName + ".settings"; } 134 | } 135 | 136 | #endregion 137 | 138 | #region Methods for getting property values from XML. 139 | /// ------------------------------------------------------------------------------------ 140 | /// 141 | /// Gets a collection of property values. 142 | /// 143 | /// ------------------------------------------------------------------------------------ 144 | public override SettingsPropertyValueCollection GetPropertyValues( 145 | SettingsContext context, SettingsPropertyCollection props) 146 | { 147 | SettingsPropertyValueCollection propValues = new SettingsPropertyValueCollection(); 148 | 149 | foreach (SettingsProperty setting in props) 150 | propValues.Add(GetValue(setting)); 151 | 152 | return propValues; 153 | } 154 | 155 | /// ------------------------------------------------------------------------------------ 156 | /// 157 | /// Gets from the XML the value for the specified property. 158 | /// 159 | /// ------------------------------------------------------------------------------------ 160 | private SettingsPropertyValue GetValue(SettingsProperty setting) 161 | { 162 | var value = new SettingsPropertyValue(setting); 163 | value.IsDirty = false; 164 | value.SerializedValue = string.Empty; 165 | 166 | try 167 | { 168 | XmlNode node = m_settingsXml.SelectSingleNode(Root + "/" + setting.Name); 169 | 170 | // StringCollections will have an indicating attribute and they 171 | // receive special handling. 172 | if (node.Attributes.GetNamedItem(StrCollectionAttrib) != null && 173 | node.Attributes[StrCollectionAttrib].Value == "true") 174 | { 175 | var sc = new StringCollection(); 176 | foreach (XmlNode childNode in node.ChildNodes) 177 | sc.Add(childNode.InnerText); 178 | 179 | value.PropertyValue = sc; 180 | } 181 | else 182 | value.SerializedValue = node.InnerText; 183 | } 184 | catch 185 | { 186 | if ((setting.DefaultValue != null)) 187 | value.SerializedValue = setting.DefaultValue.ToString(); 188 | } 189 | 190 | return value; 191 | } 192 | 193 | #endregion 194 | 195 | #region Methods for saving property values to XML. 196 | /// ------------------------------------------------------------------------------------ 197 | /// 198 | /// Sets the values for the specified properties and saves the XML file in which 199 | /// they're stored. 200 | /// 201 | /// ------------------------------------------------------------------------------------ 202 | public override void SetPropertyValues(SettingsContext context, 203 | SettingsPropertyValueCollection propvals) 204 | { 205 | // Iterate through the settings to be stored. Only dirty settings are included 206 | // in propvals, and only ones relevant to this provider 207 | foreach (SettingsPropertyValue propVal in propvals) 208 | { 209 | if (propVal.Property.Attributes.ContainsKey(typeof(ApplicationScopedSettingAttribute))) 210 | continue; 211 | 212 | XmlElement settingNode = null; 213 | 214 | try 215 | { 216 | settingNode = (XmlElement)m_settingsXml.SelectSingleNode(Root + "/" + propVal.Name); 217 | } 218 | catch { } 219 | 220 | // Check if node exists. 221 | if ((settingNode != null)) 222 | SetPropNodeValue(settingNode, propVal); 223 | else 224 | { 225 | // Node does not exist so create one. 226 | settingNode = m_settingsXml.CreateElement(propVal.Name); 227 | SetPropNodeValue(settingNode, propVal); 228 | m_settingsXml.SelectSingleNode(Root).AppendChild(settingNode); 229 | } 230 | } 231 | 232 | try 233 | { 234 | m_settingsXml.Save(Path.Combine(SettingsFilePath, SettingsFilename)); 235 | } 236 | catch { } 237 | } 238 | 239 | /// ------------------------------------------------------------------------------------ 240 | /// 241 | /// Sets the value of a node to that found in the specified property. This method 242 | /// specially handles properties that are string collections. 243 | /// 244 | /// ------------------------------------------------------------------------------------ 245 | private void SetPropNodeValue(XmlNode propNode, SettingsPropertyValue propVal) 246 | { 247 | if (propVal.Property.PropertyType != typeof(StringCollection)) 248 | { 249 | propNode.InnerText = propVal.SerializedValue.ToString(); 250 | return; 251 | } 252 | 253 | if (propVal.PropertyValue == null) 254 | return; 255 | 256 | // At this point, we know we're dealing with a string collection, therefore, 257 | // create child nodes for each item in the collection. 258 | propNode.RemoveAll(); 259 | var attrib = m_settingsXml.CreateAttribute(StrCollectionAttrib); 260 | attrib.Value = "true"; 261 | propNode.Attributes.Append(attrib); 262 | int i = 0; 263 | foreach (string str in propVal.PropertyValue as StringCollection) 264 | { 265 | var node = m_settingsXml.CreateElement(propVal.Name + i++); 266 | node.AppendChild(m_settingsXml.CreateTextNode(str)); 267 | propNode.AppendChild(node); 268 | } 269 | } 270 | 271 | #endregion 272 | 273 | /// ------------------------------------------------------------------------------------ 274 | /// 275 | /// Gets a comma-delimited string from an array of integers. 276 | /// 277 | /// ------------------------------------------------------------------------------------ 278 | public static string GetStringFromIntArray(int[] array) 279 | { 280 | if (array == null) 281 | return string.Empty; 282 | 283 | StringBuilder bldr = new StringBuilder(); 284 | foreach (int i in array) 285 | bldr.AppendFormat("{0}, ", i); 286 | 287 | return bldr.ToString().TrimEnd(',', ' '); 288 | } 289 | 290 | /// ------------------------------------------------------------------------------------ 291 | /// 292 | /// Gets an int array from a comma-delimited string of numbers. 293 | /// 294 | /// ------------------------------------------------------------------------------------ 295 | public static int[] GetIntArrayFromString(string str) 296 | { 297 | List array = new List(); 298 | 299 | if (str != null) 300 | { 301 | string[] pieces = str.Split(','); 302 | foreach (string piece in pieces) 303 | { 304 | int i; 305 | if (int.TryParse(piece, out i)) 306 | array.Add(i); 307 | } 308 | } 309 | 310 | return array.ToArray(); 311 | } 312 | } 313 | } 314 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/PreferencesForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SkypeLogViewerLGG 2 | { 3 | partial class PreferencesForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 32 | this.textBox1Preview = new System.Windows.Forms.TextBox(); 33 | this.label2 = new System.Windows.Forms.Label(); 34 | this.textBox1custom = new System.Windows.Forms.TextBox(); 35 | this.radioButtonCustom = new System.Windows.Forms.RadioButton(); 36 | this.radioButtonOtherDefault = new System.Windows.Forms.RadioButton(); 37 | this.label1 = new System.Windows.Forms.Label(); 38 | this.radioButtonDefault1 = new System.Windows.Forms.RadioButton(); 39 | this.button1Save = new System.Windows.Forms.Button(); 40 | this.button1Cancel = new System.Windows.Forms.Button(); 41 | this.groupBox1.SuspendLayout(); 42 | this.SuspendLayout(); 43 | // 44 | // groupBox1 45 | // 46 | this.groupBox1.Controls.Add(this.textBox1Preview); 47 | this.groupBox1.Controls.Add(this.label2); 48 | this.groupBox1.Controls.Add(this.textBox1custom); 49 | this.groupBox1.Controls.Add(this.radioButtonCustom); 50 | this.groupBox1.Controls.Add(this.radioButtonOtherDefault); 51 | this.groupBox1.Controls.Add(this.label1); 52 | this.groupBox1.Controls.Add(this.radioButtonDefault1); 53 | this.groupBox1.Location = new System.Drawing.Point(26, 14); 54 | this.groupBox1.Name = "groupBox1"; 55 | this.groupBox1.Size = new System.Drawing.Size(362, 318); 56 | this.groupBox1.TabIndex = 0; 57 | this.groupBox1.TabStop = false; 58 | this.groupBox1.Text = "Log Format"; 59 | // 60 | // textBox1Preview 61 | // 62 | this.textBox1Preview.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 63 | this.textBox1Preview.Location = new System.Drawing.Point(9, 292); 64 | this.textBox1Preview.Name = "textBox1Preview"; 65 | this.textBox1Preview.ReadOnly = true; 66 | this.textBox1Preview.Size = new System.Drawing.Size(347, 20); 67 | this.textBox1Preview.TabIndex = 6; 68 | // 69 | // label2 70 | // 71 | this.label2.AutoSize = true; 72 | this.label2.Location = new System.Drawing.Point(9, 276); 73 | this.label2.Name = "label2"; 74 | this.label2.Size = new System.Drawing.Size(48, 13); 75 | this.label2.TabIndex = 5; 76 | this.label2.Text = "Preview:"; 77 | // 78 | // textBox1custom 79 | // 80 | this.textBox1custom.Location = new System.Drawing.Point(9, 238); 81 | this.textBox1custom.Name = "textBox1custom"; 82 | this.textBox1custom.Size = new System.Drawing.Size(347, 20); 83 | this.textBox1custom.TabIndex = 4; 84 | this.textBox1custom.Text = "[[Month]/[Day]/[Year] [Time]] [DisplayName]:"; 85 | this.textBox1custom.TextChanged += new System.EventHandler(this.updatePreview); 86 | // 87 | // radioButtonCustom 88 | // 89 | this.radioButtonCustom.AutoSize = true; 90 | this.radioButtonCustom.Location = new System.Drawing.Point(12, 215); 91 | this.radioButtonCustom.Name = "radioButtonCustom"; 92 | this.radioButtonCustom.Size = new System.Drawing.Size(60, 17); 93 | this.radioButtonCustom.TabIndex = 3; 94 | this.radioButtonCustom.TabStop = true; 95 | this.radioButtonCustom.Text = "Custom"; 96 | this.radioButtonCustom.UseVisualStyleBackColor = true; 97 | this.radioButtonCustom.CheckedChanged += new System.EventHandler(this.updatePreview); 98 | // 99 | // radioButtonOtherDefault 100 | // 101 | this.radioButtonOtherDefault.AutoSize = true; 102 | this.radioButtonOtherDefault.Location = new System.Drawing.Point(9, 176); 103 | this.radioButtonOtherDefault.Name = "radioButtonOtherDefault"; 104 | this.radioButtonOtherDefault.Size = new System.Drawing.Size(301, 17); 105 | this.radioButtonOtherDefault.TabIndex = 2; 106 | this.radioButtonOtherDefault.TabStop = true; 107 | this.radioButtonOtherDefault.Text = "[[Month]/[Day]/[Year] [Time]] [DisplayName] ([UserName]):"; 108 | this.radioButtonOtherDefault.UseVisualStyleBackColor = true; 109 | this.radioButtonOtherDefault.CheckedChanged += new System.EventHandler(this.updatePreview); 110 | // 111 | // label1 112 | // 113 | this.label1.AutoSize = true; 114 | this.label1.Location = new System.Drawing.Point(6, 27); 115 | this.label1.Name = "label1"; 116 | this.label1.Size = new System.Drawing.Size(75, 91); 117 | this.label1.TabIndex = 1; 118 | this.label1.Text = "Keywords:\r\n[DisplayName]\r\n[UserName]\r\n[Month]\r\n[Day]\r\n[Year]\r\n[Time]"; 119 | // 120 | // radioButtonDefault1 121 | // 122 | this.radioButtonDefault1.AutoSize = true; 123 | this.radioButtonDefault1.Location = new System.Drawing.Point(9, 138); 124 | this.radioButtonDefault1.Name = "radioButtonDefault1"; 125 | this.radioButtonDefault1.Size = new System.Drawing.Size(236, 17); 126 | this.radioButtonDefault1.TabIndex = 0; 127 | this.radioButtonDefault1.TabStop = true; 128 | this.radioButtonDefault1.Text = "[[Month]/[Day]/[Year] [Time]] [DisplayName]:"; 129 | this.radioButtonDefault1.UseVisualStyleBackColor = true; 130 | this.radioButtonDefault1.CheckedChanged += new System.EventHandler(this.updatePreview); 131 | // 132 | // button1Save 133 | // 134 | this.button1Save.Location = new System.Drawing.Point(315, 349); 135 | this.button1Save.Name = "button1Save"; 136 | this.button1Save.Size = new System.Drawing.Size(75, 23); 137 | this.button1Save.TabIndex = 1; 138 | this.button1Save.Text = "Save"; 139 | this.button1Save.UseVisualStyleBackColor = true; 140 | this.button1Save.Click += new System.EventHandler(this.button1Save_Click); 141 | // 142 | // button1Cancel 143 | // 144 | this.button1Cancel.Location = new System.Drawing.Point(234, 348); 145 | this.button1Cancel.Name = "button1Cancel"; 146 | this.button1Cancel.Size = new System.Drawing.Size(75, 23); 147 | this.button1Cancel.TabIndex = 2; 148 | this.button1Cancel.Text = "Cancel"; 149 | this.button1Cancel.UseVisualStyleBackColor = true; 150 | this.button1Cancel.Click += new System.EventHandler(this.button1Cancel_Click); 151 | // 152 | // PreferencesForm 153 | // 154 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 155 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 156 | this.ClientSize = new System.Drawing.Size(417, 383); 157 | this.Controls.Add(this.button1Cancel); 158 | this.Controls.Add(this.button1Save); 159 | this.Controls.Add(this.groupBox1); 160 | this.Name = "PreferencesForm"; 161 | this.Text = "PreferencesForm"; 162 | this.groupBox1.ResumeLayout(false); 163 | this.groupBox1.PerformLayout(); 164 | this.ResumeLayout(false); 165 | 166 | } 167 | 168 | #endregion 169 | 170 | private System.Windows.Forms.GroupBox groupBox1; 171 | private System.Windows.Forms.Label label1; 172 | private System.Windows.Forms.RadioButton radioButtonDefault1; 173 | private System.Windows.Forms.RadioButton radioButtonCustom; 174 | private System.Windows.Forms.RadioButton radioButtonOtherDefault; 175 | private System.Windows.Forms.Button button1Save; 176 | private System.Windows.Forms.Button button1Cancel; 177 | private System.Windows.Forms.TextBox textBox1custom; 178 | private System.Windows.Forms.TextBox textBox1Preview; 179 | private System.Windows.Forms.Label label2; 180 | } 181 | } -------------------------------------------------------------------------------- /SkypeLogViewerLGG/PreferencesForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | 10 | namespace SkypeLogViewerLGG 11 | { 12 | public partial class PreferencesForm : Form 13 | { 14 | private MainWindowForm mwf; 15 | public PreferencesForm(MainWindowForm inMwf) 16 | { 17 | this.mwf = inMwf; 18 | InitializeComponent(); 19 | LoadSettings(); 20 | } 21 | 22 | private void LoadSettings() 23 | { 24 | if (Properties.Settings.Default.FormatSelection == "Default") 25 | { 26 | this.radioButtonDefault1.Checked = true; 27 | } 28 | else if (Properties.Settings.Default.FormatSelection == "OtherDefault") 29 | { 30 | this.radioButtonOtherDefault.Checked = true; 31 | } 32 | else if (Properties.Settings.Default.FormatSelection == "Custom") 33 | { 34 | this.radioButtonCustom.Checked = true; 35 | } 36 | if(Properties.Settings.Default.CustomFormat!="")this.textBox1custom.Text = Properties.Settings.Default.CustomFormat; 37 | 38 | this.updatePreview(null,null); 39 | } 40 | 41 | private void button1Cancel_Click(object sender, EventArgs e) 42 | { 43 | this.Close(); 44 | } 45 | 46 | private void button1Save_Click(object sender, EventArgs e) 47 | { 48 | Properties.Settings.Default.Format = this.getFormat(); 49 | Properties.Settings.Default.CustomFormat = this.textBox1custom.Text; 50 | if (radioButtonDefault1.Checked) 51 | { 52 | Properties.Settings.Default.FormatSelection = "Default"; 53 | }else if (radioButtonOtherDefault.Checked) 54 | { 55 | Properties.Settings.Default.FormatSelection = "OtherDefault"; 56 | } 57 | else if (radioButtonCustom.Checked) 58 | { 59 | Properties.Settings.Default.FormatSelection = "Custom"; 60 | } 61 | Properties.Settings.Default.Save(); 62 | this.Close(); 63 | } 64 | 65 | private void updatePreview(object sender, EventArgs e) 66 | { 67 | SkypeMessage message = new SkypeMessage(); 68 | message.senderID = "lordgreggreg"; 69 | message.sender = "LGG"; 70 | message.setData("Hello World!"); 71 | message.msgDate = DateTime.Now; 72 | 73 | this.textBox1Preview.Text = mwf.formatMessage(message, this.getFormat()); 74 | } 75 | 76 | private String getFormat() 77 | { 78 | String format = "[[Month]/[Day]/[Year] [Time]] [DisplayName]:"; 79 | if (radioButtonOtherDefault.Checked) 80 | { 81 | format = "[[Month]/[Day]/[Year] [Time]] [DisplayName] ([UserName]):"; 82 | } 83 | if (radioButtonCustom.Checked) 84 | { 85 | format = textBox1custom.Text; 86 | } 87 | return format; 88 | } 89 | 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/PreferencesForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | 6 | namespace SkypeLogViewerLGG 7 | { 8 | static class Program 9 | { 10 | /// 11 | /// The main entry point for the application. 12 | /// 13 | [STAThread] 14 | static void Main() 15 | { 16 | Application.EnableVisualStyles(); 17 | Application.SetCompatibleTextRenderingDefault(false); 18 | Application.Run(new MainWindowForm()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SkypeLogViewerLGG")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("SkypeLogViewerLGG")] 13 | [assembly: AssemblyCopyright("Copyright © 2012")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("177870f8-37a4-4611-8c2e-7bba3cec99b4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.18010 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SkypeLogViewerLGG.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | public class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | public static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SkypeLogViewerLGG.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | public static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | public static System.Drawing.Bitmap SkypeLogLGG { 67 | get { 68 | object obj = ResourceManager.GetObject("SkypeLogLGG", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | public static System.Drawing.Bitmap SkypeLogSBLGG { 77 | get { 78 | object obj = ResourceManager.GetObject("SkypeLogSBLGG", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | public static System.Drawing.Bitmap SkypeLogSLGG { 87 | get { 88 | object obj = ResourceManager.GetObject("SkypeLogSLGG", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\SkypeLogLGG.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | 126 | ..\Resources\SkypeLogSBLGG.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 127 | 128 | 129 | ..\Resources\SkypeLogSLGG.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 130 | 131 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34014 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SkypeLogViewerLGG.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Configuration.SettingsProviderAttribute(typeof(SkypeLogViewerLGG.PortableSettingsProvider))] 28 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 29 | [global::System.Configuration.DefaultSettingValueAttribute("")] 30 | public string LastPath { 31 | get { 32 | return ((string)(this["LastPath"])); 33 | } 34 | set { 35 | this["LastPath"] = value; 36 | } 37 | } 38 | 39 | [global::System.Configuration.UserScopedSettingAttribute()] 40 | [global::System.Configuration.SettingsProviderAttribute(typeof(SkypeLogViewerLGG.PortableSettingsProvider))] 41 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 42 | [global::System.Configuration.DefaultSettingValueAttribute("")] 43 | public string CustomFormat { 44 | get { 45 | return ((string)(this["CustomFormat"])); 46 | } 47 | set { 48 | this["CustomFormat"] = value; 49 | } 50 | } 51 | 52 | [global::System.Configuration.UserScopedSettingAttribute()] 53 | [global::System.Configuration.SettingsProviderAttribute(typeof(SkypeLogViewerLGG.PortableSettingsProvider))] 54 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 55 | [global::System.Configuration.DefaultSettingValueAttribute("")] 56 | public string FormatSelection { 57 | get { 58 | return ((string)(this["FormatSelection"])); 59 | } 60 | set { 61 | this["FormatSelection"] = value; 62 | } 63 | } 64 | 65 | [global::System.Configuration.UserScopedSettingAttribute()] 66 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 67 | [global::System.Configuration.DefaultSettingValueAttribute("")] 68 | public string Format { 69 | get { 70 | return ((string)(this["Format"])); 71 | } 72 | set { 73 | this["Format"] = value; 74 | } 75 | } 76 | 77 | [global::System.Configuration.UserScopedSettingAttribute()] 78 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 79 | [global::System.Configuration.DefaultSettingValueAttribute("")] 80 | public string LastFolderPath { 81 | get { 82 | return ((string)(this["LastFolderPath"])); 83 | } 84 | set { 85 | this["LastFolderPath"] = value; 86 | } 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Resources/SkypeLogLGG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/Resources/SkypeLogLGG.png -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Resources/SkypeLogSBLGG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/Resources/SkypeLogSBLGG.png -------------------------------------------------------------------------------- /SkypeLogViewerLGG/Resources/SkypeLogSLGG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/Resources/SkypeLogSLGG.png -------------------------------------------------------------------------------- /SkypeLogViewerLGG/SkypeLogLGG.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/SkypeLogLGG.ico -------------------------------------------------------------------------------- /SkypeLogViewerLGG/SkypeLogViewerLGG.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | x86 6 | 8.0.30703 7 | 2.0 8 | {71AC519A-87B3-4620-ABE0-A4831B9D8990} 9 | WinExe 10 | Properties 11 | SkypeLogViewerLGG 12 | SkypeLogViewerLGG 13 | v3.5 14 | 512 15 | 16 | 17 | x86 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | x86 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | SkypeLogLGG.ico 37 | 38 | 39 | false 40 | 41 | 42 | 5F972E42ED816A3D2BA07D99262A60E6D0BB14E0 43 | 44 | 45 | SkypeLogViewerLGG_TemporaryKey.pfx 46 | 47 | 48 | 49 | 50 | 51 | 52 | False 53 | .\System.Data.SQLite.dll 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | Form 66 | 67 | 68 | AboutForm.cs 69 | 70 | 71 | Form 72 | 73 | 74 | HelpForm.cs 75 | 76 | 77 | Form 78 | 79 | 80 | MainWindowForm.cs 81 | 82 | 83 | 84 | Form 85 | 86 | 87 | PreferencesForm.cs 88 | 89 | 90 | 91 | 92 | AboutForm.cs 93 | 94 | 95 | HelpForm.cs 96 | 97 | 98 | MainWindowForm.cs 99 | Designer 100 | 101 | 102 | PreferencesForm.cs 103 | 104 | 105 | PublicResXFileCodeGenerator 106 | Resources.Designer.cs 107 | Designer 108 | 109 | 110 | True 111 | Resources.resx 112 | True 113 | 114 | 115 | 116 | SettingsSingleFileGenerator 117 | Settings.Designer.cs 118 | 119 | 120 | True 121 | Settings.settings 122 | True 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 143 | -------------------------------------------------------------------------------- /SkypeLogViewerLGG/SkypeLogViewerLGG_TemporaryKey.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/SkypeLogViewerLGG_TemporaryKey.pfx -------------------------------------------------------------------------------- /SkypeLogViewerLGG/System.Data.SQLite.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LGGGreg/skype-log-viewer/acf8e8cda7d2389389ad44a5c2debc504b0db443/SkypeLogViewerLGG/System.Data.SQLite.dll -------------------------------------------------------------------------------- /SkypeLogViewerLGG/app.config: -------------------------------------------------------------------------------- 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 | --------------------------------------------------------------------------------