123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- using MediaDevices;
- using Mtp2Dav.MtpStore;
- using Shell32;
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- using System.Windows.Forms;
- using Mtp2Dav.MtpStore._1d2086a502937936ebc6bfe19cfa15d855be1c31;
- using Mtp2Dav.WebDAVSharp.Server._1d2086a502937936ebc6bfe19cfa15d855be1c31;
- namespace Mtp2Dav
- {
- using Utilities;
- using WebDAVSharp.Server;
- public partial class MainForm : Form
- {
- private MediaDevice _connectedDevice;
- private WebDavServer _runingDavServer;
- //private NetworkDrive _mappedDrive;
- private string _mappedDriveLetter;
- private static IPEndPoint GetEndPoint()
- {
- var bufRndIp = new byte[] { 127, 0, 0, 1 };
- var sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- sck.Bind(new IPEndPoint(new IPAddress(bufRndIp), 0));
- sck.Listen(0);
- var end = (IPEndPoint)sck.LocalEndPoint;
- sck.Close();
- return end;
- }
- private void RefreshDevices()
- {
- lvDevices.SelectedIndices.Clear();
- foreach (ListViewItem item in lvDevices.Items)
- {
- ((MediaDevice)item.Tag).Dispose();
- }
- lvDevices.Items.Clear();
- var devs = MediaDevice.GetDevices();
- foreach (var device in devs)
- {
- lvDevices.Items.Add(new ListViewItem
- {
- ImageKey = "Default",
- Text = device.FriendlyName + "(" + device.Description.Trim() + ")",
- SubItems = { device.Manufacture, device.DeviceId },
- ToolTipText = device.DeviceId,
- Tag = device
- });
- }
- //Refresh drives
- cboDrive.DataSource = Enumerable.Range('A', 'Z' - 'A' + 1)
- .Select(i => (char)i + "")
- .Except(DriveInfo.GetDrives().Select(s => s.Name.Replace(":\\", "")))
- .OrderByDescending(p => p)
- .ToArray();
- }
- public MainForm()
- {
- InitializeComponent();
- }
- private void MainForm_Shown(object sender, EventArgs e)
- {
- #if DEBUG
- chkFullBuf.Enabled = false;
- #endif
- ilIcon.Images.Add("Default", Icon);
- RefreshDevices();
- }
- private void btnRefresh_Click(object sender, EventArgs e)
- {
- RefreshDevices();
- }
- private void lvDevices_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (lvDevices.SelectedIndices.Count == 0)
- {
- btnConnect.Enabled = false;
- }
- else
- {
- btnConnect.Enabled = true;
- }
- }
- private void btnConnect_Click(object sender, EventArgs e)
- {
- if (lvDevices.SelectedIndices.Count == 0)
- {
- return;
- }
- var device = (MediaDevice)lvDevices.SelectedItems[0].Tag;
- device.Connect();
- var webDavMtpStore = new WebDavMtpStore(device, chkEnableRo.Checked);
- if (chkFullBuf.Checked)
- webDavMtpStore.FullBuf();
- var end = GetEndPoint();
- var davServer = new WebDavServer(webDavMtpStore);
- davServer.Start($"http://{end}/");
- Thread.Sleep(500);
- //var nd = new NetworkDrive();
- //nd.LocalDrive = cboDrive.Text;
- //nd.Persistent = false;
- //nd.PromptForCredentials = false;
- //nd.SaveCredentials = false;
- //nd.ShareName = $@"\\{end.Address}@{end.Port}\";
- //nd.Comment = "Mtp2Dav";
- //nd.MapDrive();
- //_mappedDrive = nd;
- if (chkMapDrive.Checked)
- {
- var r = Cmd.NetUse(cboDrive.Text, $@"\\{end.Address}@{end.Port}\");
- if (r == 0)
- {
- _mappedDriveLetter = cboDrive.Text;
- Process.Start(_mappedDriveLetter + ":");
- ((Folder2)new ShellClass().NameSpace(_mappedDriveLetter + @":\")).Self.Name = "Mtp2Dav Drive";
- }
- else
- {
- _mappedDriveLetter = null;
- MessageBox.Show("Drive mapping fail. We will direct access.");
- Process.Start($@"\\{end.Address}@{end.Port}\");
- }
- }
- else
- {
- _mappedDriveLetter = null;
- Process.Start($@"\\{end.Address}@{end.Port}\");
- }
- _connectedDevice = device;
- _runingDavServer = davServer;
- lvDevices.Enabled =
- btnRefresh.Enabled =
- btnConnect.Enabled =
- cboDrive.Enabled =
- false;
- btnDisconnect.Enabled =
- true;
- }
- private void btnDisconnect_Click(object sender, EventArgs e)
- {
- //_mappedDrive.UnMapDrive();
- if (_mappedDriveLetter != null)
- {
- var r = Cmd.NetUseDriveLetterDelete(_mappedDriveLetter);
- if (r != 0)
- {
- MessageBox.Show("Drive unmapping fail. Please manual unmapping.");
- //new NetworkDrive().ShowDisconnectDialog(this);
- }
- }
- _runingDavServer.Stop();
- _connectedDevice.Disconnect();
- btnDisconnect.Enabled =
- false;
- lvDevices.Enabled =
- btnRefresh.Enabled =
- cboDrive.Enabled =
- btnConnect.Enabled =
- true;
- }
- private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
- {
- if (btnDisconnect.Enabled)
- btnDisconnect_Click(null, null); //so dirty :)
- }
- }
- }
|