From 23665ed4c978512037668f6053d56dbb27a53d45 Mon Sep 17 00:00:00 2001 From: lordmulder Date: Mon, 28 Mar 2011 04:26:47 +0200 Subject: [PATCH] Implemented a new "disk observer" thread which will constantly check the free diskspace of the disk where the TEMP folder is located. If the diskspace drops below a critical limit (currently 100 MB) a warning message is emitted. --- LameXP.vcproj | 42 +++ doc/Changelog.html | 3 +- etc/Translation/Blank.ts | 11 + etc/Translation/LameXP_DE.ts | 11 + etc/Translation/LameXP_ES.ts | 11 + etc/Translation/LameXP_FR.ts | 11 + etc/Translation/LameXP_IT.ts | 11 + etc/Translation/LameXP_RU.ts | 513 +--------------------------------- etc/Translation/LameXP_UK.ts | 11 + etc/Translation/update.lst | 2 + gui/MetaInfo.ui | 5 +- res/Icons.qrc | 3 + res/localization/LameXP_DE.qm | Bin 56385 -> 56765 bytes res/localization/LameXP_ES.qm | Bin 52059 -> 52135 bytes res/localization/LameXP_FR.qm | Bin 52771 -> 52853 bytes res/localization/LameXP_IT.qm | Bin 40335 -> 40413 bytes res/localization/LameXP_RU.qm | Bin 48368 -> 48442 bytes res/localization/LameXP_UK.qm | Bin 10126 -> 10200 bytes src/Config.h | 4 +- src/Dialog_About.cpp | 4 +- src/Dialog_MainWindow.cpp | 5 + src/Dialog_Processing.cpp | 25 +- src/Dialog_Processing.h | 2 + src/Model_Progress.cpp | 10 +- src/Model_Progress.h | 6 +- src/Thread_DiskObserver.cpp | 114 ++++++++ src/Thread_DiskObserver.h | 48 ++++ 27 files changed, 337 insertions(+), 515 deletions(-) create mode 100644 src/Thread_DiskObserver.cpp create mode 100644 src/Thread_DiskObserver.h diff --git a/LameXP.vcproj b/LameXP.vcproj index 249d24f0..c0229ecc 100644 --- a/LameXP.vcproj +++ b/LameXP.vcproj @@ -500,6 +500,10 @@ RelativePath=".\src\ShellIntegration.cpp" > + + @@ -1432,6 +1436,40 @@ RelativePath=".\src\Targetver.h" > + + + + + + + + + + + @@ -1738,6 +1776,10 @@ RelativePath=".\tmp\MOC_ShellIntegration.cpp" > + + diff --git a/doc/Changelog.html b/doc/Changelog.html index 6a6f3763..7d473dc8 100644 --- a/doc/Changelog.html +++ b/doc/Changelog.html @@ -12,7 +12,7 @@
  • Added an option to select a user-defined TEMP directory
  • Added an option to shutdown the computer as soon as all files are completed
  • Added an option to add directories recursively -
  • Added support for embedding cover artwork (currently works with LAME and Nero AAC only) +
  • Added support for embedding cover artwork (currently works with LAME, FLAC and Nero AAC only)
  • Updated Qt runtime libraries to v4.7.2
  • Updated LAME encoder to v3.99.0.15 (2011-03-22), compiled with ICL 12.0.2
  • Updated Vorbis encoder to v2.87 using aoTuV Beta-6.02 (2011-02-28), compiled with ICL 11.1 and MSVC 9.0 @@ -21,6 +21,7 @@
  • Updated MediaInfo to v0.7.43 (2011-03-20), compiled with ICL 12.0.2 and MSVC 9.0
  • Updated language files (big thank-you to all contributors !!!)
  • Fixed a bug that caused AAC encoding to fail in CBR mode (the "-2pass" parameter was set wrongly) +
  • A warning message will be emitted, if diskspace drops below a critical limit while processing
    Changes between v3.18 and v4.00:
      diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index e8f289fa..60261f0d 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -7,6 +7,10 @@ LameXP &minus; Audio Encoder Front-end + + DEMO VERSION + + Please visit %1 for news and updates! @@ -238,6 +242,13 @@ + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts index 2dc2f6f4..bbf04387 100644 --- a/etc/Translation/LameXP_DE.ts +++ b/etc/Translation/LameXP_DE.ts @@ -195,6 +195,10 @@ Silk Icons &minus; Over 700 icons in PNG format Silk Icons &minus; Über 700 Symbole im PNG Format + + DEMO VERSION + DEMO VERSION + AudioFileModel @@ -238,6 +242,13 @@ Wiedergabelisten + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + Wenig freier Speicher auf Laufwerk '%1' (nur noch %2 MB frei), Probleme können auftreten! + + DropBox diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts index 862c2cb4..1a56bf27 100644 --- a/etc/Translation/LameXP_ES.ts +++ b/etc/Translation/LameXP_ES.ts @@ -195,6 +195,10 @@ GNU Wget &minus; Software for retrieving files using HTTP GNU Wget &minus; Software para descarga de archivos mediante HTTP + + DEMO VERSION + VERSIÓN DEMO + AudioFileModel @@ -238,6 +242,13 @@ Listas de reproducción + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts index 38a7d841..5c5e87c3 100644 --- a/etc/Translation/LameXP_FR.ts +++ b/etc/Translation/LameXP_FR.ts @@ -199,6 +199,10 @@ GNU Wget &minus; Software for retrieving files using HTTP GNU Wget &minus; Logiciel permettant de récupérer des fichiers à l'aide du HTTP + + DEMO VERSION + VERSION DE DEMO + AudioFileModel @@ -242,6 +246,13 @@ Listes de lecture + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts index 83d5e6ab..a8fd5842 100644 --- a/etc/Translation/LameXP_IT.ts +++ b/etc/Translation/LameXP_IT.ts @@ -195,6 +195,10 @@ GNU Wget &minus; Software for retrieving files using HTTP + + DEMO VERSION + VERSIONE DEMO + AudioFileModel @@ -238,6 +242,13 @@ + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts index d00514e0..58e84bee 100644 --- a/etc/Translation/LameXP_RU.ts +++ b/etc/Translation/LameXP_RU.ts @@ -4,253 +4,198 @@ AboutDialog - LameXP &minus; Audio Encoder Front-end LameXP &minus; Audio Encoder Front-end - + DEMO VERSION + ДЕМО ВЕРСИЯ + + Please visit %1 for news and updates! Пожайлуйста посетите %1 за новостями и обновлениями! - Note: LameXP is free software. Do <b>not</b> pay money to obtain or use LameXP! If some third-party website tries to make you pay for downloading LameXP, you should <b>not</b> respond to the offer !!! Примечание: LameXP является бесплатным программным обеспечением. Вам <b>ненадо</b> платить деньги, чтобы получить или использовать LameXP! Если некоторый сторонний веб-сайт пытается заставить Вас заплатить за загрузку LameXP, Вы должны <b> не </b>, отвечать на это предложение!!! - Special thanks go out to "John33" from %1 for his continuous support. Специальная благодарность "John33" с %1 за его непрерывную поддержку. - About LameXP О LameXP - Show License Text Показать текст лицензии - Accept License Принять лицензию - Decline License Отклонить лицензию - 3rd Party S/W ПО 3-их Сторон - Contributors Участники - About Qt4 О Qt4 - - - Discard Отменить - The following people have contributed to LameXP: Следующие люди внесли вклад в развитие LameXP: - Translators: Переводчики: - If you are willing to contribute a LameXP translation, feel free to contact us! Если Вы готовы внести вклад в развитие LameXP, не стесняйтесь связаться с нами! - About Contributors О Участниках - The following third-party software is used in LameXP: Следующее ПО третьих лиц исползуется в LameXP: - LAME &minus; OpenSource mp3 Encoder - - - - - - - - - - Released under the terms of the GNU Lesser General Public License. - OggEnc &minus; Ogg Vorbis Encoder - Completely open and patent-free audio encoding technology. - Nero AAC Reference MPEG-4 Encoder - Freeware state-of-the-art HE-AAC encoder with 2-Pass support. - Available from vendor web-site as free download: Доступно для загрузки с сайта создателя бесплатно: - FLAC &minus; Free Lossless Audio Codec - Open and patent-free lossless audio compression technology. - mpg123 &minus; Fast Console MPEG Audio Player/Decoder - FAAD &minus; OpenSource MPEG-4 and MPEG-2 AAC Decoder - Released under the terms of the GNU General Public License. - AC3Filter Tools &minus; AC3/DTS Decoder - WavPack &minus; Hybrid Lossless Compression - Completely open audio compression format. - Musepack &minus; Living Audio Compression - Monkey's Audio &minus; Lossless Audio Compressor - Freely available source code, simple SDK and non-restrictive licensing. - Shorten &minus; Lossless Audio Compressor - Speex &minus; Free Codec For Free Speech - Open Source patent-free audio format designed for speech. - The True Audio &minus; Lossless Audio Codec - MediaInfo &minus; Media File Analysis Tool - SoX &minus; Sound eXchange - GnuPG &minus; The GNU Privacy Guard - GNU Wget &minus; Software for retrieving files using HTTP - Silk Icons &minus; Over 700 icons in PNG format - By Mark James, released under the Creative Commons 'by' License. - LameXP as a whole is copyrighted by LoRd_MuldeR. The copyright of thrird-party software used in LameXP belongs to the individual authors. LameXP защищена авторским правом LoRd_MuldeR. Авторское право на программное обеспечение третьих сторон, используемое в LameXP, принадлежит индивидуальным авторам. - About Third-party Software О програмном обеспечении третьих сторон - n/a н/д @@ -258,33 +203,26 @@ AudioFileModel - - Profile Профиль - Channels Каналы - Samplerate Частота дискретизации - Bitdepth Битовая глубина - Type Тип - Version Версия @@ -292,40 +230,40 @@ DecoderRegistry - All supported types Все поддерживаемые типы - Playlists Плэйлисты - All files Все файлы + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox - LameXP - DropBox LameXP - DropBox - LameXP DropBox LameXP DropBox - You can add files to LameXP via Drag&amp;Drop here! Вы можете добавить файлы в LameXP перетащив их сюда! - (Right-click to close the DropBox) (Для закрытия DropBox нажмите правой кнопкой мыши) @@ -333,12 +271,10 @@ FileListModel - Title Заголовок - Full Path Полный путь @@ -346,32 +282,26 @@ LogViewDialog - Log View Просмотр журнала - Discard Отменить - Save to File... Сохранить в файл... - Copy to Clipboard Копироват в буфер обмена - Log File Файл журнала - The log file shows detailed information about the selected job. Файл журнала показывает подробную информацию о выбранном задании. @@ -379,1228 +309,940 @@ MainWindow - LameXP - Audio Encoder Front-end LameXP - Audio Encoder Front-end - - Source Files Исходные Файлы - Add File(s) Добавть файлы - Remove Удалить - Clear Очистить - - Show Details Показать детали - - Output Directory Выходная папка - Goto Home Folder Перейти в домашнюю папку - Goto Music Folder Перейти в папку "Моя Музыка" - Goto Desktop Folder Перейти в папку "Рабочий стол" - Make New Folder Создать новую папку - Save output files to the same location where the input file is located Сохранять в той же папке, в которой находится исходный файл - Prepend relative source file path to output file копировать структуру каталогов исходных файлов - - Meta Data Метаданные - Meta Information Метаинформация - Edit Изменить - Note: Meta information you enter here will <u>supersede</u> data from the source! Примечание: метаинформация введённая здесь <u>замененит</u> информацию из источника! - Reset Сбросить - Options Параметры - Automatically generate playlist file (.m3u) Автоматически генерировать файл плэйлиста (.m3u) - Write meta information to encoded files Писать метаинформацию в выходные файлы - - Compression Сжатие - Encoder / Format Кодер / Формат - Lame MP3 - Ogg Vorbis - Nero AAC - Wave (PCM) - FLAC - Rate Control Method Метод регулирования скорости - Quality-based (VBR) Основанный на качестве (VBR) - Average Bitrate (ABR) Средний битрейт (ABR) - Constant Bitrate (CBR) Постоянный битрейт (CBR) - Quality / Bitrate Качество / Битрейт - Minimum Минимум - Maximum Максимум - - Advanced Options Расширенные опции - Bitrate Management (LAME and OggEnc2) Управление битрэйтом (LAME and OggEnc2) - Enable Bitrate Management Включить управление битрейтом - Minimum (kbps): Минимум (kbps): - Maximum (kbps): Максимум (kbps): - LAME Algorithm Quality Качество алгоритма Lame - Faster Processing Быстрое преобразование - Better quality Лучшее качество - Channel Mode / Sampling Rate Колчиество каналов / Сэмплинг - - Auto Select (Default) Автоматический Выбор (Значение по умолчанию) - Joint Stereo - Forced Joint Stereo - Simple - Dual Mono - Mono - MP3 Channel Mode: MP3 Тип каналов: - Sampling Rate (Hz): Частота сэмплинга (Hz): - 16.000 - 22.050 - 24.000 - 32.000 - 44.100 - 48.000 - Nero AAC Options Опции Nero AAC - Enable 2-Pass Processing (ABR Mode) Включить 2-х проходное преобразование (ABR Mode) - Select AAC Profile: Выбрать профиль AAC: - Auto Select (Recommended) Автоматический Выбор (Рекомендуемый) - Enforce LC-AAC Преобразовать в LC-AAC - Enforce HE-AAC (AAC + SBR) Преобразовать в HE-AAC (AAC + SBR) - Enforce HE-AAC v2 (AAC + SBR + PS) Преобразовать в HE-AAC v2 (AAC + SBR + PS) - Volume Normalization Нормализация громкости - Enable Normalization Filter Включить фильтр нормализации - Peak Volume (dB): Пиковая громкость (dB): - Tone Adjustment Регулировка тона - Adjust Treble (dB): Скорректироват Treble (дБ): - Adjust Bass (dB): Скорректировать Бас (dB): - Custom Encoder Parameters Пользовательские параметры кодера - LAME: - OggEnc2: - Nero AAC: - FLAC: - Warning: Custom parameters won't be checked at all. Use them at your own risk !!! Предупреждение: Пользовательские параметры не будут проверены вообще. Используйте их на ваш собственный риск!!! - Reset Advanced Options Сбросить расширенные опции - Encode Now! Кодировать сейчас! - - About... О программе... - Exit Program Выйти из программы - File Файл - ? ? - View Вид - Style Стиль - Language Язык - Tools Инструменты - Configuration Конфигурация - Quit Выход - Open File(s)... Открыть файлы... - - Visit Official Web-Site Посетить официальный сайт - - - - Check for Updates Проверить обновления - Open Folder... Открыть папку... - Clear All Очистить всё - Plastique - Cleanlooks - Windows Vista ("Aero") - Windows Classic - Windows XP ("Luna") - - Disable Update Reminder Отключить напоминание об обновлениях - - Disable Sound Effects Отключить звуковые эффекты - - Install WMA Decoder Установить WMA декодер - Disable Nero AAC Notifications Отключить сообщения Nero AAC - Disable WMA Decoder Notifications Отключить сообщения WMA Decoder - Show DropBox Показать DropBox - From File... Из файла... - Encode! Кодировать! - Disable Shell Integration Отключить интеграцию в контекстное меню - Open Folder Recursively... - Adding file(s), please wait... Добавляю файлы, пожалуйста ожидайте... - - Access Denied Доступ запрещён - %1 file(s) have been rejected, because read access was not granted! %1 файл был отклонен, потому что доступ для чтения не предоставили! - This usually means the file is locked by another process. Это обычно означает, что файл блокируется другим процессом. - Files Rejected Отклоненные файлы - %1 file(s) have been rejected, because the file format could not be recognized! %1 файл был отклонен, потому что формат файла не мог быть распознан! - This usually means the file is damaged or the file format is not supported. Это обычно означает, что файл поврежден, или формат файла не поддерживается. - Scanning folder(s) for files, please wait... - Downloading WMA Decoder Setup, please wait... Скачиваю установщик WMA декодера, пожалуйста ожидайте... - - Download Failed Скачивание прервано - Failed to download the WMA Decoder setup. Check your internet connection! Немогу загрузитьустановщик Декодера WMA. Проверьте свое интернет-соединение! - - Try Again Попробовать снова - - - - Cancel Отмена - The download seems to be corrupted. Please try again! Загруженный файл похоже повреждён. Попробуйте снова! - WMA Decoder WMA Декодер - The WMA File Decoder has been installed. Please restart LameXP now! WMA декодер был установлен. Пожалуйста, презапустите LameXP сейчас! - Quit LameXP Выйти из LameXP - - - Postpone Отложить - DEMO VERSION ДЕМО ВЕРСИЯ - You can drop in audio files here! Можете перетащить аудио файлы сюда! - Open File in External Application Открыть файл в другой программе - Browse File Location Показать папку файла - Browse Selected Folder Показать выделенную папку - License Declined Лицензия отклонена - You have declined the license. Consequently the application will exit now! Вы отклонили лицензию. Следовательно приложение отключится сейчас! - Goodbye! Пока! - LameXP - Expired LameXP - пробный период окончен - This demo (pre-release) version of LameXP has expired at %1. Этот демонстрационный пример (предварительный выпуск) версии LameXP истек в %1. - LameXP is free software and release versions won't expire. пределать LameXP является бесплатным программным обеспечением, и релизные версии не будут истекать. - - Exit Program Выйти из программы - Urgent Update Срочное Обновление - Your version of LameXP is more than a year old. Time for an update! Вашей версии LameXP больше года. Время для обновления! - - - Update Reminder Напоминание о обновлении - Your last update check was more than 14 days ago. Check for updates now? Ваша проверка последнего обновления была больше чем 14 дней назад. Проверьте на обновления сейчас? - Your did not check for LameXP updates yet. Check for updates now? Ваш еще не проверяли на обновления LameXP. Проверьте на обновления сейчас? - LameXP detected that your version of the Nero AAC encoder is outdated! LameXP обнаружил, что Ваша версия кодера Nero AAC является устаревшей! - The current version available is %1 (or later), but you still have version %2 installed. Текущая доступная версия %1 (или позже), но Вам все еще используете версию %2. - n/a н/д - You can download the latest version of the Nero AAC encoder from the Nero website at: Можно загрузить самую последнюю версию кодера Nero AAC с веб-сайта Nero здесь: - AAC Encoder Outdated Кодер AAC устарел - The Nero AAC encoder could not be found. AAC encoding support will be disabled. Кодер Nero AAC не найден. Поддержка кодирования AAC будет отключена. - Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! Пожалуйста, поместите 'neroAacEnc.exe', 'neroAacDec.exe' и 'neroAacTag.exe' в каталог LameXP! - Your LameXP directory is located here: Ваш каталог LameXP располагается здесь: - You can download the Nero AAC encoder for free from the official Nero website at: Можно загрузить кодер Nero AAC бесплатно с официального веб-сайта Nero здесь: - AAC Support Disabled Поддержка AAC отключена - LameXP has detected that the WMA File Decoder component is not currently installed on your system. LameXP обнаружил, что компонент Декодера Файлов WMA в настоящий момент не установлен на Вашей системе. - You won't be able to process WMA files as input unless the WMA File Decoder component is installed! Вы не будете в состоянии обработать файлы WMA как входной, если компонент Декодера Файлов WMA не будет установлен! - - Do you want to download and install the WMA File Decoder component now? Вы хотите загрузить и установить компонент Декодера Файлов WMA сейчас? - WMA Decoder Missing WMA Декодер недоступен - - Download && Install Скачать и Установить - - - LameXP LameXP - You must add at least one file to the list before proceeding! Следует добавить по крайней мере один файл к списку перед продолжением! - Low Diskspace Warning Предупреждение: Мало свободного места на диске - There are less than %1 GB of free diskspace available on your system's TEMP folder. улучшить Доступно меньше чем %1 Гбайт свободного пространства на диске. - It is highly recommend to free up more diskspace before proceeding with the encode! Настоятельно рекомендуется освободить больше дискового пространства перед продолжением кодирования! - Your TEMP folder is located at: Ваш ВРЕМЕННАЯ папка располагается в: - Abort Encoding Process Прервать процесс кодирования - Clean Disk Now Очистить диск сейчас - Ignore Игнорировать - Low Diskspace Свободное место на диске заканчивается - You are proceeding with low diskspace. Problems might occur! Вы решили продолжить в условиях недостаточного свободного места на диске. Могут возникнуть проблемы! - Sorry, an unsupported encoder has been chosen! Извините, неподдерживаемый кодер был выбран! - Cannot write to the selected output directory. Немогу записать в выбранню папку. - Please choose a different directory! Выберите другую директорию! - - Add file(s) Добавить файлы - Load Translation Загрузить первод - Translation Files Файлы локализаций - - New Folder Новая папка - Enter the name of the new folder: Введите имя новой папки: - Failed to create folder Немогу создать папку - The new folder could not be created: Немогу создать новую папку: - Drive is read-only or insufficient access rights! Недостаточно прав для записи на диск! - Already Running Уже запущено - LameXP is already running, please use the running instance! LameXP уже запущена, пожалуйста, используйте запущенную копию программы! - - - Quality Level %1 Уровень качества %1 - - - Compression %1 Сжатие %1 - - - Uncompressed Несжатый - Best Quality (Very Slow) Лучшее качество (очень медленно) - High Quality (Recommended) Высокое качество (рекомендуется) - Average Quality (Default) Среднее качество (по умаолчанию) - Low Quality (Fast) Плохое качество (быстро) - Poor Quality (Very Fast) Низкое качество (Очень быстро) - Do you really want to disable the update reminder? Вы действительно хотите отключить напоминание об обновлениях? - - - - - Yes Да - - - - - No Нет - The update reminder has been disabled. Напоминаие об обновлениях отключено. - Please remember to check for updates at regular intervals! незабыйвайте проверять обновления регулярно! - The update reminder has been re-enabled. Напоминаие об обновлениях включено. - Do you really want to disable all sound effects? Вы действительно хотите отключить все звуковые эффекты? - - Sound Effects Звуковые эффекты - All sound effects have been disabled. Все звуковые эффекты отключены. - The sound effects have been re-enabled. Звуковые эффекты включены. - - - Nero AAC Notifications Напоминания о Nero AAC - Do you really want to disable all Nero AAC Encoder notifications? Вы действительно хотите отключить все уведомления о кодере Nero AAC? - All Nero AAC Encoder notifications have been disabled. Все уведомления о кодере Nero AAC были отключены. - The Nero AAC Encoder notifications have been re-enabled. Все уведомления о кодере Nero AAC были включены. - - - WMA Decoder Notifications Напоминания о декодере WMA - Do you really want to disable all WMA Decoder notifications? Вы действительно хотите отключить все уведомления о декодере WMA? - All WMA Decoder notifications have been disabled. Все уведомления о декодере WMA были отключены. - The WMA Decoder notifications have been re-enabled. Все уведомления о декодере WMA были включены. - - - Shell Integration Интеграция в контексное меню - Do you really want to disable the LameXP shell integration? Вы действительно хотите отключить интегрирование LameXP в оболочку Windows? - The LameXP shell integration has been disabled. Интегрирование в контекстное меню отключено. - The LameXP shell integration has been re-enabled. Интегрирование в контекстное меню включено. - Multi-Threading Многопоточность - Choose the number of parallel instances based on the number of CPU cores (Recommended) Определять число паралельных потоков по числу ядер процессора (Рекомендуется) - Fewer Instances Меньше потоков - More Instances Больше потоков - %1 Instance(s) %1 Поток(ов) - Temp Directory Временная папка - Browse... Выбрать... - Store temporary files in your system's default TEMP directory (Recommended) Хранить временные файлы в системной директории по умолчанию (Рекомендуется) - Not Found Не найдено - Your currently selected TEMP folder does not exist anymore: Выбранная директория для хранения временных файлов больше не существует: - Restore Default Востановить умолчания - - Add Folder - Cannot write to the selected directory. Please choose another directory! Директория недоступна для записи. Пожалуйса, выберите другую директорию! - CDA Files Файлы CDA - %1 file(s) have been rejected, because they are dummy CDDA files! %1 файла(ов) было отменено, изза пустых CDDA файлов! - We recommend using %1 for that purpose. Рекомендуем исползовать %1 для этих целей. - Sorry, LameXP cannot extract audio tracks from an Audio&minus;CD at present. Извините, LameXP неможет извлечь аудио из Audio&minus;CD сейчас. - Frequently Asked Questions Часто Задаваемые Вопросы - Changelog Список изменений - Translator's Guide Руководство перевдчика - Help && Support Помощиь и поддержка @@ -1608,22 +1250,18 @@ MetaInfo - Meta Information Метаинформация - Edit Изменить - Close Закрыть - Artwork Рисунок @@ -1631,37 +1269,30 @@ MetaInfoDialog - Load Artwork From File - Clear Artwork - Meta Information Метаинформация - The following meta information have been extracted from the original file. Эта метаинформация была получена из исходного файла. - Load Artwork - Artwork Error - Sorry, failed to load artwork from selected file! @@ -1669,204 +1300,158 @@ MetaInfoModel - - Unknown Неизвестно - - Not Specified Не указано - Full Path Полный путь - Format Формат - Container Контейнер - Compression Сжатие - Duration Длителность - Title Заголовок - Artist Исполнитель - Album Альбом - Genre Жанр - Year Год - Position Позиция - - Generate from list position Генерировать из позиции в списке - Comment Комментарий - Property Свойство - Value Значение - Unspecified Не указано - OK ОК - Cancel Отмена - - Edit Title Изменить Заголовок - Please enter the title for this file: Введите заголовок для этого файла: - The title must not be empty. Generating title from file name! Заголовок не должен быть пустым. Генерирование заголовка из имени файла! - Edit Artist Изменить Исполнителя - Please enter the artist for this file: Введите исполнителя для этого файла: - Edit Album Изменить Альбом - Please enter the album for this file: Введите альбом для этого файла: - Edit Genre Изменить Жанр - Please enter the genre for this file: Введите жанр для этого файла: - Edit Year Изменить Год - Please enter the year for this file: Введите год для этого файла: - - Edit Position Изменить Позицию - - Please enter the position (track no.) for this file: Введите позицию (номер трека) для этого файла: - Unspecified (copy from source file) Не указано (копировать из исходного файла) - Edit Comment Изменить Комментарий - Please enter the comment for this file: Введите комментарий для этого файла: - - Encoded with LameXP Кодировано с помощью LameXP - Not editable Невозможно изменить - Sorry, this property of the source file cannot be edited! Жаль, это свойство исходного файла не может быть отредактировано! @@ -1874,82 +1459,66 @@ ProcessThread - Starting... Начинаю... - Not found! Ненайдено! - The format of this file is NOT supported: Этот тип файлов неподдерживается: - Container Format: Формат Контейнера: - Audio Format: Формат Аудио: - Unsupported! Неподдерживается! - Done. Готово. - Aborted! Прервано! - Failed! Ошибка! - Encoding Кодирование - Filtering Фильтрация - Decoding Декодирование - The source audio file could not be found: Исходный аудио файл не может быть найден: - The source audio file could not be opened for reading: Исходный аудио файл не может быть открыт: - The target output directory doesn't exist and could NOT be created: Папка для кодированных файлов не существует и неможет быть создана: - The target output directory is NOT writable: Папка для выходных файлов недоступна для записи: @@ -1957,139 +1526,111 @@ ProcessingDialog - LameXP - Processing LameXP - Обработка - Initializing, please wait... Инициализация, пожалуйста, подождите... - Abort Отмена - Close Закрыть - Show details for selected job Показать детали задания - Browse Output File Location Открыть папку с преобразованным файлом - Encoding Files Преобразование Файлов - Your files are being encoded, please be patient... Ваши файлы кодируются, пожалуйста проявите терпение... - Encoding files, please wait... Кодируя файлы, пожалуйста, подождите... - Multi-threading enabled: Running %1 instances in parallel! Многопоточность включена: Выполняется %1 экземпляра(ов) параллельно! - Aborted! Waiting for running jobs to terminate... Отменено! Ожидание завершения запущенных заданий... - Encoding: %1 files of %2 completed so far, please wait... Кодирование: %1 файл из %2 завершен, пожалуйста ожидайте... - Creating the playlist file, please wait... Создаю плэйлист, пожалуйста, подождите... - Process was aborted by the user after %1 file(s)! Процесс отменён пользователем после %1 файла(ов)! - Process was aborted prematurely by the user! Процесс был прерван преждевременно пользователем! - LameXP - Aborted LameXP - Отменено - Process was aborted by the user. Процесс был прерван пользователем. - Error: %1 of %2 files failed. Double-click failed items for detailed information! бред -_- Ошибка: %1 из %2 файлов перестали работать. Дважды щелкните по отказавшим элементам для получения дальнейшей информации! - LameXP - Error LameXP - Ошибка - At least one file has failed! По крайней мере один файл перестал работать! - LameXP - Done LameXP - Завершено - - All files completed successfully. Все файлы завершились успешно. - Playlist creation failed Немогу создать плэйлист - The playlist file could not be created: Плэйлист неможет быть создан: - Shutdown the computer as soon as all files have been converted Выключить компьютер после завершения преобразования всех файлов - Warning: Computer will shutdown in %1 seconds... Внимание: Компьютер выключится через %1 секунд... - Cancel Shutdown Отменить выключение @@ -2097,12 +1638,10 @@ ProgressModel - Job Задание - Status Статус @@ -2110,17 +1649,14 @@ QApplication - Executable '%1' doesn't support Windows compatibility mode. Исполняемый файл '%1' не поддерживает режим совместимости Windows. - Executable '%1' requires Qt v%2, but found Qt v%3. Исполняемому файлу '%1' требуется версия Qt v%2, но найдена версия v%3. - Executable '%1' requires Windows 2000 or later. Исполняемому файлу '%1' треубся Windows 2000 или новее. @@ -2128,12 +1664,10 @@ ShellIntegration - Audio File supported by LameXP Аудио Файл поддерживаетя LameXP - Convert this file with LameXP v%1 Конвертировать этот файл используя LameXP v%1 @@ -2141,7 +1675,6 @@ SplashScreen - LameXP is launching... LameXP запускается... @@ -2149,118 +1682,94 @@ UpdateDialog - LameXP Update Manager Менеджер обновлений LameXP - Please wait... пожалуйста, подождите... - Latest version available: Последняя доступная версия: - Currently installed version: Установленная верися: - Retry Повторить - Show Log Показать Лог - Download && Install Скачать и Установить - Close Закрыть - - Build Сборка - Unknown Неизвестно - Testing your internet connection, please wait... Проверяю соединение с сетью, пожалуйста, подождите... - Network connectivity test has failed! Нет соединения с сетью! - Please make sure your internet connection is working properly and try again. Проверьте доступность интернет соединения и попробуйте снова. - Checking for new updates online, please wait... Проверяю обновлений, пожалйста, подождите... - Failed to fetch update information from server! Немогу получить информацию об обновлениях с сервера! - Sorry, the update server might be busy at this time. Plase try again later. Извините, сервер обновлений сейчас недоступен. Пожалуйста попробуйте позднее. - More information available at: Больше информации доступно здесь: - A new version of LameXP is available! Новя версия LameXP доступна! - We highly recommend all users to install this update as soon as possible. Мы очень рекомендуем установить это обновлений как можо скорее. - No new updates available at this time. Нет обновлений. - Your version of LameXP is still up-to-date. Please check for updates regularly! Вы используете самую новую версию LameXP. Проверяйте обновления регулярно! - Your version appears to be newer than the latest release. Установленная версия новее чем последний релиз. - This usually indicates your are currently using a pre-release version of LameXP. Это обычно показывает, что вы используете бета версию LameXP. diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts index 2bfe68f1..d2c0be9f 100644 --- a/etc/Translation/LameXP_UK.ts +++ b/etc/Translation/LameXP_UK.ts @@ -195,6 +195,10 @@ n/a + + DEMO VERSION + ДЕМО ВЕРСІЯ + AudioFileModel @@ -238,6 +242,13 @@ Всі файли + + DiskObserverThread + + Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur! + + + DropBox diff --git a/etc/Translation/update.lst b/etc/Translation/update.lst index 723b0fa5..6246678f 100644 --- a/etc/Translation/update.lst +++ b/etc/Translation/update.lst @@ -56,6 +56,7 @@ ..\..\src\PlaylistImporter.cpp ..\..\src\Registry_Decoder.cpp ..\..\src\ShellIntegration.cpp +..\..\src\Thread_DiskObserver.cpp ..\..\src\Thread_FileAnalyzer.cpp ..\..\src\Thread_Initialization.cpp ..\..\src\Thread_MessageHandler.cpp @@ -115,6 +116,7 @@ ..\..\src\Resource.h ..\..\src\ShellIntegration.h ..\..\src\Targetver.h +..\..\src\Thread_DiskObserver.h ..\..\src\Thread_FileAnalyzer.h ..\..\src\Thread_Initialization.h ..\..\src\Thread_MessageHandler.h diff --git a/gui/MetaInfo.ui b/gui/MetaInfo.ui index a1bbb130..017373f9 100644 --- a/gui/MetaInfo.ui +++ b/gui/MetaInfo.ui @@ -238,10 +238,10 @@ - QFrame::Panel + QFrame::Box - QFrame::Sunken + QFrame::Raised @@ -497,6 +497,7 @@ + diff --git a/res/Icons.qrc b/res/Icons.qrc index 1d301d90..05275495 100644 --- a/res/Icons.qrc +++ b/res/Icons.qrc @@ -56,6 +56,8 @@ icons/money_dollar.png icons/monitor.png icons/music.png + icons/network.png + icons/network_error.png icons/palette.png icons/package.png icons/page_white_cplusplus.png @@ -70,6 +72,7 @@ icons/script_edit.png icons/server_error.png icons/shield_admin.png + icons/shield_error.png icons/shield_exclamation.png icons/shield_green.png icons/sound.png diff --git a/res/localization/LameXP_DE.qm b/res/localization/LameXP_DE.qm index ea3baa00449a6c9c9acfbacf713517f401ab27fe..f2836a81ce5d343c59c13e9787ce520515dc40fc 100644 GIT binary patch delta 3728 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 RrjDDDYPH1gUEy=E`oEM5K9>Lh delta 3483 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 b#R0=N4%1u@?zR?72Xk5nIvzB8A1wJFpJ)w} diff --git a/res/localization/LameXP_ES.qm b/res/localization/LameXP_ES.qm index 786cf4bb8e8495d8f20e6047f5a954580c7b8957..788966b673d726fc683fa9a3a73613ca4d809ae9 100644 GIT binary patch delta 3201 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 delta 3185 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 YPs?c!qox3-P9GRAuMiKoS@bUcAI>1JsQ>@~ diff --git a/res/localization/LameXP_IT.qm b/res/localization/LameXP_IT.qm index 7e84b2d346c368e2a9c7020e3ce933b75139c6bd..44ec567a7e93bb5561af328d509ff3290f829fc9 100644 GIT binary patch delta 2419 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 p=95fVUvTNdjf`LcFv~|MKh4ReY{{s0nu$=$^ diff --git a/res/localization/LameXP_RU.qm b/res/localization/LameXP_RU.qm index 8b307278327a229343c8984fa3a4ad616e892ee1..539fca0b7f4d66c212a5d87766354d4e395e1e16 100644 GIT binary patch delta 3000 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 diff --git a/res/localization/LameXP_UK.qm b/res/localization/LameXP_UK.qm index c92648f9ea78276ee4c56a46575567984778c58e..f7be62c0c2d220c848e0a2c5e2c99754a09b7acf 100644 GIT binary patch delta 1016 zcmXX_e@v8R9RIxcz7Owv_rCWY+?^bVhXOLO(&5w$oI6uQxjDd?s5HjRXvJ9N>~ueV*_4^W*zA zm5i1ga|ee3_yAiKAW8tw0bt8>K;{jgDgw-(hSFOGB=$n-R{%#t92abXGMo)0`5+4U zF8Me_nBP;cLkv~}(mN2}eGPa=;eWCoFpJ@Tx)oTE9mmYhI0mym!S>4+fw^y@Vvq&r zjo^8mC<@}3xf^@EuLAB;eDLnKK*C$-i9AEnb&`8v5nzO*%|Zt3XQZ8_DS&)H>Uh+} zI_sp-n{4dNm&V4^`7Ublo~i-nge{vK_et!eG!nd|h}b^ascgu}3zA`zQkzx`q~t1}MjC;1Rr&rUM&R)&zkX$aQjxx$D zU7TNejYJeNa-)Uy+r=;IgRcYXxrFgMv^c}5=CtRLK)<>;@fI^&rshxgk?DPPZ}VSN z_>G*sZPF<|5I2ZS`6TORCX|KmVH% zW@y_rHa3&A(4(cq3tA``TV&kR8s;YfilKd6#UV+#uHE#{<*-dz>%KgNjB zyw=5g1I8)$4l4V|82T|4&@DtdsBbbZcbIhWOM7b>hfi;^cRBez)wB;J@8@4tU@oa7 z5uh@@aI8016)__t+uZfT4qo`sti3Y90(Z=M?;x$6FdIub)wp1`Is2&WU&mI@9!BxN wvA=mS9XsfV963xyGmfFo3^rCQpB+9&m7$Z?a%xpFA zK_uJiz(_wJn|?vJh?3|B<|raj&}hA15;P0(hKkwLXjF_3bf4b;<^13Gd4BJE?&bfK z|BK6i2|y-bbps+Fh+hnR_dSr(0F-tE6FVTctpdhugWMql_HUzck{xnn3eSfja`-N; z0HU7v;|@ZE%K=jk#I=in`w)E7_W_0u-@-=b8;Hh~_0i~0-HNrn7l85UC=N5>gdo;w zjKUm^DYLQ5y$x^~2<^WL#C(I}-4uy5lk416KwoOg6%t@8HI)@40McSp%jcua1Jk{S zEFAm6^q@b9??PsG(^g=t&%Dz9mck0nkEd*gA9B~|0?9+>K_8t?$deL({6Yf5(!APZ zB(p>EI_CiDd#TVF04yG9&B)$TBozp!psal`V{zb$lFBY#=Vb4RD} zq(=bfY_a5Hn1Wm)@Ue}^J4Jm?4+#pXffm7o60k$%wS9C47 zL6Yai%{#xcUWxc8+rOO-s$%+I5b>ml;yIEABvmWZ#ylqC*Gl?uJB6H9b_M^V!zLwI zw~>WzDGgPVS!kZp7}?41&MIvII#$b+{%0cvH>r!(I4Sspnvq3gu^u(=^g9ZFq^?z2 z*mg|~e4fRb2&e)7$RhcqS~D@0X!_I>r5uukgX%-ycn;esi&Vk~X0K)PlQ$fyXO@bc zd)Sgp>-qB#LM0%rD>MK7bptbdKz`x zv>Fa1j4aLH_}%euGzInfX5zT&wQQmt1$Y9^s&|Hr+0Fw4pB zcI!>9A|fr^55v6~8w zMPBws8!$H9E#k!nqoQws4_l3W?l6)5X4DpNnh`LX9qn{<#$Fg-2_&AiR|lstVTQfC ZZZDnuW$*btnX{0+1xO9G&yfE}{R#&f@kjsw diff --git a/src/Config.h b/src/Config.h index 8a472083..e1d047b2 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,8 +25,8 @@ #define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 1 -#define VER_LAMEXP_BUILD 406 -#define VER_LAMEXP_SUFFIX Beta-14 +#define VER_LAMEXP_BUILD 412 +#define VER_LAMEXP_SUFFIX Beta-15 /* * Tools versions diff --git a/src/Dialog_About.cpp b/src/Dialog_About.cpp index 2f7a961a..56cbf736 100644 --- a/src/Dialog_About.cpp +++ b/src/Dialog_About.cpp @@ -75,11 +75,13 @@ AboutDialog::AboutDialog(SettingsModel *settings, QWidget *parent, bool firstSta QMessageBox(parent), m_settings(settings) { + const QString versionStr = QString().sprintf("Version %d.%02d %s, Build %d [%s]", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build(), lamexp_version_date().toString(Qt::ISODate).toLatin1().constData()); + QString aboutText; aboutText += QString("

      %1

      ").arg(tr("LameXP − Audio Encoder Front-end")); aboutText += QString("Copyright (C) 2004-%1 LoRd_MuldeR <MuldeR2@GMX.de>. Some rights reserved.
      ").arg(max(lamexp_version_date().year(),QDate::currentDate().year())); - aboutText += QString().sprintf("Version %d.%02d %s, Build %d [%s]

      ", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build(), lamexp_version_date().toString(Qt::ISODate).toLatin1().constData()); + aboutText += lamexp_version_demo() ? QString("%1, %2

      ").arg(versionStr, tr("DEMO VERSION")) : QString("%1

      ").arg(versionStr); aboutText += QString("%1
      ").arg(tr("Please visit %1 for news and updates!").arg(LINK(lamexp_website_url()))); aboutText += "

      "; aboutText += "This program is free software; you can redistribute it and/or
      "; diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index 77554992..7673072d 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -1230,6 +1230,11 @@ void MainWindow::tabPageChanged(int idx) actions.at(i)->setChecked(true); } } + + if(idx == tabWidget->indexOf(tabSourceFiles)) + { + m_dropNoteLabel->setGeometry(0, 0, sourceFileView->width(), sourceFileView->height()); + } } /* diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp index e7957fdb..d0fff633 100644 --- a/src/Dialog_Processing.cpp +++ b/src/Dialog_Processing.cpp @@ -27,6 +27,7 @@ #include "Model_Progress.h" #include "Model_Settings.h" #include "Thread_Process.h" +#include "Thread_DiskObserver.h" #include "Dialog_LogView.h" #include "Encoder_MP3.h" #include "Encoder_Vorbis.h" @@ -92,7 +93,8 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, AudioFileModel m_systemTray(new QSystemTrayIcon(QIcon(":/icons/cd_go.png"), this)), m_settings(settings), m_metaInfo(metaInfo), - m_shutdownFlag(false) + m_shutdownFlag(false), + m_diskObserver(NULL) { //Init the dialog, from the .ui file setupUi(this); @@ -172,11 +174,23 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, AudioFileModel ProcessingDialog::~ProcessingDialog(void) { view_log->setModel(NULL); - if(m_progressIndicator) m_progressIndicator->stop(); + + if(m_progressIndicator) + { + m_progressIndicator->stop(); + } + + if(m_diskObserver) + { + m_diskObserver->stop(); + m_diskObserver->wait(15000); + } + LAMEXP_DELETE(m_progressIndicator); LAMEXP_DELETE(m_progressModel); LAMEXP_DELETE(m_contextMenu); LAMEXP_DELETE(m_systemTray); + LAMEXP_DELETE(m_diskObserver); WinSevenTaskbar::setOverlayIcon(this, NULL); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarNoState); @@ -279,6 +293,13 @@ void ProcessingDialog::initEncoding(void) WinSevenTaskbar::setTaskbarProgress(this, 0, m_pendingJobs.count()); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/control_play_blue.png")); + if(!m_diskObserver) + { + m_diskObserver = new DiskObserverThread(m_settings->customTempPathEnabled() ? m_settings->customTempPath() : lamexp_temp_folder2()); + connect(m_diskObserver, SIGNAL(messageLogged(QString,bool)), m_progressModel, SLOT(addSystemMessage(QString,bool)), Qt::QueuedConnection); + m_diskObserver->start(); + } + int maximumInstances = max(min(m_settings->maximumInstances(), MAX_INSTANCES), 0); if(maximumInstances < 1) { diff --git a/src/Dialog_Processing.h b/src/Dialog_Processing.h index c83e9b3c..44ad3718 100644 --- a/src/Dialog_Processing.h +++ b/src/Dialog_Processing.h @@ -33,6 +33,7 @@ class ProcessThread; class FileListModel; class AudioFileModel; class SettingsModel; +class DiskObserverThread; class ProcessingDialog : public QDialog, private Ui::ProcessingDialog { @@ -84,4 +85,5 @@ private: bool m_userAborted; QSystemTrayIcon *m_systemTray; bool m_shutdownFlag; + DiskObserverThread *m_diskObserver; }; diff --git a/src/Model_Progress.cpp b/src/Model_Progress.cpp index d31bac7b..134f9dec 100644 --- a/src/Model_Progress.cpp +++ b/src/Model_Progress.cpp @@ -29,7 +29,8 @@ ProgressModel::ProgressModel(void) m_iconPaused(":/icons/control_pause_blue.png"), m_iconComplete(":/icons/tick.png"), m_iconFailed(":/icons/exclamation.png"), - m_iconSystem(":/icons/computer.png") + m_iconSystem(":/icons/computer.png"), + m_iconWarning(":/icons/error.png") { } @@ -82,6 +83,9 @@ QVariant ProgressModel::data(const QModelIndex &index, int role) const case JobSystem: return m_iconSystem; break; + case JobWarning: + return m_iconWarning; + break; default: return m_iconFailed; break; @@ -187,7 +191,7 @@ const QUuid &ProgressModel::getJobId(const QModelIndex &index) return *(reinterpret_cast(NULL)); } -void ProgressModel::addSystemMessage(const QString &text) +void ProgressModel::addSystemMessage(const QString &text, bool isWarning) { const QUuid &jobId = QUuid::createUuid(); @@ -202,7 +206,7 @@ void ProgressModel::addSystemMessage(const QString &text) m_jobList.append(jobId); m_jobName.insert(jobId, text); m_jobStatus.insert(jobId, QString()); - m_jobState.insert(jobId, JobSystem); + m_jobState.insert(jobId, isWarning ? JobWarning : JobSystem); m_jobLogFile.insert(jobId, QStringList()); endInsertRows(); diff --git a/src/Model_Progress.h b/src/Model_Progress.h index 9ab84a3e..451abca2 100644 --- a/src/Model_Progress.h +++ b/src/Model_Progress.h @@ -44,7 +44,8 @@ public: JobPaused = 1, JobComplete = 2, JobFailed = 3, - JobSystem = 4 + JobSystem = 4, + JobWarning = 5 }; //Model functions @@ -61,7 +62,7 @@ public slots: void addJob(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus = QString("Initializing..."), int jobInitialState = JobRunning); void updateJob(const QUuid &jobId, const QString &newStatus, int newState); void appendToLog(const QUuid &jobId, const QString &line); - void addSystemMessage(const QString &text); + void addSystemMessage(const QString &text, bool isWarning = false); private: QList m_jobList; @@ -75,4 +76,5 @@ private: const QIcon m_iconComplete; const QIcon m_iconFailed; const QIcon m_iconSystem; + const QIcon m_iconWarning; }; diff --git a/src/Thread_DiskObserver.cpp b/src/Thread_DiskObserver.cpp new file mode 100644 index 00000000..edf172d3 --- /dev/null +++ b/src/Thread_DiskObserver.cpp @@ -0,0 +1,114 @@ +/////////////////////////////////////////////////////////////////////////////// +// LameXP - Audio Encoder Front-End +// Copyright (C) 2004-2011 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#include "Thread_DiskObserver.h" + +#include "Global.h" + +#include +#include + +#define MIN_DISKSPACE 104857600LL //100 MB + +//////////////////////////////////////////////////////////// +// Constructor & Destructor +//////////////////////////////////////////////////////////// + +DiskObserverThread::DiskObserverThread(const QString &path) +: + m_path(makeRootDir(path)) +{ + m_terminated = false; +} + +DiskObserverThread::~DiskObserverThread(void) +{ +} + +//////////////////////////////////////////////////////////// +// Protected functions +//////////////////////////////////////////////////////////// + +void DiskObserverThread::run(void) +{ + qDebug("DiskSpace observer started!"); + + try + { + observe(); + } + catch(...) + { + fflush(stdout); + fflush(stderr); + fprintf(stderr, "\nGURU MEDITATION !!!\n"); + FatalAppExit(0, L"Unhandeled exception error, application will exit!"); + TerminateProcess(GetCurrentProcess(), -1); + } +} + +void DiskObserverThread::observe(void) +{ + __int64 freeSpace, minimumSpace = MIN_DISKSPACE; + + while(!m_terminated) + { + freeSpace = lamexp_free_diskspace(m_path); + if(freeSpace < minimumSpace) + { + qWarning64("Free diskspace on '%1' dropped below %2 MB, only %3 MB free!", m_path, QString::number(minimumSpace / 1048576), QString::number(freeSpace / 1048576)); + emit messageLogged(tr("Low diskspace on drive '%1' detected (only %2 MB are free), problems can occur!").arg(QDir::toNativeSeparators(m_path), QString::number(freeSpace / 1048576)), true); + minimumSpace = min(freeSpace, (minimumSpace >> 1)); + } + Sleep(1000); + } +} + +QString DiskObserverThread::makeRootDir(const QString &baseDir) +{ + QDir dir(baseDir); + + if(!dir.exists()) + { + return baseDir; + } + + bool success = true; + + while(success) + { + success = dir.cdUp(); + } + + return dir.canonicalPath(); +} + +//////////////////////////////////////////////////////////// +// SLOTS +//////////////////////////////////////////////////////////// + +/*NONE*/ + +//////////////////////////////////////////////////////////// +// EVENTS +//////////////////////////////////////////////////////////// + +/*NONE*/ diff --git a/src/Thread_DiskObserver.h b/src/Thread_DiskObserver.h new file mode 100644 index 00000000..05c71c84 --- /dev/null +++ b/src/Thread_DiskObserver.h @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////// +// LameXP - Audio Encoder Front-End +// Copyright (C) 2004-2011 LoRd_MuldeR +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +class DiskObserverThread: public QThread +{ + Q_OBJECT + +public: + DiskObserverThread(const QString &path); + ~DiskObserverThread(void); + + void stop(void) { m_terminated = true; } + +protected: + void run(void); + void observe(void); + + static QString makeRootDir(const QString &baseDir); + +signals: + void messageLogged(const QString &text, bool isWarning); + +private: + volatile bool m_terminated; + const QString m_path; +};