private void c_btnTBCWowDirectoryBrowse_Click(object sender, EventArgs e)
 {
     VF.FolderSelectDialog folderSelectDialog = new VF.FolderSelectDialog();
     folderSelectDialog.Title            = "Please find the WoW The Burning Crusade Directory for me";
     folderSelectDialog.InitialDirectory = Settings.GetWowDirectory(WowVersionEnum.TBC);
     if (folderSelectDialog.ShowDialog() == true)
     {
         c_txtTBCWowDirectory.Text = folderSelectDialog.FileName;
         if (c_txtTBCWowDirectory.Text.EndsWith("\\") == false && c_txtTBCWowDirectory.Text.EndsWith("/") == false)
         {
             c_txtTBCWowDirectory.Text += "\\";
         }
         if (WowUtility.IsValidWowDirectory(c_txtTBCWowDirectory.Text) == false)
         {
             c_txtTBCWowDirectory.ForeColor = Color.Red;
             Utility.MessageBoxShow(c_txtTBCWowDirectory.Text + " is not a valid WoW The Burning Crusade Directory. \r\nPlease choose the correct directory where WoW TBC is installed.");
         }
         else
         {
             if (WowUtility.IsWowDirectoryTBC(c_txtTBCWowDirectory.Text) == true)
             {
                 c_txtTBCWowDirectory.ForeColor = Color.Black;
             }
             else
             {
                 c_txtTBCWowDirectory.ForeColor = Color.Red;
                 Utility.MessageBoxShow(c_txtTBCWowDirectory.Text + " is not a valid WoW The Burning Crusade Directory. \r\nPlease choose the correct directory where WoW TBC is installed.");
             }
         }
     }
 }
Esempio n. 2
0
        internal static void ReinstallAddon(string _AddonName, WowVersionEnum _WowVersion)
        {
            //Delete WTF files
            var savedVariableFiles = WowUtility.GetPerCharacterSavedVariableFilePaths(_AddonName, _WowVersion);

            savedVariableFiles.AddRange(WowUtility.GetSavedVariableFilePaths(_AddonName, _WowVersion));
            foreach (string savedVariableFile in savedVariableFiles)
            {
                Utility.DeleteFile(savedVariableFile);
            }
            //Delete WTF files
        }
Esempio n. 3
0
        internal static string BackupAddons(List <string> _AddonNames, WowVersionEnum _WowVersion, AddonBackupMode _BackupMode = AddonBackupMode.BackupWTF_And_AddonFiles)
        {
            int    fileID         = System.Threading.Interlocked.Increment(ref g_UniqueFileIDCounter);
            string backupFileName = StaticValues.LauncherBackupsDirectory + DateTime.Now.ToString("yyyy_MM_dd") + "/BackupAddons_" + DateTime.Now.ToString("HH_mm_ss") + "." + fileID + ".zip";

            Utility.AssertFilePath(backupFileName);

            ZipFile zipFile;

            if (System.IO.File.Exists(backupFileName) == true)
            {
                backupFileName = Utility.ConvertToUniqueFilename(backupFileName, '.');
            }
            if (System.IO.File.Exists(backupFileName) == true)
            {
                throw new Exception("Backup file already exists");
            }

            zipFile = ZipFile.Create(backupFileName);

            zipFile.BeginUpdate();

            foreach (var addonName in _AddonNames)
            {
                if (_BackupMode.HasFlag(AddonBackupMode.BackupWTF))
                {
                    string wtfAccStartPath    = Settings.GetWowDirectory(_WowVersion);
                    var    savedVariableFiles = WowUtility.GetPerCharacterSavedVariableFilePaths(addonName, _WowVersion);
                    savedVariableFiles.AddRange(WowUtility.GetSavedVariableFilePaths(addonName, _WowVersion));

                    foreach (string savedVariableFile in savedVariableFiles)
                    {
                        zipFile.Add(savedVariableFile, savedVariableFile.Substring(wtfAccStartPath.Length));
                    }
                }
                if (_BackupMode.HasFlag(AddonBackupMode.BackupAddonFiles))
                {
                    if (System.IO.Directory.Exists(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addonName))
                    {
                        zipFile.AddDirectoryFilesRecursive(Settings.GetWowDirectory(_WowVersion), Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addonName);
                    }
                }
            }
            zipFile.CommitUpdate();
            zipFile.Close();
            return(backupFileName);
        }
