Allexin / TrackYourTime

Track Your Time - Cross-platform automated time tracker
GNU General Public License v3.0
388 stars 59 forks source link

Не работает с Оперой #67

Closed dronsovest closed 7 years ago

dronsovest commented 8 years ago

Добрый!

Очень понравилась идея. Очень жаль, что у меня программа не работает. 90% работы происходит в браузере, поэтому требуется учет времени по доменным адресам.

Опера Версия: 36.0.2130.65 Канал обновлений: Stable Система: Windows 10 32-bit

В управлении расширениями пишет вот такую ошибку: _Предупреждение Alarm delay is less than minimum of 1 minutes. In released .crx, alarm "TRACK_YOUR_TIME_TIMER" will fire in approximately 1 minutes.

Предупреждение Alarm period is less than minimum of 1 minutes. In released .crx, alarm "TRACK_YOUR_TIMETIMER" will fire approximately every 1 minutes.

Попробую создать скрипт, собирающий статистику по заголовкам окна, но для меня это целое приключение. Не программист я к сожалению. Буду рад, если система заработает на Хромиуме.

Lenchik commented 8 years ago

В Опере на Win 7 x64 работает без ошибок в управлении расширениями. Версия: 36.0.2130.65 Канал обновлений: Stable Система: Windows 7 64-bit (WoW64) TrackYourTime Chrome Tracker Версия 1.0

dronsovest commented 8 years ago

@Lenchik, а то что надо делает? Отдает ТаймТрекеру называния вкладок?

Lenchik commented 8 years ago

@dronsovest Не более, чем заявлено. clipboard-regyeg1

См. также https://github.com/Allexin/TrackYourTime/issues/50 и https://github.com/Allexin/TrackYourTime/issues/48

Allexin commented 8 years ago

Так это же только предупреждение. Собственно это ограничени в одну минуту - то самое огранчиение, из-за которого приходится расширение устанавливать в режиме разработчика, а не напрямую ставить. В режиме разработчика таймер работает с нормальной частотой, как ему в скрипте сказано. Во всяком случае в Хроме. Полагаю в Опере должно тоже самое быть.

Как вы поняли, что трэкинг не работает? Активировали ли вы трэкер в настройках TrackYourTime для Оперы? Т.к. скрипт сделан для хрома - автоматической активации для оперы не будет. И надо самостоятельно активировать.

P.S. Сбор статистики браузера через анализ заголовка окна - плохая идея. Заголовки несут динамическую информацию и скапливается огромное количество однотипных заголовков, которые просто невозможно нормально систематизировать. Просто трата времени на систематизацию перекроет выигрыш от анализа полученной статистики. Именно поэтому я и заморочился с написанием расширений, а не сделал несколько простых скриптов для сбора заголовков.

dronsovest commented 8 years ago

@Allexin Извиняюсь что поздно отвечаю. Жизнь кипит. Собственно потому и нужен ТаймТрекер.

Трекинг не работает, потому что Оперу мне считает единой категорией и я не могу разнести работу в разных вкладках (на разных доменах) по разным категориям. Без этого программа не имеет пользы.

Приложение для Хрома в моей Опере постараюсь переустановить в ближайшее время и отписаться о результате.

Если под активацией в настройках имеется в виду "тип отслеживания: из внешнего треккера", то активировал. Если нужны еще какие-то настройки, то я весь наполнен вниманием.

На чем для программы пишутся скрипты? Сначала подумал, что это JS, но когда переписывал скрипт со Скриншота, понял что синтаксис немного отличается.

Allexin commented 8 years ago

Скрипты пишутся на ECMAScript. Это аналог JS. Если вы дружите с JS, то лучше адаптируйте расширение хромовское для оперы. Там очень и очень простой код: Раз в секунду 1) Берется url текущего таба

 function getCurrentTabUrl(callback) {
  var queryInfo = {
    active: true,
    lastFocusedWindow: true
  };

  chrome.tabs.query(queryInfo, function(tabs) {
    var tab = tabs[0];
    var url = tab.url;
    console.assert(typeof url == 'string', 'tab.url should be a string');

    callback(url);
  });
}

2) Полученный url обрезается до доменного имени

function extractDomain(url) {
    var domain;
    //find & remove protocol (http, ftp, etc.) and get domain
    if (url.indexOf("://") > -1) {
        domain = url.split('/')[2];
    }
    else {
        domain = url.split('/')[0];
    }

    //find & remove port number
    domain = domain.split(':')[0];

    return domain;
}

3) Информация о домене через HTTP запрос отправляется на Тайм Трэкер висящий локально на порту 25856

var TRACKER_INFO='PREFIX=TYTET&VERSION=1&APP_1=chrome.exe&APP_2=chromium.exe&APP_3=Google-chrome-stable&APP_4=google-chrome&APP_5=chromium-browser&APP_6=Google%20Chrome&STATE='+extractDomain(url);
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://127.0.0.1:25856?"+TRACKER_INFO, true);
    xhr.send();  

И это всё. Примитивный код. Единственная причина по которой я не делаю ресширение для Оперы - у меня её нет и я всё равно не смогу его тестить, т.к. работаю в хроме.

dronsovest commented 8 years ago

Сейчас я покажусь очень тупым, но делать нечего. Мне действительно нравится идея этой утилиты, и я действительно хочу помочь ее завести под Оперой.

С JS я не очень дружу. Пытаюсь подружиться, но получается пока медленно.

Я не очень понял, как именно я могу изменить расширение под Оперу. Вышеприведенный код, куда мне следует его скопировать? Или где мне его открыть для работы?

Сначала скопировал его в ТаймТреккер в Пользовательский скрипт. Но еще раз внимательно прочитал сообщение, и начал догадываться, что это код именно приложения для браузера.

Разжуйте пож-ста подробнее. Куда нужно вставлять данный код и что я должен в нем оптимизировать, если в этом есть необходимость.

Если я в ТаймТреккере выбираю тип отслеживания "из внешнего треккера", то поле "Пользовательский скрипт" следует оставить пустым?

Allexin commented 8 years ago

Куда вставлять этот код - я не могу сказать. Это пример работы кода на стороне браузера. В данном случае пример для хрома. Вероятно что для Оперы можно сделать аналогичный код, который будет делать тоже самое. Как это сделать - я сказать не могу, Оперы нет и пока возможности сделать скрипт для оперы и поддерживать его у меня нет.

Поле "пользовательский скрипт" не используется, если установлен тип отслеживания "из внешнего трэкера". В этом случае пустое поле или нет - значения не имеет.