NotificationType.CRITICAL нужно запускать только тогда, когда загруженный файл является новым файлом.
У меня есть приложение для доски объявлений Adobe Air, встроенное в Flash cs5, оно загружает внешний ".txt" файл в динамическое текстовое поле и проверяет новый файл каждые 2 минуты. Мне нужно уведомить пользователя с помощью (NotificationType.CRITICAL) только в том случае, если файл новый, а не только каждый раз, когда он загружает его. Является ли это возможным?
весь код в приложении:
NativeApplication.nativeApplication.startAtLogin=true
stage.nativeWindow.alwaysInFront=true;
//external text file load and recheck every 2 minutes
var myInterval:uint = setInterval (loadUrl, 120000);
var loader:URLLoader = new URLLoader(new URLRequest("https://my_text_file.txt"));
loader.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(event:Event):void {
var loadedText:URLLoader = URLLoader(event.target);
if(myText_txt.htmlText!=loadedText.data){
myText_txt.htmlText = loadedText.data;
stage.nativeWindow.notifyUser(NotificationType.CRITICAL)
}else {
//do nothing
}
}
function loadUrl():void {
loader = new URLLoader(new URLRequest("https:///my_text_file.txt"));
loader.addEventListener(Event.COMPLETE, completeHandler);
}
// button control
Minimize_BTN.addEventListener(MouseEvent.CLICK, minimize);
function minimize(e:MouseEvent){
stage.nativeWindow.minimize();
}
drag_BTN.addEventListener(MouseEvent.MOUSE_DOWN, drag);
function drag(e:MouseEvent){
stage.nativeWindow.startMove();
}
stop(); //Stop on the frame you want
2 ответа
Ваш код может не работать, если поле myText_txt изменяет загруженный текст (например, если для свойства ContainseWhite в myText_txt установлено значение true). Более точный способ определить, изменился ли текст, состоит в том, чтобы сохранить его в строковой переменной с именем, например, oldText, а затем сравнить oldText с вновь загруженным текстом.
Вот часть вашего кода, переписанная для включения переменной oldText. Этот код также более эффективен, потому что он создает некоторые переменные только один раз и избегает дублирования некоторого кода:
import flash.net.URLRequest;
function completeHandler(event:Event):void
{
var newText:String = loader.data;
if(newText != oldText)
{
myText_txt.htmlText = newText;
stage.nativeWindow.notifyUser(NotificationType.CRITICAL);
oldText = newText;
}
}
function loadUrl():void
{
loader.load(req);
}
// Initialize your variables and event handlers only one time
var req:URLRequest = new URLRequest("https:///my_text_file.txt");
// Set cacheResponse to false to prevent a successful response
// from being cached.
req.cacheResponse = false;
// And don't bother checking the cache, either.
// Not necessary, but the request will execute a little faster.
req.useCache = false;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
// Use oldText inside completeHandler() to determine
// whether the file's text has changed
var oldText:String = "";
var myInterval:uint = setInterval(loadUrl, 120000);
// Start loading the text right away
loadUrl();
Почему бы вам не использовать объект FileReference, чтобы узнать о некоторых свойствах, таких как ModificationDate, и, основываясь на этом, проверить, отличается ли файл, вы также можете проверить его размер.