Esempio n. 4
0
        internal static bool UninstallAddon(string _AddonName, WowVersionEnum _WowVersion)
        {
            if (System.IO.Directory.Exists(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + _AddonName))
            {
                Utility.DeleteDirectory(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + _AddonName);

                //Delete WTF files
                var savedVariableFiles = WowUtility.GetPerCharacterSavedVariableFilePaths(_AddonName, _WowVersion);
                savedVariableFiles.AddRange(WowUtility.GetSavedVariableFilePaths(_AddonName, _WowVersion));
                foreach (string savedVariableFile in savedVariableFiles)
                {
                    Utility.DeleteFile(savedVariableFile);
                }
                //Delete WTF files
            }
            return(System.IO.Directory.Exists(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + _AddonName) == false);
        }
Esempio n. 5
0
 private void c_btnBrowse_Click(object sender, EventArgs e)
 {
     VF.FolderSelectDialog folderSelectDialog = new VF.FolderSelectDialog();
     folderSelectDialog.Title            = "Please find the WoW Classic(or TBC) Directory for me";
     folderSelectDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
     if (folderSelectDialog.ShowDialog() == true)
     {
         c_txtWowDirectory.Text = folderSelectDialog.FileName;
         if (WowUtility.IsValidWowDirectory(c_txtWowDirectory.Text) == false)
         {
             c_txtWowDirectory.ForeColor = Color.Red;
             Utility.MessageBoxShow(c_txtWowDirectory.Text + " is not a valid Wow Directory. \r\nPlease choose the correct directory where Wow is installed.");
         }
         else
         {
             c_txtWowDirectory.ForeColor = Color.Black;
         }
     }
 }
Esempio n. 6
0
        internal static List <string> InstallAddonPackage(string _AddonZipFilePackage, WowVersionEnum _WowVersion, Action <float> _InstallProgress = null, bool _ClearWTFSettings = false)
        {
            List <string> addonsInPackage = GetAddonsInAddonPackage(_AddonZipFilePackage);

            _InstallProgress(0.2f);
            string backupFile = BackupAddons(addonsInPackage, _WowVersion);

            _InstallProgress(0.4f);
            for (int i = 0; i < addonsInPackage.Count; ++i)
            {
                string addon = addonsInPackage[i];
                if (_ClearWTFSettings == true)
                {
                    var savedVariableFiles = WowUtility.GetPerCharacterSavedVariableFilePaths(addon, _WowVersion);
                    savedVariableFiles.AddRange(WowUtility.GetSavedVariableFilePaths(addon, _WowVersion));
                    foreach (string savedVariableFile in savedVariableFiles)
                    {
                        Utility.DeleteFile(savedVariableFile);
                    }
                }
                if (System.IO.Directory.Exists(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addon))
                {
                    Utility.DeleteDirectory(Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\" + addon);
                }
                _InstallProgress(0.4f + ((float)(i + 1) / (float)addonsInPackage.Count) * 0.4f);
            }

            _InstallProgress(0.8f);
            try
            {
                FastZip fastZip = new FastZip();
                fastZip.ExtractZip(_AddonZipFilePackage, Settings.GetWowDirectory(_WowVersion) + "Interface\\AddOns\\", null);
                _InstallProgress(1.0f);
                return(addonsInPackage);
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                Utility.MessageBoxShow("There was an error extracting the AddonPackage, Backup of anything deleted/replaced exists in the \"" + backupFile + "\" unfortunately automatic restoration is not implemented yet");
            }
            return(null);
        }
Esempio n. 7
0
 private void c_btnOK_Click(object sender, EventArgs e)
 {
     if (WowUtility.IsValidWowDirectory(c_txtWowDirectory.Text) == true)
     {
         if (WowUtility.IsWowDirectoryClassic(c_txtWowDirectory.Text) == true)
         {
             Settings.Instance._WowDirectory = c_txtWowDirectory.Text;
             if (Settings.Instance._WowDirectory.EndsWith("\\") == false && Settings.Instance._WowDirectory.EndsWith("/") == false)
             {
                 Settings.Instance._WowDirectory += "\\";
             }
             Settings.Save();
             Close();
         }
         else if (WowUtility.IsWowDirectoryTBC(c_txtWowDirectory.Text) == true)
         {
             Utility.MessageBoxShow("Please note that this Launcher was originally made for WoW Classic and that some features may not work 100% for WoW TBC. \r\nPlease report any bugs and errors found on the forum at forum.realmplayers.com");
             Settings.Instance._WowDirectory = c_txtWowDirectory.Text;
             if (Settings.Instance._WowDirectory.EndsWith("\\") == false && Settings.Instance._WowDirectory.EndsWith("/") == false)
             {
                 Settings.Instance._WowDirectory += "\\";
             }
             Settings.Instance._WowTBCDirectory = Settings.Instance._WowDirectory;
             Settings.Save();
             Close();
         }
         else
         {
             Utility.MessageBoxShow(c_txtWowDirectory.Text + " is not a valid Wow Directory. \r\nPlease choose the correct directory where Wow is installed.");
         }
     }
     else
     {
         c_txtWowDirectory.ForeColor = Color.Red;
         Utility.MessageBoxShow(c_txtWowDirectory.Text + " is not a valid Wow Directory. \r\nPlease choose the correct directory where Wow is installed.");
     }
 }
        private void c_btnClose_Click(object sender, EventArgs e)
        {
            if (WowUtility.IsValidWowDirectory(c_txtWowDirectory.Text) == false)
            {
                var dialogResult = Utility.MessageBoxShow("The specified WoW Classic Directory is not valid. Only valid WoW Classic Directory can be used. Use the old specified \"" + Settings.GetWowDirectory(WowVersionEnum.Vanilla) + "\"?", "Not valid Wow Directory", MessageBoxButtons.YesNo);
                if (dialogResult == System.Windows.Forms.DialogResult.No)
                {
                    c_txtWowDirectory.ForeColor = Color.Red;
                }
                else//if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                {
                    c_txtWowDirectory.Text = Settings.GetWowDirectory(WowVersionEnum.Vanilla);
                }
                return;
            }
            else
            {
                if (c_txtWowDirectory.Text.EndsWith("\\") == false && c_txtWowDirectory.Text.EndsWith("/") == false)
                {
                    c_txtWowDirectory.Text = c_txtWowDirectory.Text + "\\";
                }
                Settings.Instance._WowDirectory = c_txtWowDirectory.Text;
            }
            if (c_cbxEnableTBC.Checked == true)
            {
                if (WowUtility.IsValidWowDirectory(c_txtTBCWowDirectory.Text) == false)
                {
                    if (Settings.HaveTBC == true)
                    {
                        var dialogResult = Utility.MessageBoxShow("The specified WoW The Burning Crusade Directory is not valid. Only valid WoW TBC Directory can be used. Use the old specified \"" + Settings.GetWowDirectory(WowVersionEnum.TBC) + "\"?", "Not valid Wow Directory", MessageBoxButtons.YesNo);
                        if (dialogResult == System.Windows.Forms.DialogResult.No)
                        {
                            c_txtTBCWowDirectory.ForeColor = Color.Red;
                        }
                        else//if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                        {
                            c_txtTBCWowDirectory.Text = Settings.GetWowDirectory(WowVersionEnum.TBC);
                        }
                        return;
                    }
                    else
                    {
                        var dialogResult = Utility.MessageBoxShow("The specified WoW The Burning Crusade Directory is not valid. Only valid WoW TBC Directory can be used. Disable the use of WoW TBC Directory?", "Not valid Wow Directory", MessageBoxButtons.YesNo);
                        if (dialogResult == System.Windows.Forms.DialogResult.No)
                        {
                            c_txtTBCWowDirectory.ForeColor = Color.Red;
                        }
                        else//if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                        {
                            c_txtTBCWowDirectory.ForeColor = Color.Black;
                            c_cbxEnableTBC.Checked         = false;
                            c_txtTBCWowDirectory.Text      = "";
                        }
                        return;
                    }
                }
                else
                {
                    if (c_txtTBCWowDirectory.Text.EndsWith("\\") == false && c_txtTBCWowDirectory.Text.EndsWith("/") == false)
                    {
                        c_txtTBCWowDirectory.Text = c_txtTBCWowDirectory.Text + "\\";
                    }
                    Settings.Instance._WowTBCDirectory = c_txtTBCWowDirectory.Text;
                }
            }
            else
            {
                Settings.Instance._WowTBCDirectory = "";
            }

            Settings.Instance.RunWoWNotAdmin     = c_cbxRunNotAdmin.Checked;
            Settings.Instance.AutoHideOldNews    = c_cbxAutoHide.Checked;
            Settings.Instance.AutoUpdateVFAddons = c_cbAutoUpdateVF.Checked;
            //Settings.Instance.UseWoWNoDelay = c_cbxWoWNoDelay.Checked;
            Settings.Instance.AutoRefreshNews        = c_cbAutoRefresh.Checked;
            Settings.Instance.NewsSources_Feenix     = c_cbxFeenixNews.Checked;
            Settings.Instance.NewsSources_Nostalrius = c_cbxNostalriusNews.Checked;
            Settings.Instance.NewsSources_Kronos     = c_cbxKronosNews.Checked;

            if (RealmPlayersUploader.IsValidUserID(Settings.UserID) == true)
            {
                Settings.Instance.ContributeRealmPlayers  = c_cbContributeRealmPlayers.Checked;
                Settings.Instance.ContributeRaidStats     = c_cbContributeRaidStats.Checked;
                Settings.Instance.Wait5SecondsAfterUpload = c_cbxWait5Seconds.Checked;
            }
            Close();
        }
Esempio n. 9
0
        private void c_lbAddons_SelectedIndexChanged(object sender, EventArgs e)
        {
            string addonName = (string)c_lbAddons.SelectedItem;

            if (m_AddonInfos.ContainsKey(addonName))
            {
                var addonInfo = m_AddonInfos[addonName];
                c_gbAddonInfo.Text     = "Information for Addon \"" + addonName + "\"";
                c_txtAddonTitle.Text   = WowUtility.ConvertNoColor(addonInfo.m_AddonTitle);
                c_txtAddonVersion.Text = addonInfo.m_VersionString;
                c_txtAuthor.Text       = addonInfo.m_Author;
                c_txtNotes.Text        = addonInfo.m_Notes;

                c_clbAddonStatus.ItemCheck -= c_clbAddonStatus_ItemCheck;
                c_clbAddonStatus.Items.Clear();
                var addonStatuses = m_AddonsWTF.GetAddonStatus(addonName);
                foreach (var addonStatusEValue in addonStatuses)
                {
                    var addonStatus = addonStatusEValue;
                    int lastIndex   = m_AddonStatusChanges.FindLastIndex((_Value) => { return(_Value.Item1 == addonName && _Value.Item2.IsSameChar(addonStatus)); });
                    if (lastIndex != -1)
                    {
                        addonStatus = m_AddonStatusChanges[lastIndex].Item2;
                    }
                    if (addonStatus.Enabled == AddonStatus.Enum.Enabled)
                    {
                        c_clbAddonStatus.Items.Add(new clbAddonStatusItem(addonStatusEValue), true);
                    }
                    else if (addonStatus.Enabled == AddonStatus.Enum.Disabled)
                    {
                        c_clbAddonStatus.Items.Add(new clbAddonStatusItem(addonStatusEValue), false);
                    }
                    else if (addonStatus.Enabled == AddonStatus.Enum.Default)
                    {
                        c_clbAddonStatus.Items.Add(new clbAddonStatusItem(addonStatusEValue), CheckState.Indeterminate);
                    }
                }
                c_clbAddonStatus.ItemCheck += c_clbAddonStatus_ItemCheck;
                c_lblEnabledFor.Text        = "\"" + addonName + "\" is enabled for:";

                var neededForAddons = m_AddonInfos.Where((_Value) =>
                {
                    if (_Value.Value != null)
                    {
                        return(_Value.Value.m_Dependencies.Contains(addonName));
                    }
                    else
                    {
                        return(false);
                    }
                });
                c_lbNeededFor.Items.Clear();
                foreach (var neededForAddon in neededForAddons)
                {
                    c_lbNeededFor.Items.Add(neededForAddon.Key);
                }
                c_lblNeededFor.Text = "\"" + addonName + "\" is needed for addons:";

                /*c_lbDependencies.Items.Clear();
                 * c_lbDependencies.Items.AddRange(addonInfo.m_Dependencies.ToArray());
                 *
                 * c_lbSavedVariables.Items.Clear();
                 * c_lbSavedVariables.Items.AddRange(addonInfo.m_SavedVariables.ToArray());
                 *
                 * c_lbSavedVariablesPerCharacter.Items.Clear();
                 * c_lbSavedVariablesPerCharacter.Items.AddRange(addonInfo.m_SavedVariablesPerCharacter.ToArray());*/
            }
            else
            {
                c_gbAddonInfo.Text     = "null";
                c_txtAddonTitle.Text   = "null";
                c_txtAddonVersion.Text = "null";
                c_txtAuthor.Text       = "null";
                c_txtNotes.Text        = "null";


                c_clbAddonStatus.ItemCheck -= c_clbAddonStatus_ItemCheck;
                c_clbAddonStatus.Items.Clear();
                c_lblEnabledFor.Text = "null";
                c_lbNeededFor.Items.Clear();
                c_lblNeededFor.Text = "null";
            }
        }
Esempio n. 10
0
        internal static List <string> SendAddonData(string _UserID, string _AddonName, WowVersionEnum _WowVersion, string _ClearLuaVariableName, int _LuaVariableDataLengthThreshold, out bool _SentAll)
        {
            var savedVariableFiles = WowUtility.GetSavedVariableFilePaths(_AddonName, _WowVersion);//For Accounts only

            _LuaVariableDataLengthThreshold = _LuaVariableDataLengthThreshold + 12 /*newlines = {} osv osv*/ + _ClearLuaVariableName.Length;
            VF.NetworkClient netClient = sm_Client;
            if (netClient != null && netClient.IsConnected() == false)
            {
                netClient.Disconnect();
                netClient = null;
            }
            List <string> sentAddonFiles = new List <string>();

            _SentAll = true;//Default läge
            try
            {
                foreach (var luaFilePath in savedVariableFiles)
                {
                    string luaFileData    = System.IO.File.ReadAllText(luaFilePath);
                    string resultFileData = "";
                    string variableData   = "";
                    if (WowUtility.ExtractLuaVariableFromFile(luaFileData, _ClearLuaVariableName, out resultFileData, out variableData) == true)
                    {
                        if (variableData.Length < _LuaVariableDataLengthThreshold)
                        {
                            continue;
                        }
                        if (netClient == null)
                        {
                            Logger.ConsoleWriteLine("Trying to connect to server...", ConsoleColor.Gray);
                            netClient = new VF.NetworkClient(g_Host, g_Port); //realmplayers.com
                            Logger.ConsoleWriteLine("Connected to server!", ConsoleColor.Green);
                        }

                        WLN_UploadPacket_AddonData addonData = new WLN_UploadPacket_AddonData();
                        addonData.AddonName  = _AddonName;
                        addonData.UserID     = _UserID;
                        addonData.FileStatus = WowUtility.GetFileStatus(luaFilePath);
                        addonData.Data       = luaFileData;
                        var newMessage = netClient.CreateMessage();
                        newMessage.WriteByte((byte)WLN_PacketType.Upload_AddonData);
                        newMessage.WriteClass(addonData);
                        netClient.WaitForConnect(TimeSpan.FromSeconds(60));
                        netClient.SendMessage(newMessage);
                        Logger.ConsoleWriteLine("Sent SavedVariables file \"" + luaFilePath + "\". Waiting for Response...", ConsoleColor.Gray);
                        WLN_UploadPacket_SuccessResponse response;
                        if (netClient.RecvPacket_VF(WLN_PacketType.Upload_SuccessResponse, out response, TimeSpan.FromSeconds(60)) == true)
                        {
                            Logger.ConsoleWriteLine("Received Response. Data was sent successfully!. Deleting old data", ConsoleColor.Gray);
                            sentAddonFiles.Add(luaFilePath);
                            if (response.MessageToUser != "")
                            {
                                Utility.MessageBoxShow(response.MessageToUser, "Message from Server");
                            }
                            //TODO: Do something with "response.MessageToUser"
                            System.IO.File.WriteAllText(luaFilePath, resultFileData); //Save the lua file with the variable cleared

                            Logger.ConsoleWriteLine("Operation Successfull! Preparing for next file.", ConsoleColor.Green);
                        }
                        else
                        {
                            Logger.ConsoleWriteLine("Operation Failed! Preparing for next file.", ConsoleColor.Red);
                            _SentAll = false;
                        }
                    }
                    else
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogException(ex);
                _SentAll = false;
            }
            finally
            {
                if (_SentAll == false)
                {
                    if (netClient != null)
                    {
                        netClient.Disconnect();
                        netClient = null;
                    }
                }
                sm_Client = netClient;
            }
            return(sentAddonFiles);
        }